| # This workflow is a collection of "quick checks" that should be reasonable |
| # to run for any new commit to this repository in principle. |
| # |
| # The main purpose of this workflow is to represent checks that we want to |
| # run prior to reviewing and merging a pull request. We should therefore aim |
| # for these checks to complete in no more than a few minutes in the common |
| # case. |
| # |
| # The build.yml workflow includes some additional checks we run only for |
| # already-merged changes to release branches and tags, as a compromise to |
| # keep the PR feedback relatively fast. The intent is that checks.yml should |
| # catch most problems but that build.yml might occasionally by the one to catch |
| # more esoteric situations, such as architecture-specific or OS-specific |
| # misbehavior. |
| |
| name: Quick Checks |
| |
| on: |
| pull_request: |
| push: |
| branches: |
| - main |
| - 'v[0-9]+.[0-9]+' |
| - checks-workflow-dev/* |
| tags: |
| - 'v[0-9]+.[0-9]+.[0-9]+*' |
| |
| # This workflow runs for not-yet-reviewed external contributions and so it |
| # intentionally has no write access and only limited read access to the |
| # repository. |
| permissions: |
| contents: read |
| |
| jobs: |
| unit-tests: |
| name: "Unit Tests" |
| runs-on: ubuntu-latest |
| |
| steps: |
| - name: "Fetch source code" |
| uses: actions/checkout@v2 |
| |
| - name: Determine Go version |
| id: go |
| 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 so the following step must always be |
| # identical across the unit-tests, e2e-tests, and consistency-checks |
| # jobs, or else weird things could happen. |
| - name: Cache Go modules |
| uses: actions/cache@v3 |
| with: |
| path: "~/go/pkg" |
| key: go-mod-${{ hashFiles('go.sum') }} |
| restore-keys: | |
| go-mod- |
| |
| - name: "Unit tests" |
| run: | |
| go test ./... |
| |
| race-tests: |
| name: "Race Tests" |
| runs-on: ubuntu-latest |
| |
| steps: |
| - name: "Fetch source code" |
| uses: actions/checkout@v2 |
| |
| - name: Determine Go version |
| id: go |
| 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 so the following step must always be |
| # identical across the unit-tests, e2e-tests, and consistency-checks |
| # jobs, or else weird things could happen. |
| - name: Cache Go modules |
| uses: actions/cache@v3 |
| with: |
| path: "~/go/pkg" |
| key: go-mod-${{ hashFiles('go.sum') }} |
| restore-keys: | |
| go-mod- |
| |
| # The race detector add significant time to the unit tests, so only run |
| # it for select packages. |
| - name: "Race detector" |
| run: | |
| go test -race ./internal/terraform ./internal/command ./internal/states |
| |
| e2e-tests: |
| # This is an intentionally-limited form of our E2E test run which only |
| # covers Terraform running on Linux. The build.yml workflow runs these |
| # tests across various other platforms in order to catch the rare exception |
| # that might leak through this. |
| name: "End-to-end Tests" |
| runs-on: ubuntu-latest |
| |
| steps: |
| - name: "Fetch source code" |
| uses: actions/checkout@v2 |
| |
| - name: Determine Go version |
| id: go |
| 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 so the following step must always be |
| # identical across the unit-tests, e2e-tests, and consistency-checks |
| # jobs, or else weird things could happen. |
| - name: Cache Go modules |
| uses: actions/cache@v3 |
| with: |
| path: "~/go/pkg" |
| key: go-mod-${{ hashFiles('go.sum') }} |
| restore-keys: | |
| go-mod- |
| |
| - name: "End-to-end tests" |
| run: | |
| TF_ACC=1 go test -v ./internal/command/e2etest |
| |
| consistency-checks: |
| name: "Code Consistency Checks" |
| runs-on: ubuntu-latest |
| |
| steps: |
| - name: "Fetch source code" |
| uses: actions/checkout@v2 |
| with: |
| fetch-depth: 0 # We need to do comparisons against the main branch. |
| |
| - name: Determine Go version |
| id: go |
| 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 so the following step must always be |
| # identical across the unit-tests, e2e-tests, and consistency-checks |
| # jobs, or else weird things could happen. |
| - name: Cache Go modules |
| uses: actions/cache@v3 |
| with: |
| path: "~/go/pkg" |
| key: go-mod-${{ hashFiles('go.sum') }} |
| restore-keys: | |
| go-mod- |
| |
| - name: "go.mod and go.sum consistency check" |
| run: | |
| go mod tidy |
| if [[ -n "$(git status --porcelain)" ]]; then |
| echo >&2 "ERROR: go.mod/go.sum are not up-to-date. Run 'go mod tidy' and then commit the updated files." |
| exit 1 |
| fi |
| |
| - name: Cache protobuf tools |
| uses: actions/cache@v3 |
| with: |
| path: "tools/protobuf-compile/.workdir" |
| key: protobuf-tools-${{ hashFiles('tools/protobuf-compile/protobuf-compile.go') }} |
| restore-keys: | |
| protobuf-tools- |
| |
| - name: "Code consistency checks" |
| run: | |
| make fmtcheck importscheck generate staticcheck exhaustive protobuf |
| if [[ -n "$(git status --porcelain)" ]]; then |
| echo >&2 "ERROR: Generated files are inconsistent. Run 'make generate' and 'make protobuf' locally and then commit the updated files." |
| git >&2 status --porcelain |
| exit 1 |
| fi |