The Parity CI Docker image sets RUSTC_WRAPPER=/usr/local/bin/forklift
for GCS cache optimization. On our VPS runners without GCP credentials,
forklift crashes with nil pointer dereference when trying to create
GCS client. The global env RUSTC_WRAPPER="" doesn't reliably propagate
into Docker containers.
Fix: Add explicit "Disable forklift cache wrapper" step in every
container job that runs cargo commands, using $GITHUB_ENV to ensure
the empty RUSTC_WRAPPER persists across all steps within the job.
Affected workflows: build-publish-images, checks, tests, tests-misc,
build-misc, docs (32 container jobs total).
The WASM_BUILD_STD=0 approach caused panic_impl duplicate errors because
wasm32-unknown-unknown pre-built sysroot includes std, conflicting with
pezsp-io's panic handler in wasm runtime builds.
Local testing confirmed that wasm32v1-none + no build-std + serde fork
works correctly. The wasm-builder creates a separate cargo project that:
- Excludes std/default features from the runtime
- Has no client crates in the dependency tree
- Properly uses the serde fork for target_os="none" handling
Restore rustup target add wasm32v1-none in all 14 CI build jobs and
remove all WASM_BUILD_STD=0 overrides.
- Exclude pezkuwi-zombienet-sdk-tests from clippy (nested cargo build
in build.rs overrides SKIP_WASM_BUILD with empty string, triggering
wasm32-unknown-unknown + build-std which conflicts with serde_core)
- Use WASM_BUILD_STD=0 for quick-benchmarks to avoid build-std
(uses pre-built wasm32-unknown-unknown sysroot instead)
- Update CLAUDE.md with correct CI runner VPS info
The paritytech CI container lacks the wasm32v1-none target, causing
wasm-builder to fall back to wasm32-unknown-unknown with -Z build-std.
Combined with our serde_core fork, this creates a duplicate lang item
error for alloc crate.
Fix: Add rustup target add wasm32v1-none to all WASM-building jobs.
For check-only jobs (bench checks, docs, each-crate), add SKIP_WASM_BUILD=1.
Also fixes test-deterministic-wasm wasm blob path to work with either target.
The serde_core + Rust 1.88 issue only affects wasm32v1-none target.
wasm32-unknown-unknown works fine, and wasm-builder falls back to it
automatically when wasm32v1-none is not installed.
- Remove all `rustup target add wasm32v1-none` steps (12 files)
- Remove SKIP_WASM_BUILD=1 env vars added as workaround (28 occurrences)
- Re-enable quick-benchmarks job (tests.yml)
- Re-enable check-core-crypto-features job (checks.yml)
- Re-enable 15 build/zombienet jobs (build-publish-images.yml)
- Re-enable test-pezframe-examples-compile-to-wasm and
test-deterministic-wasm jobs (tests-misc.yml)
Tracking: #355, #357, #358
Upstream: https://github.com/serde-rs/serde/issues/3021 (still open)
Changes:
- Add Rust caching (Swatinem/rust-cache) to all heavy build jobs
- Reduce cargo-check-each-crate from 7 to 4 parallel jobs
- Reduce tests-linux-stable matrix from 6 to 3 jobs
- Set CARGO_INCREMENTAL=0 for consistent caching
- Reduce timeouts from 60 to 45 minutes (cache makes builds faster)
- Remove redundant disk cleanup steps (cache handles this)
Expected improvements:
- 50-80% faster builds after cache is populated
- Lower VPS load (fewer parallel jobs)
- More consistent build times
Affected workflows:
- checks.yml (cargo-clippy, check-try-runtime)
- tests.yml (quick-benchmarks, cargo-check-all-benches)
- tests-misc.yml (test-pezframe-ui, cargo-check-each-crate)
- tests-linux-stable.yml (test-linux-stable)
- docs.yml (test-doc, build-rustdoc)
* docs: update workflow plan with completed CI fixes
* fix(ci): remove wasm32v1-none target installation to fix serde_core compilation
This removes the explicit `rustup target add wasm32v1-none` step from CI
workflows. When wasm32v1-none is installed, the wasm-builder uses it instead
of wasm32-unknown-unknown, which causes serde_core 1.0.228 to fail compilation
with "relaxing a default bound only does something for ?Sized" errors.
By not installing wasm32v1-none, the wasm-builder automatically falls back to
wasm32-unknown-unknown which compiles successfully.
This aligns with Polkadot SDK's CI configuration which also does not explicitly
install wasm32v1-none.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Fixes getrandom/duplicate lang item errors in WASM builds by ensuring
the wasm32v1-none target is installed before running cargo builds that
involve WASM compilation. This is required for Rust 1.84+ where the
bizinikiwi-wasm-builder uses wasm32v1-none instead of wasm32-unknown-unknown.
Affected workflows:
- tests.yml (quick-benchmarks)
- tests-linux-stable.yml (test-linux-stable-int, test-linux-stable-runtime-benchmarks)
- tests-misc.yml (test-deterministic-wasm)
- build-publish-images.yml (build-linux-stable, build-linux-bizinikiwi)
- check-pezframe-omni-bencher.yml (quick-benchmarks-omni, run-pezframe-omni-bencher)
- Rename CLI argument --pallet to --pezpallet (with --pallet as alias)
- Rename --pallets to --pezpallet, --exclude-pallets to --exclude-pezpallets
- Update benchmark subcommand from 'pallet' to 'pezpallet'
- Rename check-frame-omni-bencher.yml to check-pezframe-omni-bencher.yml
- Update all benchmark scripts to use new argument names
- Update cmd.py to use pezframe-omni-bencher and --pezpallet
The package was renamed from pez-staging-node-cli to pezstaging-node-cli
during the rebrand but the workflow files still referenced the old name.
Files updated:
- build-publish-images.yml
- release-20_build-rc.yml
- release-reusable-rc-build.yml
- tests-linux-stable.yml
- tests.yml
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>