CI fails on ARM due to cgocheck > 1 mode is no longer supported at runtime
vmx opened this issue · comments
Currently master if failing on CI: https://app.circleci.com/pipelines/github/filecoin-project/filecoin-ffi/3025/workflows/6477ffa8-3057-4d33-82f5-cdc665d478e1/jobs/18154
due to:
fatal error: cgocheck > 1 mode is no longer supported at runtime. Use GOEXPERIMENT=cgocheck2 at build time instead.
runtime stack:
runtime.throw({0x629cd8?, 0xa?})
runtime/panic.go:1077 +0x40 fp=0xffffe98f7810 sp=0xffffe98f77e0 pc=0x48c30
runtime.parsegodebug({0x4000000020?, 0x7?}, 0x0)
runtime/runtime1.go:498 +0x240 fp=0xffffe98f78b0 sp=0xffffe98f7810 pc=0x5b7f0
runtime.parsedebugvars()
runtime/runtime1.go:406 +0x11c fp=0xffffe98f78f0 sp=0xffffe98f78b0 pc=0x5b3fc
runtime.schedinit()
runtime/proc.go:744 +0x15c fp=0xffffe98f7940 sp=0xffffe98f78f0 pc=0x4c62c
runtime.rt0_go()
runtime/asm_arm64.s:86 +0xa4 fp=0xffffe98f7970 sp=0xffffe98f7940 pc=0x7cca4
Exited with code exit status 2
Note that it only fails on ARM.
It seems to be triggered by these lines:
filecoin-ffi/.circleci/config.yml
Lines 354 to 357 in 441fa8e
This error is from a Go 1.21 runtime.
My fix is failing because it's running on a Go 1.17 runtime.
Your CI link avoids the Go 1.17 install step.
The proper command for Go >= 1.21 is in branch: fix431
Otherwise the line is correct for Go <= 1.20
What version of Go should be be using here? We should probably ensure it because it appears that tests are being ran with different Go versions. I don't think we require Go 1.21 yet in Lotus, so we really shouldn't be seeing the bug (yet). So the right fix will be to pin the right version of Go.
If you would like help with that, let me know which version you're building this for.
So the right fix will be to pin the right version of Go.
The Lotus team should make the call on which version of Go it makes sense to run the CI on. I agree that all tests should be run on the same Go version.
As Lotus is requiring Go 1.20 I decided to go for that in #435.
#435 fixed this issue.