Integration Tests #29745
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 | |
on: | |
merge_group: | |
pull_request: | |
schedule: | |
# - cron: "0 0 * * *" | |
- cron: "0 * * * *" # every hour while we debug for flakes | |
push: | |
tags: | |
- "*" | |
# Only run 1 of this workflow at a time per PR | |
concurrency: | |
group: integration-tests-chainlink-${{ github.ref }} | |
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:${{ 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 | |
jobs: | |
changes: | |
environment: integration | |
name: Check Paths That Require Tests To Run | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1 | |
id: changes | |
with: | |
filters: | | |
src: | |
- '**/*.go' | |
- '**/*go.sum' | |
- '**/*go.mod' | |
- '.github/workflows/integration-tests.yml' | |
- '**/*Dockerfile' | |
- name: Collect Metrics | |
if: always() | |
id: collect-gha-metrics | |
uses: smartcontractkit/push-gha-metrics-action@d2c2b7bdc9012651230b2608a1bcb0c48538b6ec | |
with: | |
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }} | |
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }} | |
this-job-name: Check Paths That Require Tests To Run | |
continue-on-error: true | |
outputs: | |
src: ${{ steps.changes.outputs.src }} | |
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: ubuntu20.04-16cores-64GB | |
needs: [changes] | |
steps: | |
- name: Collect Metrics | |
if: needs.changes.outputs.src == 'true' | |
id: collect-gha-metrics | |
uses: smartcontractkit/push-gha-metrics-action@d2c2b7bdc9012651230b2608a1bcb0c48538b6ec | |
with: | |
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }} | |
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }} | |
this-job-name: Build Chainlink Image ${{ matrix.image.name }} | |
continue-on-error: true | |
- name: Checkout the repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha }} | |
- name: Check if image exists | |
if: needs.changes.outputs.src == 'true' | |
id: check-image | |
uses: smartcontractkit/chainlink-github-actions/docker/image-exists@00c6214deb10a3f374c6d3430c32c5202015d463 # v2.2.12 | |
with: | |
repository: chainlink | |
tag: ${{ github.sha }}${{ matrix.image.tag-suffix }} | |
AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
- name: Build Image | |
if: steps.check-image.outputs.exists == 'false' && needs.changes.outputs.src == 'true' | |
uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/build-image@00c6214deb10a3f374c6d3430c32c5202015d463 # v2.2.12 | |
with: | |
cl_repo: smartcontractkit/chainlink | |
cl_ref: ${{ github.sha }} | |
cl_dockerfile: ${{ matrix.image.dockerfile }} | |
push_tag: ${{ env.CHAINLINK_IMAGE }}:${{ github.sha }}${{ matrix.image.tag-suffix }} | |
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
- name: Print Chainlink Image Built | |
if: needs.changes.outputs.src == 'true' | |
run: | | |
echo "### chainlink node image tag used for this test run :link:" >>$GITHUB_STEP_SUMMARY | |
echo "\`${GITHUB_SHA}\`" >>$GITHUB_STEP_SUMMARY | |
build-test-image: | |
environment: integration | |
permissions: | |
id-token: write | |
contents: read | |
name: Build Test Image | |
runs-on: ubuntu20.04-16cores-64GB | |
needs: [changes] | |
steps: | |
- name: Collect Metrics | |
if: needs.changes.outputs.src == 'true' | |
id: collect-gha-metrics | |
uses: smartcontractkit/push-gha-metrics-action@d2c2b7bdc9012651230b2608a1bcb0c48538b6ec | |
with: | |
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }} | |
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }} | |
this-job-name: Build Test Image | |
continue-on-error: true | |
- name: Checkout the repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha }} | |
- name: Build Test Image | |
if: needs.changes.outputs.src == 'true' | |
uses: ./.github/actions/build-test-image | |
with: | |
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 }} | |
eth-smoke-tests-matrix: | |
environment: integration | |
permissions: | |
checks: write | |
pull-requests: write | |
id-token: write | |
contents: read | |
needs: [build-chainlink, changes, build-test-image] | |
env: | |
SELECTED_NETWORKS: SIMULATED,SIMULATED_1,SIMULATED_2 | |
CHAINLINK_COMMIT_SHA: ${{ github.sha }} | |
CHAINLINK_ENV_USER: ${{ github.actor }} | |
TEST_LOG_LEVEL: debug | |
strategy: | |
fail-fast: false | |
matrix: | |
product: | |
- name: automation | |
nodes: 19 | |
os: ubuntu-latest | |
pyroscope_env: ci-smoke-automation-evm-simulated | |
# temporarily disabled | |
# - name: ocr2vrf | |
# nodes: 2 | |
# os: ubuntu-latest | |
# pyroscope_env: ci-smoke-ocr2vrf-evm-simulated | |
runs-on: ${{ matrix.product.os }} | |
name: ETH Smoke Tests ${{ matrix.product.name }} | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha }} | |
## Run this step when changes that require tests to be run are made | |
- name: Run Tests | |
if: needs.changes.outputs.src == 'true' | |
uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@00c6214deb10a3f374c6d3430c32c5202015d463 # v2.2.12 | |
env: | |
TESTCONTAINERS_RYUK_DISABLED: true | |
PYROSCOPE_SERVER: ${{ matrix.product.pyroscope_env == '' && '' || !startsWith(github.ref, 'refs/tags/') && '' || secrets.QA_PYROSCOPE_INSTANCE }} # Avoid sending blank envs https://github.com/orgs/community/discussions/25725 | |
PYROSCOPE_ENVIRONMENT: ${{ matrix.product.pyroscope_env }} | |
PYROSCOPE_KEY: ${{ secrets.QA_PYROSCOPE_KEY }} | |
with: | |
test_command_to_run: make test_need_operator_assets && cd ./integration-tests && go test -timeout 30m -count=1 -json -test.parallel=${{ matrix.product.nodes }} ./smoke/${{ matrix.product.name }}_test.go 2>&1 | tee /tmp/gotest.log | gotestfmt | |
test_download_vendor_packages_command: cd ./integration-tests && go mod download | |
cl_repo: ${{ env.CHAINLINK_IMAGE }} | |
cl_image_tag: ${{ github.sha }} | |
aws_registries: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }} | |
artifacts_location: ./integration-tests/smoke/logs | |
publish_check_name: EVM Smoke Test Results ${{ matrix.product.name }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
go_mod_path: ./integration-tests/go.mod | |
cache_key_id: core-e2e-${{ env.MOD_CACHE_VERSION }} | |
cache_restore_only: 'true' | |
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }} | |
## Run this step when changes that do not need the test to run are made | |
- name: Run Setup | |
if: needs.changes.outputs.src == 'false' | |
uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/setup-run-tests-environment@00c6214deb10a3f374c6d3430c32c5202015d463 # v2.2.12 | |
with: | |
test_download_vendor_packages_command: cd ./integration-tests && go mod download | |
go_mod_path: ./integration-tests/go.mod | |
cache_key_id: core-e2e-${{ env.MOD_CACHE_VERSION }} | |
cache_restore_only: 'true' | |
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }} | |
- name: Upload test log | |
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 | |
if: failure() | |
with: | |
name: test-log-${{ matrix.product.name }} | |
path: /tmp/gotest.log | |
retention-days: 7 | |
continue-on-error: true | |
- name: Collect Metrics | |
if: always() | |
id: collect-gha-metrics | |
uses: smartcontractkit/push-gha-metrics-action@d2c2b7bdc9012651230b2608a1bcb0c48538b6ec | |
with: | |
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }} | |
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }} | |
this-job-name: ETH Smoke Tests ${{ matrix.product.name }} | |
test-results-file: '{"testType":"go","filePath":"/tmp/gotest.log"}' | |
continue-on-error: true | |
eth-smoke-tests-matrix-docker: | |
environment: integration | |
permissions: | |
checks: write | |
pull-requests: write | |
id-token: write | |
contents: read | |
needs: [build-chainlink, changes] | |
env: | |
SELECTED_NETWORKS: SIMULATED,SIMULATED_1,SIMULATED_2 | |
CHAINLINK_COMMIT_SHA: ${{ github.sha }} | |
CHAINLINK_ENV_USER: ${{ github.actor }} | |
TEST_LOG_LEVEL: debug | |
strategy: | |
fail-fast: false | |
matrix: | |
product: | |
- name: cron | |
nodes: 1 | |
os: ubuntu-latest | |
pyroscope_env: "" | |
- name: flux | |
nodes: 1 | |
os: ubuntu-latest | |
pyroscope_env: "" | |
- name: ocr | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-ocr-evm-simulated | |
- name: ocr2 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-ocr2-evm-simulated | |
- name: runlog | |
nodes: 1 | |
os: ubuntu-latest | |
pyroscope_env: "" | |
- name: vrf | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-vrf-evm-simulated | |
- name: vrfv2 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-vrf2-evm-simulated | |
- name: forwarder_ocr | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-forwarder-ocr-evm-simulated | |
- name: forwarders_ocr2 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-forwarder-ocr-evm-simulated | |
# Keeper tests split out to use minimal environments | |
- name: keeper-1 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperBasicSmoke$ | |
- name: keeper-2 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperBlockCountPerTurn/registry_1_1$ | |
- name: keeper-3 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperBlockCountPerTurn/registry_1_2$ | |
- name: keeper-4 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperBlockCountPerTurn/registry_1_3$ | |
- name: keeper-5 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperSimulation$ | |
- name: keeper-6 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperCheckPerformGasLimit/registry_1_2$ | |
- name: keeper-7 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperCheckPerformGasLimit/registry_1_3$ | |
- name: keeper-8 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperRegisterUpkeep$ | |
- name: keeper-9 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperAddFunds$ | |
- name: keeper-10 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperRemove$ | |
- name: keeper-11 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperPauseRegistry$ | |
- name: keeper-12 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperMigrateRegistry$ | |
- name: keeper-13 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperNodeDown/registry_1_1$ | |
- name: keeper-14 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperNodeDown/registry_1_2$ | |
- name: keeper-15 | |
nodes: 1 | |
os: ubuntu20.04-8cores-32GB | |
pyroscope_env: ci-smoke-keeper-evm-simulated | |
file: keeper | |
run: -run ^TestKeeperNodeDown/registry_1_3$ | |
runs-on: ${{ matrix.product.os }} | |
name: ETH Smoke Tests ${{ matrix.product.name }} | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha }} | |
- name: Build Go Test Command | |
id: build-go-test-command | |
run: | | |
# if the matrix.product.run is set, use it for a different command | |
if [ "${{ matrix.product.run }}" != "" ]; then | |
echo "run_command=${{ matrix.product.run }} ./smoke/${{ matrix.product.file }}_test.go" >> "$GITHUB_OUTPUT" | |
else | |
echo "run_command=./smoke/${{ matrix.product.name }}_test.go" >> "$GITHUB_OUTPUT" | |
fi | |
## Run this step when changes that require tests to be run are made | |
- name: Run Tests | |
if: needs.changes.outputs.src == 'true' | |
uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@00c6214deb10a3f374c6d3430c32c5202015d463 # v2.2.12 | |
env: | |
PYROSCOPE_SERVER: ${{ matrix.product.pyroscope_env == '' && '' || !startsWith(github.ref, 'refs/tags/') && '' || secrets.QA_PYROSCOPE_INSTANCE }} # Avoid sending blank envs https://github.com/orgs/community/discussions/25725 | |
PYROSCOPE_ENVIRONMENT: ${{ matrix.product.pyroscope_env }} | |
PYROSCOPE_KEY: ${{ secrets.QA_PYROSCOPE_KEY }} | |
with: | |
test_command_to_run: make test_need_operator_assets && cd ./integration-tests && go test -timeout 30m -count=1 -json -test.parallel=${{ matrix.product.nodes }} ${{ steps.build-go-test-command.outputs.run_command }} 2>&1 | tee /tmp/gotest.log | gotestfmt | |
test_download_vendor_packages_command: cd ./integration-tests && go mod download | |
cl_repo: ${{ env.CHAINLINK_IMAGE }} | |
cl_image_tag: ${{ github.sha }} | |
aws_registries: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }} | |
artifacts_location: ./integration-tests/smoke/logs | |
publish_check_name: EVM Smoke Test Results ${{ matrix.product.name }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
go_mod_path: ./integration-tests/go.mod | |
cache_key_id: core-e2e-${{ env.MOD_CACHE_VERSION }} | |
cache_restore_only: 'true' | |
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }} | |
## Run this step when changes that do not need the test to run are made | |
- name: Run Setup | |
if: needs.changes.outputs.src == 'false' | |
uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/setup-run-tests-environment@00c6214deb10a3f374c6d3430c32c5202015d463 # v2.2.12 | |
with: | |
test_download_vendor_packages_command: cd ./integration-tests && go mod download | |
go_mod_path: ./integration-tests/go.mod | |
cache_key_id: core-e2e-${{ env.MOD_CACHE_VERSION }} | |
cache_restore_only: 'true' | |
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }} | |
- name: Upload test log | |
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 | |
if: failure() | |
with: | |
name: test-log-${{ matrix.product.name }} | |
path: /tmp/gotest.log | |
retention-days: 7 | |
continue-on-error: true | |
- name: Collect Metrics | |
if: always() | |
id: collect-gha-metrics | |
uses: smartcontractkit/push-gha-metrics-action@d2c2b7bdc9012651230b2608a1bcb0c48538b6ec | |
with: | |
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }} | |
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }} | |
this-job-name: ETH Smoke Tests ${{ matrix.product.name }} | |
test-results-file: '{"testType":"go","filePath":"/tmp/gotest.log"}' | |
continue-on-error: true | |
### Used to check the required checks box when the matrix completes | |
eth-smoke-tests: | |
if: always() | |
runs-on: ubuntu-latest | |
name: ETH Smoke Tests | |
needs: [eth-smoke-tests-matrix,eth-smoke-tests-matrix-docker] | |
steps: | |
- name: Check smoke test matrix status | |
if: needs.eth-smoke-tests-matrix.result != 'success' || needs.eth-smoke-tests-matrix-docker.result != 'success' | |
run: exit 1 | |
- name: Collect Metrics | |
if: always() | |
id: collect-gha-metrics | |
uses: smartcontractkit/push-gha-metrics-action@d2c2b7bdc9012651230b2608a1bcb0c48538b6ec | |
with: | |
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }} | |
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }} | |
this-job-name: ETH Smoke Tests | |
continue-on-error: true | |
# Run the setup if the matrix finishes but this time save the cache if we have a cache hit miss | |
# this will also only run if both of the matrix jobs pass | |
eth-smoke-go-mod-cache: | |
environment: integration | |
needs: [eth-smoke-tests] | |
runs-on: ubuntu20.04-16cores-64GB | |
name: ETH Smoke Tests Go Mod Cache | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha }} | |
- name: Run Setup | |
uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/setup-go@00c6214deb10a3f374c6d3430c32c5202015d463 # v2.2.12 | |
with: | |
test_download_vendor_packages_command: | | |
cd ./integration-tests | |
go mod download | |
# force download of test dependencies | |
go test -run=NonExistentTest ./smoke/... || echo "ignore expected test failure" | |
go_mod_path: ./integration-tests/go.mod | |
cache_key_id: core-e2e-${{ env.MOD_CACHE_VERSION }} | |
cache_restore_only: 'false' | |
### Migration tests | |
node-migration-tests: | |
name: Version Migration Tests | |
environment: integration | |
permissions: | |
checks: write | |
pull-requests: write | |
id-token: write | |
contents: read | |
runs-on: ubuntu-latest | |
needs: [build-chainlink, changes, build-test-image] | |
# Only run migration tests on new tags | |
if: startsWith(github.ref, 'refs/tags/') | |
env: | |
SELECTED_NETWORKS: SIMULATED,SIMULATED_1,SIMULATED_2 | |
CHAINLINK_COMMIT_SHA: ${{ github.sha }} | |
CHAINLINK_ENV_USER: ${{ github.actor }} | |
CHAINLINK_IMAGE: public.ecr.aws/chainlink/chainlink | |
TEST_UPGRADE_VERSION: ${{ github.sha }} | |
TEST_UPGRADE_IMAGE: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/chainlink | |
TEST_LOG_LEVEL: debug | |
TEST_SUITE: migration | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha }} | |
- name: Get Latest Version | |
id: get_latest_version | |
run: | | |
untrimmed_ver=$(curl --header "Authorization: token ${{ secrets.GITHUB_TOKEN }}" --request GET https://api.github.com/repos/${{ github.repository }}/releases/latest | jq -r .name) | |
latest_version="${untrimmed_ver:1}" | |
echo "latest_version=${latest_version} | tee -a $GITHUB_OUTPUT" | |
- name: Name Versions | |
run: | | |
echo "Running migration tests from version '${{ steps.get_latest_version.outputs.latest_version }}' to: '${{ github.sha }}'" | |
- name: Run Migration Tests | |
uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@00c6214deb10a3f374c6d3430c32c5202015d463 # v2.2.12 | |
with: | |
test_command_to_run: make test_need_operator_assets && cd ./integration-tests && go test -timeout 30m -count=1 -json ./migration 2>&1 | tee /tmp/gotest.log | gotestfmt | |
test_download_vendor_packages_command: cd ./integration-tests && go mod download | |
cl_repo: ${{ env.CHAINLINK_IMAGE }} | |
cl_image_tag: ${{ steps.get_latest_version.outputs.latest_version }} | |
artifacts_location: ./integration-tests/migration/logs | |
publish_check_name: Node Migration Test Results | |
token: ${{ secrets.GITHUB_TOKEN }} | |
go_mod_path: ./integration-tests/go.mod | |
cache_key_id: core-e2e-${{ env.MOD_CACHE_VERSION }} | |
cache_restore_only: 'true' | |
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }} | |
- name: Upload test log | |
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 | |
if: failure() | |
with: | |
name: test-log-${{ matrix.product.name }} | |
path: /tmp/gotest.log | |
retention-days: 7 | |
continue-on-error: true | |
- name: Collect Metrics | |
if: always() | |
id: collect-gha-metrics | |
uses: smartcontractkit/push-gha-metrics-action@d2c2b7bdc9012651230b2608a1bcb0c48538b6ec | |
with: | |
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }} | |
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }} | |
this-job-name: Version Migration Tests | |
test-results-file: '{"testType":"go","filePath":"/tmp/gotest.log"}' | |
continue-on-error: true | |
### Solana Section | |
get_solana_sha: | |
name: Get Solana Sha From Go Mod | |
environment: Integration | |
runs-on: ubuntu-latest | |
outputs: | |
sha: ${{ steps.getsha.outputs.sha }} | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha }} | |
- name: Get the sha from go mod | |
id: getshortsha | |
run: | | |
sol_ver=$(go list -m -json github.com/smartcontractkit/chainlink-solana | jq -r .Version) | |
short_sha="${sol_ver##*-}" | |
echo "short sha is: ${short_sha}" | |
echo "short_sha=${short_sha}" >> "$GITHUB_OUTPUT" | |
- name: Checkout solana | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
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}}) | |
echo "sha is: ${full_sha}" | |
echo "sha=${full_sha}" >> "$GITHUB_OUTPUT" | |
get_projectserum_version: | |
name: Get ProjectSerum Version | |
environment: integration | |
runs-on: ubuntu-latest | |
needs: [get_solana_sha] | |
outputs: | |
projectserum_version: ${{ steps.psversion.outputs.projectserum_version }} | |
steps: | |
- name: Checkout the solana repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
repository: smartcontractkit/chainlink-solana | |
ref: ${{ needs.get_solana_sha.outputs.sha }} | |
- name: Get ProjectSerum Version | |
id: psversion | |
uses: smartcontractkit/chainlink-solana/.github/actions/projectserum_version@4b971869e26b79c7ce3fb7c98005cc2e3f350915 # stable action on Oct 12 2022 | |
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@00c6214deb10a3f374c6d3430c32c5202015d463 # v2.2.12 | |
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: | |
environment: integration | |
permissions: | |
checks: write | |
pull-requests: write | |
id-token: write | |
contents: read | |
name: Solana Build Artifacts | |
runs-on: ubuntu20.04-16cores-64GB | |
needs: | |
[ | |
changes, | |
get_projectserum_version, | |
solana-test-image-exists, | |
get_solana_sha, | |
] | |
container: | |
image: projectserum/build:${{ needs.get_projectserum_version.outputs.projectserum_version }} | |
env: | |
RUSTUP_HOME: "/root/.rustup" | |
FORCE_COLOR: 1 | |
steps: | |
- name: Collect Metrics | |
if: needs.changes.outputs.src == 'true' | |
id: collect-gha-metrics | |
uses: smartcontractkit/push-gha-metrics-action@d2c2b7bdc9012651230b2608a1bcb0c48538b6ec | |
with: | |
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }} | |
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }} | |
this-job-name: Solana Build Artifacts | |
continue-on-error: true | |
- name: Checkout the solana repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
repository: smartcontractkit/chainlink-solana | |
ref: ${{ needs.get_solana_sha.outputs.sha }} | |
- name: Build contracts | |
if: needs.changes.outputs.src == 'true' && needs.solana-test-image-exists.outputs.exists == 'false' | |
uses: smartcontractkit/chainlink-solana/.github/actions/build_contract_artifacts@23816fcf7d380a30c87b6d87e4fb0ca94419b259 # stable action on April 17 2023 | |
with: | |
ref: ${{ needs.get_solana_sha.outputs.sha }} | |
solana-build-test-image: | |
environment: integration | |
permissions: | |
checks: write | |
pull-requests: write | |
id-token: write | |
contents: read | |
name: Solana Build Test Image | |
runs-on: ubuntu20.04-16cores-64GB | |
needs: | |
[ | |
solana-build-contracts, | |
solana-test-image-exists, | |
changes, | |
get_solana_sha, | |
] | |
env: | |
CONTRACT_ARTIFACTS_PATH: contracts/target/deploy | |
steps: | |
- name: Collect Metrics | |
if: needs.changes.outputs.src == 'true' | |
id: collect-gha-metrics | |
uses: smartcontractkit/push-gha-metrics-action@d2c2b7bdc9012651230b2608a1bcb0c48538b6ec | |
with: | |
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }} | |
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }} | |
this-job-name: Solana Build Test Image | |
continue-on-error: true | |
- name: Checkout the repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
repository: smartcontractkit/chainlink-solana | |
ref: 23816fcf7d380a30c87b6d87e4fb0ca94419b259 # swtich back to this after the next solana release${{ needs.get_solana_sha.outputs.sha }} | |
- name: Build Test Image | |
if: needs.changes.outputs.src == 'true' && needs.solana-test-image-exists.outputs.exists == 'false' | |
uses: ./.github/actions/build-test-image | |
with: | |
tag: ${{ needs.get_solana_sha.outputs.sha }} | |
artifacts_path: ${{ env.CONTRACT_ARTIFACTS_PATH }} | |
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 | |
strategy: | |
matrix: | |
image: | |
- name: "" | |
tag-suffix: "" | |
- name: (plugins) | |
tag-suffix: -plugins | |
name: Solana Smoke Tests ${{ matrix.image.name }} | |
runs-on: ubuntu-latest | |
needs: | |
[ | |
build-chainlink, | |
solana-build-contracts, | |
solana-build-test-image, | |
changes, | |
get_solana_sha, | |
] | |
env: | |
CHAINLINK_COMMIT_SHA: ${{ github.sha }} | |
CHAINLINK_ENV_USER: ${{ github.actor }} | |
TEST_LOG_LEVEL: debug | |
CONTRACT_ARTIFACTS_PATH: contracts/target/deploy | |
steps: | |
- name: Collect Metrics | |
if: needs.changes.outputs.src == 'true' | |
id: collect-gha-metrics | |
uses: smartcontractkit/push-gha-metrics-action@d2c2b7bdc9012651230b2608a1bcb0c48538b6ec | |
with: | |
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }} | |
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }} | |
this-job-name: Solana Smoke Tests ${{ matrix.image.name }} | |
test-results-file: '{"testType":"go","filePath":"/tmp/gotest.log"}' | |
continue-on-error: true | |
- name: Checkout the repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
repository: smartcontractkit/chainlink-solana | |
ref: ${{ needs.get_solana_sha.outputs.sha }} | |
- name: Run Tests | |
if: needs.changes.outputs.src == 'true' | |
uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@00c6214deb10a3f374c6d3430c32c5202015d463 # v2.2.12 | |
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 | |
cl_repo: ${{ env.CHAINLINK_IMAGE }} | |
cl_image_tag: ${{ github.sha }}${{ matrix.image.tag-suffix }} | |
artifacts_location: /home/runner/work/chainlink-solana/chainlink-solana/integration-tests/logs | |
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 }} | |
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }} | |
- name: Upload test log | |
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 | |
if: failure() | |
with: | |
name: test-log-solana | |
path: /tmp/gotest.log | |
retention-days: 7 | |
continue-on-error: true | |
### End Solana Section | |
### Start Live Testnet Section | |
testnet-smoke-tests-matrix: | |
if: ${{ github.event_name == 'schedule' || (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) }} ## Only run live tests on new tags and nightly | |
environment: integration | |
permissions: | |
checks: write | |
pull-requests: write | |
id-token: write | |
contents: read | |
needs: [build-chainlink, build-test-image] | |
env: | |
SELECTED_NETWORKS: ${{ matrix.testnet }} | |
CHAINLINK_COMMIT_SHA: ${{ github.sha }} | |
CHAINLINK_ENV_USER: ${{ github.actor }} | |
TEST_LOG_LEVEL: debug | |
EVM_KEYS: ${{ secrets.QA_EVM_KEYS }} | |
TEST_EVM_KEYS: ${{ secrets.QA_EVM_KEYS }} | |
TEST_OPTIMISM_GOERLI_URLS: ${{ secrets.QA_OPTIMISM_GOERLI_URLS }} | |
TEST_OPTIMISM_GOERLI_HTTP_URLS: ${{ secrets.QA_OPTIMISM_GOERLI_HTTP_URLS }} | |
TEST_ARBITRUM_GOERLI_URLS: ${{ secrets.QA_ARBITRUM_GOERLI_URLS }} | |
TEST_ARBITRUM_GOERLI_HTTP_URLS: ${{ secrets.QA_ARBITRUM_GOERLI_HTTP_URLS }} | |
strategy: | |
fail-fast: false | |
matrix: | |
# NOTE: If changing this matrix, make sure to update the matrix in the testnet-smoke-tests-notify job to be the same | |
# otherwise reporting will be broken. Getting a single matrix for multiple jobs is a pain | |
# https://github.com/orgs/community/discussions/26284#discussioncomment-3251198 | |
testnet: [OPTIMISM_GOERLI, ARBITRUM_GOERLI] | |
name: Live Testnet Smoke Tests ${{ matrix.testnet }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha }} | |
## Only run OCR smoke test for now | |
- name: Run Tests | |
uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@00c6214deb10a3f374c6d3430c32c5202015d463 # v2.2.12 | |
env: | |
PYROSCOPE_SERVER: ${{ secrets.QA_PYROSCOPE_INSTANCE }} | |
PYROSCOPE_ENVIRONMENT: ci-smoke-ocr-evm-${{ matrix.testnet }} # TODO: Only for OCR for now | |
PYROSCOPE_KEY: ${{ secrets.QA_PYROSCOPE_KEY }} | |
with: | |
test_command_to_run: make test_need_operator_assets && cd ./integration-tests && go test -timeout 30m -count=1 -json -test.parallel=1 ./smoke/ocr_test.go 2>&1 | tee /tmp/gotest.log | gotestfmt | |
test_download_vendor_packages_command: cd ./integration-tests && go mod download | |
cl_repo: ${{ env.CHAINLINK_IMAGE }} | |
cl_image_tag: ${{ github.sha }} | |
aws_registries: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }} | |
artifacts_location: ./integration-tests/smoke/logs | |
publish_check_name: ${{ matrix.testnet }} OCR Smoke Test Results | |
token: ${{ secrets.GITHUB_TOKEN }} | |
go_mod_path: ./integration-tests/go.mod | |
cache_key_id: core-e2e-${{ env.MOD_CACHE_VERSION }} | |
cache_restore_only: 'true' | |
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }} | |
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} | |
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }} | |
- name: Collect Metrics | |
if: always() | |
id: collect-gha-metrics | |
uses: smartcontractkit/push-gha-metrics-action@d2c2b7bdc9012651230b2608a1bcb0c48538b6ec | |
with: | |
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }} | |
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }} | |
this-job-name: Live Testnet Smoke Tests ${{ matrix.testnet }} | |
test-results-file: '{"testType":"go","filePath":"/tmp/gotest.log"}' | |
continue-on-error: true | |
testnet-smoke-tests-notify: | |
name: Live Testnet Start Slack Thread | |
if: ${{ github.event_name == 'schedule' || (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) }} ## Only run live tests on new tags and nightly | |
environment: integration | |
outputs: | |
thread_ts: ${{ steps.slack.outputs.thread_ts }} | |
permissions: | |
checks: write | |
pull-requests: write | |
id-token: write | |
contents: read | |
runs-on: ubuntu-latest | |
needs: testnet-smoke-tests-matrix | |
steps: | |
- name: Debug Result | |
run: echo ${{needs.testnet-smoke-tests-matrix.result}} | |
- name: Main Slack Notification | |
uses: slackapi/slack-github-action@e28cf165c92ffef168d23c5c9000cffc8a25e117 # v1.24.0 | |
id: slack | |
with: | |
channel-id: ${{ secrets.QA_SLACK_CHANNEL }} | |
payload: | | |
{ | |
"attachments": [ | |
{ | |
"color": "${{ needs.testnet-smoke-tests-matrix.result == 'success' && '#2E7D32' || '#C62828' }}", | |
"blocks": [ | |
{ | |
"type": "header", | |
"text": { | |
"type": "plain_text", | |
"text": "Live Smoke Test Results ${{ needs.testnet-smoke-tests-matrix.result == 'success' && ':white_check_mark:' || ':x:'}}", | |
"emoji": true | |
} | |
}, | |
{ | |
"type": "divider" | |
}, | |
{ | |
"type": "section", | |
"text": { | |
"type": "mrkdwn", | |
"text": "<${{ github.server_url }}/${{ github.repository }}/releases/tag/${{ github.ref_name }}|${{ github.ref_name }}> | <${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}|${{ github.sha }}> | <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|Run>" | |
} | |
} | |
] | |
} | |
] | |
} | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.QA_SLACK_API_KEY }} | |
testnet-smoke-tests-results: | |
name: Post Live Testnet Smoke Test Results | |
environment: integration | |
permissions: | |
checks: write | |
pull-requests: write | |
id-token: write | |
contents: read | |
runs-on: ubuntu-latest | |
needs: testnet-smoke-tests-notify | |
strategy: | |
fail-fast: false | |
matrix: | |
# NOTE: If changing this matrix, make sure to update the matrix in the testnet-smoke-tests-matrix job to be the same | |
# otherwise reporting will be broken. Getting a single matrix for multiple jobs is a pain | |
# https://github.com/orgs/community/discussions/26284#discussioncomment-3251198 | |
testnet: [OPTIMISM_GOERLI, ARBITRUM_GOERLI] | |
steps: | |
- name: Get Results | |
id: test-results | |
run: | | |
echo "Querying test results" | |
echo "status=$(curl \ | |
-H "Authorization: Bearer ${{ github.token }}" \ | |
'https://api.github.com/repos/${{github.repository}}/actions/runs/${{ github.run_id }}/jobs' \ | |
| jq -r '.jobs[] | select(.name == "Live Testnet Smoke Tests ${{ matrix.testnet}}").steps[] | select(.name == "Run Tests").conclusion')" >> $GITHUB_OUTPUT | |
echo "status=$(curl \ | |
-H "Authorization: Bearer ${{ github.token }}" \ | |
'https://api.github.com/repos/${{github.repository}}/actions/runs/${{ github.run_id }}/jobs' \ | |
| jq -r '.jobs[] | select(.name == "Live Testnet Smoke Tests ${{ matrix.testnet}}").steps[] | select(.name == "Run Tests").conclusion')" | |
echo "thread_ts=${{ needs.testnet-smoke-tests-notify.outputs.thread_ts }}" | |
- name: Test Details | |
uses: slackapi/slack-github-action@e28cf165c92ffef168d23c5c9000cffc8a25e117 # v1.24.0 | |
with: | |
channel-id: ${{ secrets.QA_SLACK_CHANNEL }} | |
payload: | | |
{ | |
"thread_ts": "${{ needs.testnet-smoke-tests-notify.outputs.thread_ts }}", | |
"attachments": [ | |
{ | |
"color": "${{ steps.test-results.outputs.status == 'success' && '#2E7D32' || '#C62828' }}", | |
"blocks": [ | |
{ | |
"type": "header", | |
"text": { | |
"type": "plain_text", | |
"text": "${{ matrix.testnet }} Smoke Test Results ${{ steps.test-results.outputs.status == 'success' && ':white_check_mark:' || ':x:'}}", | |
"emoji": true | |
} | |
}, | |
{ | |
"type": "divider" | |
}, | |
{ | |
"type": "section", | |
"text": { | |
"type": "mrkdwn", | |
"text": "OCR ${{ steps.test-results.outputs.status == 'success' && ':white_check_mark:' || ':x:'}}" | |
} | |
} | |
] | |
} | |
] | |
} | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.QA_SLACK_API_KEY }} | |
### End Live Testnet Section |