153 lines
5.2 KiB
YAML
153 lines
5.2 KiB
YAML
# 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
|