ref(docker): use cache mounts for build cache #561
Workflow file for this run
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
# 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 |