Skip to content

zcash_pool_migration: Detect unsatisfiable migration steps and surface replanning #10288

zcash_pool_migration: Detect unsatisfiable migration steps and surface replanning

zcash_pool_migration: Detect unsatisfiable migration steps and surface replanning #10288

Workflow file for this run

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) }}