Repository navigation
Cache the fixture adapters' Cargo registry and build tree from main - #799
Conversation
Every Shared Server fixtures matrix job waits for published-sdk-adapters, which spent about four of its 6.4 minutes building the same pinned, --locked adapter dependencies each run (PR run 40414928426). The job now restores the public Cargo registry data (registry, git) and the build tree, never the rest of CARGO_HOME, under one exact key: - there are no restore keys, so a run restores this key's tree or none; - only a successful push to main saves it (the top-level && guard the organization policy accepts since durable-workflow/.github#269), so no pull request or merge group writes what a later run reads; - every run still builds, stamps and hashes its own adapters, and the final adapter directories and revision checks are unchanged. scripts/ci/sdk-adapter-cache-key.sh computes the key from the runner OS and architecture, every pinned Rust image among the inputs (the build scripts' and the query-authority profile's) and a digest of every tracked adapter input: the five adapter crates, their build scripts, the pip wrapper and the SDK profiles. It fails unless all five crates and build scripts are inputs. The helper and the pip wrapper join the push paths so a change to either saves a fresh cache on main. A unit test pins the boundary. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Security accepted this change at |
#797 merged; #799, this PR and the native image are next. External payload takeover stays refused: PHP keeps references in about 30 locations in their URI form, so it is its own project, and the release-candidate scope question now includes it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Security revalidation at exact PR head
The prior Security acceptance therefore applies to this exact head. No new source request, release hold, or additional Security gate is added; re-review only if the cache boundary or key/save semantics change. |
|
Merged through the merge queue at 2026-10-27T02:57:10Z, 24 minutes after enqueue (02:33:15Z, pinned to head
Baseline for the before/after comparison: this PR's own run (40435889275) had no cache to restore. |
|
Measured after merge.
Most of that wall-time drop is runner queueing, not the cache. Matrix jobs waited a median of 0 min (max 2.3) instead of 5 to 10, because fewer runs overlapped. The cache's own share is the roughly 2 minutes on the adapter job, which is on every run's critical path. |
The checkpoint names the verified 2.11.4 artifacts, the Core 2.14 expectation changes native now follows, the poll_transport position and the Workflow #931 boundary, with what was checked. The Rust port's current state lists #799 and #801 as merged, #803 and this move as next, and 2.11.4 as the compared reference. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>



Part of #325. CI speed: fix CI before adding more PRs.
Every Shared Server fixtures matrix job waits for
published-sdk-adapters. That job spent about four of its 6.4 minutes building the same pinned,--lockedadapter dependencies on every run (PR run 40414928426).Change
The job restores the public Cargo registry data (
sdk-cargo/registry,sdk-cargo/git) and the build tree (sdk-target), never the rest ofCARGO_HOME, under one exact key:if:is a top-level&&withgithub.event_name == 'push'andgithub.ref == 'refs/heads/main', which the organization policy accepts since Allow an exact shared cache key written only by protected pushes .github#269. No pull request or merge group writes a cache that a later run reads.scripts/ci/sdk-adapter-cache-key.shcomputes the key from:300ec56…and the query-authority profile'sba81bc3…;It fails unless all five crates and build scripts are among the inputs. The helper and the pip wrapper join the push paths, so a change to either saves a fresh cache on main.
tests/Unit/ServerParityAdapterCacheTest.mjspins the boundary:Checks run
qualification_policy.py validate --target server, at durable-workflow/.github3ce93ff) both pass locally.Effect
This PR's own run cannot hit the cache, because nothing is saved until the first push to main after merge. I'll post the adapter job's time from the first PR run after that.
🤖 Generated with Claude Code