Skip to content

Node sync tests

Node sync tests #45

Workflow file for this run

name: Node sync tests
on:
workflow_dispatch:
inputs:
environment:
description: "Environment on which Buildkite agent will run tests"
type: choice
options:
- mainnet
- preprod
- preview
- shelley-qa
default: preprod
build_mode:
description: "build-mode"
type: choice
options:
- nix
default: nix
tag_no1:
description: "Initial sync - Graph axis label"
required: true
default: "9.2.1"
node_rev1:
description: "Initial sync - cardano-node revision"
required: true
default: "tags/9.2.1"
node_topology1:
description: "Initial sync - cardano-node topology"
type: choice
options:
- non-bootstrap-peers
- bootstrap-peers
default: legacy
node_start_arguments1:
description: "Initial sync - Extra arguments when starting the node"
required: false
default: "None"
tag_no2:
description: "Upgrade node - Graph axis label"
required: true
default: "None"
node_rev2:
description: "Upgrade node - cardano-node revision"
required: true
default: "None"
node_topology2:
description: "Upgrade node - cardano-node topology"
type: choice
options:
- legacy
- p2p
default: legacy
node_start_arguments2:
description: "Upgrade node - Extra arguments when starting the node"
required: false
default: "None"
jobs:
node_sync_test_buildkite_mainnet:
runs-on: ubuntu-latest
steps:
- name: Get latest node tag
id: get_tag
shell: bash
run: |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "Using manual input for tag_no1"
echo "node_rev1=${{ github.event.inputs.node_rev1 }}" >> $GITHUB_OUTPUT
else
echo "Fetching latest tag for scheduled run"
# Fetch the latest tag dynamically
node_release_url='https://api.github.com/repos/IntersectMBO/cardano-node/releases/latest'
latest_tag=$(curl -s $node_release_url | jq .tag_name -r)
echo "node_rev1=$latest_tag" >> $GITHUB_OUTPUT
# Fetch more details
latest_name=$(curl -s $node_release_url | jq .name -r)
latest_url=$(curl -s $node_release_url | jq .html_url -r)
latest_archive=$(curl -s $node_release_url | jq .assets[0].browser_download_url -r)
echo "Latest Release Name: $latest_name"
echo "Release URL: $latest_url"
echo "Download Archive URL: $latest_archive"
fi
- name: Trigger the Buildkite pipeline - run sync tests on Mainnet
uses: 'buildkite/trigger-pipeline-action@v1.5.0'
env:
BUILDKITE_API_ACCESS_TOKEN: ${{ secrets.BUILDKITE_API_ACCESS_TOKEN }}
PIPELINE: 'input-output-hk/node-sync-tests'
BRANCH: ${{ github.ref_name }}
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":"${{ steps.get_tag.outputs.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:
# skip windows for now, we need to check if is really worth the time to make it work
# - { os: windows-latest, shell: 'C:/msys64/usr/bin/bash.exe -e {0}' }
- { os: ubuntu-latest, shell: bash }
- { os: macos-latest, shell: bash }
branch:
- ${{ github.ref_name }}
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-sync-tests repository
uses: actions/checkout@v4
with:
path: cardano_sync_tests
ref: ${{ github.ref_name }}
- 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 on Windows
if: runner.os == 'Windows'
env:
BLOCKFROST_API_KEY: ${{ secrets.BLOCKFROST_API_KEY }}
run: |
cd cardano_sync_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 }}"
continue-on-error: true # This will ensure the job does not fail if Windows tests fail - which is expected because they run slower
- name: Run sync test
if: runner.os != 'Windows'
env:
BLOCKFROST_API_KEY: ${{ secrets.BLOCKFROST_API_KEY }}
run: |
cd cardano_sync_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_sync_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_sync_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_sync_tests/node.log
cardano_sync_tests/sync_results.json
cardano_sync_tests/config.json
cardano_sync_tests/topology.json