zcash_pool_migration: Detect unsatisfiable migration steps and surface replanning #10288
Workflow file for this run
This file contains hidden or 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
| name: CI | |
| permissions: {} | |
| on: | |
| pull_request: | |
| push: | |
| branches: main | |
| merge_group: | |
| schedule: | |
| - cron: '23 8 * * *' | |
| workflow_dispatch: | |
| concurrency: | |
| group: >- | |
| ${{ | |
| format( | |
| 'ci-{0}-{1}-{2}', | |
| github.workflow, | |
| github.event_name, | |
| github.event.pull_request.number || github.ref | |
| ) | |
| }} | |
| cancel-in-progress: >- | |
| ${{ | |
| github.event_name == 'pull_request' | |
| || ( | |
| github.event_name == 'push' | |
| && github.ref == 'refs/heads/main' | |
| ) | |
| }} | |
| env: | |
| # Full debug information substantially increases optimized test linking time and | |
| # cache size, particularly on Windows. Line tables retain useful CI backtraces. | |
| CARGO_PROFILE_TEST_DEBUG: 1 | |
| # Proving code uses Rayon internally. Capping both layers prevents each | |
| # concurrent libtest case from trying to occupy the whole runner. | |
| RAYON_NUM_THREADS: 2 | |
| jobs: | |
| required-test: | |
| name: Test ${{ matrix.state }} on ${{ matrix.target }} | |
| runs-on: ${{ matrix.os }} | |
| permissions: | |
| contents: read | |
| statuses: write | |
| strategy: | |
| matrix: | |
| target: | |
| - Linux | |
| state: >- | |
| ${{ | |
| fromJSON( | |
| github.event_name == 'schedule' | |
| && '["transparent", "transparent-inputs-only", "transparent-key-encoding-only", "Sapling-only", "Orchard", "all-pools", "all-features", "NU7"]' | |
| || ( | |
| github.event_name == 'pull_request' | |
| && '["all-features"]' | |
| || '["transparent", "transparent-inputs-only", "transparent-key-encoding-only", "Sapling-only", "Orchard", "all-pools", "all-features"]' | |
| ) | |
| ) | |
| }} | |
| include: | |
| - target: Linux | |
| os: ${{ vars.UBUNTU_LARGE_RUNNER || 'ubuntu-latest' }} | |
| env: | |
| RUSTFLAGS: ${{ matrix.state == 'NU7' && '--cfg zcash_unstable="nu7"' || '' }} | |
| RUSTDOCFLAGS: ${{ matrix.state == 'NU7' && '--cfg zcash_unstable="nu7"' || '' }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - id: prepare | |
| uses: ./.github/actions/prepare | |
| with: | |
| transparent-pool: ${{ matrix.state == 'transparent' }} | |
| orchard-pool: ${{ matrix.state == 'Orchard' }} | |
| all-pools: ${{ matrix.state == 'all-pools' }} | |
| all-features: ${{ matrix.state == 'all-features' || matrix.state == 'NU7' }} | |
| extra-features: >- | |
| ${{ | |
| matrix.state == 'transparent-inputs-only' | |
| && 'transparent-inputs' | |
| || ( | |
| matrix.state == 'transparent-key-encoding-only' | |
| && 'transparent-key-encoding' | |
| || '' | |
| ) | |
| }} | |
| - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 | |
| with: | |
| shared-key: msrv | |
| # NU7 has a distinct RUSTFLAGS-derived cache key. | |
| save-if: ${{ matrix.state == 'all-features' || matrix.state == 'NU7' }} | |
| - name: Run tests | |
| shell: bash | |
| env: | |
| ALL_FEATURES: ${{ steps.prepare.outputs.all-features }} | |
| FEATURES: ${{ steps.prepare.outputs.feature-list }} | |
| run: | | |
| feature_flags=() | |
| if [[ "$ALL_FEATURES" == true ]]; then | |
| feature_flags+=(--all-features) | |
| elif [[ -n "$FEATURES" ]]; then | |
| feature_flags+=(--features "$FEATURES") | |
| fi | |
| cargo test --workspace "${feature_flags[@]}" -- --test-threads=2 | |
| - name: Verify working directory is clean | |
| run: git diff --exit-code | |
| feature-check: | |
| name: Check ${{ matrix.state }} test targets | |
| runs-on: ${{ vars.UBUNTU_LARGE_RUNNER || 'ubuntu-latest' }} | |
| strategy: | |
| matrix: | |
| state: >- | |
| ${{ | |
| fromJSON( | |
| github.event_name == 'pull_request' | |
| && '["transparent", "transparent-inputs-only", "transparent-key-encoding-only", "Sapling-only", "Orchard", "all-pools"]' | |
| || '["covered-by-runtime-matrix"]' | |
| ) | |
| }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - id: prepare | |
| if: ${{ github.event_name == 'pull_request' }} | |
| uses: ./.github/actions/prepare | |
| with: | |
| transparent-pool: ${{ matrix.state == 'transparent' }} | |
| orchard-pool: ${{ matrix.state == 'Orchard' }} | |
| all-pools: ${{ matrix.state == 'all-pools' }} | |
| extra-features: >- | |
| ${{ | |
| matrix.state == 'transparent-inputs-only' | |
| && 'transparent-inputs' | |
| || ( | |
| matrix.state == 'transparent-key-encoding-only' | |
| && 'transparent-key-encoding' | |
| || '' | |
| ) | |
| }} | |
| - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 | |
| if: ${{ github.event_name == 'pull_request' }} | |
| with: | |
| shared-key: msrv | |
| save-if: "false" | |
| - name: Check all test targets | |
| if: ${{ github.event_name == 'pull_request' }} | |
| shell: bash | |
| env: | |
| ALL_FEATURES: ${{ steps.prepare.outputs.all-features }} | |
| FEATURES: ${{ steps.prepare.outputs.feature-list }} | |
| run: | | |
| feature_flags=() | |
| if [[ "$ALL_FEATURES" == true ]]; then | |
| feature_flags+=(--all-features) | |
| elif [[ -n "$FEATURES" ]]; then | |
| feature_flags+=(--features "$FEATURES") | |
| fi | |
| cargo check --workspace --all-targets "${feature_flags[@]}" | |
| - name: Feature configuration runtime coverage | |
| if: ${{ github.event_name != 'pull_request' }} | |
| run: echo "The full feature matrix runs tests for this event." | |
| test: | |
| name: Test ${{ matrix.state }} on ${{ matrix.target }} | |
| if: ${{ github.event_name != 'pull_request' }} | |
| runs-on: ${{ matrix.os }} | |
| continue-on-error: true | |
| strategy: | |
| matrix: | |
| target: | |
| - macOS | |
| - Windows | |
| state: >- | |
| ${{ | |
| fromJSON( | |
| github.event_name == 'schedule' | |
| && '["all-features", "NU7"]' | |
| || '["all-features"]' | |
| ) | |
| }} | |
| include: | |
| - target: macOS | |
| os: macOS-latest | |
| - target: Windows | |
| os: ${{ vars.WINDOWS_LARGE_RUNNER || 'windows-latest' }} | |
| exclude: | |
| - target: macOS | |
| state: NU7 | |
| env: | |
| RUSTFLAGS: ${{ matrix.state == 'NU7' && '--cfg zcash_unstable="nu7"' || '' }} | |
| RUSTDOCFLAGS: ${{ matrix.state == 'NU7' && '--cfg zcash_unstable="nu7"' || '' }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - id: prepare | |
| uses: ./.github/actions/prepare | |
| with: | |
| all-features: true | |
| - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 | |
| with: | |
| shared-key: msrv | |
| save-if: ${{ matrix.state == 'all-features' || matrix.state == 'NU7' }} | |
| - name: Run tests | |
| shell: bash | |
| env: | |
| ALL_FEATURES: ${{ steps.prepare.outputs.all-features }} | |
| FEATURES: ${{ steps.prepare.outputs.feature-list }} | |
| run: | | |
| feature_flags=() | |
| if [[ "$ALL_FEATURES" == true ]]; then | |
| feature_flags+=(--all-features) | |
| elif [[ -n "$FEATURES" ]]; then | |
| feature_flags+=(--features "$FEATURES") | |
| fi | |
| cargo test --workspace "${feature_flags[@]}" -- --test-threads=2 | |
| - name: Verify working directory is clean | |
| run: git diff --exit-code | |
| test-slow: | |
| name: Expensive Test ${{ matrix.state }} on ${{ matrix.target }} | |
| if: ${{ github.event_name != 'pull_request' }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| target: | |
| - Linux | |
| state: >- | |
| ${{ | |
| fromJSON( | |
| github.event_name == 'schedule' | |
| && '["all-pools", "NU7"]' | |
| || '["all-pools"]' | |
| ) | |
| }} | |
| include: | |
| - target: Linux | |
| os: ${{ vars.UBUNTU_LARGE_RUNNER || 'ubuntu-latest' }} | |
| - state: NU7 | |
| rustflags: '--cfg zcash_unstable="nu7"' | |
| env: | |
| RUSTFLAGS: ${{ matrix.rustflags }} | |
| RUSTDOCFLAGS: ${{ matrix.rustflags }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - id: prepare | |
| uses: ./.github/actions/prepare | |
| with: | |
| all-pools: true | |
| extra-features: pczt-tests | |
| - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 | |
| with: | |
| shared-key: msrv | |
| save-if: "false" | |
| - name: Run slow tests | |
| shell: bash | |
| env: | |
| ALL_FEATURES: ${{ steps.prepare.outputs.all-features }} | |
| FEATURES: ${{ steps.prepare.outputs.feature-list }} | |
| run: | | |
| feature_flags=() | |
| if [[ "$ALL_FEATURES" == true ]]; then | |
| feature_flags+=(--all-features) | |
| elif [[ -n "$FEATURES" ]]; then | |
| feature_flags+=(--features "$FEATURES") | |
| fi | |
| cargo test \ | |
| --workspace \ | |
| "${feature_flags[@]}" \ | |
| --features expensive-tests \ | |
| -- \ | |
| --test-threads=2 | |
| - name: Verify working directory is clean | |
| run: git diff --exit-code | |
| notify-nightly-failure: | |
| name: Notify Slack of nightly test failure | |
| needs: test-slow | |
| if: ${{ always() && github.event_name == 'schedule' && needs.test-slow.result != 'success' }} | |
| runs-on: ubuntu-latest | |
| permissions: {} | |
| env: | |
| RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
| TEST_RESULT: ${{ needs.test-slow.result }} | |
| steps: | |
| - name: Notify Slack | |
| uses: slackapi/slack-github-action@45a88b9581bfab2566dc881e2cd66d334e621e2c # v3.0.3 | |
| with: | |
| errors: true | |
| webhook: ${{ secrets.SLACK_WEBHOOK_URL }} | |
| webhook-type: incoming-webhook | |
| payload: | | |
| text: >- | |
| librustzcash nightly expensive tests ended with | |
| ${{ env.TEST_RESULT }}: ${{ env.RUN_URL }} | |
| build-latest: | |
| name: Latest build on ${{ matrix.os }} | |
| runs-on: ${{ matrix.os }} | |
| env: | |
| # Override the workspace `rust-toolchain.toml` (which pins the MSRV) so | |
| # this job actually exercises the latest stable toolchain. | |
| RUSTUP_TOOLCHAIN: stable | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macOS-latest] | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - id: prepare | |
| uses: ./.github/actions/prepare | |
| - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 | |
| with: | |
| shared-key: latest | |
| # macOS-latest pre-installs a system `rustc` that is not a rustup proxy | |
| # and does not understand `+toolchain` syntax. Ensure rustup's proxies in | |
| # $CARGO_HOME/bin take precedence so `rustc +stable ...` works. | |
| - name: Ensure rustup proxies take precedence | |
| shell: bash | |
| run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH | |
| - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # master | |
| id: toolchain | |
| with: | |
| toolchain: stable | |
| - run: rustup override set "${TOOLCHAIN}" | |
| shell: sh | |
| env: | |
| TOOLCHAIN: ${{steps.toolchain.outputs.name}} | |
| - name: Remove lockfile to build with latest dependencies | |
| run: rm Cargo.lock | |
| - name: Build crates | |
| shell: bash | |
| env: | |
| ALL_FEATURES: ${{ steps.prepare.outputs.all-features }} | |
| FEATURES: ${{ steps.prepare.outputs.feature-list }} | |
| run: | | |
| feature_flags=() | |
| if [[ "$ALL_FEATURES" == true ]]; then | |
| feature_flags+=(--all-features) | |
| elif [[ -n "$FEATURES" ]]; then | |
| feature_flags+=(--features "$FEATURES") | |
| fi | |
| cargo build --workspace --all-targets "${feature_flags[@]}" --verbose | |
| - name: Verify working directory is clean (excluding lockfile) | |
| run: git diff --exit-code ':!Cargo.lock' | |
| build-nodefault: | |
| name: Build target ${{ matrix.target }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| target: | |
| - wasm32-wasip1 | |
| include: | |
| - target: wasm32-wasip1 | |
| build_deps: > | |
| gcc-multilib | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| path: crates | |
| - name: Install linux build dependencies | |
| run: sudo apt update && sudo apt install ${{ matrix.build_deps }} | |
| if: matrix.build_deps != '' | |
| # We use a synthetic crate to ensure no dev-dependencies are enabled, which can | |
| # be incompatible with some of these targets. | |
| - name: Copy Rust toolchain into the root for use in synthetic crate setup | |
| run: cp crates/rust-toolchain.toml . | |
| - name: Create synthetic crate for testing | |
| run: cargo init --lib ci-build | |
| - name: Move Rust toolchain file into synthetic crate | |
| run: mv rust-toolchain.toml ci-build/ | |
| - name: Copy patch directives into synthetic crate | |
| run: | | |
| echo "[patch.crates-io]" >> ./ci-build/Cargo.toml | |
| cat ./crates/Cargo.toml | sed "0,/.\+\(patch.crates.\+\)/d" >> ./ci-build/Cargo.toml | |
| - name: Add zcash_proofs as a dependency of the synthetic crate | |
| working-directory: ./ci-build | |
| run: cargo add --no-default-features --path ../crates/zcash_proofs | |
| - name: Add zcash_client_backend as a dependency of the synthetic crate | |
| working-directory: ./ci-build | |
| run: cargo add --path ../crates/zcash_client_backend | |
| - name: Copy pinned dependencies into synthetic crate | |
| run: cp crates/Cargo.lock ci-build/ | |
| - name: Add target | |
| working-directory: ./ci-build | |
| run: rustup target add ${{ matrix.target }} | |
| - name: Build for target | |
| working-directory: ./ci-build | |
| run: cargo build --verbose --target ${{ matrix.target }} | |
| build-nostd: | |
| name: Build target ${{ matrix.target }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| target: | |
| - thumbv7em-none-eabihf | |
| include: | |
| - target: thumbv7em-none-eabihf | |
| build_deps: > | |
| gcc-arm-none-eabi | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| path: crates | |
| - name: Install linux build dependencies | |
| run: sudo apt update && sudo apt install ${{ matrix.build_deps }} | |
| if: matrix.build_deps != '' | |
| # We use a synthetic crate to ensure no dev-dependencies are enabled, which can | |
| # be incompatible with some of these targets. | |
| - name: Copy Rust toolchain into the root for use in synthetic crate setup | |
| run: cp crates/rust-toolchain.toml . | |
| - name: Create synthetic crate for testing | |
| run: cargo init --lib ci-build | |
| - name: Move Rust toolchain file into synthetic crate | |
| run: mv rust-toolchain.toml ci-build/ | |
| - name: Copy patch directives into synthetic crate | |
| run: | | |
| echo "[patch.crates-io]" >> ./ci-build/Cargo.toml | |
| cat ./crates/Cargo.toml | sed "0,/.\+\(patch.crates.\+\)/d" >> ./ci-build/Cargo.toml | |
| - name: Add no_std pragma to lib.rs | |
| run: | | |
| echo "#![no_std]" > ./ci-build/src/lib.rs | |
| - name: Add zcash_keys as a dependency of the synthetic crate | |
| working-directory: ./ci-build | |
| run: cargo add --no-default-features --path ../crates/zcash_keys | |
| - name: Add pczt as a dependency of the synthetic crate | |
| working-directory: ./ci-build | |
| run: cargo add --no-default-features --path ../crates/pczt | |
| - name: Add zcash_primitives as a dependency of the synthetic crate | |
| working-directory: ./ci-build | |
| run: cargo add --no-default-features --path ../crates/zcash_primitives | |
| - name: Add zcash_pool_migration as a dependency of the synthetic crate | |
| working-directory: ./ci-build | |
| run: cargo add --no-default-features --path ../crates/zcash_pool_migration | |
| - name: Add lazy_static with the spin_no_std feature | |
| working-directory: ./ci-build | |
| run: cargo add lazy_static --features "spin_no_std" | |
| - name: Copy pinned dependencies into synthetic crate | |
| run: cp crates/Cargo.lock ci-build/ | |
| - name: Add target | |
| working-directory: ./ci-build | |
| run: rustup target add ${{ matrix.target }} | |
| - name: Build for target | |
| working-directory: ./ci-build | |
| run: cargo build --verbose --target ${{ matrix.target }} | |
| bitrot: | |
| name: Bitrot check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| # Build benchmarks to prevent bitrot | |
| - name: Build benchmarks | |
| run: cargo build --all --benches | |
| clippy: | |
| name: Clippy (MSRV) | |
| runs-on: ubuntu-latest | |
| permissions: | |
| checks: write | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| # We can't currently use only the common feature set (to exclude checking of | |
| # unstable in-progress code) because this action doesn't support spaces within CLI | |
| # arguments. Once it does, switch back to `prepare` instead of `--all-features`. | |
| - name: Run clippy | |
| uses: auguwu/clippy-action@9817d076b82df0194935be9db6154c56ac07b317 # 1.5.0 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| working-directory: ${{ inputs.target }} | |
| check-args: > | |
| --all-features | |
| --all-targets | |
| args: > | |
| -D warnings | |
| clippy-nodefault: | |
| name: Clippy (no default features) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # master | |
| id: toolchain | |
| with: | |
| toolchain: stable | |
| components: clippy | |
| - run: rustup override set "${TOOLCHAIN}" | |
| shell: sh | |
| env: | |
| TOOLCHAIN: ${{steps.toolchain.outputs.name}} | |
| - name: Run clippy (no default features) | |
| run: cargo clippy --no-default-features -- -D warnings | |
| clippy-beta: | |
| name: Clippy (beta) | |
| runs-on: ubuntu-latest | |
| permissions: | |
| checks: write | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| # We can't currently use only the common feature set (to exclude checking of | |
| # unstable in-progress code) because this action doesn't support spaces within CLI | |
| # arguments. Once it does, switch back to `prepare` instead of `--all-features`. | |
| - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # master | |
| id: toolchain | |
| with: | |
| toolchain: beta | |
| components: clippy | |
| - run: rustup override set "${TOOLCHAIN}" | |
| shell: sh | |
| env: | |
| TOOLCHAIN: ${{steps.toolchain.outputs.name}} | |
| - name: Run Clippy (beta) | |
| uses: auguwu/clippy-action@9817d076b82df0194935be9db6154c56ac07b317 # 1.5.0 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| working-directory: ${{ inputs.target }} | |
| check-args: > | |
| --all-features | |
| --all-targets | |
| args: > | |
| -W clippy::all | |
| # This is run with nightly and `RUSTDOCFLAGS` to emulate the documentation renders on | |
| # docs.rs and in `.github/workflows/book.yml` as closely as possible. | |
| clippy-features-discover: | |
| name: Discover workspace crates | |
| runs-on: ubuntu-latest | |
| outputs: | |
| crates: ${{ steps.list.outputs.crates }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: List workspace crates | |
| id: list | |
| run: | | |
| cargo metadata --no-deps --format-version 1 \ | |
| | jq -c '[.packages[].name] | sort' \ | |
| | sed 's/^/crates=/' >> "$GITHUB_OUTPUT" | |
| clippy-feature-combos: | |
| name: Clippy (${{ matrix.crate }}, each feature) | |
| needs: clippy-features-discover | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| crate: ${{ fromJSON(needs.clippy-features-discover.outputs.crates) }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # master | |
| id: toolchain | |
| with: | |
| toolchain: stable | |
| components: clippy | |
| - run: rustup override set "${TOOLCHAIN}" | |
| shell: sh | |
| env: | |
| TOOLCHAIN: ${{steps.toolchain.outputs.name}} | |
| # Lints each of the crate's features on its own, catching the configurations that the | |
| # `--all-features` and `--no-default-features` endpoints both miss. The script carries the | |
| # full rationale and can be run locally against one crate or the whole workspace. | |
| - name: Clippy each feature | |
| run: scripts/clippy-each-feature.sh "$CRATE" | |
| env: | |
| CRATE: ${{ matrix.crate }} | |
| doc-links: | |
| name: Intra-doc links | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - id: prepare | |
| uses: ./.github/actions/prepare | |
| - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # master | |
| id: toolchain | |
| with: | |
| toolchain: nightly | |
| - run: rustup override set "${TOOLCHAIN}" | |
| env: | |
| TOOLCHAIN: ${{steps.toolchain.outputs.name}} | |
| - run: cargo fetch | |
| # Requires #![deny(rustdoc::broken_intra_doc_links)] in crates. | |
| - name: Check intra-doc links | |
| shell: bash | |
| env: | |
| ALL_FEATURES: ${{ steps.prepare.outputs.all-features }} | |
| FEATURES: ${{ steps.prepare.outputs.feature-list }} | |
| RUSTDOCFLAGS: -Z unstable-options --enable-index-page --cfg docsrs | |
| run: | | |
| feature_flags=() | |
| if [[ "$ALL_FEATURES" == true ]]; then | |
| feature_flags+=(--all-features) | |
| elif [[ -n "$FEATURES" ]]; then | |
| feature_flags+=(--features "$FEATURES") | |
| fi | |
| cargo doc --no-deps --workspace "${feature_flags[@]}" --document-private-items | |
| fmt: | |
| name: Rustfmt | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Check formatting | |
| run: cargo fmt --all -- --check | |
| readme-graph: | |
| name: Readme dependency graph | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Check consistency | |
| run: python3 .github/helpers/check-dep-graph.py | |
| protobuf: | |
| name: protobuf consistency | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - id: prepare | |
| uses: ./.github/actions/prepare | |
| - name: Install protoc | |
| uses: supplypike/setup-bin@8365380a806a88e7a0f0d07059b175ca2f5418d7 # v5.0.1 | |
| with: | |
| uri: 'https://github.com/protocolbuffers/protobuf/releases/download/v25.1/protoc-25.1-linux-x86_64.zip' | |
| name: 'protoc' | |
| version: '25.1' | |
| subPath: 'bin' | |
| - name: Trigger protobuf regeneration | |
| shell: bash | |
| env: | |
| ALL_FEATURES: ${{ steps.prepare.outputs.all-features }} | |
| FEATURES: ${{ steps.prepare.outputs.feature-list }} | |
| run: | | |
| feature_flags=() | |
| if [[ "$ALL_FEATURES" == true ]]; then | |
| feature_flags+=(--all-features) | |
| elif [[ -n "$FEATURES" ]]; then | |
| feature_flags+=(--features "$FEATURES") | |
| fi | |
| cargo check --workspace "${feature_flags[@]}" | |
| - name: run cargo-fmt to handle the case that regeneration sometimes produces unformatted output | |
| run: cargo fmt | |
| - name: Verify working directory is clean | |
| run: git diff --exit-code | |
| uuid: | |
| name: UUID validity | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Extract UUIDs | |
| id: extract | |
| run: | | |
| { | |
| echo 'UUIDS<<EOF' | |
| git grep -h "const MIGRATION_ID: Uuid = Uuid::from_u128" zcash_client_sqlite/ | | |
| sed -e "s,.*Uuid::from_u128(0x,," -e "s,_,-,g" -e "s,);,," | |
| echo EOF | |
| } >> "$GITHUB_OUTPUT" | |
| - name: Check UUID validity | |
| env: | |
| UUIDS: ${{ steps.extract.outputs.UUIDS }} | |
| run: uuidparse -n -o type $UUIDS | xargs -L 1 test "invalid" != | |
| - name: Check UUID type | |
| env: | |
| UUIDS: ${{ steps.extract.outputs.UUIDS }} | |
| run: uuidparse -n -o type $UUIDS | xargs -L 1 test "random" = | |
| - name: Check UUID uniqueness | |
| env: | |
| UUIDS: ${{ steps.extract.outputs.UUIDS }} | |
| run: > | |
| test $( | |
| uuidparse -n -o uuid $U4 | wc -l | |
| ) -eq $( | |
| uuidparse -n -o uuid $U4 | sort | uniq | wc -l | |
| ) | |
| required-checks: | |
| name: Required status checks have passed | |
| needs: | |
| - required-test | |
| - feature-check | |
| - build-latest | |
| - build-nodefault | |
| - build-nostd | |
| - bitrot | |
| - clippy | |
| - clippy-nodefault | |
| - clippy-features-discover | |
| - clippy-feature-combos | |
| - doc-links | |
| - fmt | |
| - protobuf | |
| - uuid | |
| if: ${{ always() }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Determine whether all required-pass steps succeeded | |
| run: | | |
| echo "${NEEDS}" | jq -e '[ .[] | .result == "success" ] | all' | |
| env: | |
| NEEDS: ${{ toJSON(needs) }} |