Skip to content

perf(ci): persist Linux compiler caches - #98

Merged
zoeyrose merged 10 commits into
mainfrom
perf/ci-linux-cache
Aug 11, 2026
Merged

perf(ci): persist Linux compiler caches#98
zoeyrose merged 10 commits into
mainfrom
perf/ci-linux-cache

Conversation

@zoeyrose

@zoeyrose zoeyrose commented Aug 10, 2026

Copy link
Copy Markdown
Member

Closes #85.

Summary

  • consume the public amd64 Classic Linux CI release by exact versioned digest in core, server, client, and integrated Check jobs
  • replace repeated Linux apt/SDL bootstrap work and persist component-separated compiler caches
  • isolate pull-request, merge-group, and trusted-main namespaces and invalidate on image/compiler/configuration/driver changes
  • keep pull-request validation credential-free: no GHCR login or packages: read permission is used for either reusable build image
  • preserve complete image and ccache evidence as workflow artifacts and a durable repository ledger

Immutable release coordinates

  • base: 7ad4acc27c222db7ce3e74d7db5ac93e9464cd28
  • current head: 4fd2311f1a7b7af9280949099ae39c861bfa2bb9
  • released image: ghcr.io/atrinik/classic-build:1.2.3
  • released index: sha256:d0ec0a31f97fa1d699f62b81bbe697d95b335f44f1c99fde8704dfc528e2102f
  • released amd64 manifest: sha256:3c6fb2cefc907776cc4ea2f544d2d0756321b2b83bd44da3fe25b29cec837f0e
  • publisher release: atrinik/devcontainer v1.2.3
  • publisher commit: cfd1afd4088f76f6cd327159b0d58b20a6a6b0dd
  • publisher run: 31440069022
  • embedded inventory SHA-256: cbeb59d410f138631e1b997d68df98c24c881d13f2a99fea3cd64711185b82c0
  • package governance: both classic-build and windows-build are public and linked to atrinik/devcontainer
  • supply-chain prerequisite: atrinik/atrinik#339

Validation

  • anonymous manifest resolution, OCI source/revision labels, amd64 platform, and embedded toolchain inventory verified against the semantic release
  • the exact released image passed local core, client, server, and integrated-graph validation as the runner UID
  • server passed 39 coverage, 39 release, and 40 sanitizer tests; client passed 32 tests in each configuration; core passed its complete suites
  • the integrated graph produced 50 cacheable compilations; precompiled-header calls remain explicitly reported as uncacheable
  • hosted Check run 31443750204 passed cold and restored-cache attempts on the implementation head; the warm attempt reported 993 direct hits and zero misses across all four Linux jobs
  • 127 helper/contract tests and five imported-history graphs pass
  • actionlint, ShellCheck, Bash syntax, Python compile, and git diff --check pass
  • the complete Classic supply-chain profile audit passes with the new image inventory

The final documentation-only evidence head passed every latest-head check. Merge the supply-chain prerequisite atrinik/atrinik#339 before merging this PR. Full raw candidate history, released-image coordinates and results, samples, commands, ccache statistics, invalidation coverage, and reproduction steps are in docs/CI-LINUX-IMAGE.md.

Refs atrinik/devcontainer#24.

@codecov

codecov Bot commented Aug 10, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 55.81395% with 38 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
tools/ci/linux_cache_key.py 55.81% 30 Missing and 8 partials ⚠️

📢 Thoughts on this report? Let us know!

@zoeyrose zoeyrose moved this to Review in Atrinik work Aug 10, 2026
@zoeyrose
zoeyrose force-pushed the perf/ci-linux-cache branch from 1cac101 to b71319d Compare August 10, 2026 21:44
zoeyrose added a commit to atrinik/devcontainer that referenced this pull request Aug 10, 2026
Closes #24.

## Scope

- add an amd64-only `classic-final` Linux target with exact Ubuntu
snapshot/package locks, a non-root ccache contract, pinned Classic
validation, codec smoke coverage, and nested SPDX validation
- publish `classic-build` stable/platform/SHA/version tags with
provenance and SBOM, plus an isolated `candidate_only` pre-merge tag
that cannot move release aliases
- preserve the current general and task-focused Windows image contracts
while combining all four variants under the stable `Required checks`
gate
- keep pull-request validation private-package-free and fail closed on
missing/malformed selectors or any selected/unselected job mismatch
- document local and hosted size, pull, startup, job-time, and
compiler-cache evidence

## Immutable coordinates

- base: `main` at `38658e57b2c23b2dcf740cf8c1f1df0e017e0144`
- head: `332fa210bb438c29bdfa916120b8092080aa5168`
- candidate publication: [run
31427897129](https://github.com/atrinik/devcontainer/actions/runs/31427897129)
- candidate index:
`sha256:e117b858d5aecdb8eb39dc56451378b6e6bd72dd5e042ab96fee5b6154000043`
- amd64 manifest:
`sha256:cdba4bfd40f288e577842b3308e88ccfb7252623ac7b13d08074fc45cc305b8e`
- linked consumer:
[atrinik/classic#98](atrinik/classic#98)
- read-only package governance:
[atrinik/github-settings#59](atrinik/github-settings#59)

## Validation

- Docker `--check` for both Dockerfiles, actionlint, ShellCheck, Bash
syntax, JSON and combined toolchain inventory validation, helper
regression tests, and `git diff --check`
- full Linux Classic validation image plus final image against pinned
Classic client/server configure-build-test-coverage workloads as the
runner UID
- candidate consumer cold and warm hosted runs, including successful
rerun of the transient server timeout
- three independent whole-diff exit reviews on the final head
- latest-head PR workflows and stable `Required checks` aggregate

## Hosted evidence

The durable raw ledger is
[`classic-benchmark.md`](classic-benchmark.md). On the same
GitHub-hosted runner image, warm candidate jobs improved over the
apt-based sample by 59.2% for core (206 s to 84 s), 52.4% for client (84
s to 40 s), and 30.2% for server (202 s to 141 s). The amd64 registry
layers total 401,282,166 B. Immediate repeated pulls with local layers
took 210 ms and 176 ms. Warm runners restored 1,276 direct ccache hits
with zero misses across the three isolated component caches.

The candidate digest is review evidence, not the final consumer
coordinate. After this PR is merged and semantic-release publishes the
versioned image, the Classic consumer must verify the released
inventories and source inputs, pin the released digest, and pass Check
again before becoming ready.
@zoeyrose
zoeyrose force-pushed the perf/ci-linux-cache branch from baf4688 to 4fd2311 Compare August 11, 2026 00:04
@zoeyrose
zoeyrose marked this pull request as ready for review August 11, 2026 00:09
zoeyrose added a commit to atrinik/atrinik that referenced this pull request Aug 11, 2026
## Summary

- catalog the public `classic-build:1.2.3` release and its immutable
index digest
- record anonymous acquisition, ownership, update, validation, and EOL
contracts
- remove obsolete Classic Ubuntu and registry-login evidence after PR
validation moved to public reusable images
- refresh the libpcpnatpmp evidence string for the current shared
integrated graph

## Validation

- `python3 -m unittest discover -v`
- `python3 -m compileall -q atrinik atrinik_workspace tests`
- `python3 -m atrinik_workspace.guidance_inventory --check`
- `./atrinik manifest validate`
- `./atrinik supply-chain validate`
- `./atrinik supply-chain audit --profile classic` with explicit
repositories for the complete profile
- `git diff --check`

The audit covered 74 root, 88 Classic-root, 1,244 Classic component, and
all selected content/devcontainer/governance/resource version-controlled
inputs, plus their immutable Actions references.

This is the inventory prerequisite for
[atrinik/classic#98](atrinik/classic#98) and the
completed `atrinik/devcontainer#24` image delivery.
@zoeyrose
zoeyrose merged commit ee68298 into main Aug 11, 2026
17 checks passed
@zoeyrose
zoeyrose deleted the perf/ci-linux-cache branch August 11, 2026 01:27
@github-project-automation github-project-automation Bot moved this from Review to Done in Atrinik work Aug 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

perf(ci): persist compiler caches for Linux Check jobs

1 participant