ci: migrate from CircleCI to GitHub Actions#166
Conversation
Replaces .circleci/config.yml with .github/workflows/ci.yml. Preserves
the original 9 CircleCI jobs:
- golang-{1.24,1.25,1.26} (matrix)
- golang-{1.24,1.25,1.26}-external-libzstd (matrix)
- golang-efence
- golang-efence-external-libzstd
- golang-i386 (runs travis_test_32.sh inside 32bit/ubuntu:16.04)
All third-party actions are pinned to commit SHAs:
- actions/checkout@de0fac2e (v6.0.2)
- actions/setup-go@4a360112 (v6.4.0)
Note: the efence jobs were previously resource_class: xlarge on
CircleCI; they now run on the default ubuntu-latest runner. Required
status-check names will need to be re-pinned in branch protection.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The 32-bit job intermittently crashed with SIGSEGV in a libzstd cgo call on the GitHub-hosted runner. Modern host kernels randomize the 32-bit address layout differently than the older CircleCI host did, occasionally placing libzstd's allocations at addresses the legacy 3 GB user-space split doesn't expect. Passing -R (ADDR_NO_RANDOMIZE) to linux32 makes the layout deterministic; the flag inherits across fork/exec to the bash script and the Go test binary. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The -R flag broke the i386 job: util-linux 2.27 in 32bit/ubuntu:16.04 parses options after --32bit <arch> in an order-sensitive way and rejects "-R bash ..." with "i386: Kernel cannot set architecture to i386". Restoring the previous invocation; the underlying flake will be addressed separately. This reverts commit f3b091b. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Viq111
left a comment
There was a problem hiding this comment.
Restoring the previous invocation; the underlying flake will be addressed separately.
Where you able to find a fix for that ? If we don't fix it in this PR, it's unlikely we will find a fix in the future
@Viq111 not really. The suggestion was to run with |
Hey Cody — Vianney asked me to drop some thoughts on the i386 job here, since the TL;DRThe current i386 job inherits the CircleCI shape verbatim: spin up
Suggested approach: cross-compile to
|
Replaces the docker-in-32bit/ubuntu:16.04 invocation (which downloaded
Go 1.13 and was flaky due to modern kernel × 2016 userland) with a
native cross-compile on ubuntu-latest:
- actions/setup-go at Go 1.26 (matches the workflow's other jobs)
- apt: gcc-multilib + libc6-dev-i386 for the 32-bit toolchain
- GOARCH=386 CGO_ENABLED=1 CC="gcc -m32" so cgo emits 32-bit ELF
- Linux IA32 compat on the amd64 host runs the resulting binary
natively — no QEMU, no docker, no linux32 personality dance
The huf_decompress_amd64.S source is auto-excluded by Go's filename
suffix build rule under GOARCH=386. DISABLE_BIG_TESTS=1 is preserved
to keep the prior carve-out for memory-heavy stream tests.
The standalone "go test -bench ." invocation from the old script is
not carried over (benchmarks aren't a correctness gate and the runner
is too noisy for meaningful numbers).
travis_test_32.sh is removed; nothing else referenced it.
Suggested by @Viq111 on the PR.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
@Viq111 :D awesome, applied that suggestion in the latest commit |
Summary
.circleci/config.ymlwith.github/workflows/ci.yml, preserving all 9 CircleCI jobs (3× Go versions × {default, external-libzstd}, two efence variants, and i386).actions/checkout@de0fac2ev6.0.2,actions/setup-go@4a360112v6.4.0).32bit/ubuntu:16.04image andlinux32 --32bit i386 ./travis_test_32.shinvocation by running it insidedocker runon a standard ubuntu runner.Notes
ci/circleci: golang-1.24→golang-1.24, etc.). The required checks list will need to be re-pinned after this lands.resource_class: xlarge(8 vCPU) on CircleCI; they now run on defaultubuntu-latest(4 vCPU / 16 GB). If memory pressure or runtime regresses, swap to a larger runner label.golang-1.x-external-libzstdbuilds/tests without-tags external_libzstd(whilegolang-efence-external-libzstddoes use the tag) is preserved as-is from the original CircleCI config — flag for follow-up if this is a latent bug.concurrency:group so superseded PR runs are cancelled.Test plan
🤖 Generated with Claude Code