Skip to content

Run tests

Run tests #4

Workflow file for this run

# This workflow builds a Zebra Docker image and runs integration and unit tests
# on the Zebra codebase. It is designed to add the different test workflows
name: Run tests
# Ensures that only one workflow task will run at a time. Previous builds, if
# already in process, will get cancelled. Only the latest commit will be allowed
# to run, cancelling any workflows in between
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
on:
schedule:
# Run this job every Friday at mid-day UTC
# This is limited to the Zebra and lightwalletd Full Sync jobs
# TODO: we should move this behavior to a separate workflow
- cron: "0 12 * * 5"
workflow_dispatch:
inputs:
network:
default: "Mainnet"
description: "Network to deploy: Mainnet or Testnet"
required: true
regenerate-disks:
type: boolean
default: false
description: "Just run a Zebra checkpoint sync and update checkpoint disks"
required: true
run-full-sync:
type: boolean
default: false
description: "Just run a Zebra full sync on `network`, and update tip disks"
required: true
run-lwd-sync:
type: boolean
default: false
description: "Just run a lightwalletd full sync and update tip disks"
required: true
force_save_to_disk:
required: false
type: boolean
default: false
description: "Force tests to always create a cached state disk, if they already create disks"
no_cache:
description: "Disable the Docker cache for this build"
required: false
type: boolean
default: false
pull_request:
# Run only on PRs that modify Rust code or dependencies.
paths:
# code and tests
- "**/*.rs"
# hard-coded checkpoints and proptest regressions
- "**/*.txt"
# test data snapshots
- "**/*.snap"
# dependencies
- "**/Cargo.toml"
- "**/Cargo.lock"
# configuration files
- ".cargo/config.toml"
- "**/clippy.toml"
# workflow definitions
- "docker/**"
- ".dockerignore"
- ".github/workflows/ci-tests.yml"
- ".github/workflows/sub-ci-unit-tests-docker.yml"
- ".github/workflows/sub-ci-integration-tests-gcp.yml"
- ".github/workflows/sub-deploy-integration-tests-gcp.yml"
- ".github/workflows/sub-find-cached-disks.yml"
- ".github/workflows/sub-build-docker-image.yml"
push:
# Run only on main branch updates that modify Rust code or dependencies.
branches:
- main
paths:
# code and tests
- "**/*.rs"
# hard-coded checkpoints and proptest regressions
- "**/*.txt"
# test data snapshots
- "**/*.snap"
# dependencies
- "**/Cargo.toml"
- "**/Cargo.lock"
# configuration files
- ".cargo/config.toml"
- "**/clippy.toml"
# workflow definitions
- "docker/**"
- ".dockerignore"
- ".github/workflows/ci-tests.yml"
- ".github/workflows/sub-ci-unit-tests-docker.yml"
- ".github/workflows/sub-ci-integration-tests-gcp.yml"
- ".github/workflows/sub-deploy-integration-tests-gcp.yml"
- ".github/workflows/sub-find-cached-disks.yml"
- ".github/workflows/sub-build-docker-image.yml"
env:
RUST_LOG: ${{ vars.RUST_LOG }}
RUST_BACKTRACE: ${{ vars.RUST_BACKTRACE }}
RUST_LIB_BACKTRACE: ${{ vars.RUST_LIB_BACKTRACE }}
COLORBT_SHOW_HIDDEN: ${{ vars.COLORBT_SHOW_HIDDEN }}
CARGO_INCREMENTAL: ${{ vars.CARGO_INCREMENTAL }}
#! IMPORTANT
#!
#! The job names in `sub-ci-unit-tests-docker.yml`, `sub-ci-integration-tests-gcp.yml`,
#! `ci-tests.patch.yml` and `ci-tests.patch-external.yml` must be kept in sync.
jobs:
# Build the docker image used by the tests.
#
# The default network in the Zebra config in the image is mainnet, unless a manually triggered
# workflow or repository variable is configured differently. Testnet jobs change that config to
# testnet when running the image.
build:
name: Build images
# Skip PRs from external repositories, let them pass, and then Mergify will check them
if: ${{ !startsWith(github.event_name, 'pull') || !github.event.pull_request.head.repo.fork }}
uses: ./.github/workflows/sub-build-docker-image.yml
with:
dockerfile_path: ./docker/Dockerfile
dockerfile_target: tests
image_name: ${{ vars.CI_IMAGE_NAME }}
no_cache: ${{ inputs.no_cache || false }}
rust_backtrace: full
rust_lib_backtrace: full
rust_log: info
# This step needs access to Docker Hub secrets to run successfully
secrets: inherit
# Runs Zebra unit tests
unit-tests:
name: Unit tests
# Skip Unit tests when the event is a scheduled run, as this is just needed for integration tests
if: ${{ github.event_name != 'schedule' }}
needs: build
uses: ./.github/workflows/sub-ci-unit-tests-docker.yml
with:
image_digest: ${{ needs.build.outputs.image_digest }}
secrets: inherit
# Runs Zebra integration tests
integration-tests:
name: Integration tests
needs: build
uses: ./.github/workflows/sub-ci-integration-tests-gcp.yml
secrets: inherit