263 lines
8.0 KiB
YAML
263 lines
8.0 KiB
YAML
name: CI
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
pull_request:
|
|
paths:
|
|
# code and tests
|
|
- '**/*.rs'
|
|
# hard-coded checkpoints and proptest regressions
|
|
- '**/*.txt'
|
|
# test data snapshots
|
|
- '**/*.snap'
|
|
# dependencies
|
|
- '**/Cargo.toml'
|
|
- '**/Cargo.lock'
|
|
- '**/deny.toml'
|
|
# workflow definitions
|
|
- '.github/workflows/ci.yml'
|
|
|
|
env:
|
|
CARGO_INCREMENTAL: 0
|
|
RUST_BACKTRACE: full
|
|
RUST_LIB_BACKTRACE: full
|
|
COLORBT_SHOW_HIDDEN: '1'
|
|
|
|
jobs:
|
|
test:
|
|
name: Test ${{ matrix.rust }} on ${{ matrix.os }}
|
|
# The large timeout is to accommodate:
|
|
# - Windows builds (75 minutes, typically 30-50 minutes)
|
|
# - parameter downloads (40 minutes, but only when the cache expires)
|
|
timeout-minutes: 115
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
# TODO: Windows was removed for now, see https://github.com/ZcashFoundation/zebra/issues/3801
|
|
os: [ubuntu-latest, macOS-latest]
|
|
rust: [stable]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ matrix.rust }}
|
|
profile: minimal
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
|
|
- name: cargo fetch
|
|
uses: actions-rs/cargo@v1.0.3
|
|
with:
|
|
command: fetch
|
|
|
|
- name: Install LLVM on Windows
|
|
if: matrix.os == 'windows-latest'
|
|
run: |
|
|
choco install llvm -y
|
|
echo "C:\Program Files\LLVM\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "LIBCLANG_PATH=C:\Program Files\LLVM\bin" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
|
|
|
- name: Skip network tests on Ubuntu and Windows
|
|
# Ubuntu runners don't have reliable network or DNS during test steps.
|
|
# Windows runners have an unreliable network.
|
|
shell: bash
|
|
if: matrix.os != 'macOS-latest'
|
|
run: echo "ZEBRA_SKIP_NETWORK_TESTS=1" >> $GITHUB_ENV
|
|
|
|
- name: Minimise proptest cases on macOS and Windows
|
|
# We set cases to 1, because some tests already run 1 case by default.
|
|
# We keep maximum shrink iterations at the default value, because it only happens on failure.
|
|
#
|
|
# Windows compilation and tests are slower than other platforms.
|
|
# macOS runners do extra network tests, so they take longer.
|
|
shell: bash
|
|
if: matrix.os != 'ubuntu-latest'
|
|
run: |
|
|
echo "PROPTEST_CASES=1" >> $GITHUB_ENV
|
|
echo "PROPTEST_MAX_SHRINK_ITERS=1024" >> $GITHUB_ENV
|
|
|
|
- name: Change target output directory on Windows
|
|
# Windows doesn't have enough space on the D: drive, so we redirect the build output to the
|
|
# larger C: drive.
|
|
# TODO: Remove this workaround once the build is more efficient (#3005).
|
|
if: matrix.os == 'windows-latest'
|
|
run: |
|
|
mkdir C:\zebra-target
|
|
echo "CARGO_TARGET_DIR=C:\zebra-target" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
|
|
|
# Modified from:
|
|
# https://github.com/zcash/librustzcash/blob/c48bb4def2e122289843ddb3cb2984c325c03ca0/.github/workflows/ci.yml#L20-L33
|
|
- name: Fetch path to Zcash parameters
|
|
working-directory: ./zebra-consensus
|
|
shell: bash
|
|
run: echo "ZCASH_PARAMS=$(cargo run --example get-params-path)" >> $GITHUB_ENV
|
|
- name: Cache Zcash parameters
|
|
id: cache-params
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: ${{ env.ZCASH_PARAMS }}
|
|
key: ${{ runner.os }}-sprout-and-sapling-params
|
|
- name: Fetch Zcash parameters
|
|
if: steps.cache-params.outputs.cache-hit != 'true'
|
|
working-directory: ./zebra-consensus
|
|
run: cargo run --example download-params
|
|
|
|
- name: Run tests
|
|
uses: actions-rs/cargo@v1.0.3
|
|
with:
|
|
command: test
|
|
args: --verbose --all
|
|
|
|
# Explicitly run any tests that are usually #[ignored]
|
|
|
|
- name: Run zebrad large sync tests
|
|
# Skip the entire step on Ubuntu and Windows, because the test would be skipped anyway due to ZEBRA_SKIP_NETWORK_TESTS
|
|
if: matrix.os == 'macOS-latest'
|
|
uses: actions-rs/cargo@v1.0.3
|
|
with:
|
|
command: test
|
|
# Note: this only runs the zebrad acceptance tests, because re-running all the test binaries is slow on Windows
|
|
args: --verbose --package zebrad --test acceptance sync_large_checkpoints_ -- --ignored
|
|
|
|
test-fake-activation-heights:
|
|
name: Test ${{ matrix.rust }} zebra-state with fake activation heights on ubuntu-latest
|
|
timeout-minutes: 60
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
rust: [stable]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ matrix.rust }}
|
|
profile: minimal
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
|
|
- name: cargo fetch
|
|
uses: actions-rs/cargo@v1.0.3
|
|
with:
|
|
command: fetch
|
|
|
|
# This test changes zebra-chain's activation heights,
|
|
# which can recompile all the Zebra crates,
|
|
# so we want its build products to be cached separately.
|
|
#
|
|
# Also, we don't want to accidentally use the fake heights in other tests.
|
|
- name: Run tests with fake activation heights
|
|
uses: actions-rs/cargo@v1.0.3
|
|
env:
|
|
TEST_FAKE_ACTIVATION_HEIGHTS: ""
|
|
with:
|
|
command: test
|
|
# Note: this only runs the zebra-state crate tests,
|
|
# because re-running all the test binaries can be slow
|
|
args: --verbose --package zebra-state --lib -- with_fake_activation_heights
|
|
|
|
build-chain-no-features:
|
|
name: Build ${{ matrix.rust }} zebra-chain w/o features on ubuntu-latest
|
|
timeout-minutes: 60
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
rust: [stable, beta]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ matrix.rust }}
|
|
profile: minimal
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
|
|
- name: cargo fetch
|
|
uses: actions-rs/cargo@v1.0.3
|
|
with:
|
|
command: fetch
|
|
|
|
- name: Run build without features enabled
|
|
working-directory: ./zebra-chain
|
|
run: cargo build --verbose --no-default-features
|
|
|
|
build:
|
|
name: Build stable on ubuntu-latest
|
|
timeout-minutes: 60
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
profile: minimal
|
|
override: true
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
|
|
# This check makes sure the crate dependency check is accurate
|
|
- name: Check Cargo.lock is up to date
|
|
uses: actions-rs/cargo@v1.0.3
|
|
with:
|
|
command: check
|
|
args: --locked --all-features --all-targets
|
|
|
|
- name: cargo fetch
|
|
uses: actions-rs/cargo@v1.0.3
|
|
with:
|
|
command: fetch
|
|
|
|
- name: Build
|
|
uses: actions-rs/cargo@v1.0.3
|
|
with:
|
|
command: build
|
|
args: --verbose --release
|
|
|
|
cargo-deny:
|
|
name: Check deny.toml ${{ matrix.checks }}
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
checks:
|
|
- bans
|
|
- sources
|
|
|
|
# Prevent sudden announcement of a new advisory from failing ci:
|
|
continue-on-error: ${{ matrix.checks == 'advisories' }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- uses: EmbarkStudios/cargo-deny-action@v1
|
|
with:
|
|
command: check ${{ matrix.checks }}
|
|
args: --all-features --workspace
|
|
|
|
# this check runs with optional features off
|
|
# so we expect some warnings about "skip tree root was not found"
|
|
- uses: EmbarkStudios/cargo-deny-action@v1
|
|
with:
|
|
command: check ${{ matrix.checks }}
|
|
args: --workspace
|