Skip to main content
- Phase 096 cross-workflow bootstrap cache sharing. The lint, policy, preflight, and lint site-deploy jobs now share a single bootstrap state via
actions/cache@v3, keyed by ${{ runner.os }}-casca-bootstrap-${{ hashFiles('lightningcss-version', 'Makefile', 'tools/casca/Cargo.lock', 'tools/casca/Cargo.toml', 'tools/casca/build.rs', 'tools/casca/src/**', 'src/**/*.css', 'src/live/**/*.js', 'site/casca-themes.toml') }} with path: bin dist .casca-cache ~/.cargo. On exact-key hit, each job skips bootstrap, build, and build-live and runs only its job-specific work (lint runs make lint plus make spdx-lint; policy runs license-check plus release-preflight-prebuilt; preflight runs the prebuilt aggregate; lint site-deploy runs make publish-site). On miss, each job runs the full producer flow (rustup, make bootstrap, make build, make build-live) before job-specific work so the cache save populates a complete state.
- Three new Makefile prebuilt targets:
release-preflight-prebuilt, npm-pack-all-prebuilt, mirror-roundtrip-prebuilt. Each depends only on require-build-state and never re-runs bootstrap, build, or build-live. The release-preflight-prebuilt recipe calls bin/casca lint-spdx directly rather than recursing into $(MAKE) spdx-lint to avoid the $(CASCA) -> cargo build transitive rebuild path. The Section J source-freeness gate is strengthened to traverse variable-expanded prerequisites (e.g. $(CASCA)) so this class of regression is caught at design time.
- Lint workflow
site-deploy job gains a literal if: github.ref_type != 'tag' at the job level so tag pushes do not double-publish the portal; release.yml retains exclusive ownership of tag-push site-deploy.
cargo-publish-dry-run reorders its recipe body so the publish=false short-circuit runs before command -v cargo and the cargo publish --dry-run invocation, allowing cache-hit policy paths to complete without Rust on the runner while publish=false is still in force.
- Phase 094 and Phase 095 contracts preserved unchanged: no workflow dispatch or workflow run trigger substrings appear in either workflow file, the
casca-build-state.tar producer and consumer contract is intact, and the Phase 095 prebuilt source-freeness gate continues to PASS alongside the Phase 096 prebuilt targets.