262 lines
10 KiB
YAML
262 lines
10 KiB
YAML
name: Test
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
network:
|
|
default: 'Mainnet'
|
|
description: 'Network to deploy: Mainnet or Testnet'
|
|
required: true
|
|
checkpoint_sync:
|
|
default: 'true'
|
|
description: 'Configures `zebrad` to use as many checkpoints as possible'
|
|
required: true
|
|
regenerate-disks:
|
|
type: boolean
|
|
default: false
|
|
description: 'Just update mandatory checkpoint disks'
|
|
required: true
|
|
run-full-sync:
|
|
type: boolean
|
|
default: false
|
|
description: 'Just run a full sync and update tip disks'
|
|
required: true
|
|
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
paths:
|
|
# code and tests
|
|
- '**/*.rs'
|
|
# hard-coded checkpoints and proptest regressions
|
|
- '**/*.txt'
|
|
# test data snapshots
|
|
- '**/*.snap'
|
|
# dependencies
|
|
- '**/Cargo.toml'
|
|
- '**/Cargo.lock'
|
|
# workflow definitions
|
|
- 'docker/**'
|
|
- '.github/workflows/test.yml'
|
|
- '.github/workflows/gcp-test-deploy.yml'
|
|
- '.github/workflows/docker-image-build.yml'
|
|
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
# code and tests
|
|
- '**/*.rs'
|
|
# hard-coded checkpoints and proptest regressions
|
|
- '**/*.txt'
|
|
# test data snapshots
|
|
- '**/*.snap'
|
|
# dependencies
|
|
- '**/Cargo.toml'
|
|
- '**/Cargo.lock'
|
|
# workflow definitions
|
|
- 'docker/**'
|
|
- '.github/workflows/test.yml'
|
|
- '.github/workflows/gcp-test-deploy.yml'
|
|
- '.github/workflows/docker-image-build.yml'
|
|
|
|
env:
|
|
# TODO: use the output from ./.github/workflows/docker-image-build.yml
|
|
IMAGE_NAME: zebrad-test
|
|
GAR_BASE: us-docker.pkg.dev/zealous-zebra/zebra
|
|
|
|
jobs:
|
|
changed-files:
|
|
runs-on: ubuntu-latest
|
|
name: Checks changed-files
|
|
outputs:
|
|
rebuild: ${{ steps.changed-files-rebuild.outputs.any_changed == 'true' }}
|
|
steps:
|
|
- uses: actions/checkout@v3.0.2
|
|
with:
|
|
persist-credentials: false
|
|
fetch-depth: 0
|
|
|
|
- name: Disk rebuild files
|
|
id: changed-files-rebuild
|
|
uses: tj-actions/changed-files@v19
|
|
with:
|
|
files: |
|
|
zebra-state/**/constants.rs
|
|
|
|
build:
|
|
uses: ./.github/workflows/docker-image-build.yml
|
|
with:
|
|
dockerfile_path: ./docker/Dockerfile
|
|
dockerfile_target: tester
|
|
image_name: zebrad-test
|
|
# TODO: validate how to use variable/conditional values for Testnet
|
|
network: Mainnet
|
|
checkpoint_sync: true
|
|
rust_backtrace: full
|
|
rust_lib_backtrace: full
|
|
colorbt_show_hidden: '1'
|
|
zebra_skip_ipv6_tests: '1'
|
|
rust_log: info
|
|
|
|
# Run all the zebra tests, including tests that are ignored by default.
|
|
# Skips tests that need a cached state disk or a lightwalletd binary.
|
|
test-all:
|
|
name: Test all
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
if: ${{ github.event.inputs.regenerate-disks != 'true' && github.event.inputs.run-full-sync != 'true' }}
|
|
steps:
|
|
- name: Inject slug/short variables
|
|
uses: rlespinasse/github-slug-action@v4
|
|
with:
|
|
short-length: 7
|
|
|
|
- name: Run all zebrad tests
|
|
run: |
|
|
docker pull ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:sha-${{ env.GITHUB_SHA_SHORT }}
|
|
docker run --name zebrad-tests -t ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:sha-${{ env.GITHUB_SHA_SHORT }} cargo test --locked --release --features enable-sentry --workspace -- --include-ignored
|
|
|
|
# This test changes zebra-chain's activation heights,
|
|
# which can recompile all the Zebra crates,
|
|
# so we want its build products to be cached separately.
|
|
#
|
|
# Also, we don't want to accidentally use the fake heights in other tests.
|
|
test-fake-activation-heights:
|
|
name: Test with fake activation heights
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
if: ${{ github.event.inputs.regenerate-disks != 'true' && github.event.inputs.run-full-sync != 'true' }}
|
|
steps:
|
|
- name: Inject slug/short variables
|
|
uses: rlespinasse/github-slug-action@v4
|
|
with:
|
|
short-length: 7
|
|
|
|
- name: Run tests with fake activation heights
|
|
run: |
|
|
docker pull ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:sha-${{ env.GITHUB_SHA_SHORT }}
|
|
docker run -e TEST_FAKE_ACTIVATION_HEIGHTS --name zebrad-tests -t ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:sha-${{ env.GITHUB_SHA_SHORT }} cargo test --locked --release --package zebra-state --lib -- with_fake_activation_heights
|
|
env:
|
|
TEST_FAKE_ACTIVATION_HEIGHTS: '1'
|
|
|
|
# Test that Zebra syncs and checkpoints a few thousand blocks from an empty state
|
|
test-empty-sync:
|
|
name: Test checkpoint sync from empty state
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
if: ${{ github.event.inputs.regenerate-disks != 'true' && github.event.inputs.run-full-sync != 'true' }}
|
|
steps:
|
|
- name: Inject slug/short variables
|
|
uses: rlespinasse/github-slug-action@v4
|
|
with:
|
|
short-length: 7
|
|
|
|
- name: Run zebrad large sync tests
|
|
run: |
|
|
docker pull ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:sha-${{ env.GITHUB_SHA_SHORT }}
|
|
docker run --name zebrad-tests -t ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:sha-${{ env.GITHUB_SHA_SHORT }} cargo test --locked --release --features enable-sentry --test acceptance sync_large_checkpoints_ -- --ignored
|
|
|
|
# Test launching lightwalletd with an empty lightwalletd and Zebra state
|
|
test-lightwalletd-integration:
|
|
name: Test integration with lightwalletd
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
if: ${{ github.event.inputs.regenerate-disks != 'true' && github.event.inputs.run-full-sync != 'true' }}
|
|
steps:
|
|
- name: Inject slug/short variables
|
|
uses: rlespinasse/github-slug-action@v4
|
|
with:
|
|
short-length: 7
|
|
|
|
- name: Run tests with empty lightwalletd launch
|
|
run: |
|
|
docker pull ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:sha-${{ env.GITHUB_SHA_SHORT }}
|
|
docker run -e ZEBRA_TEST_LIGHTWALLETD --name lightwalletd-tests -t ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:sha-${{ env.GITHUB_SHA_SHORT }} cargo test --locked --release --features enable-sentry --test acceptance -- lightwalletd_integration --nocapture
|
|
env:
|
|
ZEBRA_TEST_LIGHTWALLETD: '1'
|
|
|
|
# Regenerate mandatory checkpoint disks.
|
|
# Runs:
|
|
# - on every PR update, but only if Zebra's state version changes in the PR
|
|
# - on request
|
|
regenerate-stateful-disks:
|
|
needs: [ build, changed-files]
|
|
uses: ./.github/workflows/gcp-test-deploy.yml
|
|
# Only run this job if the database format version has (likely) changed.
|
|
if: ${{ (needs.changed-files.outputs.rebuild == 'true' && github.event_name == 'push') || github.event.inputs.regenerate-disks == 'true' }}
|
|
with:
|
|
test_id: sync-to-checkpoint
|
|
test_description: Test sync up to mandatory checkpoint
|
|
test_variables: '-e TEST_DISK_REBUILD=1 -e ZEBRA_FORCE_USE_COLOR=1'
|
|
needs_zebra_state: false
|
|
saves_to_disk: true
|
|
disk_suffix: checkpoint
|
|
height_grep_text: 'flushing database to disk height=Height'
|
|
|
|
# Test that Zebra syncs and fully validates a few thousand blocks from a cached mandatory checkpoint disk
|
|
test-stateful-sync:
|
|
needs: build
|
|
uses: ./.github/workflows/gcp-test-deploy.yml
|
|
if: ${{ github.event.inputs.regenerate-disks != 'true' && github.event.inputs.run-full-sync != 'true' }}
|
|
with:
|
|
test_id: sync-past-checkpoint
|
|
test_description: Test full validation sync from a cached state
|
|
test_variables: '-e TEST_CHECKPOINT_SYNC=1 -e ZEBRA_FORCE_USE_COLOR=1'
|
|
needs_zebra_state: true
|
|
saves_to_disk: false
|
|
disk_suffix: checkpoint
|
|
|
|
# Test that Zebra can run a full mainnet sync and regenerate tip disks.
|
|
# Runs:
|
|
# - after every PR is merged to `main`
|
|
# - on every PR update, but only if Zebra's state version changes in the PR
|
|
# - on request
|
|
test-full-sync:
|
|
needs: build
|
|
uses: ./.github/workflows/gcp-test-deploy.yml
|
|
# TODO change `github.ref_name == 'main'` to `startsWith(github.head_ref, 'mergify/merge-queue/')`
|
|
# to only run on Mergify head branches, and on manual dispatch:
|
|
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-your-workflow-based-on-the-head-or-base-branch-of-a-pull-request-1
|
|
if: ${{ (github.event_name == 'push' && github.ref_name == 'main') || (needs.changed-files.outputs.rebuild == 'true' && github.event_name == 'push') || github.event.inputs.run-full-sync == 'true' }}
|
|
with:
|
|
test_id: full-sync-to-tip
|
|
test_description: Test a full sync up to the tip
|
|
test_variables: '-e TEST_FULL_SYNC=1 -e ZEBRA_FORCE_USE_COLOR=1 -e FULL_SYNC_MAINNET_TIMEOUT_MINUTES=600'
|
|
needs_zebra_state: false
|
|
saves_to_disk: true
|
|
disk_suffix: tip
|
|
height_grep_text: 'finished initial sync to chain tip, using gossiped blocks sync_percent=100.* current_height=Height'
|
|
|
|
# Test that Zebra can answer a synthetic RPC call, using a cached Zebra tip state
|
|
lightwalletd-rpc-test:
|
|
needs: build
|
|
uses: ./.github/workflows/gcp-test-deploy.yml
|
|
if: ${{ github.event.inputs.regenerate-disks != 'true' && github.event.inputs.run-full-sync != 'true' }}
|
|
with:
|
|
app_name: lightwalletd
|
|
test_id: fully-synced-rpc
|
|
test_description: Test lightwalletd RPC with a Zebra tip state
|
|
test_variables: '-e TEST_LWD_RPC_CALL=1 -e ZEBRA_TEST_LIGHTWALLETD=1 -e ZEBRA_FORCE_USE_COLOR=1 -e ZEBRA_CACHED_STATE_DIR=/var/cache/zebrad-cache'
|
|
needs_zebra_state: true
|
|
saves_to_disk: false
|
|
disk_suffix: tip
|
|
root_state_path: '/var/cache'
|
|
zebra_state_dir: 'zebrad-cache'
|
|
|
|
# Test that Zebra can handle a lightwalletd send transaction RPC call, using a cached Zebra tip state
|
|
# TODO: use a cached lightwalletd tip state to speed up the test (#4303)
|
|
lightwalletd-transactions-test:
|
|
needs: build
|
|
uses: ./.github/workflows/gcp-test-deploy.yml
|
|
if: ${{ github.event.inputs.regenerate-disks != 'true' && github.event.inputs.run-full-sync != 'true' }}
|
|
with:
|
|
app_name: lightwalletd
|
|
test_id: lwd-send-transactions
|
|
test_description: Test sending transactions via lightwalletd
|
|
test_variables: '-e TEST_LWD_TRANSACTIONS=1 -e ZEBRA_TEST_LIGHTWALLETD=1 -e ZEBRA_FORCE_USE_COLOR=1 -e ZEBRA_CACHED_STATE_DIR=/var/cache/zebrad-cache -e LIGHTWALLETD_DATA_DIR=/var/cache/lightwalletd-cache'
|
|
needs_zebra_state: true
|
|
saves_to_disk: false
|
|
disk_suffix: tip
|
|
root_state_path: '/var/cache'
|
|
zebra_state_dir: 'zebrad-cache' |