Open shaunco opened 1 year ago
Hello @shaunco ! Thank you for reporting the issue, we will investigate it and get back to you as soon as we have more info :)
Thanks @dusan-trickovic ! Not sure if it is related, but we also seem to end up with quite a few duplicate setup-go
action caches that all have the same sha256 and need to be cleared out every few days:
Hello @shaunco, can you please try to disable caching for the action:
- uses: actions/setup-go@v4
with:
go-version: '...'
cache: false
this should solve the problem.
Based on my understanding, go get
downloads source codes with write permissions removed. As a result, extracting (tar -xf
) cache files to GOPATH
may cause errors. It would be helpful for setup-go
to add write permissions to the cache directory before extracting and remove them after the process is complete.
@bc-lee Self-hosted runner preserves the cache and builds results so caching does not have sense for them, we should disable caching for them by default. Currently it can be turned off manually
@dsame Aha, that makes sense. I'm not sure if changing the default based on where the runner is running (i.e., provided by GitHub or self-hosted) is a good idea. I think it would be much better for the user to explicitly specify that option.
Hello @bc-lee my motivation to have the different value of cache
is to have the same omitted cache
input for both github-hosted and self-hosted builds in the other case users have to have to diffrenet workflows
I changed this bug to feature request basing on
cache
input that can eliminate the need of the workaroundHi @dsame
Self-hosted runner preserves the cache and builds results so caching does not have sense for them
This is not always true. We use the ephemeral self-hosted runners so it would be great to have the cache available.
With cache: false
I can see that the dependencies are downloaded always.
@shaunco Any updates on this? After updating to Go version:
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,8 @@
module github.com/company/repo
-go 1.20
+go 1.21.1
+
+toolchain go1.21.6
require (
We start having these warnings in the build:
/usr/bin/tar: ../../../go/pkg/mod/golang.org/toolchain@v0.0.1-go1.21.6.linux-amd64/lib/time/mkzip.go: Cannot open: File exists
/usr/bin/tar: ../../../go/pkg/mod/golang.org/toolchain@v0.0.1-go1.21.6.linux-amd64/lib/time/zoneinfo.zip: Cannot open: File exists
/usr/bin/tar: ../../../go/pkg/mod/golang.org/toolchain@v0.0.1-go1.21.6.linux-amd64/lib/time/README: Cannot open: File exists
...
This issue happens also in github runners, this is not a self-hosted runner issue.
Example build with default cache (true):
Setup go version spec 1.23
Attempting to download 1.23...
matching 1.23...
Acquiring 1.23.0 from https://github.com/actions/go-versions/releases/download/1.23.0-10380775229/go-1.23.0-linux-x64.tar.gz
Extracting Go...
/usr/bin/tar xz --warning=no-unknown-keyword --overwrite -C /home/runner/work/_temp/ede30b59-03da-4f40-b1c7-e50aa2f73636 -f /home/runner/work/_temp/52775e24-4217-4781-b396-3ae24cd725b8
Successfully extracted go to /home/runner/work/_temp/ede30b59-03da-4f40-b1c7-e50aa2f73636
Adding to the cache ...
Successfully cached go to /opt/hostedtoolcache/go/1.23.0/x64
Added go to the path
Successfully set up Go version 1.23
/opt/hostedtoolcache/go/1.23.0/x64/bin/go env GOMODCACHE
/opt/hostedtoolcache/go/1.23.0/x64/bin/go env GOCACHE
/home/runner/go/pkg/mod
/home/runner/.cache/go-build
Cache Size: ~284 MB (29787[11](https://github.com/nirs/kubectl-gather/actions/runs/10480817785/job/29029131984#step:3:12)99 B)
/usr/bin/tar -xf /home/runner/work/_temp/1f736259-d577-4dc2-a865-52339ade7aaf/cache.tzst -P -C /home/runner/work/kubectl-gather/kubectl-gather --use-compress-program unzstd
Received 297871199 of 297871199 (100.0%), 284.1 MBs/sec
/usr/bin/tar: ../../../go/pkg/mod/golang.org/x/telemetry/config@v0.29.0/doc.go: Cannot open: File exists
/usr/bin/tar: ../../../go/pkg/mod/golang.org/x/telemetry/config@v0.29.0/LICENSE: Cannot open: File exists
/usr/bin/tar: ../../../go/pkg/mod/golang.org/x/telemetry/config@v0.29.0/config.json: Cannot open: File exists
/usr/bin/tar: ../../../go/pkg/mod/golang.org/x/telemetry/config@v0.29.0/go.mod: Cannot open: File exists
/usr/bin/tar: Exiting with failure status due to previous errors
Warning: Failed to restore: "/usr/bin/tar" failed with error: The process '/usr/bin/tar' failed with exit code 2
Cache is not found
go version go1.23.0 linux/amd64
Example build with cache: false:
Setup go version spec 1.23
Attempting to download 1.23...
matching 1.23...
Acquiring 1.23.0 from https://github.com/actions/go-versions/releases/download/1.23.0-10380775229/go-1.23.0-linux-x64.tar.gz
Extracting Go...
/usr/bin/tar xz --warning=no-unknown-keyword --overwrite -C /home/runner/work/_temp/8ee9a1ac-37a8-47f9-9ef2-e8ccbddc2d84 -f /home/runner/work/_temp/08068888-1378-4be4-9126-be5b4945adc6
Successfully extracted go to /home/runner/work/_temp/8ee9a1ac-37a8-47f9-9ef2-e8ccbddc2d84
Adding to the cache ...
Successfully cached go to /opt/hostedtoolcache/go/1.23.0/x64
Added go to the path
Successfully set up Go version 1.23
go version go1.23.0 linux/amd64
Note these confusing logs - only when cache is disabled:
Adding to the cache ...
Successfully cached go to /opt/hostedtoolcache/go/1.23.0/x64
Finally using cache: true setup-go took 12 seconds, and with cache: false 7 seconds.
Description: On a self-hosted runner that is already caching tools, the v4 setup-go action attempts to call
tar
to extract its mod cache and ends up with a bunch of "Cannot open: File exists" errors, and eventuallyAction version: v4
Platform:
Runner type:
Tools version: ^1.20
Repro steps:
Expected behavior: Existing files should be ignored via the
-k
or--skip-old-files
option ontar
Actual behavior: Existing files are treated as errors.