Files
pezkuwichain d9c6dd3c60 refactor(ci): decouple from upstream Parity infrastructure
Replace Parity-specific infrastructure dependencies with Pezkuwi's own:
- S3 release uploads → GitHub Releases (gh CLI)
- parity-zombienet runner labels → pezkuwi-runner
- Grafana/Loki log URLs → disabled (use GH artifacts)
- Matrix notifications → disabled (pending Pezkuwi Matrix)
- paritytech issue links → pezkuwi tracking issues
- paritytech Docker image refs → pezkuwi-sdk-frame in cmd.py
- Add mirror-ci-image.yml workflow for GHCR image mirroring
- Document upstream shared tools (resolc, try-runtime, evm-test-suite)
2026-03-02 15:02:23 +03:00

527 lines
21 KiB
YAML

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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Download artifact (main run)
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.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@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Disable forklift cache wrapper
run: echo "RUSTC_WRAPPER=" >> $GITHUB_ENV
- name: Rust Cache
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
# NOTE: resolc is an upstream shared tool from paritytech/revive (EVM compiler)
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