Fix the `Set up go` and `Restore Go modules cache` steps both trying to
read/write the same contents. Since the `setup-go` step runs first this
results in the "restore cache" step trying to write the same contents
under `~/go/pkg/mod` which results in errors like (e.g. random
example[1]):
/usr/bin/tar -xf /home/runner/work/_temp/6d12957f-f226-455e-b99c-fa7ee8c962cb/cache.tzst -P -C /home/runner/work/cli/cli --use-compress-program unzstd
/usr/bin/tar: ../../../go/pkg/mod/golang.org/x/net@v0.21.0/go.sum: Cannot open: File exists
Error: /usr/bin/tar: ../../../go/pkg/mod/golang.org/x/net@v0.21.0/proxy/proxy.go: Cannot open: File exists
Error: /usr/bin/tar: ../../../go/pkg/mod/golang.org/x/net@v0.21.0/proxy/socks5.go: Cannot open: File exists
Error: /usr/bin/tar: ../../../go/pkg/mod/golang.org/x/net@v0.21.0/proxy/dial_test.go: Cannot open: File exists
Since restoring fails, the cache job thinks no cache hit was made and
proceeds to try and save, but since it may well have fetched a valid
cache this can also error (again, see[1]):
Post job cleanup.
/usr/bin/tar --posix -cf cache.tzst --exclude cache.tzst -P -C /home/runner/work/cli/cli --files-from manifest.txt --use-compress-program zstdmt
Failed to save: Unable to reserve cache with key go-Linux-1b4ae53bfd76c3b70f62d419e17f36544d0a1331f04b13d2a942e7752e3789c3, another job may be creating this cache. More details: Cache already exists. Scope: refs/heads/trunk, Key: go-Linux-1b4ae53bfd76c3b70f62d419e17f36544d0a1331f04b13d2a942e7752e3789c3, Version: 2a8d0f2be1a88abb057cd9fcea9832bd16e7ab71798dbf93cd890eb9add83cf6
To avoid this, just rely on the caching functionality of the `seutp-go`
action.
For some context, It appears this cache behaviour was added with
cb7315c85d when these workflows were still
run with `setup-go@v2`:
$ git show cb7315c85d3c0e010ba117ca7e692ed6f18f16c5:{.github/workflows/go.yml,.github/workflows/lint.yml} | grep 'actions/setup-go'
uses: actions/setup-go@v2
uses: actions/setup-go@v2
which is before caching behaviour was added (with `v3.2.0`[2]).
[1] https://github.com/cli/cli/actions/runs/8654869114/job/23732868571
[2] https://github.com/actions/setup-go/releases/tag/v3.2.0
58 lines
1.4 KiB
YAML
58 lines
1.4 KiB
YAML
name: Lint
|
|
on:
|
|
push:
|
|
paths:
|
|
- "**.go"
|
|
- go.mod
|
|
- go.sum
|
|
pull_request:
|
|
paths:
|
|
- "**.go"
|
|
- go.mod
|
|
- go.sum
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
lint:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version-file: 'go.mod'
|
|
|
|
- name: Verify dependencies
|
|
run: |
|
|
go mod verify
|
|
go mod download
|
|
|
|
LINT_VERSION=1.54.1
|
|
curl -fsSL https://github.com/golangci/golangci-lint/releases/download/v${LINT_VERSION}/golangci-lint-${LINT_VERSION}-linux-amd64.tar.gz | \
|
|
tar xz --strip-components 1 --wildcards \*/golangci-lint
|
|
mkdir -p bin && mv golangci-lint bin/
|
|
|
|
- name: Run checks
|
|
run: |
|
|
STATUS=0
|
|
assert-nothing-changed() {
|
|
local diff
|
|
"$@" >/dev/null || return 1
|
|
if ! diff="$(git diff -U1 --color --exit-code)"; then
|
|
printf '\e[31mError: running `\e[1m%s\e[22m` results in modifications that you must check into version control:\e[0m\n%s\n\n' "$*" "$diff" >&2
|
|
git checkout -- .
|
|
STATUS=1
|
|
fi
|
|
}
|
|
|
|
assert-nothing-changed go fmt ./...
|
|
assert-nothing-changed go mod tidy
|
|
|
|
bin/golangci-lint run --out-format=github-actions --timeout=3m || STATUS=$?
|
|
|
|
exit $STATUS
|