Repository navigation
Conversation
Switches the hestia step from Mic92/hestia v3.1.0 to the mdarocha/hestia fork, release v3.1.0-mdarocha.1. The fork carries the gc fix from Mic92/hestia#163 and the pull-request manifest union from draft Mic92/hestia#186, so pull requests can write to the cache again: the default-branch-only write gate (`scripts/plan-hestia-writes.sh` and its step) is removed. The README now only notes that the action runs the fork. Tested on throwaway branches in this repo and in pondinfra (mdarocha/pondinfra#322): the action downloaded the fork's release, verified its attestation, and a pull request substituted both its own and the default branch's paths.
Results from a private NixOS configuration repository (two hosts, GitHub-hosted 2-core runners, one job per host that builds the host's install and VM tests), running this branch through a composite action. The case this targets is repeated runs of the same pull request. Before, pull requests ran with Same PR, same check derivations in every run (the later read-only push only changed the workflow), both host jobs in minutes:
The re-run logged Costs observed:
In this repository it's worth it. A second push to a PR went from about 28 job-minutes to about 5.5. A gc run on the default branch while PR chains existed kept each ref's newest manifest; that run used this branch together with #163, which it requires. |
GitHub resolves a cache key in the run's own scope before the default branch. A PR that committed to the default manifest chain (m3#) shadowed every later default-branch manifest, so it never saw what main cached after the PR's first write, and GC's cleanup mixed the chains. Jobs on refs/pull/* (or with --pr-manifest / the pr-manifest input) now commit to a separate chain (m3pr#) and read the union of it and the default chain. GC cleans m3pr# per ref and treats the packs of every PR manifest as live. Builds on Mic92#163 (per-ref manifest cleanup by cache ID).
81fb5c1 to
5d44e9e
Compare
Requires #163. Without it, gc deletes superseded manifests by key across all refs, so one pull request's
m3pr#chain would delete another's head; #163 makes that cleanup per ref.A pull request's cache lookup returns its own
m3#manifest before the default branch's (GitHub searches the current ref first), so once a PR has committed a manifest it no longer sees anything the default branch builds afterwards. This makes PR runs write their own family,m3pr#N, and loadm3#(which only the default branch writes) together with it, merged withManifest::merge.GITHUB_REF(refs/pull/*), or set with--pr-manifest/ thepr-manifestaction input.