Node sync tests #419
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: Node sync tests | |
on: | |
workflow_dispatch: | |
branches: | |
- node_sync_tests | |
inputs: | |
environment: | |
description: Environment on which Buildkite agent will run tests | |
type: choice | |
options: | |
- mainnet | |
- preprod | |
- preview | |
default: mainnet | |
build_mode: | |
description: Build tool - currently only nix is supported, Windows agents can only build node with cabal | |
type: choice | |
options: | |
- nix | |
tag_no1: | |
description: rev_label in DB used for visuals - it is label used to distinct Microsoft BI graphs for various sync tests | |
required: true | |
default: "9.2.1-bootstrap-peers" | |
node_rev1: | |
description: Desired cardano-node revision used for initial sync | |
required: true | |
default: "tags/9.2.1" | |
node_topology1: | |
description: Desired cardano-node topology type used for initial sync | |
type: choice | |
options: | |
- legacy | |
- non-bootstrap-peers | |
- bootstrap-peers | |
default: bootstrap-peers | |
node_start_arguments1: | |
description: Extra arguments to be used when starting the node using tag_no1 during inital sync (--a1 --a2 21) | |
required: false | |
default: "None" | |
tag_no2: | |
description: Use only if you plan to test node upgrade from version specified above to this one - it is label used to distinct Microsoft BI graphs for various sync tests | |
required: true | |
default: "None" | |
node_rev2: | |
description: Use only if you plan to test node upgrade - desired cardano-node revision used for final sync for upgrade test | |
required: true | |
default: "None" | |
node_topology2: | |
description: Use only if you plan to test node upgrade - desired cardano-node topology type used for final sync for upgrade test | |
type: choice | |
options: | |
- legacy | |
- non-bootstrap-peers | |
- bootstrap-peers | |
default: bootstrap-peers | |
node_start_arguments2: | |
description: Use only if you plan to test node upgrade - extra arguments to be used when starting the node using tag_no2 (--a1 --a2 21). | |
required: false | |
default: "None" | |
jobs: | |
node_sync_test_buildkite_mainnet: | |
runs-on: ubuntu-latest | |
steps: | |
- name: trigger the Buildkite pipeline - run sync tests on Mainnet | |
uses: 'buildkite/[email protected]' | |
env: | |
BUILDKITE_API_ACCESS_TOKEN: ${{ secrets.BUILDKITE_API_ACCESS_TOKEN }} | |
PIPELINE: 'input-output-hk/qa-node-sync' | |
BRANCH: 'node_sync_tests' | |
MESSAGE: ':github: Triggered by GitHub Action' | |
AWS_DB_USERNAME: ${{ secrets.AWS_DB_USERNAME }} | |
AWS_DB_PASS: ${{ secrets.AWS_DB_PASS }} | |
AWS_DB_NAME: ${{ secrets.AWS_DB_NAME }} | |
AWS_DB_HOSTNAME: ${{ secrets.AWS_DB_HOSTNAME }} | |
BLOCKFROST_API_KEY: ${{ secrets.BLOCKFROST_API_KEY }} | |
BUILD_ENV_VARS: '{ | |
"env":"${{ github.event.inputs.environment }}", | |
"build_mode":"${{ github.event.inputs.build_mode }}", | |
"node_rev1":"${{ github.event.inputs.node_rev1 }}", | |
"node_rev2":"${{ github.event.inputs.node_rev2 }}", | |
"tag_no1":"${{ github.event.inputs.tag_no1 }}", | |
"tag_no2":"${{ github.event.inputs.tag_no2 }}", | |
"node_topology1":"${{ github.event.inputs.node_topology1 }}", | |
"node_topology2":"${{ github.event.inputs.node_topology2 }}", | |
"node_start_arguments1":"${{ github.event.inputs.node_start_arguments1 }}", | |
"node_start_arguments2":"${{ github.event.inputs.node_start_arguments2 }}", | |
"BLOCKFROST_API_KEY":"${{ secrets.BLOCKFROST_API_KEY }}", | |
"AWS_DB_USERNAME":"${{ secrets.AWS_DB_USERNAME }}", | |
"AWS_DB_PASS":"${{ secrets.AWS_DB_PASS }}", | |
"AWS_DB_NAME":"${{ secrets.AWS_DB_NAME }}", | |
"AWS_DB_HOSTNAME":"${{ secrets.AWS_DB_HOSTNAME }}" | |
}' | |
node_sync_test: | |
strategy: | |
matrix: | |
env: [preprod, preview] | |
ghc: ["9.6"] | |
cabal: ["3.12.1.0"] | |
sys: | |
- { os: windows-latest, shell: 'C:/msys64/usr/bin/bash.exe -e {0}' } | |
- { os: ubuntu-latest, shell: bash } | |
- { os: macos-latest, shell: bash } | |
branch: | |
- node_sync_tests | |
fail-fast: false | |
runs-on: ${{ matrix.sys.os }} | |
timeout-minutes: 600 | |
env: | |
MSYS2_PATH_TYPE: inherit | |
MSYSTEM: MINGW64 | |
steps: | |
- name: Install Haskell | |
if: matrix.sys.os == 'windows-latest' | |
uses: input-output-hk/actions/haskell@latest | |
id: setup-haskell | |
with: | |
ghc-version: ${{ matrix.ghc }} | |
cabal-version: ${{ matrix.cabal }} | |
- name: Install system dependencies | |
if: matrix.sys.os == 'windows-latest' | |
uses: input-output-hk/actions/base@latest | |
with: | |
use-sodium-vrf: true | |
- name: Checkout cardano-node-tests repository | |
uses: actions/checkout@v4 | |
with: | |
path: cardano_node_tests | |
ref: node_sync_tests | |
- name: Install nix | |
uses: cachix/install-nix-action@v27 | |
if: matrix.sys.os != 'windows-latest' | |
with: | |
extra_nix_config: | | |
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= | |
substituters = https://cache.nixos.org https://cache.iog.io | |
allow-import-from-derivation = true | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: Install Python dependencies | |
run: | | |
pip install pymysql | |
pip install requests | |
pip install psutil | |
pip install pandas | |
pip install blockfrost-python | |
pip install GitPython | |
pip install colorama | |
- name: "[Windows] Update environment variables" | |
if: runner.os == 'Windows' | |
shell: pwsh | |
run: | | |
"PATH=C:\\msys64\\mingw64\\opt\\cardano\\bin;C:\\msys64\\mingw64\\bin;{0}" -f $env:PATH >> $env:GITHUB_ENV | |
"PKG_CONFIG_PATH=C:\\msys64\\mingw64\\opt\\cardano\\lib\\pkgconfig;C:\\msys64\\mingw64\\lib\\pkgconfig;C:\\msys64\\mingw64\\share\\pkgconfig;C:\\msys64\\usr\\lib\\pkgconfig;C:\\msys64\\usr\\share\\pkgconfig;{0}" -f $env:PKG_CONFIG_PATH >> $env:GITHUB_ENV | |
- name: Run sync test | |
env: | |
BLOCKFROST_API_KEY: ${{ secrets.BLOCKFROST_API_KEY }} | |
run: | | |
cd cardano_node_tests | |
echo "current branch: $(git branch --show-current)" | |
python sync_tests/node_sync_test.py -e ${{ matrix.env }} -b ${{ github.event.inputs.build_mode }} -t1 "${{ github.event.inputs.tag_no1 }}" -t2 "${{ github.event.inputs.tag_no2 }}" -r1 "${{ github.event.inputs.node_rev1 }}" -r2 "${{ github.event.inputs.node_rev2 }}" -n1 "${{ github.event.inputs.node_topology1 }}" -n2 "${{ github.event.inputs.node_topology2 }}" -a1="${{ github.event.inputs.node_start_arguments1 }}" -a2="${{ github.event.inputs.node_start_arguments2 }}" | |
- name: Write the test results into the database | |
env: | |
AWS_DB_USERNAME: ${{ secrets.AWS_DB_USERNAME }} | |
AWS_DB_PASS: ${{ secrets.AWS_DB_PASS }} | |
AWS_DB_NAME: ${{ secrets.AWS_DB_NAME }} | |
AWS_DB_HOSTNAME: ${{ secrets.AWS_DB_HOSTNAME }} | |
BLOCKFROST_API_KEY: ${{ secrets.BLOCKFROST_API_KEY }} | |
run: | | |
cd cardano_node_tests | |
echo "current branch: $(git branch --show-current)" | |
python sync_tests/node_write_sync_values_to_db.py -e ${{ matrix.env }} | |
- name: Prepare node logs | |
if: always() | |
run: | | |
cd cardano_node_tests | |
cp logfile.log node.log | |
- name: Generate artifacts | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: node_logs_${{ matrix.env }}_${{ matrix.sys.os }} | |
path: | | |
cardano_node_tests/node.log | |
cardano_node_tests/sync_results.json | |
cardano_node_tests/config.json | |
cardano_node_tests/topology.json |