diff --git a/.github/workflows/ci-core.yml b/.github/workflows/ci-core.yml index 646d7596646..f4826aa43fb 100644 --- a/.github/workflows/ci-core.yml +++ b/.github/workflows/ci-core.yml @@ -24,77 +24,77 @@ jobs: pull-requests: read outputs: affected-modules: ${{ steps.changed-modules.outputs.modules-json }} - # Runs on workflow changes, any deployment change, or any (non-ignored) core change - should-run-deployment-tests: >- - ${{ - steps.match-some.outputs.workflow == 'true' || - steps.match-some.outputs.deployment == 'true' || - steps.match-every.outputs.core-non-ignored == 'true' || - github.event_name == 'schedule' || - github.event_name == 'workflow_dispatch' - }} - # Runs on workflow changes, and any (non-ignored) core changes - should-run-core-tests: >- - ${{ - steps.match-some.outputs.workflow == 'true' || - steps.match-every.outputs.core-non-ignored == 'true' || - github.event_name == 'schedule' || - github.event_name == 'workflow_dispatch' - }} + core-tests: ${{ steps.triggers.outputs.core-tests }} + core-fuzz-tests: ${{ steps.triggers.outputs.core-fuzz-tests }} + core-race-tests: ${{ steps.triggers.outputs.core-race-tests }} + core-integ-tests: ${{ steps.triggers.outputs.core-integration-tests }} + deployment-tests: ${{ steps.triggers.outputs.deployment-tests }} runs-on: ubuntu-latest steps: - name: Checkout the repo - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: persist-credentials: false repository: smartcontractkit/chainlink - - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 - id: match-some - with: - # "if any changed file matches one or more of the conditions" (https://github.com/dorny/paths-filter/issues/225) - predicate-quantifier: some - # deployment - any changes in the deployment module - # workflow - any changes that could affect this workflow definition - # - Assume any repository action changes affect this workflow - filters: | - deployment: - - 'deployment/**' - workflow: - - '.github/workflows/ci-core.yml' - - '.github/actions/**' - - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 - id: match-every + + - name: Advanced Triggers + id: triggers + uses: smartcontractkit/.github/actions/advanced-triggers@advanced-triggers/v1 with: - # "if any changed file match all of the conditions" (https://github.com/dorny/paths-filter/issues/225) - # - Enables listing of files matching each filter. - # - Paths to files will be available in `${FILTER_NAME}_files` output variable. - # - Paths will be formatted as JSON array - predicate-quantifier: every - # core-non-ignored - all changes except for paths which do not affect core module - # - This is opt-in on purpose. To be safe, new files are assumed to have an affect on core unless listed here specifically. - # - For example: core module does not depend on deployment or integration-tests module. - # all - changes in any directory - # - This is used resolve all affected modules based on changed files - list-files: json - filters: | - core-non-ignored: - - '**' - - '!deployment/**' - - '!integration-tests/**' - - '!tools/secrets/**' - - '!tools/docker/**' - - '!tools/benchmark/**' - - '!**/README.md' - - '!**/CHANGELOG.md' - - '!*.nix' - - '!sonar-project.properties' - - '!nix.conf' - - '!nix-darwin-shell-hook.sh' - - '!LICENSE' - - '!.github/**' - - '!core/scripts/cre/environment/examples/workflows/**' - all: - - '**' + file-sets: | + go-files: + - "**/*.go" + - "**/go.mod" + - "**/go.sum" + core-files: + - "core/**" + all-test-files: + - "**/testdata/**" + - "**/*_test.go" + core-test-files: + - "testdata/**" + - "core/**/testdata/**" + - "core/**/*_test.go" + e2e-tests-files: + - "system-tests/**" + - "integration-tests/**" + workflow-files: + - ".github/workflows/ci-core.yml" + - ".github/actions/**/*.y*ml" + deployment-files: + - "deployment/**" + # Note: + # - pull_request, merge_group, and push events will resolve to true if any changed files match the path/glob patterns + # - exclusion-sets/negations are applied first, and therefore filter all changed files before inclusion sets are applied + # - by default these will resolve to true for schedule, and workflow_dispatch events + triggers: | + core-tests: + exclusion-sets: [ e2e-tests-files, deployment-files ] + inclusion-sets: [ go-files, core-files, all-test-files, workflow-files ] + paths: + - "tools/bin/go_core_tests" + core-fuzz-tests: + exclusion-sets: [ e2e-tests-files, deployment-files ] + inclusion-sets: [ go-files, core-files, all-test-files, workflow-files ] + paths: + - "!**/testdata/**" + - "**/fuzz/**" + - "tools/bin/go_core_fuzz" + core-race-tests: + exclusion-sets: [ e2e-tests-files, deployment-files ] + inclusion-sets: [ go-files, core-files, all-test-files, workflow-files ] + paths: + - "tools/bin/go_core_race_tests" + core-integration-tests: + exclusion-sets: [ e2e-tests-files, deployment-files ] + inclusion-sets: [ go-files, core-files, all-test-files, workflow-files ] + paths: + - "tools/bin/go_core_tests_integration" + deployment-tests: + exclusion-sets: [ e2e-tests-files, core-test-files ] + inclusion-sets: [ go-files, core-files, deployment-files, workflow-files ] + paths: + - "tools/bin/go_core_ccip_deployment_tests" - name: Changed modules id: changed-modules @@ -207,27 +207,27 @@ jobs: type: - cmd: go_core_tests os: runs-on=${{ github.run_id }}-unit/cpu=48/ram=96/family=c6i/spot=false/image=ubuntu24-full-x64/extras=s3-cache+tmpfs - should-run: ${{ needs.filter.outputs.should-run-core-tests }} + should-run: ${{ needs.filter.outputs.core-tests }} trunk-auto-quarantine: "true" - cmd: go_core_tests_integration os: runs-on=${{ github.run_id }}-integ/cpu=48/ram=96/family=c6i/spot=false/image=ubuntu24-full-x64/extras=s3-cache+tmpfs - should-run: ${{ needs.filter.outputs.should-run-core-tests }} + should-run: ${{ needs.filter.outputs.core-integ-tests }} trunk-auto-quarantine: "true" setup-solana: "true" install-loopps: "true" - cmd: go_core_fuzz os: runs-on=${{ github.run_id}}-fuzz/cpu=8/ram=32/family=m6id+m6idn/spot=false/image=ubuntu24-full-x64/extras=s3-cache - should-run: ${{ needs.filter.outputs.should-run-core-tests }} + should-run: ${{ needs.filter.outputs.core-fuzz-tests }} - cmd: go_core_race_tests os: runs-on=${{ github.run_id}}-race/cpu=64/ram=128/family=c7i/volume=80gb/spot=false/image=ubuntu24-full-x64/extras=s3-cache - should-run: ${{ needs.filter.outputs.should-run-core-tests }} + should-run: ${{ needs.filter.outputs.core-race-tests }} - cmd: go_core_ccip_deployment_tests os: runs-on=${{ github.run_id }}-deployment/cpu=64/ram=128/family=c6i+c7i/spot=false/image=ubuntu24-full-x64/extras=s3-cache+tmpfs - should-run: ${{ needs.filter.outputs.should-run-deployment-tests }} + should-run: ${{ needs.filter.outputs.deployment-tests }} trunk-auto-quarantine: "true" go-mod-directory: "deployment/" setup-solana: "true" @@ -408,7 +408,7 @@ jobs: name: test-scripts needs: [filter] runs-on: ubuntu-latest - if: ${{ needs.filter.outputs.should-run-core-tests == 'true' }} + if: ${{ needs.filter.outputs.core-tests == 'true' }} steps: - name: Checkout uses: actions/checkout@v4