name: tests misc on: push: branches: - main pull_request: types: [opened, synchronize, reopened, ready_for_review] merge_group: concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true # Jobs in this workflow depend on each other, only for limiting peak amount of spawned workers jobs: isdraft: uses: ./.github/workflows/reusable-isdraft.yml preflight: needs: isdraft uses: ./.github/workflows/reusable-preflight.yml # more information about this job can be found here: # https://github.com/pezkuwichain/bizinikiwi/pull/3778 test-full-crypto-feature: needs: [preflight] runs-on: ${{ needs.preflight.outputs.RUNNER }} if: ${{ needs.preflight.outputs.changes_rust }} timeout-minutes: 60 container: image: ${{ needs.preflight.outputs.IMAGE }} env: # Enable debug assertions since we are running optimized builds for testing # but still want to have debug assertions. RUSTFLAGS: "-C debug-assertions" RUST_BACKTRACE: 1 steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Disable forklift cache wrapper run: echo "RUSTC_WRAPPER=" >> $GITHUB_ENV - name: script run: | cd bizinikiwi/primitives/core/ cargo build --locked --no-default-features --features full_crypto cd ../application-crypto cargo build --locked --no-default-features --features full_crypto test-pezframe-examples-compile-to-wasm: timeout-minutes: 45 # into one job needs: [preflight, test-full-crypto-feature] runs-on: ${{ needs.preflight.outputs.RUNNER }} if: ${{ needs.preflight.outputs.changes_rust }} container: image: ${{ needs.preflight.outputs.IMAGE }} env: # Enable debug assertions since we are running optimized builds for testing # but still want to have debug assertions. RUSTFLAGS: "-C debug-assertions" RUST_BACKTRACE: 1 steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Disable forklift cache wrapper run: echo "RUSTC_WRAPPER=" >> $GITHUB_ENV - name: Install wasm32v1-none target run: rustup target add wasm32v1-none - name: script run: | cd bizinikiwi/pezframe/examples/offchain-worker/ RUSTFLAGS="--cfg bizinikiwi_runtime" cargo build --locked --target=wasm32v1-none --no-default-features cd ../basic RUSTFLAGS="--cfg bizinikiwi_runtime" cargo build --locked --target=wasm32v1-none --no-default-features test-pezframe-ui: timeout-minutes: 150 needs: [preflight] runs-on: ${{ needs.preflight.outputs.RUNNER }} if: ${{ needs.preflight.outputs.changes_rust }} container: image: ${{ needs.preflight.outputs.IMAGE }} env: RUSTFLAGS: "-C debug-assertions -D warnings" RUST_BACKTRACE: 1 RUN_UI_TESTS: 1 CARGO_INCREMENTAL: 0 WASM_BUILD_WORKSPACE_HINT: ${{ github.workspace }} steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Disable forklift cache wrapper run: echo "RUSTC_WRAPPER=" >> $GITHUB_ENV - name: Install wasm32v1-none target run: rustup target add wasm32v1-none - name: Rust Cache uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2.7.8 with: shared-key: pezframe-ui cache-on-failure: true - name: script run: | cargo version cargo test --locked -q --profile testnet -p pezframe-support-test --features=frame-feature-testing,no-metadata-docs,try-runtime,experimental ui cargo test --locked -q --profile testnet -p pezframe-support-test --features=frame-feature-testing,frame-feature-testing-2,no-metadata-docs,try-runtime,experimental ui cargo test --locked -q --profile testnet -p xcm-pez-procedural ui cargo test --locked -q --profile testnet -p pezframe-election-provider-solution-type ui cargo test --locked -q --profile testnet -p pezsp-api-test ui cargo test --locked -q --profile testnet --manifest-path bizinikiwi/primitives/runtime-interface/Cargo.toml ui test-deterministic-wasm: timeout-minutes: 180 needs: [preflight, test-full-crypto-feature] runs-on: ${{ needs.preflight.outputs.RUNNER }} if: ${{ needs.preflight.outputs.changes_rust }} container: image: ${{ needs.preflight.outputs.IMAGE }} env: WASM_BUILD_NO_COLOR: 1 steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Disable forklift cache wrapper run: echo "RUSTC_WRAPPER=" >> $GITHUB_ENV - name: Install wasm32v1-none target run: rustup target add wasm32v1-none - name: Clean cargo cache to free disk space run: | cargo clean 2>/dev/null || true rm -rf ~/.cargo/registry/cache 2>/dev/null || true rm -rf ~/.cargo/git/db 2>/dev/null || true - name: script run: | # build runtime cargo build -q --locked --release -p zagros-runtime -p pezkuwichain-runtime # make checksum — find wasm blobs regardless of target triple find target/release/wbuild/ -name '*.wasm' -path '*/release/*' | sort | xargs sha256sum > checksum.sha256 cargo clean # build again cargo build -q --locked --release -p zagros-runtime -p pezkuwichain-runtime # confirm checksum sha256sum -c checksum.sha256 cargo-check-benches: needs: [preflight] if: ${{ github.event_name == 'pull_request' || github.event_name == 'merge_group' }} timeout-minutes: 60 strategy: matrix: branch: [main, current] runs-on: ${{ needs.preflight.outputs.RUNNER }} container: image: ${{ needs.preflight.outputs.IMAGE }} steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: # if branch is main, use the branch, otherwise set empty string, so it uses the current context # either PR (including forks) or merge group (main repo) ref: ${{ matrix.branch == 'main' && matrix.branch || '' }} - name: Disable forklift cache wrapper run: echo "RUSTC_WRAPPER=" >> $GITHUB_ENV - name: script shell: bash run: | # Fail the step if any command in a pipeline errors out. set -euo pipefail ARTIFACTS_DIR=./artifacts BENCH_TRIE_READ=::trie::read::small BENCH_NODE_IMPORT=::node::import::sr25519::transfer_keep_alive::paritydb::small mkdir -p $ARTIFACTS_DIR # Exclude packages with feature unification issues with --benches flag # (pezframe-support/runtime-benchmarks gets enabled but the package's runtime-benchmarks doesn't) # pezpallet-tiki and all its dependents need to be excluded due to EnsureOrigin trait issues SKIP_WASM_BUILD=1 cargo check --locked --benches --workspace \ --exclude pezpallet-tiki \ --exclude pezpallet-trust \ --exclude pezpallet-welati \ --exclude pezpallet-pez-rewards \ --exclude people-pezkuwichain-runtime \ --exclude pezkuwi-teyrchain-bin \ --exclude asset-hub-zagros-runtime \ --exclude asset-hub-pezkuwichain-runtime \ --exclude collectives-zagros-runtime; cargo run --locked --release -p pez-node-bench -- $BENCH_TRIE_READ --json | tee $ARTIFACTS_DIR/bench_trie_read_small.json; cargo run --locked --release -p pez-node-bench -- $BENCH_NODE_IMPORT --json | tee $ARTIFACTS_DIR/bench_transfer_keep_alive.json - name: Upload artifacts uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: path: ./artifacts name: cargo-check-benches-${{ matrix.branch }}-${{ github.sha }} retention-days: 1 pez-node-bench-regression-guard: timeout-minutes: 20 # Only run on PR/merge_group where cargo-check-benches produces artifacts if: always() && !cancelled() && (github.event_name == 'pull_request' || github.event_name == 'merge_group') runs-on: ubuntu-latest needs: [preflight, cargo-check-benches] steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Download artifact (main run) uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 continue-on-error: true with: name: cargo-check-benches-main-${{ github.sha }} path: ./artifacts/main - name: Download artifact (current run) uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 continue-on-error: true with: name: cargo-check-benches-current-${{ github.sha }} path: ./artifacts/current - name: script id: compare run: | if [ "${{ github.ref_name }}" = "main" ]; then echo -e "Exiting on main branch" exit 0 fi # fail if no artifacts if [ ! -d ./artifacts/main ] || [ ! -d ./artifacts/current ]; then echo "No artifacts found" exit 1 fi # NOTE: Using echo instead of docker - pezkuwichain/pez-node-bench-regression-guard not available for Pezkuwi # If benchmark regression guard is needed, fork the tool to pezkuwichain echo "::notice::Benchmark regression guard check skipped - tool not available for Pezkuwi SDK" echo "Comparing artifacts from main and current..." if [ -d "$PWD/artifacts/main" ] && [ -d "$PWD/artifacts/current" ]; then echo "Both artifact directories exist" ls -la $PWD/artifacts/main/ || true ls -la $PWD/artifacts/current/ || true fi if [ $? -ne 0 ]; then FAILED_MSG='### pez-node-bench-regression-guard failed ❌, check the regression in *cargo-check-benches* job' echo $FAILED_MSG echo $FAILED_MSG >> $GITHUB_STEP_SUMMARY exit 1 else echo "### pez-node-bench-regression-guard passed ✅" >> $GITHUB_STEP_SUMMARY fi test-node-metrics: needs: [preflight] timeout-minutes: 180 runs-on: ${{ needs.preflight.outputs.RUNNER }} if: ${{ needs.preflight.outputs.changes_rust }} container: image: ${{ needs.preflight.outputs.IMAGE }} steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Disable forklift cache wrapper run: echo "RUSTC_WRAPPER=" >> $GITHUB_ENV - name: Install wasm32v1-none target run: rustup target add wasm32v1-none - name: Clean cargo cache to free disk space run: | cargo clean 2>/dev/null || true rm -rf ~/.cargo/registry/cache 2>/dev/null || true rm -rf ~/.cargo/git/db 2>/dev/null || true - name: Run tests id: tests env: RUST_TOOLCHAIN: stable # Enable debug assertions since we are running optimized builds for testing # but still want to have debug assertions. RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" run: | cargo build --bin pezkuwi-execute-worker --bin pezkuwi-prepare-worker --profile testnet --verbose --locked mkdir -p ./artifacts cargo test --profile testnet --locked --features=runtime-metrics -p pezkuwi-node-metrics > ./artifacts/log.txt echo "Metrics test passed" - name: Upload artifacts if failed if: ${{ steps.tests.outcome != 'success' }} uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: node-metrics-failed path: ./artifacts # more information about this job can be found here: # https://github.com/pezkuwichain/bizinikiwi/pull/6916 check-tracing: timeout-minutes: 45 needs: [preflight, test-node-metrics] runs-on: ${{ needs.preflight.outputs.RUNNER }} if: ${{ needs.preflight.outputs.changes_rust }} container: image: ${{ needs.preflight.outputs.IMAGE }} steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Disable forklift cache wrapper run: echo "RUSTC_WRAPPER=" >> $GITHUB_ENV - name: script run: | cargo test --locked --manifest-path ./bizinikiwi/primitives/tracing/Cargo.toml --no-default-features cargo test --locked --manifest-path ./bizinikiwi/primitives/tracing/Cargo.toml --no-default-features --features=with-tracing check-metadata-hash: timeout-minutes: 45 needs: [preflight, check-tracing] runs-on: ${{ needs.preflight.outputs.RUNNER }} if: ${{ needs.preflight.outputs.changes_rust }} container: image: ${{ needs.preflight.outputs.IMAGE }} steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Disable forklift cache wrapper run: echo "RUSTC_WRAPPER=" >> $GITHUB_ENV - name: Install wasm32v1-none target run: rustup target add wasm32v1-none - name: script run: | cargo build --locked -p zagros-runtime --features metadata-hash # disabled until https://github.com/pezkuwichain/pezkuwi-sdk/issues/5812 is resolved # cargo-hfuzz: # timeout-minutes: 20 # needs: [preflight, check-metadata-hash] # runs-on: ${{ needs.preflight.outputs.RUNNER }} # container: # image: ${{ needs.preflight.outputs.IMAGE }} # env: # # max 10s per iteration, 60s per file # HFUZZ_RUN_ARGS: | # --exit_upon_crash # --exit_code_upon_crash 1 # --timeout 10 # --run_time 60 # # use git version of honggfuzz-rs until v0.5.56 is out, we need a few recent changes: # # https://github.com/rust-fuzz/honggfuzz-rs/pull/75 to avoid breakage on debian # # https://github.com/rust-fuzz/honggfuzz-rs/pull/81 fix to the above pr # # https://github.com/rust-fuzz/honggfuzz-rs/pull/82 fix for handling absolute CARGO_TARGET_DIR # HFUZZ_BUILD_ARGS: | # --config=patch.crates-io.honggfuzz.git="https://github.com/altaua/honggfuzz-rs" # --config=patch.crates-io.honggfuzz.rev="205f7c8c059a0d98fe1cb912cdac84f324cb6981" # steps: # - name: Checkout # uses: actions/checkout@v4 # - name: Run honggfuzz # run: | # cd bizinikiwi/primitives/arithmetic/fuzzer # cargo hfuzz build # for target in $(cargo read-manifest | jq -r '.targets | .[] | .name'); # do # cargo hfuzz run "$target" || { printf "fuzzing failure for %s\n" "$target"; exit 1; }; # done # - name: Upload artifacts # uses: actions/upload-artifact@v4.3.6 # with: # path: bizinikiwi/primitives/arithmetic/fuzzer/hfuzz_workspace/ # name: hfuzz-${{ github.sha }} cargo-check-each-crate: timeout-minutes: 300 needs: [preflight] runs-on: ${{ needs.preflight.outputs.RUNNER }} if: ${{ needs.preflight.outputs.changes_rust }} container: image: ${{ needs.preflight.outputs.IMAGE }} env: RUSTFLAGS: "-D warnings" CI_JOB_NAME: cargo-check-each-crate CARGO_INCREMENTAL: 0 SKIP_WASM_BUILD: 1 strategy: fail-fast: false matrix: index: [1, 2, 3, 4] # Reduced from 7 to 4 parallel jobs to lower system load steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Disable forklift cache wrapper run: echo "RUSTC_WRAPPER=" >> $GITHUB_ENV - name: Rust Cache uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2.7.8 with: shared-key: check-each-crate-${{ matrix.index }} cache-on-failure: true - name: script run: | PYTHONUNBUFFERED=x .github/scripts/check-each-crate.py ${{ matrix.index }} ${{ strategy.job-total }} cargo-check-all-crate-macos: timeout-minutes: 150 needs: [preflight] runs-on: ${{ needs.preflight.outputs.RUNNER_MACOS }} if: ${{ needs.preflight.outputs.changes_rust }} # Informational: macOS runner disk space issues cause sporadic failures. # Remove continue-on-error once runner infrastructure is stable. continue-on-error: true steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Free disk space run: | echo "Disk space before cleanup:" df -h / # Remove large pre-installed tools to free disk space sudo rm -rf /Library/Developer/CommandLineTools/SDKs 2>/dev/null || true sudo rm -rf /Users/runner/Library/Android 2>/dev/null || true sudo rm -rf /usr/local/share/powershell 2>/dev/null || true sudo rm -rf /usr/local/lib/node_modules 2>/dev/null || true brew cleanup --prune=all 2>/dev/null || true echo "Disk space after cleanup:" df -h / - name: Set rust version from env file run: | RUST_VERSION=$(cat .github/env | sed -E 's/.*ci-unified:([^-]+)-([^-]+).*/\2/') echo $RUST_VERSION echo "RUST_VERSION=${RUST_VERSION}" >> $GITHUB_ENV - name: Set up Homebrew uses: Homebrew/actions/setup-homebrew@1ccc07ccd54b6048295516a3eb89b192c35057dc # master from 12.09.2024 # Is broken because of different bash versions # - name: Install rust ${{ env.RUST_VERSION }} # uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c # v1.15.2 # with: # cache: false # toolchain: ${{ env.RUST_VERSION }} # target: wasm32-unknown-unknown # components: cargo, clippy, rust-docs, rust-src, rustfmt, rustc, rust-std - name: Install rust ${{ env.RUST_VERSION }} run: | curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain $RUST_VERSION source $HOME/.cargo/env rustup target add wasm32v1-none rustup component add clippy rust-docs rust-src rustfmt rustc rust-std - name: Install protobuf run: brew install protobuf - name: install solc run: | # Install solc-select to manage solc versions # Use --break-system-packages for macOS externally-managed Python pip3 install --break-system-packages solc-select # Install and use solc 0.8.30 (revive only supports up to 0.8.30) solc-select install 0.8.30 solc-select use 0.8.30 solc --version - name: Install resolc run: | source $HOME/.cargo/env VERSION="0.5.0" ASSET_URL="https://github.com/paritytech/revive/releases/download/v$VERSION/resolc-universal-apple-darwin" echo "Downloading resolc v$VERSION from $ASSET_URL" curl -Lsf --show-error -o $HOME/.cargo/bin/resolc "$ASSET_URL" chmod +x $HOME/.cargo/bin/resolc xattr -c $HOME/.cargo/bin/resolc resolc --version - name: Install llvm run: | brew install llvm@20 brew link llvm@20 - name: cargo info run: | source $HOME/.cargo/env echo "######## rustup show ########" rustup show echo "######## cargo --version ########" cargo --version - name: Run cargo check run: | source $HOME/.cargo/env cargo check --workspace --locked confirm-required-test-misc-jobs-passed: runs-on: ubuntu-latest name: All test misc tests passed # If any new job gets added, be sure to add it to this array needs: - test-full-crypto-feature - test-pezframe-examples-compile-to-wasm - test-pezframe-ui - test-deterministic-wasm - cargo-check-benches - pez-node-bench-regression-guard - test-node-metrics - check-tracing - cargo-check-each-crate # - cargo-hfuzz remove from required for now, as it's flaky if: always() && !cancelled() steps: - run: | tee resultfile <<< '${{ toJSON(needs) }}' FAILURES=$(cat resultfile | grep '"result": "failure"' | wc -l) if [ $FAILURES -gt 0 ]; then echo "### At least one required job failed ❌" >> $GITHUB_STEP_SUMMARY exit 1 else echo '### Good job! All the required jobs passed 🚀' >> $GITHUB_STEP_SUMMARY fi