mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
build: "Quick Checks" avoid repeating Install Go
This factors out the "Install Go" step into a separate composite action which we can then call from both of the jobs that need it. We can't factor out the "Cache Go Modules" because GitHub doesn't allow composite actions to refer to other external actions.
This commit is contained in:
parent
9210ce6cdd
commit
67fedd48a6
41
.github/actions/go-setup/action.yml
vendored
Normal file
41
.github/actions/go-setup/action.yml
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
name: 'Set Up Go Toolchain'
|
||||
description: 'Installs the Go toolchain specified in .go-version.'
|
||||
outputs:
|
||||
go-version:
|
||||
description: "Go toolchain version"
|
||||
value: ${{ steps.go.outputs.go-version }}
|
||||
gopath:
|
||||
description: "GOPATH location"
|
||||
value: ${{ steps.go.outputs.gopath }}
|
||||
goenv:
|
||||
description: "Path to the 'goenv' executable"
|
||||
value: ${{ steps.go.outputs.goenv }}
|
||||
goenv-bin-dir:
|
||||
description: "Path to the directory containing the 'goenv' executable"
|
||||
value: ${{ steps.go.outputs.goenv-bin-dir }}
|
||||
go:
|
||||
description: "Path to the 'go' executable"
|
||||
value: ${{ steps.go.outputs.go }}
|
||||
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: "Install Go"
|
||||
id: go
|
||||
shell: bash
|
||||
run: |
|
||||
git clone https://github.com/syndbg/goenv.git ~/.goenv
|
||||
# "install" makes sure we have the .go-version-selected toolchain
|
||||
# available in goenv's repository of toolchains.
|
||||
# (this creates ~/.goenv/versions/VERSION/... to serve as GOROOT)
|
||||
~/.goenv/bin/goenv install
|
||||
# "rehash" generates the wrapper scripts that goenv uses to
|
||||
# select the correct executables for the selected toolchain.
|
||||
# (this is what creates the ~/.goenv/shims/go we refer to below)
|
||||
~/.goenv/bin/goenv rehash
|
||||
echo "::set-output name=go-version::$(~/.goenv/bin/goenv version-name)"
|
||||
echo "::set-output name=gopath::$HOME/go/$(~/.goenv/bin/goenv version-name)"
|
||||
echo "::set-output name=goenv::$HOME/.goenv/bin/goenv"
|
||||
echo "::set-output name=goenv-bin-dir::$HOME/.goenv/bin"
|
||||
echo "::set-output name=go::$HOME/.goenv/shims/go"
|
38
.github/workflows/checks.yml
vendored
38
.github/workflows/checks.yml
vendored
@ -33,30 +33,23 @@ jobs:
|
||||
- name: "Fetch source code"
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# For our Go tests in particular 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: "Install Go"
|
||||
id: go
|
||||
run: |
|
||||
git clone https://github.com/syndbg/goenv.git ~/.goenv
|
||||
~/.goenv/bin/goenv install
|
||||
~/.goenv/bin/goenv rehash
|
||||
echo "::set-output name=go-version::$(~/.goenv/bin/goenv version-name)"
|
||||
uses: ./.github/actions/go-setup
|
||||
|
||||
# Note: this cache is shared with the "e2e-tests" job, so must always
|
||||
# have identical configuration its corresponding step.
|
||||
# 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: "~/go/${{steps.go.outputs.go-version}}/pkg"
|
||||
path: "${{steps.go.outputs.gopath}}/pkg"
|
||||
key: go-mod-${{ hashFiles('go.sum') }}
|
||||
restore-keys: |
|
||||
go-mod-
|
||||
|
||||
- name: "go.mod and go.sum consistency check"
|
||||
run: |
|
||||
~/.goenv/shims/go mod tidy
|
||||
"${{steps.go.outputs.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
|
||||
@ -64,7 +57,7 @@ jobs:
|
||||
|
||||
- name: "Unit tests"
|
||||
run: |
|
||||
~/.goenv/shims/go test ./...
|
||||
"${{steps.go.outputs.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
|
||||
@ -75,7 +68,7 @@ jobs:
|
||||
# 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=~/.goenv/bin:$PATH
|
||||
export PATH="${{steps.go.outputs.goenv-bin-dir}}":$PATH
|
||||
eval "$(goenv init -)"
|
||||
go version
|
||||
make fmtcheck generate staticcheck exhaustive protobuf
|
||||
@ -97,27 +90,20 @@ jobs:
|
||||
- name: "Fetch source code"
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# For our Go tests in particular 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: "Install Go"
|
||||
id: go
|
||||
run: |
|
||||
git clone https://github.com/syndbg/goenv.git ~/.goenv
|
||||
~/.goenv/bin/goenv install
|
||||
~/.goenv/bin/goenv rehash
|
||||
echo "::set-output name=go-version::$(~/.goenv/bin/goenv version-name)"
|
||||
uses: ./.github/actions/go-setup
|
||||
|
||||
# Note: this cache is shared with the "unit-tests" job, so must always
|
||||
# have identical configuration its corresponding step.
|
||||
# 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: "~/go/${{steps.go.outputs.go-version}}/pkg"
|
||||
path: "${{steps.go.outputs.gopath}}/pkg"
|
||||
key: go-mod-${{ hashFiles('go.sum') }}
|
||||
restore-keys: |
|
||||
go-mod-
|
||||
|
||||
- name: "End-to-end tests"
|
||||
run: |
|
||||
TF_ACC=1 ~/.goenv/shims/go test -v ./internal/command/e2etest
|
||||
TF_ACC=1 "${{steps.go.outputs.go}}" test -v ./internal/command/e2etest
|
||||
|
Loading…
Reference in New Issue
Block a user