Skip to content

Commit

Permalink
build: "Quick Checks" no longer uses goenv
Browse files Browse the repository at this point in the history
goenv was making things more complicated than needed since it's really
designed to help with interactive use in a shell more than automated use
like this.

Instead, we'll follow the same strategy that our build.yml was doing of
just reading the .go-version file directly and then using the official
actions/setup-go action to do the actual installation. The key advantage
here is that Go ends up installed in a way where just running "go" will
do the right thing, and we no longer need to fuss with shims and
version-based path prefixes.

Rather than duplicating the logic from build.yml, instead it's factored
out into a separate composite action which both build.yml and checks.yml
will now share, in case we want to change the Go version selection
methodology in the future.
  • Loading branch information
apparentlymart committed Apr 4, 2022
1 parent 67fedd4 commit 95f26b3
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 62 deletions.
41 changes: 0 additions & 41 deletions .github/actions/go-setup/action.yml

This file was deleted.

23 changes: 23 additions & 0 deletions .github/actions/go-version/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: 'Determine Go Toolchain Version'
description: 'Uses the .go-version file to determine which Go toolchain to use for any Go-related actions downstream.'
outputs:
version:
description: "Go toolchain version"
value: ${{ steps.go.outputs.version }}
runs:
using: "composite"
steps:
# We use goenv to make sure we're always using the same Go version we'd
# use for releases, as recorded in the .go-version file.
- name: "Determine Go version"
id: go
shell: bash
# We use .go-version as our source of truth for current Go
# version, because "goenv" can react to it automatically.
# However, we don't actually use goenv for our automated
# steps in GitHub Actions, because it's primarily for
# interactive use in shells and makes things unnecessarily
# complex for automation.
run: |
echo "Building with Go $(cat .go-version)"
echo "::set-output name=version::$(cat .go-version)"
8 changes: 2 additions & 6 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,17 +68,13 @@ jobs:
name: "Determine Go toolchain version"
runs-on: ubuntu-latest
outputs:
go-version: ${{ steps.get-go-version.outputs.go-version }}
go-version: ${{ steps.get-go-version.outputs.version }}

steps:
- uses: actions/checkout@v2
- name: Determine Go version
id: get-go-version
# We use .go-version as our source of truth for current Go
# version, because "goenv" can react to it automatically.
run: |
echo "Building with Go $(cat .go-version)"
echo "::set-output name=go-version::$(cat .go-version)"
uses: ./.github/actions/go-version

generate-metadata-file:
name: "Generate release metadata"
Expand Down
34 changes: 19 additions & 15 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,44 +33,43 @@ jobs:
- name: "Fetch source code"
uses: actions/checkout@v2

- name: "Install Go"
- name: Determine Go version
id: go
uses: ./.github/actions/go-setup
uses: ./.github/actions/go-version

- name: Install Go toolchain
uses: actions/setup-go@v2
with:
go-version: ${{ steps.go.outputs.version }}

# NOTE: This cache is shared with the e2e-tests job, so the corresponding
# step in that job must always be identical to this one.
- name: Cache Go modules
uses: actions/cache@v3
with:
path: "${{steps.go.outputs.gopath}}/pkg"
path: "~/go/pkg"
key: go-mod-${{ hashFiles('go.sum') }}
restore-keys: |
go-mod-
- name: "go.mod and go.sum consistency check"
run: |
"${{steps.go.outputs.go}}" mod tidy
go mod tidy
if [[ -n "$(git status --porcelain)" ]]; then
echo "go.mod/go.sum are not up-to-date. Run 'go mod tidy' and then commit the updated files."
exit 1
fi
- name: "Unit tests"
run: |
"${{steps.go.outputs.go}}" test ./...
go test ./...
# We'll also deal with some general consistency/lint/style checks
# here just because they are relatively fast and so not worth running
# concurrently given the cost of _yet again_ installing Go and checking
# out the source code in another worker.
- name: "Code consistency checks"
run: |
# We do need to fully init goenv in this one case because we're
# going to run Go indirectly via make and some shell scripts, so
# we need PATH set up correctly.
export PATH="${{steps.go.outputs.goenv-bin-dir}}":$PATH
eval "$(goenv init -)"
go version
make fmtcheck generate staticcheck exhaustive protobuf
if [[ -n "$(git status --porcelain)" ]]; then
echo "Generated files are inconsistent. Run 'make generate' and 'make protobuf' locally and then commit the updated files."
Expand All @@ -90,20 +89,25 @@ jobs:
- name: "Fetch source code"
uses: actions/checkout@v2

- name: "Install Go"
- name: Determine Go version
id: go
uses: ./.github/actions/go-setup
uses: ./.github/actions/go-version

- name: Install Go toolchain
uses: actions/setup-go@v2
with:
go-version: ${{ steps.go.outputs.version }}

# NOTE: This cache is shared with the e2e-tests job, so the corresponding
# step in that job must always be identical to this one.
- name: Cache Go modules
uses: actions/cache@v3
with:
path: "${{steps.go.outputs.gopath}}/pkg"
path: "~/go/pkg"
key: go-mod-${{ hashFiles('go.sum') }}
restore-keys: |
go-mod-
- name: "End-to-end tests"
run: |
TF_ACC=1 "${{steps.go.outputs.go}}" test -v ./internal/command/e2etest
TF_ACC=1 go test -v ./internal/command/e2etest

0 comments on commit 95f26b3

Please sign in to comment.