# 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