Repository navigation
ci: check dependency licenses - #15
Merged
Merged
Conversation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Inspect binary signatures as well as native file extensions so an extensionless runtime library cannot bypass the musllinux inventory. Cover additional native formats and extensionless binaries. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Generate a deterministic bundle of source-backed Cargo license texts, additional notices and the actual toolchain's Rust copyright report. Build a wheel with the same lock and check exact bundle bytes and RECORD. Keep local source paths out of the bundle. This proves packaging for the conservative CI Cargo graph, not linked code coverage or licensing of non-Cargo runtimes. Production release integration remains separate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Avoid loading the native binding conftest before the evidence wheel is built. Keep full binding tests in the main CI matrix. Fix Ruff line length and ambiguous docstring characters. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Generate the conservative Cargo and Rust std notice bundle from the locked graph before building each musllinux wheel. Require the container compiler provenance and lock to match the inputs, then verify exact bundle bytes and RECORD in the actual wheel. Retain ABI, panic and native corpus checks. This does not cover the separate GCC runtime licensing assessment or change production release configuration. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Build only static PIC libunwind from LLVM 20.1.8's exact source commit. Verify the checkout is unchanged and record the original license and archive hash inside the wheel's notice bundle. Replace Rust's explicit gcc_s link with that archive, retaining panic unwinding and native tests. Reject linked GCC runtime archive members in both link maps. This is a CI-only alternative to the source-unverified GCC unwinder. Historical packages and production release configuration are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Supply a project-owned ELF DSO handle and finalization hook, linking without compiler startup files. Verify that Rust TLS destructors run at thread exit and C++ destructors run once at dlclose in real musl runtimes. Reject GCC crtbegin/crtend objects as well as archive members. Retain panic conversion, native corpus, ABI and notice-bundle checks. The replacement follows the Itanium C++ ABI DSO destruction contract. This remains CI-only; production release and historical wheels are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Print matched GCC objects and upload link maps even when the gate fails, without relaxing the runtime check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GNU maps contain crtbegin/crtend wildcards in linker-script selectors even when those objects are absent. Check actual LOAD records for CRT objects and archive-member records for GCC runtime code. Add positive and negative regression cases without allowing actual GCC inputs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Musl deliberately makes dlclose a no-op and runs DSO destructors at process exit. Check this in an isolated runner with a static counter that remains alive through finalization. Check the same project-owned DSO hook with real glibc unloading as well, and require exactly one destructor call by exit on both platforms. Retain Rust TLS and panic probes, native corpus and the fail-closed runtime inventory. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Inventory pinned runtime source headers and their hashes in the notice bundle, including the additional DWARF copyright notice in dwarf2.h. Reject unreviewed source license headers and preserve the full original leading notices rather than relying only on SPDX metadata. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Prepare Cargo license texts, notices and the actual Rust std report from an existing lock without resolving dependencies again. Keep evidence outside package sources, refuse overwrites and assert the lock remains unchanged. Use the same helper in native and musllinux evidence builds ahead of production release integration. Add staging guard tests; keep exact wheel bundle, ABI and runtime verification in the existing CI jobs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Build both musllinux architectures from the exact published Python source commit, overlaying only the PR's packaging tools and test-only fixtures. Leave release manifests and binding sources unchanged and verify registry core 0.8.1 provenance before generating locked notices. Run the release tag's native suites, ELF/RECORD/link-map gates and LLVM/TLS/panic/DSO lifecycle checks without publish permissions. Validate both evidence workflows in the main CI syntax guard. This is a new resolved build of release source, not a historical reproduction or a release workflow execution. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Include the release tag's three README files in the read-only runtime stage so documentation example tests inspect the real release inputs. Do not skip tests or change documentation content. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Make the proven source-specific musllinux build and runtime checks a reusable workflow. PR verification passes the pinned 0.8.1 source SHA; production passes its own commit instead of silently building another revision. Keep core provenance, notices, ABI and lifecycle gates. Gate publication on the reusable workflow. Upload distribution wheels separately from audit evidence and download only wheels-* artifacts for publication. Add CI assertions for both callers and publish wiring. No release or publication is invoked by this change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Share native builds for GNU/Linux, macOS and Windows across both architectures between PR release-source checks and production. Keep source commits, registry core provenance and locked graph evidence explicit without changing binding sources or versions. Bind container compiler records to matching Rust std source evidence, verify wheel ABI/native format/architecture/RECORD and exact notice bytes, and retain native headers/imports separately for runtime audit. Smoke-check installed wheels only on matching runner architectures. Gate publication on the reusable native job; keep audit artifacts out of distribution downloads. Add regression tests and matrix/caller wiring assertions. Non-Cargo CRT/SDK licensing remains a separate audit. No release or publication is invoked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Apply dead_strip_dylibs only to the shared macOS release wheel path, preserving existing Rust flags and all other platform behavior. The observed candidate libraries load libiconv without importing any iconv or charset symbol. Require actual wheel dependency reports to contain only libSystem, and reject iconv/charset undefined symbols or missing evidence. Retain CPU, archive, notice and matching-host smoke checks. Add regression cases without changing binding sources or versions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Distinguish the dylib install name reported by otool -D from actual dependencies shown by otool -L. Exclude only the exact first identity entry; retain only-libSystem and no-iconv/charset guards, and reject missing, mismatched or duplicate self identities. Review nodeenv 1.11.1 from its digest-verified PyPI wheel. Its full BSD license matches the already reviewed 1.11.0 bytes. Add only that exact version/hash identity and retain unknown-version, changed-text and incompatible-SPDX failures. No dependency versions are changed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add the verified pinned Rust compiler-builtins, LLVM compiler-rt and libm original materials to native wheel notice preparation. Preserve Cargo/std notices, exact compiler rebinding and the existing musl LLVM augmentation without runtime dependencies. Stage all materials in both reusable release producers. Pin the license-evidence compiler to the already reviewed Rust 1.99.1 source and reject unknown compiler revisions or changed grants. Add regression coverage for full original delivery and container compiler rebinding that preserves the complete source collection. The collection is conservative, not a linked-code inventory. No binding source, first-party license, API or version changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The ubuntu-latest rollout now selects Ubuntu 26.04, which has no setup-python 3.9 artifact. Use Ubuntu 24.04 for the two Python 3.9 benchmarks and only the affected Python 3.9 Linux matrix entries. Keep all interpreter versions, matrix cardinalities, benchmarks, assertions and other runner choices unchanged. Do not spoof the platform, skip jobs or upgrade project dependencies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Verify the immutable PyPI wheel and sdist as data. Both carry the complete original BSD grant matching the installed license hash 606faf42d48b54d539dae99db6fecd48544535587e27275b319a3f36113cb6fa. Retain the full original text, archive identities and provenance. Add only the exact nodeenv 1.12.0 case. Keep unknown versions, modified grants and stronger metadata expressions rejected, with positive and negative regression checks. Do not alter dependency versions or approve BSD metadata generically. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Build original Python 0.8.1 source and its reviewed registry-core lock for actual x64 and ARM64 gnullvm targets on matching native runners. Use the exact reviewed LLVM MinGW SDK and real installed CPython stable-ABI import libraries with recorded bytes and actual COFF CPU. Do not spoof targets, patch dependencies, fabricate DLL/import libraries or change any project or dependency version. Inspect actual built wheel tags, PyInit export, Python/system imports, linker input fingerprints and the installed extension identity. Execute unchanged original Python tests and native conformance against the installed local wheel without Rust/SDK paths. Keep original-source and locked-dependency assertions strict. This is a compatibility investigation only: upload inert JSON/text/map/ lock/XML diagnostics, never the wheel, extension or linker reproduction. Do not replace the production native producer or claim full runtime notice/grant acceptance, publication or historical asset repair. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GitHub evaluates job-level env before runner context is available. Move the actual runner architecture binding into the SDK execution step, where runner.arch is supported. Preserve all original source, lock, real CPython import-library, target and native consumer assertions. No version, library, parser, production or publication change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The genuine GNU compatibility probe retained the reviewed SDK inputs, one additional MinGW atexit object and real CPython python3.lib. Its headers contain 902 compact import records and three ordinary COFF members. Record their actual sections, symbols and relocations to establish the native input/code boundary before assigning grants. Capture inert text only. Preserve source, lock, real import-library, CPU, wheel, native consumer and diagnostic-only upload gates. Do not infer absence of static runtime code from a library filename or from VCRUNTIME import absence. No dependency/version or production change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Extend the genuine matching-CPU Windows GNU path with complete existing Cargo/compiler notices and source-bound MinGW/libunwind/CPython original materials. Pin the actual SDK, native import libraries, stable-ABI source commits, exact retained runtime objects and unchanged 0.8.1 Cargo lock. Preserve all existing Cargo/std/compiler notice fields and validators. Include 59 runtime source originals, six full runtime documents and the selected original CPython licence/stable-ABI definition source in the wheel-owned NOTICE.json resource. Verify actual wheel bytes and RECORD, PE target/imports, complete native consumers and exact native-input boundary before any success-bound wheel/evidence candidate upload. Keep the interpreter and its own runtime DLLs external, not bundled. The original package/binding sources, APIs and dependency versions stay unchanged. Production release integration is not performed in this step. No local build/test/generator, contract acceptance, publication, tag, release, merge, deployment or historical asset repair. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace only the shared native release workflow's two MSVC Windows jobs with the proven genuine GNU producer. Preserve four non-Windows roles, original-source forwarding, package/dependency versions and all original musllinux/native/publication/download gates. Upload the same fully accepted wheels under existing windows-x86_64 and windows-aarch64 native release roles only after source/grant, RECORD/native input and genuine installed-wheel consumer gates. Validate exact combined six targets and add seven negative mutations for omitted source/CPU/library/resource/consumer/upload contracts. Generate an EN/RU/ZH installation-unit proposal only in CI. Explain actual targets and unchanged tags, no consumer build tools, complete package-owned notices, external CPython/runtime and historical limits. No generator/build/test runs locally; no actual registry/store/release publication, tag, merge, deployment or historical overwrite occurs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GitHub expanded an inline Ruby comparison's inputs expression before shell execution, turning the expected literal into an empty string. Construct the literal from two Ruby string fragments instead; retain the exact original-source forwarding assertion and all negative gates. Keep the existing multipart install unit completely unchanged. Place new Windows native-runtime documentation in a dedicated canonical single-part EN/RU/ZH unit after install, generated from the reviewed proposal in CI. Preserve exact changed-file/source/per-language hash validation and include all proposed source files in the artifact. No polydoc validator, boundary mandate or assertion is weakened. The new unit and manifest are still only a CI proposal until generated Markdown and source artifacts are independently verified. Native build, resource/input/consumer and release-role code remain unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Commit the canonical single-part Windows native runtime unit, manifest entry and exact CI-generated EN/RU/ZH README bytes. Preserve all original install multipart source chunks and existing generated content. Document actual GNU targets and unchanged wheel tags, normal CPython installation/runtime boundary, no consumer Rust/LLVM/C build tools and complete package-owned original licence/source resources. Keep the prepared-candidate versus historical-publication distinction explicit. Verify source and generated-file SHA256/tooling parent before committing. Remove only the own temporary fixture and docs-proposal generation job; retain actual native producers, all resource/input/consumer/release-role gates and original publication contracts. No local docs generator, build/test, version bump, release, registry publication, merge or deploy. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The final macOS ARM native job failed before compiling a wheel because maturin-action's implicit pyproject range lookup hit getaddrinfo ENOTFOUND api.github.com. The same-head successful macOS x64 job resolved and used maturin 1.16.0. Pin that already-used tool version in both owning native producers. The exact reviewed action implementation skips manifest/API release lookup for an explicit version and downloads its tagged asset directly. Keep all wheel build arguments, Rust targets, source/dependency versions, resource/input/consumer assertions and release gates unchanged. This is not a tool/project/library version upgrade, DNS bypass or a blind CI rerun. No local build/test or publication occurs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PHPCraftdream
marked this pull request as ready for review
November 2, 2026 12:33
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
87f0227cb60147a26a1eeb4fb06e3b505e9c7261. Include the complete original LICENSE and source-level notices/hashes for all 31 C/C++/ASM runtime files, including DWARF attribution; reject unreviewed source license headers.github.sha. Gate publication on that workflow, separate distribution wheel artifacts from audit evidence and download onlywheels-*for publication. CI checks the caller/source/publish wiring.Verified results
All 38 checks passed at
11c07f2c2fd116dd62f6765fbb0f4a53a8b30661, including source-level attribution, no-GCC link inputs, TLS/panic/DSO lifecycle and 3,503 development native tests per musllinux architecture.All 38 checks passed at
b910e6c0098c6d795ccc5bbefbe71fd1f935ba8fafter the common preparation helper was introduced. The native evidence job passed 13 CLI tests and verified notices in a real wheel.All 42 checks passed at
40f9ff9467723457e4893c6c8ba49ddcbb05439f. The isolated release-source pipeline checked out exact Python v0.8.1 commit566bbfce6c6b48387d7a0a089939a26744013dea, preserved its manifest/binding sources and passed 2,732 release-tag tests per architecture plus lifecycle/ABI/notice gates.Both actual release-source wheel artifacts were independently inspected: registry core 0.8.1 checksum
7140dfe2fa6c320e74768cd6a637828c2d26f81746254f4fcd805f3993bd3fd5, lock hash and bundled notice bytes matched. Each contained 37 package records and all 31 LLVM source notices. These are newly resolved builds of release source, not reproductions of historical wheels.All 42 checks passed at
6668fb31bff28f05740d10cee7195cbabf793c4dafter connecting the reusable musllinux path to production configuration and separating publishable artifacts.Current head
a9e992f672e1d47bd99e2b483bac2d3f81849597passed all 48 checks. A second reusable workflow covers the six GNU/Linux, macOS and Windows targets. It verifies the exact notice bundle/RECORD, native format/architecture and actual compiler identity, and retains native headers/imports for the separate runtime audit. Installed-wheel smoke tests run only when the target matches the runner architecture; cross-target execution is not claimed. Production calls the same native workflow, with its own source commit, and publication requires its success. All eight native release targets now have notice packaging and artifact verification.The six non-musl artifact reports were also independently inspected: each used source
566bbfce6c6b48387d7a0a089939a26744013dea, registry core 0.8.1 with the expected checksum, a matching lock hash, 37 package records and the correct native architecture. No local tests or builds were run.Boundaries and remaining work
The release configuration changes are in this draft PR only: no merge, release, tag change, PyPI upload or IDE-store publication was performed. The packaging implementation is complete, but the wider non-Cargo CRT/SDK and historical-artifact audit remains separate. GNU wheels still reference external system libgcc_s; macOS references system libSystem/libiconv; Windows references CPython and the system CRT. These are not extra bundled native payload files, and their presence is not a blanket licensing approval for all compiler/SDK components.
The development manifest uses Git core 0.9.0, while the release provenance guard requires registry core 0.8.1. Their evidence is kept separate. No version, framework or core source was changed to bypass the guard.
Cargo graph coverage is conservative, not an exact linked-code inventory. Native runtime evidence is recorded separately. Packaging notices alone does not establish every distribution obligation or resolve the wider historical native-artifact audit.
The pinned upstream libunwind LICENSE references a CREDITS.TXT file absent from its source tree; this is recorded honestly. The complete original LICENSE and actual source-header notices are retained. Ktav's own license has not been changed or presented as replacing third-party conditions.
Historical 0.8.1 musllinux wheels remain unchanged and contain a separate GCC 12.4 libgcc_s without a separate GCC license/source-offer file. Their exact GCC source provenance and applicable obligations remain under review; the new LLVM path does not repair those artifacts.
🤖 Generated with Claude Code