Integration Tests #70475
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Integration Tests | |
run-name: Integration Tests ${{ inputs.distinct_run_name && inputs.distinct_run_name || '' }} | |
on: | |
merge_group: | |
pull_request: | |
push: | |
tags: | |
- "*" | |
workflow_dispatch: | |
inputs: | |
cl_ref: | |
description: 'The ref to checkout, defaults to the calling branch' | |
required: false | |
type: string | |
evm-ref: | |
description: 'The sha of the chainlink-evm commit to use if wanted' | |
required: false | |
type: string | |
distinct_run_name: | |
description: 'A unique identifier for this run, only use from other repos' | |
required: false | |
type: string | |
# Only run 1 of this workflow at a time per PR | |
concurrency: | |
group: ${{ github.ref }}-${{ github.repository }}-${{ github.event_name }}--integration-tests-${{ inputs.distinct_run_name }} | |
cancel-in-progress: true | |
env: | |
# for run-test variables and environment | |
ENV_JOB_IMAGE: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/chainlink-tests:${{ inputs.evm-ref || github.sha }} | |
CHAINLINK_IMAGE: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/chainlink | |
TEST_SUITE: smoke | |
TEST_ARGS: -test.timeout 12m | |
INTERNAL_DOCKER_REPO: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com | |
MOD_CACHE_VERSION: 2 | |
COLLECTION_ID: chainlink-integration-tests | |
jobs: | |
enforce-ctf-version: | |
name: Enforce CTF Version | |
runs-on: ubuntu-latest | |
# We don't directly merge dependabot PRs, so let's not waste the resources | |
if: github.actor != 'dependabot[bot]' | |
steps: | |
- run: echo "${{github.event_name}}" | |
- name: Checkout the repo | |
uses: actions/checkout@v4.2.1 | |
with: | |
repository: smartcontractkit/chainlink | |
ref: ${{ inputs.cl_ref }} | |
- name: Check Merge Group Condition | |
id: condition-check | |
run: | | |
echo "Checking event condition..." | |
SHOULD_ENFORCE="false" | |
if [[ "$GITHUB_EVENT_NAME" == "merge_group" ]]; then | |
echo "We are in a merge_group event, now check if we are on the develop branch" | |
target_branch=$(cat $GITHUB_EVENT_PATH | jq -r .merge_group.base_ref) | |
if [[ "$target_branch" == "refs/heads/develop" ]]; then | |
echo "We are on the develop branch, we should enforce ctf version" | |
SHOULD_ENFORCE="true" | |
fi | |
fi | |
echo "should we enforce ctf version = $SHOULD_ENFORCE" | |
echo "should-enforce=$SHOULD_ENFORCE" >> $GITHUB_OUTPUT | |
- name: Enforce CTF Version | |
if: steps.condition-check.outputs.should-enforce == 'true' | |
uses: smartcontractkit/.github/actions/ctf-check-mod-version@21b0189c5fdca0318617d259634b1a91e6d80262 # ctf-check-mod-version@0.0.0 | |
with: | |
go-project-path: ./integration-tests | |
module-name: github.com/smartcontractkit/chainlink-testing-framework/lib | |
enforce-semantic-tag: "true" | |
changes: | |
environment: integration | |
name: Check Paths That Require Tests To Run | |
runs-on: ubuntu-latest | |
# We don't directly merge dependabot PRs, so let's not waste the resources | |
if: github.actor != 'dependabot[bot]' | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@v4.2.1 | |
with: | |
repository: smartcontractkit/chainlink | |
ref: ${{ inputs.cl_ref }} | |
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
id: changes | |
with: | |
filters: | | |
github_ci_changes: | |
- '.github/workflows/integration-tests.yml' | |
- '.github/integration-tests.yml' | |
core_changes: | |
- '**/*.go' | |
- '**/*go.sum' | |
- '**/*go.mod' | |
- '**/*Dockerfile' | |
- 'core/**/migrations/*.sql' | |
- 'core/**/config/**/*.toml' | |
- 'integration-tests/**/*.toml' | |
ccip_changes: | |
- '**/*ccip*' | |
- '**/*ccip*/**' | |
- name: Ignore Filter On Workflow Dispatch | |
if: ${{ github.event_name == 'workflow_dispatch' }} | |
id: ignore-filter | |
run: echo "changes=true" >> $GITHUB_OUTPUT | |
outputs: | |
github_ci_changes: ${{ steps.ignore-filter.outputs.changes || steps.changes.outputs.github_ci_changes }} | |
core_changes: ${{ steps.ignore-filter.outputs.changes || steps.changes.outputs.core_changes }} | |
ccip_changes: ${{ steps.ignore-filter.outputs.changes || steps.changes.outputs.ccip_changes }} | |
lint-integration-tests: | |
name: Lint ${{ matrix.project.name }} | |
runs-on: ubuntu-24.04-8cores-32GB-ARM | |
# We don't directly merge dependabot PRs, so let's not waste the resources | |
if: github.actor != 'dependabot[bot]' | |
strategy: | |
matrix: | |
project: | |
- name: integration-tests | |
id: integration-tests | |
path: ./integration-tests | |
cache_id: integration-tests | |
- name: load | |
id: load | |
path: ./integration-tests/load | |
cache_id: load | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@v4.2.1 | |
with: | |
repository: smartcontractkit/chainlink | |
ref: ${{ inputs.cl_ref }} | |
- name: Setup Go | |
uses: smartcontractkit/.github/actions/ctf-setup-go@b0d756c57fcdbcff187e74166562a029fdd5d1b9 # ctf-setup-go@0.0.0 | |
with: | |
test_download_vendor_packages_command: cd ${{ matrix.project.path }} && go mod download | |
go_mod_path: ${{ matrix.project.path }}/go.mod | |
cache_key_id: ${{ matrix.project.cache_id }} | |
cache_restore_only: "true" | |
- name: Lint Go | |
uses: golangci/golangci-lint-action@3cfe3a4abbb849e10058ce4af15d205b6da42804 # v4.0.0 | |
with: | |
version: v1.62.0 | |
# We already cache these directories in setup-go | |
skip-pkg-cache: true | |
skip-build-cache: true | |
# only-new-issues is only applicable to PRs, otherwise it is always set to false | |
only-new-issues: false # disabled for PRs due to unreliability | |
args: --out-format colored-line-number,checkstyle:golangci-lint-report.xml | |
working-directory: ${{ matrix.project.path }} | |
build-chainlink: | |
environment: integration | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
matrix: | |
image: | |
- name: "" | |
dockerfile: core/chainlink.Dockerfile | |
tag-suffix: "" | |
- name: (plugins) | |
dockerfile: plugins/chainlink.Dockerfile | |
tag-suffix: -plugins | |
name: Build Chainlink Image ${{ matrix.image.name }} | |
runs-on: ubuntu22.04-8cores-32GB | |
needs: [changes, enforce-ctf-version] | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@v4.2.1 | |
with: | |
repository: smartcontractkit/chainlink | |
ref: ${{ inputs.cl_ref || github.event.pull_request.head.sha || github.event.merge_group.head_sha }} | |
- name: Setup Github Token | |
if: ${{ inputs.evm-ref }} | |
id: get-gh-token | |
uses: smartcontractkit/.github/actions/setup-github-token@ef78fa97bf3c77de6563db1175422703e9e6674f # setup-github-token@0.2.1 | |
with: | |
aws-role-arn: ${{ secrets.AWS_OIDC_GLOBAL_READ_ONLY_TOKEN_ISSUER_ROLE_ARN }} | |
aws-lambda-url: ${{ secrets.AWS_INFRA_RELENG_TOKEN_ISSUER_LAMBDA_URL }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
set-git-config: "true" | |
- name: Build Chainlink Image | |
if: needs.changes.outputs.core_changes == 'true' || needs.changes.outputs.github_ci_changes == 'true' || github.event_name == 'workflow_dispatch' | |
uses: ./.github/actions/build-chainlink-image | |
with: | |
tag_suffix: ${{ matrix.image.tag-suffix }} | |
dockerfile: ${{ matrix.image.dockerfile }} | |
git_commit_sha: ${{ inputs.evm-ref || github.sha }} | |
AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
dep_evm_sha: ${{ inputs.evm-ref }} | |
run-core-integration-tests-for-pr: | |
name: Run Core integration Tests For PR | |
permissions: | |
actions: read | |
checks: write | |
pull-requests: write | |
id-token: write | |
contents: read | |
needs: [build-chainlink, changes] | |
if: github.event_name == 'pull_request' && ( needs.changes.outputs.core_changes == 'true' || needs.changes.outputs.github_ci_changes == 'true') | |
uses: smartcontractkit/.github/.github/workflows/run-integration-tests.yml@6c81cac2e88ab503602121fe866d67830a27fc7d #ctf-run-tests@0.2.0 | |
with: | |
workflow_name: Run Core Integration Tests For PR | |
chainlink_version: ${{ inputs.evm-ref || github.sha }} | |
test_path: .github/integration-tests.yml | |
test_trigger: PR Integration Core Tests | |
upload_cl_node_coverage_artifact: true | |
upload_cl_node_coverage_artifact_prefix: cl_node_coverage_data_ | |
secrets: | |
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
QA_AWS_ACCOUNT_NUMBER: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }} | |
PROD_AWS_ACCOUNT_NUMBER: ${{ secrets.AWS_ACCOUNT_ID_PROD }} | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
AWS_OIDC_IAM_ROLE_VALIDATION_PROD_ARN: ${{ secrets.AWS_OIDC_IAM_ROLE_VALIDATION_PROD_ARN }} | |
SLACK_BOT_TOKEN: ${{ secrets.QA_SLACK_API_KEY }} | |
run-core-integration-tests-for-merge-queue: | |
name: Run Core Integration Tests For Merge Queue | |
permissions: | |
actions: read | |
checks: write | |
pull-requests: write | |
id-token: write | |
contents: read | |
needs: [build-chainlink, changes] | |
if: github.event_name == 'merge_group' && ( needs.changes.outputs.core_changes == 'true' || needs.changes.outputs.github_ci_changes == 'true') | |
uses: smartcontractkit/.github/.github/workflows/run-integration-tests.yml@6c81cac2e88ab503602121fe866d67830a27fc7d #ctf-run-tests@1.0.0 | |
with: | |
workflow_name: Run Core Integration Tests For Merge Queue | |
chainlink_version: ${{ inputs.evm-ref || github.sha }} | |
test_path: .github/integration-tests.yml | |
test_trigger: Merge Queue integration Core Tests | |
upload_cl_node_coverage_artifact: true | |
upload_cl_node_coverage_artifact_prefix: cl_node_coverage_data_ | |
# Notify Test Tooling team in slack when merge queue tests fail | |
slack_notification_after_tests: on_failure | |
slack_notification_after_tests_channel_id: "#ccip-testing" | |
slack_notification_after_tests_name: Core integration Tests In Merge Queue | |
secrets: | |
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
QA_AWS_ACCOUNT_NUMBER: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }} | |
PROD_AWS_ACCOUNT_NUMBER: ${{ secrets.AWS_ACCOUNT_ID_PROD }} | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
AWS_OIDC_IAM_ROLE_VALIDATION_PROD_ARN: ${{ secrets.AWS_OIDC_IAM_ROLE_VALIDATION_PROD_ARN }} | |
SLACK_BOT_TOKEN: ${{ secrets.QA_SLACK_API_KEY }} | |
check-integration-test-results: | |
if: always() | |
name: Integration Tests | |
runs-on: ubuntu-latest | |
needs: [lint-integration-tests,run-core-integration-tests-for-pr,run-core-integration-tests-for-merge-queue] | |
steps: | |
- name: Fail the job if core tests in PR not successful | |
if: always() && needs.run-core-integration-tests-for-pr.result == 'failure' | |
run: exit 1 | |
- name: Fail the job if core tests in merge queue not successful | |
if: always() && needs.run-core-integration-tests-for-merge-queue.result == 'failure' | |
run: exit 1 | |
- name: Fail the job if lint not successful | |
if: always() && needs.lint-integration-tests.result == 'failure' | |
run: exit 1 | |
cleanup: | |
name: Clean up integration environment deployments | |
if: always() | |
needs: [run-core-integration-tests-for-pr, run-core-integration-tests-for-merge-queue] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repo | |
if: ${{ github.event_name == 'pull_request' }} | |
uses: actions/checkout@v4.2.1 | |
with: | |
repository: smartcontractkit/chainlink | |
ref: ${{ inputs.cl_ref }} | |
- name: 🧼 Clean up Environment | |
if: ${{ github.event_name == 'pull_request' }} | |
uses: ./.github/actions/delete-deployments | |
with: | |
environment: integration | |
ref: ${{ github.head_ref }} # See https://github.com/github/docs/issues/15319#issuecomment-1476705663 | |
show-chainlink-node-coverage: | |
name: Show Chainlink Node Go Coverage | |
if: always() | |
needs: [run-core-integration-tests-for-pr, run-core-integration-tests-for-merge-queue] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@v4.2.1 | |
with: | |
repository: smartcontractkit/chainlink | |
ref: ${{ inputs.cl_ref || github.event.pull_request.head.sha || github.event.merge_group.head_sha }} | |
- name: Download All Artifacts | |
uses: actions/download-artifact@v4.1.8 | |
with: | |
path: cl_node_coverage_data | |
pattern: cl_node_coverage_data_* | |
merge-multiple: true | |
- name: Show Coverage | |
run: go run ./integration-tests/scripts/show_coverage.go "${{ github.workspace }}/cl_node_coverage_data/*/merged" | |