Thanks to visit codestin.com
Credit goes to github.com

Skip to content

refactor(ci): conditionally run jobs based on file changes #4242

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Sep 30, 2022
34 changes: 28 additions & 6 deletions .github/workflows/coder.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,12 @@ jobs:
- '**'
docs:
- 'docs/**'
# For testing:
# - '.github/**'
sh:
- "**.sh"
go:
- "**.go"
tf:
- "**.tf"
ts:
- 'site/**'
k8s:
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -280,6 +290,7 @@ jobs:
name: "test/go"
runs-on: ${{ matrix.os }}
timeout-minutes: 20
needs: changes
strategy:
matrix:
os:
Expand All @@ -288,30 +299,36 @@ jobs:
- windows-2022
steps:
- uses: actions/checkout@v3
if: needs.changes.outputs.go == 'true'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sadly, because this job is required, we can't use this if at the top or the PR status will never show Success. Alternative approach linked in PR discussion which involves creating a generic workflow with same name and running it for the opposition condition (i.e. no Go changes). I like this approach better but could be swayed the other way.


- 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/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -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: |
Expand All @@ -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
Expand All @@ -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

Expand Down Expand Up @@ -517,6 +538,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

Expand Down Expand Up @@ -555,9 +578,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:
Expand Down