Repository navigation
ci: simplify and accelerate workflows - #2467
Conversation
There was a problem hiding this comment.
Review: CI workflow simplification
Overall this is a clean, well-commented CI refactor. The migration from actions/cache/restore + separate save steps to a single actions/cache@v6 is correct for the composite actions (setup-deps, setup-llvm-mingw, setup-embed-deps, setup-goreleaser), the doc.yml matrix merge expands to the intended 8 combinations, the Windows ARM64 MSVC 2-shard split and its profile-wide check gating are correct and coverage-preserving, and the comments accurately describe the code.
One regression stands out and is flagged inline: the release-build.yml sysroot producer no longer saves its cache. A few lower-priority notes below.
Other notes (no reliable inline location / lower priority):
setup-deps/action.yml(macOS, ~line 731):brew_install_missing python@3.12 || trueis followed by an unconditionalbrew link --overwrite python@3.12. Underbash -e, if the install genuinely fails the|| trueis defeated because the link then aborts the step. If python@3.12 is best-effort, guard the link too; if it's required, the|| trueis misleading.setup-embed-deps/action.yml(~line 13): the macOS block still runsbrew updateand omitsHOMEBREW_NO_AUTO_UPDATE=1, inconsistent with the de-flaking applied tosetup-depsin this PR. Consider applying the same treatment for consistency.install-esp-qemu.sh(~lines 60-63): the two Espressif QEMU tarballs are downloaded without SHA-256 verification, unlike the siblinglibiconvdownload and the Windows LLVM downloads. Now that the result is cached (keyed only on the script hash), an upstream-mutated/tampered artifact would be persisted and re-served. Consider pinning + verifying checksums to match the discipline used elsewhere.
|
Also addressed the three lower-priority review notes in 1289c6e:
Local checks passed: git diff --check, bash syntax, shellcheck, YAML parsing, actionlint (excluding the existing release-workflow shellcheck findings), plus an actual arm64 macOS download/checksum/extract and version launch of both QEMU binaries. |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
LLGo baseline benchmarks
Program measurements
Core language and compiler benchmarks
Timer runtime benchmarks
Compared with |
Purpose
Simplify the R12-era workflows, reduce repeated dependency work, and shorten the only native test job that consistently exceeds 40 minutes without sharding the profiles that stay below 35 minutes.
Based on the merged R12 work in #2465.
Decisions
MSYS2
msys2/setup-msys2@v2is already used for theCLANG64,CLANGARM64, and MSYS host-shell environments, and its built-in package cache is enabled by default. This PR does not move the pinned LLVM 19.1.7 and old-libxml2 ABI installation intoinstallorpacboy: those inputs resolve the rolling MSYS2 repository before the manual pins are applied and can introduce newer runtime libraries. DeprecatedMINGW32andMINGW64environments are not required by the supported R12 profiles.Caches and actions
actions/cache@v6steps;actions/setup-python@v7;Large ESP Clang, WASI, and sysroot inputs remain narrowly cached where already bounded. Unpinned Python demo packages and Go build outputs are not newly cached because their invalidation and size would make the hit rate or storage tradeoff unclear.
Matrices and sharding
Measured comparison
The warm-cache fork run at
4a2cb1322is compared with the successful upstream R12 head9f0a5af09. These are single-run measurements on GitHub-hosted runners, so small differences should be treated as normal variance. The current head refreshes Homebrew metadata only on Apple Silicon and keeps Intel macOS on its runner-image metadata; final macOS and release timings will be refreshed after its CI completes.The ARM64 profile intentionally spends 16m13s more aggregate runner time to remove the sole 45-48 minute critical-path outlier. The two final shards complete in 29m05s and 32m15s. Sharding shorter profiles would repeat setup without a comparable reliability or latency benefit.
A cold-cache probe also verified that each target writes its own full LLVM cache; the final run restored
llgo-llvm-19.1.3-full-target-windows-arm64-...exactly. ESP QEMU likewise restored its host-specific key and skipped installation.Contributor-side validation
All 67 runnable checks passed on predecessor head
4a2cb1322; the release-only job was correctly skipped for a pull request. Current head47984a395is running with the architecture-specific Homebrew refresh policy. Previous LLGo run: https://github.com/cpunion/llgo/actions/runs/33441249158.