Skip to content

Integration Tests #101918

Integration Tests

Integration Tests #101918

# N/B: ci-core, which runs on PRs, will trigger linting for affected directories/modules
# no need to run lint twice
name: Integration Tests
run-name: Integration Tests ${{ inputs.distinct_run_name && inputs.distinct_run_name || '' }}
on:
merge_group:
pull_request:
types: [opened, synchronize, reopened, labeled]
push:
tags:
- "*"
branches:
- develop
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
run_solana:
description: "Run solana tests"
required: false
type: string
default: "false"
distinct_run_name:
description: "A unique identifier for this run, only use from other repos"
required: false
type: string
ecr_name:
description: "The name of the ECR repository to push the image to, defaults to 'chainlink'"
required: false
type: string
default: "chainlink"
# Only run 1 of this workflow at a time per PR, but don't cancel runs on develop
concurrency:
group: ${{ github.ref != 'refs/heads/develop' && format('{0}-{1}-{2}-e2e-tests-{3}', github.ref, github.repository, github.event_name, inputs.distinct_run_name) || github.sha }}
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/${{ inputs.ecr_name || 'chainlink-integration-tests' }}
CHAINLINK_REF: ${{ inputs.cl_ref || github.sha }}
TEST_SUITE: smoke
MOD_CACHE_VERSION: 2
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
with:
persist-credentials: false
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 # [email protected]
with:
go-project-path: ./integration-tests
module-name: github.com/smartcontractkit/chainlink-testing-framework/lib
enforce-semantic-tag: "true"
changes:
name: Check Paths That Require Tests To Run
# We don't directly merge dependabot PRs, so let's not waste the resources
if: github.actor != 'dependabot[bot]'
runs-on: ubuntu-latest
environment: integration
outputs:
github-ci-changes: ${{ steps.changes.outputs.github_ci_changes }}
core-changes: ${{ steps.changes.outputs.core_changes }}
cre-changes: ${{ steps.changes.outputs.cre_changes }}
ccip-changes: ${{ steps.changes.outputs.ccip_changes }}
steps:
- name: Checkout the repo
uses: actions/checkout@v4
with:
persist-credentials: false
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/workflows/run-e2e-tests-reusable-workflow.yml'
- '.github/workflows/cre-system-tests.yaml'
- '.github/e2e-tests.yml'
core_changes: &core_changes
- '**/*.go'
- '**/*go.sum'
- '**/*go.mod'
- '**/*Dockerfile'
- 'core/**/migrations/*.sql'
- 'core/**/config/**/*.toml'
- 'integration-tests/**/*.toml'
cre_changes:
- *core_changes
- 'core/scripts/cre/environment/**/*'
- 'system-tests/**'
ccip_changes:
- '**/*ccip*'
- '**/*ccip*/**'
labels:
name: Get PR labels and set runner labels
if: github.actor != 'dependabot[bot]'
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
outputs:
builder-runner-label: ${{ steps.runner-labels.outputs.builder-runner-label }}
solana-runner-label: ${{ steps.runner-labels.outputs.solana-runner-label }}
should-use-self-hosted-runners: ${{ steps.label-runs-on-opt-out.outputs.check-label-found == 'false' }}
run-e2e-tests-label-found: ${{ steps.label-runs-e2e-tests.outputs.check-label-found || 'false' }}
steps:
- name: Get PR Labels (runs-on-opt-out)
id: label-runs-on-opt-out
uses: smartcontractkit/.github/actions/get-pr-labels@get-pr-labels/v1
with:
check-label: "runs-on-opt-out"
- name: Get PR Labels (run-e2e-tests)
if: github.event_name == 'pull_request'
id: label-runs-e2e-tests
uses: smartcontractkit/.github/actions/get-pr-labels@get-pr-labels/v1
with:
check-label: "run-e2e-tests"
- name: Set runner labels
id: runner-labels
env:
OPT_OUT: ${{ steps.label-runs-on-opt-out.outputs.check-label-found || 'false' }}
GH_BUILDER_RUNNER: ubuntu22.04-8cores-32GB
SH_BUILDER_RUNNER: runs-on=${{ github.run_id }}/cpu=32/memory=64/family=c6i/extras=s3-cache+tmpfs
GH_SOLANA_RUNNER: ubuntu22.04-8cores-32GB
SH_SOLANA_RUNNER: runs-on=${{ github.run_id }}/cpu=48/ram=96/family=c6i/spot=false/image=ubuntu24-full-x64/extras=s3-cache+tmpfs
run: |
if [[ "${OPT_OUT}" == "true" ]]; then
echo "builder-runner-label=${GH_BUILDER_RUNNER}" | tee -a "$GITHUB_OUTPUT"
echo "solana-runner-label=${GH_SOLANA_RUNNER}" | tee -a "$GITHUB_OUTPUT"
else
echo "builder-runner-label=${SH_BUILDER_RUNNER}" | tee -a "$GITHUB_OUTPUT"
echo "solana-runner-label=${SH_SOLANA_RUNNER}" | tee -a "$GITHUB_OUTPUT"
fi
build-chainlink:
name: Build Chainlink Image ${{ matrix.image.name }}
if: github.actor != 'dependabot[bot]'
runs-on: ${{ needs.labels.outputs.builder-runner-label || 'ubuntu22.04-8cores-32GB' }}
environment: integration
needs:
[
labels,
enforce-ctf-version,
run-core-cre-e2e-tests-setup,
run-core-e2e-tests-setup,
run-ccip-e2e-tests-setup,
solana-smoke-tests-setup,
]
permissions:
id-token: write
contents: read
strategy:
matrix:
image:
- name: ""
dockerfile: core/chainlink.Dockerfile
tag-suffix: ""
# todo: optimize this conditional
should-build: >-
${{
needs.run-core-e2e-tests-setup.outputs.should-run == 'true' ||
needs.run-ccip-e2e-tests-setup.outputs.should-run == 'true' ||
needs.solana-smoke-tests-setup.outputs.should-run-solana-tests == 'true' ||
needs.run-core-cre-e2e-tests-setup.outputs.should-run == 'true'
}}
- name: (plugins)
dockerfile: plugins/chainlink.Dockerfile
tag-suffix: -plugins
# todo: optimize this conditional
should-build: >-
${{
needs.run-core-e2e-tests-setup.outputs.should-run == 'true' ||
needs.run-ccip-e2e-tests-setup.outputs.should-run == 'true' ||
needs.solana-smoke-tests-setup.outputs.should-run-solana-tests == 'true' ||
needs.run-core-cre-e2e-tests-setup.outputs.should-run == 'true'
}}
steps:
- name: Enable S3 Cache for Self-Hosted Runners
# these env vars are set (and exposed) when it is a self-hosted runner with extras=s3-cache
if: ${{ env.RUNS_ON_INSTANCE_ID != '' && env.ACTIONS_CACHE_URL != '' }}
uses: runs-on/action@66d4449b717b5462159659523d1241051ff470b9 # v1
- name: Check if image exists in ECR
id: check-image-exists
uses: smartcontractkit/.github/actions/ecr-image-exists@ecr-image-exists/0.0.1
with:
repository: ${{ inputs.ecr_name || 'chainlink-integration-tests' }}
tag: ${{ inputs.evm-ref || env.CHAINLINK_REF }}${{ matrix.image.tag-suffix }}
aws-role-arn: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
- name: Explain
env:
SHOULD_BUILD: ${{ matrix.image.should-build }}
IMAGE_EXISTS: ${{ steps.check-image-exists.outputs.exists }}
run: |
if [[ "${SHOULD_BUILD}" == 'true' && "${IMAGE_EXISTS}" == 'false' ]]; then
echo "We will build the image because the matrix's should-build is true and the image does not already exist in ECR."
echo "Should build is true when:"
echo "- For the non-plugins image: the core tests, ccip tests, or solana tests will be run."
echo "- For the plugins image: the core cre e2e tests will be run."
else
echo "We will not build the image because either the matrix's should-build is false or the image already exists in ECR."
echo "should-build: ${SHOULD_BUILD}"
echo "image-exists: ${IMAGE_EXISTS}"
fi
- name: Checkout the repo
if: matrix.image.should-build && steps.check-image-exists.outputs.exists != 'true'
uses: actions/checkout@v4
with:
persist-credentials: false
repository: smartcontractkit/chainlink
ref: ${{ env.CHAINLINK_REF }}
- name: Build Chainlink Image
if: matrix.image.should-build && steps.check-image-exists.outputs.exists != 'true'
uses: smartcontractkit/.github/actions/ctf-build-image@ctf-build-image/v1
with:
image-tag: ${{ inputs.evm-ref || env.CHAINLINK_REF }}${{ matrix.image.tag-suffix }}
dockerfile: ${{ matrix.image.dockerfile }}
docker-registry-url: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com
docker-repository-name: ${{ inputs.ecr_name || 'chainlink-integration-tests' }}
aws-account-number: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}
aws-region: ${{ secrets.QA_AWS_REGION }}
aws-role-arn: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
docker-additional-build-args: |
GO_COVER_FLAG=true
go-get-overrides: |
github.com/smartcontractkit/chainlink-evm=${{ inputs.evm-ref }}
gati-role-arn: ${{ secrets.AWS_OIDC_GLOBAL_READ_ONLY_TOKEN_ISSUER_ROLE_ARN }}
gati-lambda-url: ${{ secrets.AWS_INFRA_RELENG_TOKEN_ISSUER_LAMBDA_URL }}
run-core-cre-e2e-tests-setup:
name: Run Core CRE E2E Tests Setup
runs-on: ubuntu-latest
needs: [changes, labels]
permissions:
contents: read
outputs:
should-run: ${{ steps.form-inputs.outputs.should-run }}
workflow-name: ${{ steps.form-inputs.outputs.workflow-name }}
steps:
- name: Form Inputs for Core CRE E2E Tests
id: form-inputs
env:
GITHUB_EVENT_NAME: ${{ github.event_name }}
GITHUB_REF_TYPE: ${{ github.ref_type }}
CONTAINS_CHANGES: ${{ needs.changes.outputs.github-ci-changes == 'true' || needs.changes.outputs.cre-changes == 'true' }}
run: |
if [[ "${GITHUB_EVENT_NAME}" == 'pull_request' ]]; then
# Run Core CRE E2E tests on PRs if there are relevant changes
echo "workflow-name=Run Core CRE E2E Tests For PR" | tee -a "$GITHUB_OUTPUT"
if [[ "${CONTAINS_CHANGES}" == 'true' ]]; then
echo "should-run=true" | tee -a "$GITHUB_OUTPUT"
fi
elif [[ "${GITHUB_EVENT_NAME}" == 'merge_group' ]]; then
# Run Core CRE E2E tests in the merge queue, if there are relevant changes
echo "workflow-name=Run Core CRE E2E Tests For Merge Queue" | tee -a "$GITHUB_OUTPUT"
echo "should-run=${CONTAINS_CHANGES}" | tee -a "$GITHUB_OUTPUT"
elif [[ "${GITHUB_EVENT_NAME}" == 'workflow_dispatch' ]]; then
# Always run Core CRE E2E tests on workflow dispatch
echo "workflow-name=Run Core CRE E2E Tests For Workflow Dispatch" | tee -a "$GITHUB_OUTPUT"
echo "should-run=true" | tee -a "$GITHUB_OUTPUT"
elif [[ "${GITHUB_EVENT_NAME}" == 'push' ]]; then
# Run Core CRE E2E tests on push events, only if there are relevant changes, or it's a tag push
echo "workflow-name=Run Core CRE E2E Tests For Push" | tee -a "$GITHUB_OUTPUT"
if [[ "${CONTAINS_CHANGES}" == 'true' || "${GITHUB_REF_TYPE}" == 'tag' ]]; then
echo "should-run=true" | tee -a "$GITHUB_OUTPUT"
fi
else
echo "workflow-name=Run Core CRE E2E Tests For Unknown Event" | tee -a "$GITHUB_OUTPUT"
echo "test-trigger=Unknown CRE E2E Core Tests" | tee -a "$GITHUB_OUTPUT"
echo "should-run=false" | tee -a "$GITHUB_OUTPUT"
fi
run-core-cre-e2e-tests:
name: ${{ needs.run-core-cre-e2e-tests-setup.outputs.workflow-name }}
needs: [build-chainlink, run-core-cre-e2e-tests-setup]
permissions:
actions: read
checks: write
pull-requests: write
id-token: write
contents: read
if: needs.run-core-cre-e2e-tests-setup.outputs.should-run == 'true'
uses: ./.github/workflows/cre-system-tests.yaml
with:
ecr_name: ${{ inputs.ecr_name || 'chainlink-integration-tests' }}
chainlink_version: ${{ inputs.evm-ref || inputs.cl_ref || github.sha }}
chainlink_image_tag: ${{ inputs.evm-ref && format('{0}', inputs.evm-ref) || inputs.cl_ref && format('{0}', inputs.cl_ref) || format('{0}', github.sha) }}
secrets: inherit
run-core-e2e-tests-setup:
name: Run Core E2E Tests Setup
runs-on: ubuntu-latest
needs: [changes, labels]
permissions:
contents: read
outputs:
should-run: ${{ steps.form-inputs.outputs.should-run }}
workflow-name: ${{ steps.form-inputs.outputs.workflow-name }}
test-trigger: ${{ steps.form-inputs.outputs.test-trigger }}
steps:
- name: Form Inputs for Core E2E Tests
id: form-inputs
env:
GITHUB_EVENT_NAME: ${{ github.event_name }}
GITHUB_REF_TYPE: ${{ github.ref_type }}
CONTAINS_CHANGES: ${{ needs.changes.outputs.github-ci-changes == 'true' || needs.changes.outputs.core-changes == 'true' }}
RUN_E2E_TESTS_LABEL_FOUND: ${{ needs.labels.outputs.run-e2e-tests-label-found || 'false' }}
run: |
if [[ "${GITHUB_EVENT_NAME}" == 'pull_request' ]]; then
# Run Core E2E tests on PRs only if the label "run-e2e-tests" is present, and there are relevant changes
echo "workflow-name=Run Core E2E Tests For PR" | tee -a "$GITHUB_OUTPUT"
echo "test-trigger=PR E2E Core Tests" | tee -a "$GITHUB_OUTPUT"
if [[ "${RUN_E2E_TESTS_LABEL_FOUND}" == 'true' && "${CONTAINS_CHANGES}" == 'true' ]]; then
echo "should-run=true" | tee -a "$GITHUB_OUTPUT"
fi
elif [[ "${GITHUB_EVENT_NAME}" == 'merge_group' ]]; then
# Run Core E2E tests in the merge queue, if there are relevant changes
echo "workflow-name=Run Core E2E Tests For Merge Queue" | tee -a "$GITHUB_OUTPUT"
echo "test-trigger=Merge Queue E2E Core Tests" | tee -a "$GITHUB_OUTPUT"
echo "should-run=${CONTAINS_CHANGES}" | tee -a "$GITHUB_OUTPUT"
elif [[ "${GITHUB_EVENT_NAME}" == 'workflow_dispatch' ]]; then
# Always run Core E2E tests on workflow dispatch
echo "workflow-name=Run Core E2E Tests For Workflow Dispatch" | tee -a "$GITHUB_OUTPUT"
echo "test-trigger=Workflow Dispatch E2E Core Tests" | tee -a "$GITHUB_OUTPUT"
echo "should-run=true" | tee -a "$GITHUB_OUTPUT"
elif [[ "${GITHUB_EVENT_NAME}" == 'push' ]]; then
# Run Core E2E tests on push events, only if there are relevant changes or if it's a tag push
echo "workflow-name=Run Core E2E Tests For Push" | tee -a "$GITHUB_OUTPUT"
echo "test-trigger=Push E2E Core Tests" | tee -a "$GITHUB_OUTPUT"
if [[ "${CONTAINS_CHANGES}" == 'true' || "${GITHUB_REF_TYPE}" == 'tag' ]]; then
echo "should-run=true" | tee -a "$GITHUB_OUTPUT"
fi
else
echo "workflow-name=Run Core E2E Tests For Unknown Event" | tee -a "$GITHUB_OUTPUT"
echo "test-trigger=Unknown E2E Core Tests" | tee -a "$GITHUB_OUTPUT"
echo "should-run=false" | tee -a "$GITHUB_OUTPUT"
fi
run-core-e2e-tests:
needs: [run-core-e2e-tests-setup, build-chainlink, changes, labels]
name: ${{ needs.run-core-e2e-tests-setup.outputs.workflow-name }}
permissions:
actions: read
checks: write
pull-requests: write
id-token: write
contents: read
if: needs.run-core-e2e-tests-setup.outputs.should-run == 'true'
uses: smartcontractkit/.github/.github/workflows/run-e2e-tests.yml@7120f3a614452e1c6b84876c055f574011a947d1 # 2025-07-08
with:
workflow_name: ${{ needs.run-core-e2e-tests-setup.outputs.workflow-name }}
chainlink_version: ${{ inputs.evm-ref || inputs.cl_ref || github.sha }}
test_path: .github/e2e-tests.yml
test_trigger: ${{ needs.run-core-e2e-tests-setup.outputs.test-trigger }}
upload_cl_node_coverage_artifact: true
upload_cl_node_coverage_artifact_prefix: cl_node_coverage_data_
enable_otel_traces_for_ocr2_plugins: ${{ contains(join(github.event.pull_request.labels.*.name, ' '), 'enable tracing') }}
use-self-hosted-runners: ${{ needs.labels.outputs.should-use-self-hosted-runners }}
extraArgs: ${{ (github.event_name == 'merge_group' || github.event_name == 'push') && '{"flakeguard_enable":"false","flakeguard_run_count":"1","flakeguard_rerun_failed_count":"1"}' }}
ecr_name: ${{ inputs.ecr_name || 'chainlink-integration-tests' }}
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 }}
QA_PYROSCOPE_INSTANCE: ${{ secrets.QA_PYROSCOPE_INSTANCE }}
QA_PYROSCOPE_KEY: ${{ secrets.QA_PYROSCOPE_KEY }}
GRAFANA_INTERNAL_TENANT_ID: ${{ secrets.GRAFANA_INTERNAL_TENANT_ID }}
GRAFANA_INTERNAL_BASIC_AUTH: ${{ secrets.GRAFANA_INTERNAL_BASIC_AUTH }}
GRAFANA_INTERNAL_HOST: ${{ secrets.GRAFANA_INTERNAL_HOST }}
GRAFANA_INTERNAL_URL_SHORTENER_TOKEN: ${{ secrets.GRAFANA_INTERNAL_URL_SHORTENER_TOKEN }}
LOKI_TENANT_ID: ${{ secrets.LOKI_TENANT_ID }}
LOKI_URL: ${{ secrets.LOKI_URL }}
LOKI_BASIC_AUTH: ${{ secrets.LOKI_BASIC_AUTH }}
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 }}
AWS_API_GW_HOST_GRAFANA: ${{ secrets.AWS_API_GW_HOST_GRAFANA }}
SLACK_BOT_TOKEN: ${{ secrets.QA_SLACK_API_KEY }}
FLAKEGUARD_SPLUNK_ENDPOINT: ${{ secrets.FLAKEGUARD_SPLUNK_ENDPOINT }}
FLAKEGUARD_SPLUNK_HEC: ${{ secrets.FLAKEGUARD_SPLUNK_HEC }}
OPTIONAL_GATI_AWS_ROLE_ARN: ${{ secrets.AWS_OIDC_GLOBAL_READ_ONLY_TOKEN_ISSUER_ROLE_ARN }}
OPTIONAL_GATI_LAMBDA_URL: ${{ secrets.AWS_INFRA_RELENG_TOKEN_ISSUER_LAMBDA_URL}}
run-ccip-e2e-tests-setup:
name: Run CCIP E2E Tests Setup
runs-on: ubuntu-latest
needs: [changes, labels]
permissions:
contents: read
outputs:
should-run: ${{ steps.form-inputs.outputs.should-run }}
workflow-name: ${{ steps.form-inputs.outputs.workflow-name }}
test-trigger: ${{ steps.form-inputs.outputs.test-trigger }}
steps:
- name: Form Inputs for Core E2E Tests
id: form-inputs
env:
GITHUB_EVENT_NAME: ${{ github.event_name }}
GITHUB_REF_TYPE: ${{ github.ref_type }}
CONTAINS_CHANGES: ${{ needs.changes.outputs.github-ci-changes == 'true' || needs.changes.outputs.core-changes == 'true' }}
RUN_E2E_TESTS_LABEL_FOUND: ${{ needs.labels.outputs.run-e2e-tests-label-found || 'false' }}
run: |
if [[ "${GITHUB_EVENT_NAME}" == 'pull_request' ]]; then
# Run Core E2E tests on PRs only if the label "run-e2e-tests" is present, and there are relevant changes
echo "workflow-name=Run CCIP E2E Tests For PR" | tee -a "$GITHUB_OUTPUT"
echo "test-trigger=PR E2E CCIP Tests" | tee -a "$GITHUB_OUTPUT"
if [[ "${RUN_E2E_TESTS_LABEL_FOUND}" == 'true' && "${CONTAINS_CHANGES}" == 'true' ]]; then
echo "should-run=true" | tee -a "$GITHUB_OUTPUT"
fi
elif [[ "${GITHUB_EVENT_NAME}" == 'merge_group' ]]; then
# Run Core E2E tests in the merge queue, if there are relevant changes
echo "workflow-name=Run CCIP E2E Tests For Merge Queue" | tee -a "$GITHUB_OUTPUT"
echo "test-trigger=Merge Queue E2E CCIP Tests" | tee -a "$GITHUB_OUTPUT"
echo "should-run=${CONTAINS_CHANGES}" | tee -a "$GITHUB_OUTPUT"
elif [[ "${GITHUB_EVENT_NAME}" == 'workflow_dispatch' ]]; then
# Always run Core E2E tests on workflow dispatch
echo "workflow-name=Run CCIP E2E Tests For Workflow Dispatch" | tee -a "$GITHUB_OUTPUT"
echo "test-trigger=Workflow Dispatch E2E CCIP Tests" | tee -a "$GITHUB_OUTPUT"
echo "should-run=true" | tee -a "$GITHUB_OUTPUT"
elif [[ "${GITHUB_EVENT_NAME}" == 'push' ]]; then
# Run Core E2E tests on push events, only if there are relevant changes or if it's a tag push
echo "workflow-name=Run CCIP E2E Tests For Push" | tee -a "$GITHUB_OUTPUT"
echo "test-trigger=Push E2E CCIP Tests" | tee -a "$GITHUB_OUTPUT"
if [[ "${CONTAINS_CHANGES}" == 'true' || "${GITHUB_REF_TYPE}" == 'tag' ]]; then
echo "should-run=true" | tee -a "$GITHUB_OUTPUT"
fi
else
echo "workflow-name=Run Core E2E Tests For Unknown Event" | tee -a "$GITHUB_OUTPUT"
echo "test-trigger=Unknown E2E Core Tests" | tee -a "$GITHUB_OUTPUT"
echo "should-run=false" | tee -a "$GITHUB_OUTPUT"
fi
run-ccip-e2e-tests:
name: ${{ needs.run-ccip-e2e-tests-setup.outputs.workflow-name }}
permissions:
actions: read
checks: write
pull-requests: write
id-token: write
contents: read
needs: [build-chainlink, run-ccip-e2e-tests-setup, changes, labels]
if: needs.run-ccip-e2e-tests-setup.outputs.should-run == 'true'
uses: smartcontractkit/.github/.github/workflows/run-e2e-tests.yml@7120f3a614452e1c6b84876c055f574011a947d1 # 2025-07-08
with:
workflow_name: ${{ needs.run-ccip-e2e-tests-setup.outputs.workflow-name }}
chainlink_version: ${{ inputs.evm-ref || inputs.cl_ref || github.sha }}
test_path: .github/e2e-tests.yml
test_trigger: ${{ needs.run-ccip-e2e-tests-setup.outputs.test-trigger }}
upload_cl_node_coverage_artifact: true
upload_cl_node_coverage_artifact_prefix: cl_node_coverage_data_
enable_otel_traces_for_ocr2_plugins: ${{ contains(join(github.event.pull_request.labels.*.name, ' '), 'enable tracing') }}
extraArgs: ${{ (github.event_name == 'merge_group' || github.event_name == 'push') && '{"flakeguard_enable":"false","flakeguard_run_count":"1","flakeguard_rerun_failed_count":"1"}' }}
use-self-hosted-runners: ${{ needs.labels.outputs.should-use-self-hosted-runners }}
ecr_name: ${{ inputs.ecr_name || 'chainlink-integration-tests' }}
team: "CCIP"
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 }}
QA_PYROSCOPE_INSTANCE: ${{ secrets.QA_PYROSCOPE_INSTANCE }}
QA_PYROSCOPE_KEY: ${{ secrets.QA_PYROSCOPE_KEY }}
GRAFANA_INTERNAL_TENANT_ID: ${{ secrets.GRAFANA_INTERNAL_TENANT_ID }}
GRAFANA_INTERNAL_BASIC_AUTH: ${{ secrets.GRAFANA_INTERNAL_BASIC_AUTH }}
GRAFANA_INTERNAL_HOST: ${{ secrets.GRAFANA_INTERNAL_HOST }}
GRAFANA_INTERNAL_URL_SHORTENER_TOKEN: ${{ secrets.GRAFANA_INTERNAL_URL_SHORTENER_TOKEN }}
LOKI_TENANT_ID: ${{ secrets.LOKI_TENANT_ID }}
LOKI_URL: ${{ secrets.LOKI_URL }}
LOKI_BASIC_AUTH: ${{ secrets.LOKI_BASIC_AUTH }}
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 }}
AWS_API_GW_HOST_GRAFANA: ${{ secrets.AWS_API_GW_HOST_GRAFANA }}
SLACK_BOT_TOKEN: ${{ secrets.QA_SLACK_API_KEY }}
MAIN_DNS_ZONE_PUBLIC_SDLC: ${{ secrets.MAIN_DNS_ZONE_PUBLIC_SDLC }}
AWS_K8S_CLUSTER_NAME_SDLC: ${{ secrets.AWS_K8S_CLUSTER_NAME_SDLC }}
FLAKEGUARD_SPLUNK_ENDPOINT: ${{ secrets.FLAKEGUARD_SPLUNK_ENDPOINT }}
FLAKEGUARD_SPLUNK_HEC: ${{ secrets.FLAKEGUARD_SPLUNK_HEC }}
OPTIONAL_GATI_AWS_ROLE_ARN: ${{ secrets.AWS_OIDC_GLOBAL_READ_ONLY_TOKEN_ISSUER_ROLE_ARN }}
OPTIONAL_GATI_LAMBDA_URL: ${{ secrets.AWS_INFRA_RELENG_TOKEN_ISSUER_LAMBDA_URL}}
check-e2e-test-results:
if: always()
name: ETH Smoke Tests
runs-on: ubuntu-latest
needs:
[
build-chainlink,
run-core-e2e-tests,
run-ccip-e2e-tests,
run-core-cre-e2e-tests,
]
steps:
- name: Check Core test results
id: check_core_results
run: |
results='${{ needs.run-core-e2e-tests.outputs.test_results }}'
echo "Core e2e test results:"
echo "$results" | jq .
node_migration_tests_failed=$(echo $results | jq '[.[] | select(.id == "integration-tests/migration/upgrade_version_test.go:*" ) | select(.result != "success")] | length > 0')
echo "node_migration_tests_failed=$node_migration_tests_failed" >> $GITHUB_OUTPUT
- name: Check CCIP test results
id: check_ccip_results
run: |
if [[ '${{ needs.run-ccip-e2e-tests.result }}' != 'skipped' ]]; then
results='${{ needs.run-ccip-e2e-tests.outputs.test_results }}'
echo "CCIP test results:"
echo "$results" | jq .
else
echo "CCIP tests were skipped."
fi
- name: Fail the job if core tests were not successful
if: always()
env:
RESULT: ${{ needs.run-core-e2e-tests.result }}
run: |
if [[ "${RESULT}" == "failure" ]]; then
echo "::error::Core E2E tests failed."
exit 1
elif [[ "${RESULT}" == "cancelled" ]]; then
echo "::error::Core E2E tests were cancelled."
exit 1
elif [[ "${RESULT}" == "skipped" ]]; then
echo "::warning::Core E2E tests were skipped."
fi
- name: Fail the job if core CRE tests were not successful
if: always()
env:
RESULT: ${{ needs.run-core-cre-e2e-tests.result }}
run: |
if [[ "${RESULT}" == "failure" ]]; then
echo "::error::Core CRE E2E tests failed."
exit 1
elif [[ "${RESULT}" == "cancelled" ]]; then
echo "::error::Core CRE E2E tests were cancelled."
exit 1
elif [[ "${RESULT}" == "skipped" ]]; then
echo "::warning::Core CRE E2E tests were skipped."
fi
- name: Warn if CCIP tests were not successful
if: always()
env:
RESULT: ${{ needs.run-ccip-e2e-tests.result }}
run: |
if [[ "${RESULT}" == "failure" ]]; then
echo "::warning::CCIP E2E tests failed in one of the runs. Not failing as they are not mandatory."
elif [[ "${RESULT}" == "cancelled" ]]; then
echo "::warning::CCIP E2E tests were cancelled."
elif [[ "${RESULT}" == "skipped" ]]; then
echo "::warning::CCIP E2E tests were skipped."
fi
- name: Fail the job if Chainlink image wasn't built
if: always() && needs.build-chainlink.result == 'failure'
run: exit 1
cleanup:
name: Clean up integration environment deployments
# If the job was cancelled, it typically means that it was manually stopped, or a new commit was pushed.
# By always running this, it delays the start of the next workflow run due to concurrency rules.
if: always() && !cancelled()
needs: [run-core-e2e-tests, run-ccip-e2e-tests, run-core-cre-e2e-tests]
runs-on: ubuntu-latest
steps:
- name: Checkout repo
if: ${{ github.event_name == 'pull_request' }}
uses: actions/checkout@v4
with:
persist-credentials: false
repository: smartcontractkit/chainlink
ref: ${{ env.CHAINLINK_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: false
# if: always()
needs: [run-core-e2e-tests, run-ccip-e2e-tests]
runs-on: ubuntu-latest
steps:
- name: Checkout the repo
uses: actions/checkout@v4
with:
persist-credentials: false
repository: smartcontractkit/chainlink
ref: ${{ env.CHAINLINK_REF }}
- name: Download All Artifacts
uses: actions/download-artifact@v4
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"
## Solana Section
solana-smoke-tests-setup:
name: Solana Smoke Tests Setup
# We don't directly merge dependabot PRs, so let's not waste the resources
if: ${{ github.actor != 'dependabot[bot]' }}
runs-on: ubuntu-latest
needs: [changes, labels]
permissions:
contents: read
outputs:
should-run-solana-tests: ${{ steps.run-tests.outputs.should-run-solana-tests }}
steps:
- name: Determine if Solana tests should run
id: run-tests
env:
GITHUB_EVENT_NAME: ${{ github.event_name }}
GITHUB_REF_TYPE: ${{ github.ref_type }}
CONTAINS_CHANGES: ${{ needs.changes.outputs.github-ci-changes == 'true' || needs.changes.outputs.core-changes == 'true' }}
RUN_E2E_TESTS_LABEL_FOUND: ${{ needs.labels.outputs.run-e2e-tests-label-found || 'false' }}
INPUTS_RUN_SOLANA: ${{ inputs.run_solana }}
run: |
if [[ "${INPUTS_RUN_SOLANA}" == 'false' ]]; then
echo "Solana tests are disabled by input, skipping."
echo "should-run-solana-tests=false" | tee -a "$GITHUB_OUTPUT"
elif [[ "${GITHUB_EVENT_NAME}" == 'pull_request' ]]; then
# Run Solana tests on PRs only if the label "run-e2e-tests" is present, and there are relevant changes
if [[ "${RUN_E2E_TESTS_LABEL_FOUND}" == 'true' && "${CONTAINS_CHANGES}" == 'true' ]]; then
echo "Solana tests will run on PR with label and relevant changes."
echo "should-run-solana-tests=true" | tee -a "$GITHUB_OUTPUT"
fi
elif [[ "${GITHUB_EVENT_NAME}" == 'merge_group' ]]; then
# Run Solana tests in the merge queue, if there are relevant changes
echo "Solana tests will run in the merge queue."
echo "should-run-solana-tests=${CONTAINS_CHANGES}" | tee -a "$GITHUB_OUTPUT"
elif [[ "${GITHUB_EVENT_NAME}" == 'workflow_dispatch' ]]; then
# Always run Solana tests on workflow dispatch
echo "Solana tests will run on workflow dispatch."
echo "should-run-solana-tests=true" | tee -a "$GITHUB_OUTPUT"
elif [[ "${GITHUB_EVENT_NAME}" == 'push' ]]; then
# Run Solana tests on push events, only if there are relevant changes or if it's a tag push
if [[ "${CONTAINS_CHANGES}" == 'true' || "${GITHUB_REF_TYPE}" == 'tag' ]]; then
echo "Solana tests will run on push with relevant changes or tag push."
echo "should-run-solana-tests=true" | tee -a "$GITHUB_OUTPUT"
fi
else
echo "Solana tests will not run for this event type: ${GITHUB_EVENT_NAME}."
echo "should-run-solana-tests=false" | tee -a "$GITHUB_OUTPUT"
fi
get-solana-sha:
if: needs.solana-smoke-tests-setup.outputs.should-run-solana-tests == 'true'
name: Get Solana Sha From Go Mod
environment: Integration
runs-on: ubuntu-latest
needs: [solana-smoke-tests-setup]
permissions:
contents: read
outputs:
sha: ${{ steps.getsha.outputs.sha }}
steps:
- name: Checkout the repo
uses: actions/checkout@v4
with:
persist-credentials: false
repository: smartcontractkit/chainlink
ref: ${{ env.CHAINLINK_REF }}
- name: Setup Go
uses: ./.github/actions/setup-go
with:
only-modules: "true"
- name: Get the sha from go mod
id: getshortsha
run: |
sol_ver=$(go list -m -json github.com/smartcontractkit/chainlink-solana | jq -r .Version)
if [ -z "${sol_ver}" ]; then
echo "Error: could not get the solana version from the go.mod file, look above for error(s)"
exit 1
fi
short_sha="${sol_ver##*-}"
echo "short sha is: ${short_sha}"
echo "short_sha=${short_sha}" | tee -a "$GITHUB_OUTPUT"
- name: Checkout solana
uses: actions/checkout@v4
with:
persist-credentials: false
repository: smartcontractkit/chainlink-solana
ref: develop
fetch-depth: 0
path: solanapath
- name: Get long sha
id: getsha
run: |
cd solanapath
full_sha=$(git rev-parse ${{steps.getshortsha.outputs.short_sha}}^{}) # additional suffix allows handling tagged versions as well
if [ -z "${full_sha}" ]; then
echo "Error: could not get the full sha from the short sha using git, look above for error(s)"
exit 1
fi
echo "sha is: ${full_sha}"
echo "sha=${full_sha}" | tee -a "$GITHUB_OUTPUT"
solana-test-image-exists:
environment: integration
permissions:
checks: write
pull-requests: write
id-token: write
contents: read
name: Check If Solana Test Image Exists
runs-on: ubuntu-latest
needs: [get-solana-sha]
outputs:
exists: ${{ steps.check-image.outputs.exists }}
steps:
- name: Check if image exists
id: check-image
uses: smartcontractkit/chainlink-github-actions/docker/image-exists@0ce1e67b254a4f041e03cc6f0e3afc987b47c7bd # v2.3.30
with:
repository: chainlink-solana-tests
tag: ${{ needs.get-solana-sha.outputs.sha }}
AWS_REGION: ${{ secrets.QA_AWS_REGION }}
AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
solana-build-contracts:
name: Solana Build Artifacts
if: needs.solana-smoke-tests-setup.outputs.should-run-solana-tests == 'true'
environment: integration
permissions:
checks: write
pull-requests: write
id-token: write
contents: read
runs-on: ubuntu22.04-8cores-32GB
needs:
[
changes,
solana-test-image-exists,
get-solana-sha,
solana-smoke-tests-setup,
]
steps:
- name: Checkout the solana repo
uses: actions/checkout@v4
with:
persist-credentials: false
repository: smartcontractkit/chainlink-solana
ref: ${{ needs.get-solana-sha.outputs.sha }}
- name: Build contracts
if: needs.solana-test-image-exists.outputs.exists == 'false'
uses: smartcontractkit/chainlink-solana/.github/actions/build_contract_artifacts@841f6229b6a0be0114c47cb676b1136d92f935c9 # node20 update on may 10, 2024
with:
ref: ${{ needs.get-solana-sha.outputs.sha }}
runner-os: ${{ runner.os }}
solana-build-test-image:
name: Solana Build Test Image
if: needs.solana-smoke-tests-setup.outputs.should-run-solana-tests == 'true'
environment: integration
permissions:
checks: write
pull-requests: write
id-token: write
contents: read
runs-on: ubuntu22.04-8cores-32GB
needs:
[
solana-build-contracts,
solana-test-image-exists,
changes,
get-solana-sha,
solana-smoke-tests-setup,
]
env:
CONTRACT_ARTIFACTS_PATH: contracts/target/deploy
GOTOOLCHAIN: auto
steps:
- name: Checkout the repo
if: needs.solana-test-image-exists.outputs.exists == 'false'
uses: actions/checkout@v4
with:
persist-credentials: false
repository: smartcontractkit/chainlink-solana
ref: ${{ needs.get-solana-sha.outputs.sha }}
- name: Download Artifacts
if: needs.solana-test-image-exists.outputs.exists == 'false'
uses: actions/download-artifact@v4
with:
name: artifacts
path: ${{ env.CONTRACT_ARTIFACTS_PATH }}
- name: Build Test Image
if: needs.solana-test-image-exists.outputs.exists == 'false'
uses: smartcontractkit/.github/actions/ctf-build-test-image@a5e4f4c8fbb8e15ab2ad131552eca6ac83c4f4b3 # [email protected]
with:
repository: chainlink-solana-tests
tag: ${{ needs.get-solana-sha.outputs.sha }}
suites: smoke
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }}
QA_AWS_ACCOUNT_NUMBER: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}
solana-smoke-tests:
environment: integration
permissions:
checks: write
pull-requests: write
id-token: write
contents: read
name: Solana Smoke Tests
if: needs.solana-smoke-tests-setup.outputs.should-run-solana-tests == 'true'
runs-on: ${{ needs.labels.outputs.builder-runner-label || 'ubuntu22.04-8cores-32GB' }}
needs:
[
build-chainlink,
solana-build-contracts,
solana-build-test-image,
labels,
changes,
get-solana-sha,
solana-smoke-tests-setup,
]
env:
CHAINLINK_COMMIT_SHA: ${{ inputs.evm-ref || inputs.cl_ref || github.sha }}
CHAINLINK_ENV_USER: ${{ github.actor }}
TEST_LOG_LEVEL: debug
CONTRACT_ARTIFACTS_PATH: contracts/target/deploy
steps:
- name: Enable S3 Cache for Self-Hosted Runners
# these env vars are set (and exposed) when it is a self-hosted runner with extras=s3-cache
if: ${{ env.RUNS_ON_INSTANCE_ID != '' && env.ACTIONS_CACHE_URL != '' }}
uses: runs-on/action@66d4449b717b5462159659523d1241051ff470b9 # v1
- name: Checkout the repo
uses: actions/checkout@v4
with:
persist-credentials: false
repository: smartcontractkit/chainlink-solana
ref: ${{ needs.get-solana-sha.outputs.sha }}
- name: Run Setup
uses: smartcontractkit/.github/actions/ctf-setup-run-tests-environment@4ff522b1aef76519d2ced17b5d052927754fd34b # [email protected]
with:
go_mod_path: ./integration-tests/go.mod
cache_restore_only: true
cache_key_id: core-solana-e2e-${{ env.MOD_CACHE_VERSION }}
aws_registries: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}
dockerhub_username: ${{ secrets.DOCKERHUB_READONLY_USERNAME }}
dockerhub_password: ${{ secrets.DOCKERHUB_READONLY_PASSWORD }}
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }}
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
main-dns-zone: ${{ secrets.MAIN_DNS_ZONE_PUBLIC_SDLC }}
k8s-cluster-name: ${{ secrets.AWS_K8S_CLUSTER_NAME_SDLC }}
- name: Pull Artifacts
run: |
IMAGE_NAME=${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/chainlink-solana-tests:${{ needs.get-solana-sha.outputs.sha }}
# Pull the Docker image
docker pull "$IMAGE_NAME"
# Create a container without starting it
CONTAINER_ID=$(docker create "$IMAGE_NAME")
# Copy the artifacts from the container
mkdir -p ./${{env.CONTRACT_ARTIFACTS_PATH}}/
docker cp "$CONTAINER_ID:/go/testdir/${{env.CONTRACT_ARTIFACTS_PATH}}/" "./${{env.CONTRACT_ARTIFACTS_PATH}}/../"
# Remove the created container
docker rm "$CONTAINER_ID"
- name: Install Solana CLI # required for ensuring the local test validator is configured correctly
run: ./scripts/install-solana-ci.sh
- name: Install gauntlet
run: |
yarn --cwd ./gauntlet install --frozen-lockfile
yarn --cwd ./gauntlet build
yarn --cwd ./gauntlet gauntlet
- name: Generate config overrides
env:
VERSION: ${{ inputs.evm-ref || env.CHAINLINK_REF }}
run:
| # https://github.com/smartcontractkit/chainlink-testing-framework/lib/blob/main/config/README.md
cat << EOF > config.toml
[ChainlinkImage]
version="${{ env.VERSION }}"
[Common]
user="${{ github.actor }}"
internal_docker_repo = "${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com"
EOF
# shellcheck disable=SC2002
BASE64_CONFIG_OVERRIDE=$(cat config.toml | base64 -w 0)
# shellcheck disable=SC2086
echo ::add-mask::$BASE64_CONFIG_OVERRIDE
# shellcheck disable=SC2086
echo "BASE64_CONFIG_OVERRIDE=$BASE64_CONFIG_OVERRIDE" >> $GITHUB_ENV
- name: Run Tests
uses: smartcontractkit/.github/actions/ctf-run-tests@725dd141dd77cc87dad420e9484416fc4ae26be2 # [email protected]
env:
E2E_TEST_CHAINLINK_IMAGE: ${{ env.CHAINLINK_IMAGE }}
E2E_TEST_SOLANA_SECRET: thisisatestingonlysecret
CHAINLINK_USER_TEAM: "BIX"
with:
test_command_to_run: export ENV_JOB_IMAGE=${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/chainlink-solana-tests:${{ needs.get-solana-sha.outputs.sha }} && make test_smoke
test_config_override_base64: ${{ env.BASE64_CONFIG_OVERRIDE }}
cl_repo: ${{ env.CHAINLINK_IMAGE }}
cl_image_tag: test-${{ inputs.evm-ref || env.CHAINLINK_REF }}
publish_check_name: Solana Smoke Test Results
go_mod_path: ./integration-tests/go.mod
cache_key_id: core-solana-e2e-${{ env.MOD_CACHE_VERSION }}
token: ${{ secrets.GITHUB_TOKEN }}
aws_registries: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}
artifacts_name: solana-test-artifacts
artifacts_location: |
./integration-tests/smoke/logs
./integration-tests/smoke/db_dumps
./integration-tests/smoke/seth_artifacts
/tmp/gotest.log
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }}
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
run_setup: false
go_coverage_src_dir: /var/tmp/go-coverage
go_coverage_dest_dir: ${{ github.workspace }}/.covdata
main-dns-zone: ${{ secrets.MAIN_DNS_ZONE_PUBLIC_SDLC }}
k8s-cluster-name: ${{ secrets.AWS_K8S_CLUSTER_NAME_SDLC }}
- name: Upload Coverage Data
uses: actions/upload-artifact@v4
timeout-minutes: 2
continue-on-error: true
with:
name: cl_node_coverage_data_solana_tests
path: .covdata
retention-days: 1
notify-test-failure:
name: Notify Test Failure
# TODO: uncomment this when we want to notify on test failures post-merge, if Phase 3 is necessary
if: false
# if: ${{ github.ref_name == 'develop' && failure() }}
needs: [check-e2e-test-results, solana-smoke-tests]
runs-on: ubuntu-latest
steps:
- name: Send slack notification for failed migration tests
id: send-slack-notification
uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0
with:
errors: "true"
method: chat.postMessage
token: ${{ secrets.QA_SLACK_API_KEY }}
payload: |
{
"channel": "C023GJUSQ0H",
"text": "E2E Tests Failed Post-Merge, Immediate Action Required",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*:rotating_light: E2E Tests Failed Post-Merge, Immediate Action Required :rotating_light:*"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Alerting <!subteam^S04SLH4V4JJ|devex-cicd-oncall> and <@U01Q4N37KFG>, E2E tests failed for commit <${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}|${{ github.sha }}> on run ID <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|${{ github.run_id }}>. This commit was already merged to develop by user `${{ github.actor }}`. Please follow instructions below to remedy the issue."
}
},
{
"type": "divider"
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "1. Use the `/gh-lookup ${{ github.actor }}` command to find the who made the commit.\n2. <https://smartcontract-it.atlassian.net/wiki/spaces/ENG/pages/597262421/Raising+an+Incident|Raise a Pager Duty Incident> with that engineer to fix the issue.\n3. Start a 1 hour timer. If the E2E tests cannot be made passing on `develop` branch by then, please use `git revert <last-green-commit>` to revert the `develop` branch back to a happy state.\n4. Write a quick summary of the actions taken and post it in a thread to this message."
}
}
]
}