diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 09758223..3bc0fb60 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -29,7 +29,38 @@ permissions: id-token: "write" jobs: + check_changes: + name: "Deduce required tests from code changes" + runs-on: "ubuntu-latest" + outputs: + devfiles: "${{ steps.changes.outputs.devfiles }}" + steps: + - name: "Checkout" + if: "${{ !github.event.pull_request }}" + uses: "actions/checkout@v4" + with: + persist-credentials: "true" + fetch-depth: "0" + - name: "Check code changes" + uses: "dorny/paths-filter@v3" + id: "changes" + with: + # For "push" events, compare against the "ref" base branch. + # For "pull_request" events, this is ignored and will compare against + # the pull request base branch. + base: "${{ github.ref }}" + predicate-quantifier: 'every' + filters: | + devfiles: + - '!(README.md)' + - '!(LICENSE)' + - '!(design-docs/**)' + - '!(.gitignore)' + - '!(.github/!(workflows/devv.yml))' + build: + needs: [ check_changes ] + if: "${{ needs.check_changes.outputs.devfiles == 'true' }}" strategy: fail-fast: false matrix: @@ -139,10 +170,10 @@ jobs: summary: name: "summary" - if: ${{ always() }} runs-on: "ubuntu-latest" needs: - build + if: ${{ always() && needs.build.result != 'skipped' }} steps: - name: "Flag any build matrix failures" if: ${{ needs.build.result != 'success' }} diff --git a/.github/workflows/sterile.yml b/.github/workflows/sterile.yml index b0dd1b12..dd4ee2f0 100644 --- a/.github/workflows/sterile.yml +++ b/.github/workflows/sterile.yml @@ -18,7 +18,38 @@ concurrency: cancel-in-progress: true jobs: + check_changes: + name: "Deduce required tests from code changes" + runs-on: "ubuntu-latest" + outputs: + devfiles: "${{ steps.changes.outputs.devfiles }}" + steps: + - name: "Checkout" + if: "${{ !github.event.pull_request }}" + uses: "actions/checkout@v4" + with: + persist-credentials: "true" + fetch-depth: "0" + - name: "Check code changes" + uses: "dorny/paths-filter@v3" + id: "changes" + with: + # For "push" events, compare against the "ref" base branch. + # For "pull_request" events, this is ignored and will compare against + # the pull request base branch. + base: "${{ github.ref }}" + predicate-quantifier: 'every' + filters: | + devfiles: + - '!(README.md)' + - '!(LICENSE)' + - '!(design-docs/**)' + - '!(.gitignore)' + - '!(.github/!(workflows/sterile.yml))' + test: + needs: [ check_changes ] + if: "${{ needs.check_changes.outputs.devfiles == 'true' }}" permissions: contents: "read" packages: "read" @@ -137,6 +168,8 @@ jobs: limit-access-to-actor: true push: + needs: [ check_changes ] + if: "${{ needs.check_changes.outputs.devfiles == 'true' }}" permissions: contents: "read" packages: "write" @@ -199,11 +232,11 @@ jobs: summary: name: "summary" - if: ${{ always() }} runs-on: "ubuntu-latest" needs: - test - push + if: ${{ always() && needs.test.result != 'skipped' && needs.push.result != 'skipped' }} steps: - name: "Flag any test failures" if: ${{ needs.test.result != 'success' }}