Add credential-free fork CI - #8
Draft
germ-mark wants to merge 1 commit into
Draft
Conversation
germ-mark
marked this pull request as draft
July 28, 2026 19:18
No commit in this fork — including the shipped release pin — had ever been checked by anything but a laptop. Actions was disabled, and several upstream workflows cannot run here regardless: Benchmarks on Merge assumes an IAM role in awslabs' AWS account, Pull Request Slack Notifier needs their webhook, and Native's coverage step needs their Codecov token. Nothing here needs a credential. Nine jobs: tests on Linux and macOS (default, safe_extensions, TwoMLSPQ's exact feature set, all-features), lint, cargo-hack --each-feature, mls_build_async, a thumbv6m-none-eabi build, security audit, wasm, and fuzz. The last three are folded in from upstream workflows now disabled on this fork; disabling rather than deleting keeps those files identical to upstream so they resync cleanly. Feature-specific steps are gated on a probe of mls-rs/Cargo.toml, because `safe_extensions` does not exist on every ref this can run against — not on main, not on this branch, not on germ-crypto-providers. Without the gate every such step fails with "the package 'mls-rs' does not contain this feature", which would make the workflow_dispatch ref input useless for exactly the branches worth checking with it. Three things this had to get right, each found by a red run: - `rustflags: ''` on every setup-rust-toolchain step. The action defaults RUSTFLAGS to `-D warnings`, which promotes pre-existing upstream warnings (unused imports in mls-rs and mls-rs-identity-x509) into build errors and failed three jobs for reasons unrelated to the code under test. Strictness belongs where the lint job puts it — passed to clippy explicitly. - macOS on macos-26. mls-rs-crypto-cryptokit's cryptokit-bridge declares swift-tools-version 6.2; macos-14 ships Xcode 15.4 / Swift 5.10 and fails in the build script before compiling anything. - No `wasm-pack test --test '*'`. client_tests exceeds ChromeDriver's 30s renderer timeout, the driver is SIGKILLed, and wasm-bindgen then fails to parse the truncated response as `missing field 'chunk'`. Not a code failure: the 395 wasm lib tests pass on the same target. Triggers on push to germ-integration and on pull requests. Release pins are frozen, so a workflow file cannot be added to one without moving it; workflow_dispatch takes a ref input instead. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Gives this fork CI. Until now nothing here had been machine-verified — Actions was disabled, so every commit including the shipped release pin (
germ-shadow-safe-exporter) had only ever been checked on a laptop.Why not just enable the upstream workflows
Several cannot work outside awslabs:
Benchmarks on Mergeassumes an IAM role in their AWS account,Pull Request Slack Notifierneeds their webhook, andNative's coverage step needs their Codecov token. Enabling Actions also turns all nine on at once, which saturates the runners.They are now disabled through the Actions API rather than deleted, so the files stay byte-identical to upstream and keep resyncing cleanly. Re-enable any with
gh workflow enable <id>.What runs
Nine jobs, no credentials: tests on Linux and macOS (default,
safe_extensions, TwoMLSPQ's exact feature set, all-features), lint,cargo hack --each-feature,mls_build_async,thumbv6m-none-eabi, security audit, wasm, and fuzz. The last three are folded in from upstream workflows that were observed passing here before being disabled — keeping them as jobs means one workflow to reason about.wasmandfuzzare gated off the push trigger (push only fires ongerm-integration, whose content has already been through a PR) but stay reachable viaworkflow_dispatch.Three traps, each found by a red run
rustflags: ''on every toolchain step.setup-rust-toolchaindefaultsRUSTFLAGSto-D warnings, which promotes pre-existing upstream warnings (unused imports inmls-rs,mls-rs-identity-x509) into build errors. It failedeach-feature,no_stdand macOS on the first run for reasons unrelated to any code under test. Upstream's own wasm and fuzz workflows clear it the same way; strictness stays where the lint job puts it, passed to clippy explicitly.macos-26.cryptokit-bridgedeclaresswift-tools-version: 6.2; macos-14 ships Xcode 15.4 / Swift 5.10 and dies in the build script —package 'cryptokit-bridge' is using Swift tools version 6.2.0 but the installed version is 5.10.0. The job reportsswift --versionup front so a future image regression is visible.wasm-pack test --test '*'.client_testsexceeds ChromeDriver's 30s renderer timeout, the driver is SIGKILLed, and wasm-bindgen fails to parse the truncated response — surfacing as the misleadingError: missing field 'chunk'. Not raised byWASM_BINDGEN_TEST_TIMEOUT, and not a code failure: the 395 wasm lib tests pass on the same target.Runs on refs that lack
safe_extensionsThat feature arrives with #4, so it does not exist on
main, on this branch, or ongerm-crypto-providers. Every step referencing it would fail withthe package 'mls-rs' does not contain this feature. Feature-specific steps are therefore gated on a probe ofmls-rs/Cargo.toml, and the base coverage still runs everywhere — e.g. the async job runs plaintest_utilunconditionally andtest_util,safe_extensionsonly when present.Without that gate the
workflow_dispatchrefinput would be useless for exactly the refs worth checking with it. This PR is the proof: all nine jobs pass here with the feature steps skipped, and the same workflow passes ongerm-integrationwith them running.Known limitation
For
pull_requestevents GitHub resolves workflow files from the head branch, so this only runs automatically ongerm-integrationand on PRs whose head contains it. Feature-branch PRs (#4, #6, #7) get no automatic checks.Making it an ancestor of every feature branch would fix that, at the cost of the property that makes those branches worth having — being based on plain
mainand submittable upstream as-is.workflow_dispatchtakes arefinput instead, so any branch (or a frozen pin) can be checked on demand. See FORK.md ongerm-integration.Status
Green on
germ-integration: all nine jobs pass on the PR run, seven on push with wasm/fuzz skipped by design.