Our container image build computes matrix values dynamically and then fires off parallel builds to fulfill those matrix-driven variants. The build works just fine most of the time, but once in a blue moon we get some sort of concurrency issue.
Per the log, by the time this happened, two parallel builds were already running.
It's extremely unpredictable and infrequent, but I figured I'd forward the stack information in case you guys want to try to hunt it down.
fatal error: concurrent map read and map write
goroutine 4908 [running]:
internal/runtime/maps.fatal({0xf97c39?, 0xf4b5e0?})
/opt/hostedtoolcache/go/1.24.0/x64/src/runtime/panic.go:1053 +0x18
github.com/nektos/act/pkg/runner.(*LocalRepositoryCache).GetTarArchive(0xc00038e8c0, {0x1132878, 0xc0004804b0}, {0xc0002f6940, 0x1f}, {0xc000451a66, 0x4}, {0xc000900060, 0x10})
/home/runner/work/act/act/pkg/runner/local_repository_cache.go:47 +0x14c
github.com/nektos/act/pkg/runner.(*stepActionRemote).pre.(*stepActionRemote).prepareActionExecutor.func1.1.1({0xf7ad97?, 0xc0004804b0?})
/home/runner/work/act/act/pkg/runner/step_action_remote.go:82 +0x11e
github.com/nektos/act/pkg/runner.readActionImpl({0x1132878?, 0xc0004804b0?}, 0xc0003a8960, {0xc000451a66, 0x4}, {0xc000451a60, 0x5}, 0xc000521ec0, 0x10161a8)
/home/runner/work/act/act/pkg/runner/action.go:54 +0xb4
github.com/nektos/act/pkg/runner.(*stepActionRemote).pre.(*stepActionRemote).prepareActionExecutor.func1({0x1132878, 0xc0004804b0})
/home/runner/work/act/act/pkg/runner/step_action_remote.go:104 +0x6e9
github.com/nektos/act/pkg/runner.(*stepActionRemote).pre.NewPipelineExecutor.Executor.Then.func9({0x1132878, 0xc0004804b0})
/home/runner/work/act/act/pkg/common/executor.go:162 +0x31
github.com/nektos/act/pkg/runner.newJobExecutor.Executor.ThenError.func11({0x1132878, 0xc0004804b0})
/home/runner/work/act/act/pkg/common/executor.go:143 +0x31
github.com/nektos/act/pkg/runner.newJobExecutor.useStepLogger.func12({0x1132878, 0xc0001a9e30})
/home/runner/work/act/act/pkg/runner/job_executor.go:217 +0x2ba
github.com/nektos/act/pkg/runner.newJobExecutor.NewPipelineExecutor.Executor.Then.func47({0x1132878, 0xc0001a9e30})
/home/runner/work/act/act/pkg/common/executor.go:174 +0x149
github.com/nektos/act/pkg/runner.newJobExecutor.NewPipelineExecutor.Executor.Then.func47({0x1132878, 0xc0001a9e30})
/home/runner/work/act/act/pkg/common/executor.go:162 +0x31
github.com/nektos/act/pkg/runner.newJobExecutor.NewPipelineExecutor.Executor.Then.func47({0x1132878, 0xc0001a9e30})
/home/runner/work/act/act/pkg/common/executor.go:162 +0x31
github.com/nektos/act/pkg/runner.newJobExecutor.NewPipelineExecutor.Executor.Then.func47({0x1132878, 0xc0001a9e30})
/home/runner/work/act/act/pkg/common/executor.go:162 +0x31
github.com/nektos/act/pkg/runner.newJobExecutor.Executor.Finally.func30({0x1132878, 0xc0001a9e30})
/home/runner/work/act/act/pkg/common/executor.go:227 +0x2e
github.com/nektos/act/pkg/runner.newJobExecutor.Executor.Finally.func43({0x1132878, 0xc0001a9e30})
/home/runner/work/act/act/pkg/common/executor.go:227 +0x2e
github.com/nektos/act/pkg/runner.newJobExecutor.NewPipelineExecutor.Executor.Then.func48({0x1132878, 0xc0001a9e30})
/home/runner/work/act/act/pkg/common/executor.go:174 +0x149
github.com/nektos/act/pkg/runner.newJobExecutor.Executor.Finally.func45({0x1132878, 0xc0001a9e30})
/home/runner/work/act/act/pkg/common/executor.go:227 +0x2e
github.com/nektos/act/pkg/runner.(*RunContext).Executor.func1({0x1132878, 0xc0001a9e30})
/home/runner/work/act/act/pkg/runner/run_context.go:728 +0x50
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.1({0x1132878, 0xc000568540})
/home/runner/work/act/act/pkg/runner/runner.go:207 +0x191
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.2.1(0xc0001f13b0, 0xc0001f1420)
/home/runner/work/act/act/pkg/common/executor.go:108 +0x52
created by github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.2 in goroutine 4884
/home/runner/work/act/act/pkg/common/executor.go:106 +0xef
goroutine 1 [chan receive]:
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.3({0x1132878, 0xc0004812c0})
/home/runner/work/act/act/pkg/common/executor.go:121 +0x219
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1({0x1132878, 0xc0004812c0})
/home/runner/work/act/act/pkg/runner/runner.go:214 +0xf7d
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.Executor.Then.func4({0x1132878, 0xc0004812c0})
/home/runner/work/act/act/pkg/common/executor.go:162 +0x31
github.com/nektos/act/pkg/common.Executor.Finally.func1({0x1132878, 0xc0004812c0})
/home/runner/work/act/act/pkg/common/executor.go:227 +0x2e
github.com/nektos/act/cmd.createRootCommand.newRunCommand.func2(0xc00012e308, {0xc00017a420, 0x0, 0xf71592?})
/home/runner/work/act/act/cmd/root.go:708 +0x20d0
github.com/spf13/cobra.(*Command).execute(0xc00012e308, {0xc00017a000, 0x16, 0x16})
/home/runner/go/pkg/mod/github.com/spf13/cobra@v1.10.1/command.go:1015 +0xa94
github.com/spf13/cobra.(*Command).ExecuteC(0xc00012e308)
/home/runner/go/pkg/mod/github.com/spf13/cobra@v1.10.1/command.go:1148 +0x40c
github.com/spf13/cobra.(*Command).Execute(...)
/home/runner/go/pkg/mod/github.com/spf13/cobra@v1.10.1/command.go:1071
github.com/nektos/act/cmd.Execute({0x1132878, 0xc0002ff3e0}, {0x11230c0, 0x6})
/home/runner/work/act/act/cmd/root.go:51 +0x4f
main.main()
/home/runner/work/act/act/main.go:18 +0x45
goroutine 17 [syscall]:
os/signal.signal_recv()
/opt/hostedtoolcache/go/1.24.0/x64/src/runtime/sigqueue.go:152 +0x29
os/signal.loop()
/opt/hostedtoolcache/go/1.24.0/x64/src/os/signal/signal_unix.go:23 +0x13
created by os/signal.Notify.func1.1 in goroutine 1
/opt/hostedtoolcache/go/1.24.0/x64/src/os/signal/signal.go:152 +0x1f
goroutine 18 [select]:
github.com/nektos/act/pkg/common.createGracefulJobCancellationContext.func1()
/home/runner/work/act/act/pkg/common/context.go:20 +0x9f
created by github.com/nektos/act/pkg/common.createGracefulJobCancellationContext in goroutine 1
/home/runner/work/act/act/pkg/common/context.go:19 +0x155
goroutine 19 [chan send]:
github.com/nektos/act/cmd.loadVersionNotices.func1()
/home/runner/work/act/act/cmd/notices.go:59 +0x3b
created by github.com/nektos/act/cmd.loadVersionNotices in goroutine 1
/home/runner/work/act/act/cmd/notices.go:58 +0x5f
goroutine 20 [select]:
github.com/nektos/act/pkg/common.EarlyCancelContext.func1()
/home/runner/work/act/act/pkg/common/job_error.go:57 +0xf1
created by github.com/nektos/act/pkg/common.EarlyCancelContext in goroutine 1
/home/runner/work/act/act/pkg/common/job_error.go:55 +0xe6
goroutine 21 [IO wait]:
internal/poll.runtime_pollWait(0x7e0eceea6670, 0x72)
/opt/hostedtoolcache/go/1.24.0/x64/src/runtime/netpoll.go:351 +0x85
internal/poll.(*pollDesc).wait(0xc0003ae280?, 0x380016?, 0x0)
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_poll_runtime.go:84 +0x27
internal/poll.(*pollDesc).waitRead(...)
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Accept(0xc0003ae280)
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_unix.go:620 +0x295
net.(*netFD).accept(0xc0003ae280)
/opt/hostedtoolcache/go/1.24.0/x64/src/net/fd_unix.go:172 +0x29
net.(*TCPListener).accept(0xc000390640)
/opt/hostedtoolcache/go/1.24.0/x64/src/net/tcpsock_posix.go:159 +0x1b
net.(*TCPListener).Accept(0xc000390640)
/opt/hostedtoolcache/go/1.24.0/x64/src/net/tcpsock.go:380 +0x30
net/http.(*Server).Serve(0xc000136100, {0x1131100, 0xc000390640})
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/server.go:3424 +0x30c
github.com/nektos/act/pkg/artifactcache.StartHandler.func1()
/home/runner/work/act/act/pkg/artifactcache/handler.go:119 +0x35
created by github.com/nektos/act/pkg/artifactcache.StartHandler in goroutine 1
/home/runner/work/act/act/pkg/artifactcache/handler.go:118 +0xe05
goroutine 27 [chan receive]:
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.2({0x1132878, 0xc0004812c0})
/home/runner/work/act/act/pkg/common/executor.go:121 +0x219
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.3.1(0xc0003b19d0, 0xc0003b1a40)
/home/runner/work/act/act/pkg/common/executor.go:108 +0x52
created by github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.3 in goroutine 1
/home/runner/work/act/act/pkg/common/executor.go:106 +0xef
goroutine 197 [IO wait]:
internal/poll.runtime_pollWait(0x7e0eceea6328, 0x72)
/opt/hostedtoolcache/go/1.24.0/x64/src/runtime/netpoll.go:351 +0x85
internal/poll.(*pollDesc).wait(0xc0003ae880?, 0xc0007ae000?, 0x0)
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_poll_runtime.go:84 +0x27
internal/poll.(*pollDesc).waitRead(...)
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0003ae880, {0xc0007ae000, 0x1300, 0x1300})
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_unix.go:165 +0x27a
net.(*netFD).Read(0xc0003ae880, {0xc0007ae000?, 0xc0003e38d8?, 0x4724b9?})
/opt/hostedtoolcache/go/1.24.0/x64/src/net/fd_posix.go:55 +0x25
net.(*conn).Read(0xc0003a0058, {0xc0007ae000?, 0x7e0ecede62e8?, 0x7e0f15937f30?})
/opt/hostedtoolcache/go/1.24.0/x64/src/net/net.go:194 +0x45
crypto/tls.(*atLeastReader).Read(0xc0007a22b8, {0xc0007ae000?, 0x47743e?, 0xc000914140?})
/opt/hostedtoolcache/go/1.24.0/x64/src/crypto/tls/conn.go:809 +0x3b
bytes.(*Buffer).ReadFrom(0xc0003e4638, {0x1129f80, 0xc0007a22b8})
/opt/hostedtoolcache/go/1.24.0/x64/src/bytes/buffer.go:211 +0x98
crypto/tls.(*Conn).readFromUntil(0xc0003e4388, {0x1129c00, 0xc0003a0058}, 0x43d1f4?)
/opt/hostedtoolcache/go/1.24.0/x64/src/crypto/tls/conn.go:831 +0xde
crypto/tls.(*Conn).readRecordOrCCS(0xc0003e4388, 0x0)
/opt/hostedtoolcache/go/1.24.0/x64/src/crypto/tls/conn.go:629 +0x3cf
crypto/tls.(*Conn).readRecord(...)
/opt/hostedtoolcache/go/1.24.0/x64/src/crypto/tls/conn.go:591
crypto/tls.(*Conn).Read(0xc0003e4388, {0xc00001a000, 0x1000, 0xf?})
/opt/hostedtoolcache/go/1.24.0/x64/src/crypto/tls/conn.go:1385 +0x145
bufio.(*Reader).Read(0xc000381a40, {0xc0007ce9e0, 0x9, 0x479d72?})
/opt/hostedtoolcache/go/1.24.0/x64/src/bufio/bufio.go:245 +0x197
io.ReadAtLeast({0x1128de0, 0xc000381a40}, {0xc0007ce9e0, 0x9, 0x9}, 0x9)
/opt/hostedtoolcache/go/1.24.0/x64/src/io/io.go:335 +0x91
io.ReadFull(...)
/opt/hostedtoolcache/go/1.24.0/x64/src/io/io.go:354
net/http.http2readFrameHeader({0xc0007ce9e0, 0x9, 0xc000478510?}, {0x1128de0?, 0xc000381a40?})
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/h2_bundle.go:1805 +0x65
net/http.(*http2Framer).ReadFrame(0xc0007ce9a0)
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/h2_bundle.go:2072 +0x7d
net/http.(*http2clientConnReadLoop).run(0xc0003e3fa8)
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/h2_bundle.go:9933 +0xda
net/http.(*http2ClientConn).readLoop(0xc000602c40)
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/h2_bundle.go:9812 +0x79
created by net/http.(*http2Transport).newClientConn in goroutine 196
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/h2_bundle.go:8334 +0xde5
goroutine 118 [chan receive]:
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.3({0x1132878, 0xc000568540})
/home/runner/work/act/act/pkg/common/executor.go:121 +0x219
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1({0x1132878, 0xc000568540})
/home/runner/work/act/act/pkg/runner/runner.go:214 +0xf7d
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.NewPipelineExecutor.Executor.Then.func5({0x1132878, 0xc000568540})
/home/runner/work/act/act/pkg/common/executor.go:174 +0x149
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.Executor.Then.func4({0x1132878, 0xc000568540})
/home/runner/work/act/act/pkg/common/executor.go:162 +0x31
github.com/nektos/act/pkg/runner.newRemoteReusableWorkflowExecutor.newActionCacheReusableWorkflowExecutor.func2({0x1132878, 0xc000568540})
/home/runner/work/act/act/pkg/runner/reusable_workflow.go:78 +0x366
github.com/nektos/act/pkg/runner.(*RunContext).Executor.func1({0x1132878, 0xc000568540})
/home/runner/work/act/act/pkg/runner/run_context.go:728 +0x50
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.1({0x1132878, 0xc0004812c0})
/home/runner/work/act/act/pkg/runner/runner.go:207 +0x191
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.2.1(0xc0003b1ab0, 0xc0003b1b20)
/home/runner/work/act/act/pkg/common/executor.go:108 +0x52
created by github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.2 in goroutine 27
/home/runner/work/act/act/pkg/common/executor.go:106 +0xef
goroutine 3003 [IO wait]:
internal/poll.runtime_pollWait(0x7e0eceea6558, 0x72)
/opt/hostedtoolcache/go/1.24.0/x64/src/runtime/netpoll.go:351 +0x85
internal/poll.(*pollDesc).wait(0xc0001c6180?, 0xc00001f000?, 0x0)
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_poll_runtime.go:84 +0x27
internal/poll.(*pollDesc).waitRead(...)
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0001c6180, {0xc00001f000, 0x1000, 0x1000})
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_unix.go:165 +0x27a
net.(*netFD).Read(0xc0001c6180, {0xc00001f000?, 0x408114?, 0x0?})
/opt/hostedtoolcache/go/1.24.0/x64/src/net/fd_posix.go:55 +0x25
net.(*conn).Read(0xc00030e068, {0xc00001f000?, 0x407f0f?, 0xc000226960?})
/opt/hostedtoolcache/go/1.24.0/x64/src/net/net.go:194 +0x45
net/http.(*persistConn).Read(0xc0003a6b40, {0xc00001f000?, 0x73a445?, 0x11286e0?})
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/transport.go:2122 +0x47
bufio.(*Reader).fill(0xc000792720)
/opt/hostedtoolcache/go/1.24.0/x64/src/bufio/bufio.go:113 +0x103
bufio.(*Reader).Peek(0xc000792720, 0x1)
/opt/hostedtoolcache/go/1.24.0/x64/src/bufio/bufio.go:152 +0x53
net/http.(*persistConn).readLoop(0xc0003a6b40)
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/transport.go:2275 +0x172
created by net/http.(*Transport).dialConn in goroutine 3002
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/transport.go:1944 +0x174f
goroutine 4961 [select]:
net/http.(*persistConn).writeLoop(0xc00082e120)
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/transport.go:2590 +0xe7
created by net/http.(*Transport).dialConn in goroutine 239
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/transport.go:1945 +0x17a5
goroutine 4909 [runnable]:
fmt.(*pp).printArg(0xc0008dc1a0?, {0xdda740?, 0xc000132eb0?}, 0x73?)
/opt/hostedtoolcache/go/1.24.0/x64/src/fmt/print.go:681 +0x5af
fmt.(*pp).doPrintf(0xc0008dc1a0, {0xfb42de, 0x4a}, {0xc000a11900, 0x4, 0x4})
/opt/hostedtoolcache/go/1.24.0/x64/src/fmt/print.go:1074 +0x37e
fmt.Sprintf({0xfb42de, 0x4a}, {0xc000a11900, 0x4, 0x4})
/opt/hostedtoolcache/go/1.24.0/x64/src/fmt/print.go:239 +0x53
github.com/sirupsen/logrus.(*Entry).Logf(0xc000244e70, 0x4, {0xfb42de?, 0x4720e5?}, {0xc000a11900?, 0xddad80?, 0xc0008dc101?})
/home/runner/go/pkg/mod/github.com/sirupsen/logrus@v1.9.3/entry.go:349 +0x45
github.com/sirupsen/logrus.(*Entry).Infof(0x7ffe94c8ddd1?, {0xfb42de?, 0xc0008da420?}, {0xc000a11900?, 0x2?, 0x0?})
/home/runner/go/pkg/mod/github.com/sirupsen/logrus@v1.9.3/entry.go:362 +0x31
github.com/nektos/act/pkg/runner.(*LocalRepositoryCache).GetTarArchive(0xc00038e8c0, {0x1132878, 0xc0005687b0}, {0xc0003303c0, 0x1f}, {0xc000451a66, 0x4}, {0xc000311890, 0x10})
/home/runner/work/act/act/pkg/runner/local_repository_cache.go:48 +0x2c2
github.com/nektos/act/pkg/runner.(*stepActionRemote).pre.(*stepActionRemote).prepareActionExecutor.func1.1.1({0xf7ad97?, 0xc0005687b0?})
/home/runner/work/act/act/pkg/runner/step_action_remote.go:82 +0x11e
github.com/nektos/act/pkg/runner.readActionImpl({0x1132878?, 0xc0005687b0?}, 0xc0003a8960, {0xc000451a66, 0x4}, {0xc000451a60, 0x5}, 0xc0005b2c90, 0x10161a8)
/home/runner/work/act/act/pkg/runner/action.go:54 +0xb4
github.com/nektos/act/pkg/runner.(*stepActionRemote).pre.(*stepActionRemote).prepareActionExecutor.func1({0x1132878, 0xc0005687b0})
/home/runner/work/act/act/pkg/runner/step_action_remote.go:104 +0x6e9
github.com/nektos/act/pkg/runner.(*stepActionRemote).pre.NewPipelineExecutor.Executor.Then.func9({0x1132878, 0xc0005687b0})
/home/runner/work/act/act/pkg/common/executor.go:162 +0x31
github.com/nektos/act/pkg/runner.newJobExecutor.Executor.ThenError.func11({0x1132878, 0xc0005687b0})
/home/runner/work/act/act/pkg/common/executor.go:143 +0x31
github.com/nektos/act/pkg/runner.newJobExecutor.useStepLogger.func12({0x1132878, 0xc0004788d0})
/home/runner/work/act/act/pkg/runner/job_executor.go:217 +0x2ba
github.com/nektos/act/pkg/runner.newJobExecutor.NewPipelineExecutor.Executor.Then.func47({0x1132878, 0xc0004788d0})
/home/runner/work/act/act/pkg/common/executor.go:174 +0x149
github.com/nektos/act/pkg/runner.newJobExecutor.NewPipelineExecutor.Executor.Then.func47({0x1132878, 0xc0004788d0})
/home/runner/work/act/act/pkg/common/executor.go:162 +0x31
github.com/nektos/act/pkg/runner.newJobExecutor.NewPipelineExecutor.Executor.Then.func47({0x1132878, 0xc0004788d0})
/home/runner/work/act/act/pkg/common/executor.go:162 +0x31
github.com/nektos/act/pkg/runner.newJobExecutor.NewPipelineExecutor.Executor.Then.func47({0x1132878, 0xc0004788d0})
/home/runner/work/act/act/pkg/common/executor.go:162 +0x31
github.com/nektos/act/pkg/runner.newJobExecutor.Executor.Finally.func30({0x1132878, 0xc0004788d0})
/home/runner/work/act/act/pkg/common/executor.go:227 +0x2e
github.com/nektos/act/pkg/runner.newJobExecutor.Executor.Finally.func43({0x1132878, 0xc0004788d0})
/home/runner/work/act/act/pkg/common/executor.go:227 +0x2e
github.com/nektos/act/pkg/runner.newJobExecutor.NewPipelineExecutor.Executor.Then.func48({0x1132878, 0xc0004788d0})
/home/runner/work/act/act/pkg/common/executor.go:174 +0x149
github.com/nektos/act/pkg/runner.newJobExecutor.Executor.Finally.func45({0x1132878, 0xc0004788d0})
/home/runner/work/act/act/pkg/common/executor.go:227 +0x2e
github.com/nektos/act/pkg/runner.(*RunContext).Executor.func1({0x1132878, 0xc0004788d0})
/home/runner/work/act/act/pkg/runner/run_context.go:728 +0x50
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.1({0x1132878, 0xc000568540})
/home/runner/work/act/act/pkg/runner/runner.go:207 +0x191
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.2.1(0xc0001f13b0, 0xc0001f1420)
/home/runner/work/act/act/pkg/common/executor.go:108 +0x52
created by github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.2 in goroutine 4884
/home/runner/work/act/act/pkg/common/executor.go:106 +0xef
goroutine 4884 [chan receive]:
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.2({0x1132878, 0xc000568540})
/home/runner/work/act/act/pkg/common/executor.go:121 +0x219
github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.3.1(0xc0001f12d0, 0xc0001f1340)
/home/runner/work/act/act/pkg/common/executor.go:108 +0x52
created by github.com/nektos/act/pkg/runner.(*runnerImpl).NewPlanExecutor.func1.NewParallelExecutor.3 in goroutine 118
/home/runner/work/act/act/pkg/common/executor.go:106 +0xef
goroutine 3004 [select]:
net/http.(*persistConn).writeLoop(0xc0003a6b40)
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/transport.go:2590 +0xe7
created by net/http.(*Transport).dialConn in goroutine 3002
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/transport.go:1945 +0x17a5
goroutine 240 [IO wait]:
internal/poll.runtime_pollWait(0x7e0eceea6440, 0x72)
/opt/hostedtoolcache/go/1.24.0/x64/src/runtime/netpoll.go:351 +0x85
internal/poll.(*pollDesc).wait(0xc0002d8200?, 0xc000143000?, 0x0)
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_poll_runtime.go:84 +0x27
internal/poll.(*pollDesc).waitRead(...)
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0002d8200, {0xc000143000, 0x1000, 0x1000})
/opt/hostedtoolcache/go/1.24.0/x64/src/internal/poll/fd_unix.go:165 +0x27a
net.(*netFD).Read(0xc0002d8200, {0xc000143000?, 0x408114?, 0xc000230cc0?})
/opt/hostedtoolcache/go/1.24.0/x64/src/net/fd_posix.go:55 +0x25
net.(*conn).Read(0xc00013c078, {0xc000143000?, 0x407f0f?, 0xc0002264b0?})
/opt/hostedtoolcache/go/1.24.0/x64/src/net/net.go:194 +0x45
net/http.(*persistConn).Read(0xc00082e120, {0xc000143000?, 0x73a445?, 0x11286e0?})
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/transport.go:2122 +0x47
bufio.(*Reader).fill(0xc0007c0120)
/opt/hostedtoolcache/go/1.24.0/x64/src/bufio/bufio.go:113 +0x103
bufio.(*Reader).Peek(0xc0007c0120, 0x1)
/opt/hostedtoolcache/go/1.24.0/x64/src/bufio/bufio.go:152 +0x53
net/http.(*persistConn).readLoop(0xc00082e120)
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/transport.go:2275 +0x172
created by net/http.(*Transport).dialConn in goroutine 239
/opt/hostedtoolcache/go/1.24.0/x64/src/net/http/transport.go:1944 +0x174f
Bug report info
Command used with act
Describe issue
Our container image build computes matrix values dynamically and then fires off parallel builds to fulfill those matrix-driven variants. The build works just fine most of the time, but once in a blue moon we get some sort of concurrency issue.
Per the log, by the time this happened, two parallel builds were already running.
It's extremely unpredictable and infrequent, but I figured I'd forward the stack information in case you guys want to try to hunt it down.
Cheers!
Link to GitHub repository
No response
Workflow content
Irrelevant - the issue is VERY sporadic and unpredictable.Relevant log output
Additional information
No response