From f9b758896390667b9c9f418067b08672cf392013 Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Fri, 30 Sep 2022 09:34:55 -0700 Subject: [PATCH] refactor(ci): conditionally run jobs based on file changes (#4242) * refactor(ci): only run ts jobs on ts changes This modifies the `style-lint-typescript` and `test-js` jobs to only run when there are changes in `site`. * refactor(ci): only run lint-shellcheck on sh changes * refactor(ci): only run go jobs on go changes * refactor(ci): only run style-fmt when needed This adds a new item to `changes` for `**.tf` changes. Now it will only run `style-fmt` if PR includes changes to `site/**`, `**.tf`, or `**.ts`. * refactor(ci): run e2e on go, ts or tf changes * refactor(ci): run gen on gen changes * refactor(ci): delete old comments * fixup: try moving if step inside test-go job * fixup: try if all steps * fixup!: refactor(ci): run gen on gen changes * Revert "refactor(ci): run gen on gen changes" This reverts commit d0a5ba1c4b4e5ec793abb98d9ab503b61d25cac2. --- .github/workflows/coder.yaml | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/.github/workflows/coder.yaml b/.github/workflows/coder.yaml index f0ba64972a..9c4fdb1995 100644 --- a/.github/workflows/coder.yaml +++ b/.github/workflows/coder.yaml @@ -64,10 +64,12 @@ jobs: - '**' docs: - 'docs/**' - # For testing: - # - '.github/**' sh: - "**.sh" + go: + - "**.go" + tf: + - "**.tf" ts: - 'site/**' k8s: @@ -92,6 +94,8 @@ jobs: name: style/lint/golangci timeout-minutes: 5 runs-on: ubuntu-latest + needs: changes + if: needs.changes.outputs.go == 'true' steps: - uses: actions/checkout@v3 - uses: actions/setup-go@v3 @@ -115,6 +119,8 @@ jobs: name: style/lint/shellcheck timeout-minutes: 5 runs-on: ubuntu-latest + needs: changes + if: needs.changes.outputs.sh == 'true' steps: - uses: actions/checkout@v3 - name: Run ShellCheck @@ -128,6 +134,8 @@ jobs: name: "style/lint/typescript" timeout-minutes: 5 runs-on: ubuntu-latest + needs: changes + if: needs.changes.outputs.ts == 'true' steps: - name: Checkout uses: actions/checkout@v3 @@ -247,6 +255,8 @@ jobs: name: "style/fmt" runs-on: ubuntu-latest timeout-minutes: 5 + needs: changes + if: needs.changes.outputs.sh == 'true' || needs.changes.outputs.ts == 'true' || needs.changes.outputs.tf == 'true' steps: - name: Checkout uses: actions/checkout@v3 @@ -280,6 +290,7 @@ jobs: name: "test/go" runs-on: ${{ matrix.os }} timeout-minutes: 20 + needs: changes strategy: matrix: os: @@ -288,30 +299,36 @@ jobs: - windows-2022 steps: - uses: actions/checkout@v3 + if: needs.changes.outputs.go == 'true' - uses: actions/setup-go@v3 + if: needs.changes.outputs.go == 'true' with: go-version: "~1.19" - name: Echo Go Cache Paths + if: needs.changes.outputs.go == 'true' id: go-cache-paths run: | echo "::set-output name=go-build::$(go env GOCACHE)" echo "::set-output name=go-mod::$(go env GOMODCACHE)" - name: Go Build Cache + if: needs.changes.outputs.go == 'true' uses: actions/cache@v3 with: path: ${{ steps.go-cache-paths.outputs.go-build }} key: ${{ runner.os }}-go-build-${{ hashFiles('**/go.**', '**.go') }} - name: Go Mod Cache + if: needs.changes.outputs.go == 'true' uses: actions/cache@v3 with: path: ${{ steps.go-cache-paths.outputs.go-mod }} key: ${{ runner.os }}-go-mod-${{ hashFiles('**/go.sum') }} - name: Install gotestsum + if: needs.changes.outputs.go == 'true' uses: jaxxstorm/action-install-gh-release@v1.7.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -320,11 +337,13 @@ jobs: tag: v1.7.0 - uses: hashicorp/setup-terraform@v2 + if: needs.changes.outputs.go == 'true' with: terraform_version: 1.1.9 terraform_wrapper: false - name: Test with Mock Database + if: needs.changes.outputs.go == 'true' id: test shell: bash run: | @@ -350,7 +369,7 @@ jobs: # that is no guarantee, see: # https://github.com/codecov/codecov-action/issues/788 continue-on-error: true - if: steps.test.outputs.cover && github.actor != 'dependabot[bot]' && !github.event.pull_request.head.repo.fork + if: steps.test.outputs.cover && github.actor != 'dependabot[bot]' && !github.event.pull_request.head.repo.fork && needs.changes.outputs.go == 'true' with: token: ${{ secrets.CODECOV_TOKEN }} files: ./gotests.coverage @@ -364,6 +383,8 @@ jobs: # goroutines. Setting this to the timeout +5m should work quite well # even if some of the preceding steps are slow. timeout-minutes: 25 + needs: changes + if: needs.changes.outputs.go == 'true' steps: - uses: actions/checkout@v3 @@ -518,6 +539,8 @@ jobs: name: "test/js" runs-on: ubuntu-latest timeout-minutes: 20 + needs: changes + if: needs.changes.outputs.ts == 'true' steps: - uses: actions/checkout@v3 @@ -556,9 +579,8 @@ jobs: test-e2e: name: "test/e2e/${{ matrix.os }}" - needs: - - changes - if: needs.changes.outputs.docs-only == 'false' + needs: changes + if: needs.changes.outputs.go == 'true' || needs.changes.outputs.ts == 'true' || needs.changes.outputs.tf == 'true' runs-on: ${{ matrix.os }} timeout-minutes: 20 strategy: