ci: test LLGo across Go 1.20 through 1.26 - #2354
Conversation
There was a problem hiding this comment.
Review: ci: build llgo only with Go 1.26
This is a clean, low-risk CI-only change. It drops the failing Go 1.25 full-build and per-package test matrix rows, keeping only the pinned Go 1.26.5 primary lane — consistent with the stated minimal recovery after #2346. Sharding logic remains correct (Ubuntu 2 shards / macOS 1 shard, disjoint modulo partition), and the security posture is unchanged (pull_request trigger, author-controlled matrix values only). No blocking issues.
The findings below are maintainability/accuracy notes, not correctness bugs.
Inline
- Two rewritten header comments (llgo + test jobs) now describe compatibility/older-source coverage that the change just removed. See inline comments.
Additional observations (no reliable inline location — pre-existing lines outside the diff)
-
Dead
continue-on-errorguards. Bothllgo(line 20) andtest(line 131) still carrycontinue-on-error: ${{ matrix.lane == 'compatibility' }}. After this change neither job's matrix ever produceslane: compatibility(all rows areprimary), so both guards are now permanentlyfalse. Consider removing them, or add a note if a compatibility lane is expected to return. (The same expression stays live inhellovia its Go 1.25 row.) -
std_pkgsguard hardcodes1.26.5(silent coverage-loss risk). In thetestjob run step (line 208), the std build-mode selection is gated on"${{ matrix.go }}" == 1.26.5. Now that1.26.5is the only Go value in this matrix, a future Go pin bump on line 141 would silently stop this literal from matching, skippingdev/test_std_buildmodes.shwith no failure. Consider driving this offmatrix.lane == 'primary'(semantic intent) or a single version source of truth. Thelane: primaryincludekeyed on the same literal (lines 145-147) shares this coupling — a pin bump there would render blanklanesegments in the job name. -
Residual Go 1.25 legs.
hello(line 231) andwasm-runtime(line 346) still run Go 1.25.0. This matches the PR intent of keeping demo/hello/wasm-runtime compatibility coverage while dropping the full build/test 1.25 rows — flagging only to confirm it's deliberate. -
Action pinning (pre-existing, out of scope). Actions are pinned to mutable tags (e.g.
actions/checkout@v7,emscripten-core/setup-emsdk@v15) rather than commit SHAs. A supply-chain hardening opportunity, unrelated to this change.
| # Build and install llgo only with the primary Go toolchain. Source | ||
| # compatibility belongs to the runtime, demo, and test lanes below. |
There was a problem hiding this comment.
[P3] Stale comment: 'test' lane no longer provides source compatibility
This comment delegates "source compatibility" to "the runtime, demo, and test lanes below," but this PR removes the test job's compatibility row (it is now primary-only on Go 1.26.5), and there is no runtime lane in this file. The only surviving compatibility coverage is the hello job's Go 1.25 row. Consider pointing the comment at hello instead.
| # Compile the repository test harness with the primary toolchain. | ||
| # Older source versions need a separate injected go.mod version. |
There was a problem hiding this comment.
[P3] Stale comment: 'test' job no longer tests older source versions
The second sentence ("Older source versions need a separate injected go.mod version") no longer applies to this job: the matrix is now a single go: ["1.26.5"] with only a primary lane, and nothing here injects a go.mod version. That injected-version behavior lives in the hello job's mod-version steps. Consider dropping or rewording this line to avoid misleading future readers.
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
4c2436e to
5d05c68
Compare
LLGo baseline benchmarks
Program measurements
Core language and compiler benchmarks
Compared with |
5d05c68 to
4969b91
Compare
4969b91 to
3427a07
Compare
Build the compiler and repository tooling only with the pinned Go 1.26 toolchain, while testing source compatibility with exact Go 1.20 through Go 1.26 toolchains and matching alternate module files. Add reusable local runners, release-tagged standard-library tests, runtime and wasm endpoints, and version-aware symbol coverage.
3427a07 to
9618cfc
Compare
Summary
.go-versiontest/with exact Go 1.20–1.26 toolchains, matching temporary module versions, andGOTOOLCHAIN=localruntime/trace.runtime_readTraceentry to LLGo's existing trace reader so Go 1.20–1.25StopTracecompletesThe native runtime remains compatible with Go 1.20. The wasm runtime starts at Go 1.24 because it uses
structs.HostLayout. This change does not add clite fallbacks or source patches.CI time
Versions run in separate jobs. Recent full jobs take about 18–21 minutes on Ubuntu and 26 minutes on macOS; full-job limits are 40 and 45 minutes. Go 1.20–1.24 jobs cover only representative packages. The sequential all-version integration script is local-only.
Validation
test/go(478s), and Go 1.25/1.26 native testsgit diff --checkThis supersedes the earlier minimal CI recovery; main already contains the separate Go 1.25 cgroup bridge from #2356.