Problem
go test -race currently reports a data race in pkg/backend/build on main.
Reproduced on 1d480ded52ab1bda1aea3d03a452ed901325344d with:
GOCACHE=$(mktemp -d /tmp/modctl-current-gocache-race.XXXXXX) go test -race ./pkg/backend ./pkg/backend/build
The pkg/backend package passed in that run, but pkg/backend/build failed with a race in TestBuilderSuite/TestBuildLayer/successful_build_layer.
Race summary:
WARNING: DATA RACE
Write:
io.(*pipe).write
archive/tar.(*Writer).WriteHeader
github.com/modelpack/modctl/pkg/archiver.Tar.func1
pkg/archiver/archiver.go:114
Previous read:
fmt.Sprintf
github.com/stretchr/testify/mock.Arguments.Diff
github.com/modelpack/modctl/test/mocks/backend/build.(*OutputStrategy).OutputLayer
github.com/modelpack/modctl/pkg/backend/build.(*abstractBuilder).BuildLayer
pkg/backend/build/builder.go:191
github.com/modelpack/modctl/pkg/backend/build.(*BuilderTestSuite).TestBuildLayer.func1
pkg/backend/build/builder_test.go:129
Why it matters
The test passes without -race, so regular CI does not catch it. The current mock expectation passes a live *io.PipeReader into testify matching/diff logic while the tar writer goroutine is still writing to the paired pipe. The race detector catches concurrent access during test execution.
Expected behavior
go test -race ./pkg/backend/build should pass cleanly, or the test should avoid passing a live pipe object into mock diff/matching while another goroutine is mutating the pipe state.
Problem
go test -racecurrently reports a data race inpkg/backend/buildonmain.Reproduced on
1d480ded52ab1bda1aea3d03a452ed901325344dwith:The
pkg/backendpackage passed in that run, butpkg/backend/buildfailed with a race inTestBuilderSuite/TestBuildLayer/successful_build_layer.Race summary:
Why it matters
The test passes without
-race, so regular CI does not catch it. The current mock expectation passes a live*io.PipeReaderinto testify matching/diff logic while the tar writer goroutine is still writing to the paired pipe. The race detector catches concurrent access during test execution.Expected behavior
go test -race ./pkg/backend/buildshould pass cleanly, or the test should avoid passing a live pipe object into mock diff/matching while another goroutine is mutating the pipe state.