-
Notifications
You must be signed in to change notification settings - Fork 102
152 lines (143 loc) · 5.17 KB
/
ci-tests.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# 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