Commit Graph
100 Commits
Author SHA1 Message Date
Kurdistan Tech MinistryandClaude Sonnet 4.6 ab18c725c2 fix(deps): update arrayvec patch to fix core_io_borrowed_buf on wasm32v1-none
The arrayvec fork's io::Write impl used `use std::io` which in no_std mode
(wasm32v1-none with std feature unified by workspace) expands to `use core::io`.
`core::io` is gated behind the unstable `core_io_borrowed_buf` feature in
Rust 1.88 — causing wasm-check (cargo check --target wasm32v1-none) to fail.

Upstream fix: gate io import and io::Write impl behind
not(all(target_arch = "wasm32", target_os = "none")).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 23:30:04 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 f027f7aa83 fix(ci): cut debug binary size and prevent wasm-check from deleting shared test cache
Two root-cause fixes for repeated disk-full (ENOSPC) failures on VPS runners:

1. Add -Cdebuginfo=1 to RUSTFLAGS in .test-base.
   Line-tables-only strips variable/type debug info while keeping file:line
   in panic stack traces. On a full Substrate workspace this cuts the debug/
   artifacts from ~52 G to ~20 G (~60% reduction).

2. Change wasm-check CARGO_TARGET_DIR from its own per-job dir to the shared
   test-release dir. The wasm32v1-none artifacts land in test-release/wasm32v1-none/
   which is orthogonal to test-release/debug/ used by test-partition jobs.
   Removing the intra-key find…rm prevents wasm-check from wiping the 52 G
   test-release dir mid-pipeline when test-no-try-runtime jobs are still queued.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 22:39:41 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 a46e336e81 fix(ci): test-doc must not persist to /cache (was filling 27G per run)
test-doc has SKIP_WASM_BUILD=0 which compiles WASM runtimes and doc tests,
producing 27G+ of artifacts. It was persisting those to /cache/cargo-target/
alongside the test-release dir, filling the 96G kurditv volume to 100%.

Since test-doc is allow_failure and the warm-cache benefit doesn't justify
the disk cost, switch it to the ephemeral container filesystem (same approach
as clippy). The before_script no longer sets CARGO_TARGET_DIR.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 13:04:47 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 635d0151ad fix(ci): add explicit timeouts to all non-test jobs + job_execution_timeout retry
Root cause: server_timeout_running (kurditv disk-full Docker failures) hits
GitLab's 60m default timeout and is not caught by stuck_or_timeout_failure,
runner_system_failure, or unknown_failure — meaning no retry triggers, and fmt
(a pipeline blocker) fails permanently, skipping ALL downstream jobs.

Fix: give every quick-check and security job an explicit tight timeout. A stuck
runner now hits job_execution_timeout (a matchable retry condition) in seconds
or minutes, not 60m. The retry then lands on one of the two healthy runners.

Timeouts added (worst-case real duration shown):
  fmt: 10m (normally ~90s)                     retry: max 2
  check-toml-format: 5m
  check-dependency-rules: 5m
  check-fail-ci: 5m
  check-workspace-integrity: 15m
  check-zepter: 20m
  test-rust-features: 10m
  check-umbrella: 30m
  check-licenses-headers: 10m
  check-core-crypto-features: 15m
  cargo-deny-licenses: 20m
  cargo-deny-sources: 20m
  cargo-audit: 20m                              retry: max 2

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 12:59:05 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 1486a3c2c8 fix(ci): add intra-cache-key cleanup, switch tests to debug mode
Two root causes from pipeline 2480888929:

1. /cache volume bloat — kurditv hit 93G/96G (97% full). The before_script
   pruned old cache KEYS but never cleaned other job dirs within the SAME key.
   Old test-partition-1/, test-partition-2/, wasm-check/, … accumulated across
   pipelines alongside the new test-release/ dir, filling the volume.
   Fix: add a second find that removes every sibling dir in CACHE_KEY/ except
   the current job's dir. .test-base keeps only test-release/; wasm-check keeps
   only wasm-check/. Each pipeline run starts with a clean slate per job type.

2. Release builds exceeded 300m — vps3 was still compiling
   pezbridge-hub-zagros-runtime at minute 300 in --release mode.
   Clippy (debug) took 162m cold; release mode is 2-3x slower.
   Fix: remove --release from all cargo nextest run commands. RUSTFLAGS already
   includes -Cdebug-assertions=y so assertion coverage is identical. Debug
   artifacts are smaller (less disk pressure) and compile faster.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 11:03:43 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 0354c96a84 fix(ci): catch server_timeout_running/no_updates_running, fix test cold-build timeout
Three root causes from pipeline 2480399247 (b756499b):

1. kurditv runner failures: `server_timeout_running` and `no_updates_running`
   are internal GitLab failure codes NOT caught by stuck_or_timeout_failure or
   runner_system_failure. Added unknown_failure to all retry conditions so
   retries trigger and land on a healthy runner.

2. Test partition job_execution_timeout (150m): tests run with --release so
   C deps (jemalloc/rocksdb) take hours to compile on cold VPS cache. CARGO_TARGET_DIR
   was per-CI_JOB_NAME so each partition compiled independently. Changed to shared
   test-release dir — C deps compiled once per runner per cache key, all partitions
   reuse. Timeout bumped from 150m to 300m to survive a full cold build.

3. wasm-check: no explicit timeout → hit 60m GitLab default. Added timeout: 2h
   and retry conditions.

Also: test-doc/build-rustdoc/build-implementers-guide got retry conditions;
build-implementers-guide got explicit 15m timeout (mdbook is fast).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:04:11 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 b756499b66 ci: add stuck_or_timeout_failure retry to all remaining jobs
Unstable runners occasionally get stuck in the prepare phase with no
log output. Any job can be affected. Adding retry: max: 1, when:
stuck_or_timeout_failure to all remaining jobs that lacked it:

quick-checks: check-dependency-rules, check-fail-ci,
  check-workspace-integrity, check-zepter, test-rust-features,
  check-umbrella, check-licenses-headers

security: cargo-deny-sources, cargo-audit

checks: check-core-crypto-features

Clippy and check-try-runtime excluded — retrying 36m/81m jobs on
actual timeout would be too expensive; those get runner_system_failure
coverage for runner crashes instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 12:51:50 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 612d6fa38f ci: retry fmt on stuck_or_timeout_failure
fmt occasionally gets stuck on unstable runners (empty log, 17+ min
with no output). Since clippy depends on fmt, a stuck fmt blocks the
entire critical path: clippy → check-try-runtime → all tests.

retry: max: 1, when: stuck_or_timeout_failure covers runner freeze
without masking actual cargo fmt formatting failures.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 12:44:20 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 c458686071 ci: retry check-toml-format and cargo-deny-licenses on stuck/timeout
Both jobs occasionally get stuck on unstable runners with no output
for 40-50+ minutes (empty log, runner preparing phase freeze). Without
explicit retry, they fail the pipeline with stuck_or_timeout_failure.

retry: max: 1, when: stuck_or_timeout_failure retries only on genuine
runner freezes, not on taplo format errors or license violations.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 12:26:07 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 07f7a5b442 ci(clippy): revert persistent CARGO_TARGET_DIR, keep CARGO_HOME fix
librocksdb-sys debug build writes a multi-GB librocksdb.a static archive
to /cache/cargo-target, filling the volume and causing build failure.
Persistent cache is not safe for C++ heavy dependencies.

Keep CARGO_HOME=/root/.cargo (avoids re-downloading the Rust crate
registry on every run). CARGO_TARGET_DIR stays ephemeral (Docker
container fs has ample space).

Timeout stays at 3h to cover cold builds on slower runners.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 11:34:06 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 9e5cf4e833 ci(clippy): persistent cache + pre-baked registry for fast warm builds
Two root causes for clippy taking 100+ minutes on cold runners:
1. CARGO_HOME=$CI_PROJECT_DIR/.cargo (global default) is wiped each job,
   forcing re-download of the entire crate registry on every run.
   Fix: override CARGO_HOME=/root/.cargo (pre-baked in the CI image).
2. CARGO_TARGET_DIR not persisted — compiled artifacts discarded after
   each run, forcing full recompile on the same runner.
   Fix: same /cache/cargo-target/$CACHE_KEY/clippy setup as test jobs.

First run on a fresh runner: still slow (~100m, cold compile).
Subsequent runs on same runner: ~10-15m (warm cache reuse).
Timeout bumped to 3h to safely cover the cold-build case.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 03:37:12 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 b13009b415 ci: retry test jobs once on runner_system_failure
VPS2 Docker daemon crashed mid-run, killing test-partition-1/2 and
leaving wasm-check/test-no-try-runtime-2 with 404 exec errors. None
of these were test failures — all were runner infrastructure failures.

retry: max: 1, when: runner_system_failure retries only on runner
crashes, never on actual test failures. Correct safeguard for
multi-runner setups where any VPS can restart unexpectedly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 01:52:23 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 73e5bfea3e fix(ci): retry cargo-deny-advisories on transient network failure
advisory-db is cloned from GitHub (rustsec/advisory-db). The runner
(merkez-server) occasionally fails to reach GitHub — the clone fails
silently, the advisory-dbs/ directory is not created, and cargo-deny
then tries to run git-log on a non-existent path, producing:
  'fatal: cannot change to ...' parsed as an ISO-8601 date → crash

Real fix: GitLab native retry (max: 2, when: script_failure).
This retries the full job on infrastructure failures without bypassing
the security check — if all 3 attempts fail, the job still fails.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 22:10:40 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 7a20770f63 fix(ci): fix test-partition timeouts and wasm-check arrayvec failure
Two root causes fixed:

1. test-partition-* timeout (90m):
   - WASM runtime sub-builds were running during test compilation.
     SKIP_WASM_BUILD=1 skips them — unit/integration tests use mock
     environments and don't need actual WASM blobs.
   - WASM_BUILD_WORKSPACE_HINT=$CI_PROJECT_DIR: when CARGO_TARGET_DIR is
     outside the project directory, wasm-builder's build script searches
     upward for Cargo.lock and fails to find it. Without Cargo.lock it
     resolves deps fresh (no --locked), selecting alloy-eips@1.8.3 and
     ruint@1.18.0 which require Rust 1.91/1.90 (toolchain is 1.88).
   - Timeout increased 90m → 150m for cold-cache headroom.

2. wasm-check arrayvec compile failure (197 errors):
   cargo check --target wasm32v1-none uses whole-workspace feature
   unification, which enables arrayvec's std feature. wasm32v1-none is
   a bare-metal target with no libstd, so arrayvec must be no_std there.
   Fixed in arrayvec fork: force no_std when
   target_arch=wasm32 && target_os=none, regardless of feature flags.
   Cargo.lock updated to new arrayvec commit (0c417574).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 21:57:28 +03:00
Kurdistan Tech MinistryandClaude Sonnet 4.6 fd36770895 fix(ci): consolidate check-try-runtime into single superset command
Three sequential cargo check commands were causing a 90m timeout on GitLab
shared runners (no persistent target/ cache). Command 3 (try-runtime,experimental)
is a strict superset of commands 1 and 2:
- cmd 1: --all --features try-runtime → redundant, cmd 3 covers it
- cmd 2: -p teyrchain-template-node --features try-runtime → redundant,
  teyrchain-template-node is in the workspace (templates/teyrchain/node)
  so --all already includes it

Keep only the most comprehensive check. Increase timeout to 120m to give the
single compile sufficient headroom on shared runners (~60-70m observed).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 16:39:57 +03:00
Kurdistan Tech Ministry e5802599f3 chore: reformat Cargo.toml with taplo 0.9.3 (CI version) 2026-04-25 05:48:52 +03:00
Kurdistan Tech Ministry 90aa6f5350 fix: patch core2 0.4.0 via git mirror to unblock wasm sub-build resolution
core2 0.4.0 was yanked from crates.io. Wasm runtime builds invoke cargo
as a subprocess without --locked, causing fresh dependency resolution to
fail when selecting core2 ^0.4 (no non-yanked version available).

The dependency path: pezsc-network -> cid v0.9.0 -> core2 ^0.4

Adding a git mirror at git.pezkuwichain.io/pezkuwichain/core2 as a
workspace [patch.crates-io] entry. The wasm-builder propagates workspace
patches to the generated wbuild Cargo.toml, so the sub-build resolves
core2 from the git source instead of the yanked crates.io version.
2026-04-25 05:46:20 +03:00
Kurdistan Tech Ministry 45b58174c0 fix(readme): replace all GitHub links with Gitea/GitLab equivalents
GitHub repo was DMCA-taken-down. All links updated:
- Clone URL: github.com → git.pezkuwichain.io
- Badges: GitHub stats → GitLab equivalents via shields.io
- GitHub Pages rustdoc URLs → GitLab Pages (pezkuwichain.gitlab.io)
- getting-started.sh: raw.githubusercontent.com → gitlab.com raw
- Release badges pointing to dead GitHub release-registry → removed
- psvm, pezkuwi-fellows, mentor issues: github.com → git.pezkuwichain.io
- License section: lists all 4 licenses now present in the repo

Also updated license section to reflect all 4 licenses:
Apache-2.0, GPL-3.0-or-later WITH Classpath-exception-2.0, MIT-0, Unlicense
2026-04-25 02:31:30 +03:00
Kurdistan Tech Ministry 6ee99cc5ba fix(license): proper license compliance across the repository
Critical issues fixed:

1. Workspace Cargo.toml license: GPL-3.0-only → GPL-3.0-or-later WITH
   Classpath-exception-2.0 to match the SPDX-License-Identifier headers
   in 648 source files. These are legally distinct licenses — GPL-3.0-only
   prohibits use of future GPL versions; GPL-3.0-or-later WITH
   Classpath-exception-2.0 permits linking without contaminating linked
   code (critical for WASM runtime use case).

2. Add LICENSE-MIT0: 32 source files declare MIT-0 (pezframe examples)
   but no license text existed in the repository.

3. Add LICENSE-UNLICENSE: 9 source files declare Unlicense (penpal test
   runtime) but no license text existed.

4. Add SPDX-License-Identifier headers to 150 crate_placeholder source
   files. These crates explicitly declare Apache-2.0 in Cargo.toml but
   had no license headers in their .rs files.

5. Fix repository URL: GitHub URL was DMCA-taken-down; updated to
   git.pezkuwichain.io canonical URL.

Root cause of GitHub DMCA: inconsistent license declarations make it
ambiguous whether Apache-2.0 upstream code was properly attributed.
All four license texts (Apache-2.0, GPL-3, MIT-0, Unlicense) are now
present and every source file has a corresponding SPDX header.
2026-04-25 02:07:08 +03:00
Kurdistan Tech Ministry 9406efbcd6 Add LICENSE file for GitLab/GitHub license detection
Primary license is GPL-3.0-only per Cargo.toml workspace config.
LICENSE-GPL3 already existed; this adds the standard LICENSE filename
that repository hosting platforms use for automatic detection.
2026-04-25 01:57:58 +03:00
Kurdistan Tech Ministry c4d47da770 fix(ci): use git diff --quiet instead of git status for umbrella check
git status --porcelain also reports untracked files — cargo install zepter
writes .cargo/ inside the project dir on shared GitLab runners, causing
false positives. git diff --quiet only checks tracked file changes.
2026-04-25 01:37:12 +03:00
Kurdistan Tech Ministry 2bd0f4ce47 debug(ci): show changed files and diff in check-umbrella failure 2026-04-25 01:29:07 +03:00
Kurdistan Tech Ministry 3ac8a1bc80 fix(ci): use zepter run default to propagate umbrella features
'propagate-features' is not a valid zepter workflow. The correct workflow
is 'default' which runs propagate-feature --fix for workspace + umbrella.
Since check-zepter validates workspace cleanliness first, the workspace
step is a no-op — only umbrella feature lists get populated by Zepter.
2026-04-25 00:18:27 +03:00
Kurdistan Tech Ministry 2bbe41e97d fix(ci): complete umbrella check with zepter propagate-features
Generator intentionally emits empty feature lists (filled by Zepter).
Without running propagate-features after generate, diff always exists.
Add zepter run propagate-features step so check reflects actual state.
2026-04-24 23:59:59 +03:00
Kurdistan Tech Ministry 5d1cbbac15 Update Cargo.lock for arrayvec git patch 2026-04-24 23:36:18 +03:00
Kurdistan Tech Ministry 05c31c9ee9 Patch arrayvec 0.7.6 for wasm32v1-none compatibility
arrayvec 0.7.6 fails to compile on wasm32v1-none (Rust 1.87+):
- E0223: Self::Target/Self::IntoIter ambiguous due to Receiver trait
- char.rs: Ok/Err/Result not in scope (prelude not injected on target_os=none)

Fork at git.pezkuwichain.io/pezkuwichain/arrayvec fixes both issues.
2026-04-24 23:34:27 +03:00
Kurdistan Tech Ministry a88c024e38 fix(ci): taplo-format Cargo.toml after alloy/ruint version pins 2026-04-24 22:44:56 +03:00
Kurdistan Tech Ministry 1d69ab5416 fix(deps): pin alloy-eips, alloy-tx-macros, ruint to Rust 1.88-compatible versions
The wasm-builder creates an inner workspace (wbuild/) without a Cargo.lock,
causing it to resolve to latest alloy-eips 1.8.3 (requires Rust 1.91) and
ruint 1.18.0 (requires Rust 1.90). Pin to the same exact versions already
in Cargo.lock (alloy-eips/alloy-tx-macros =1.5.2, ruint =1.17.2).
2026-04-24 22:28:16 +03:00
Kurdistan Tech Ministry 4c465efba3 ci: fix cargo-target volume path (/var/cache → /cache)
/var/cache is not bind-mountable by Docker on VPS2 (filesystem restriction).
/cache is already a persistent volume and works correctly.
2026-04-24 17:41:13 +03:00
Kurdistan Tech Ministry b99f16f934 ci: route test jobs to self-hosted runner with persistent CARGO_TARGET_DIR
- Add tags: [pezkuwi-runner] to .test-base, wasm-check, test-doc
- Set CARGO_TARGET_DIR to /var/cache/cargo-target/<hash>/<job-name> on VPS2
- Hash is md5(Cargo.lock + rust-toolchain.toml) — auto-deletes old keys
- Set CARGO_HOME: /root/.cargo (persistent volume, skip GitLab cache upload)
- Disable GitLab registry cache for self-hosted jobs (cache: [])
- Fix basic-authorship doc test: mark as no_run (requires compiled WASM at runtime)
2026-04-24 17:24:34 +03:00
Kurdistan Tech Ministry 578190da50 ci: install wasm32v1-none target globally, migrate wasm-check to wasm32v1-none
wasm32-unknown-unknown with build-std=core,alloc on Rust >=1.88 now ships
a pre-built std in the sysroot, causing E0152 duplicate core lang items when
serde_core is compiled. Switching to wasm32v1-none (target_os=none, no sysroot
std) eliminates the conflict. Also fixes wasm-check getrandom compile_error
which only triggers on wasm*-unknown-unknown, not wasm32v1-none.
2026-04-24 00:59:18 +03:00
Kurdistan Tech Ministry 418c6c92d7 ci: remove stale target/ cache that caused E0152 duplicate lang item
target-main cache key doesn't invalidate on Cargo.lock changes, so
pre-fix serde_core compiled artifacts were restored into test builds,
reintroducing duplicate alloc lang items after the serde fork fix.
2026-04-23 19:34:59 +03:00
Kurdistan Tech Ministry f1f3f46e30 ci: increase clippy timeout to 2h and cache target/ for incremental speedup 2026-04-23 15:42:39 +03:00
Kurdistan Tech Ministry 9ada06798d ci: retrigger after serde cache warmup 2026-04-23 13:39:31 +03:00
Kurdistan Tech Ministry a58ad37b78 fix(deps): update serde fork - correct alloc extern guard for wasm32v1-none + std feature unification 2026-04-23 03:30:11 +03:00
Kurdistan Tech Ministry 7cf3b01bcb fix(deps): update serde fork to fix E0152 duplicate alloc lang item in std test builds 2026-04-23 02:06:01 +03:00
Kurdistan Tech Ministry 861dfbe195 ci: retrigger clippy with warm cache after welati rebuild 2026-04-22 22:48:06 +03:00
Kurdistan Tech Ministry 47699b592b style(welati): rustfmt reorder cfg-gated imports 2026-04-22 20:25:10 +03:00
Kurdistan Tech Ministry c61bccc9ae fix(welati): cfg-gate Currency and SaturatedConversion imports to avoid unused-import in benchmarks
clippy runs with --all-features (includes runtime-benchmarks) so the
#[cfg(not(feature = "runtime-benchmarks"))] block is excluded and the
imports appeared unused. check-try-runtime runs without runtime-benchmarks
so the block is included and the imports are required.
2026-04-22 20:16:25 +03:00
Kurdistan Tech Ministry 606b7d3021 fix(ci): prefix unused alice_reward with _ in pez-rewards tests 2026-04-22 17:59:47 +03:00
Kurdistan Tech Ministry 19d869f588 fix(ci): ignore RUSTSEC-2026-0104 (webpki CRL parsing panic)
Transitive dep via kube/rustls. We do not parse CRLs in our P2P/RPC stack.
Added to both deny.toml and check-audit.py ignore lists.
2026-04-22 16:59:38 +03:00
Kurdistan Tech Ministry a36393b9f2 fix(ci): fix missing trailing newlines in validator-pool files (fmt)
bash command substitution strips trailing newlines; restored them.
2026-04-22 16:40:31 +03:00
Kurdistan Tech Ministry 84ea4f042a fix(ci): remove unused imports in welati pallet, add license headers to validator-pool
welati/src/lib.rs: Currency and SaturatedConversion were unused (clippy -D warnings).
pezkuwi/pezpallets/validator-pool/src/*.rs: 5 files missing Apache-2.0 SPDX headers.
2026-04-22 16:33:53 +03:00
Kurdistan Tech Ministry d98dfafc49 fix(runtime): fix CreatePresaleOrigin type mismatch in asset-hub runtime
EnsureRoot::Success = () but presale pallet requires Success = AccountId.
Switch to EnsureSigned<AccountId> so the transaction signer becomes
the presale owner — consistent with mock.rs and pallet semantics.
2026-04-22 07:52:07 +03:00
Kurdistan Tech Ministry 9d5b101fd7 fix(ci): fix check-zepter PATH and cargo-audit pipefail
check-zepter: CARGO_HOME=$CI_PROJECT_DIR/.cargo but export used $HOME/.cargo/bin;
switched to $CARGO_HOME/bin so installed zepter 1.82.1 takes precedence.

cargo-audit: set -o pipefail caused the pipe to fail with cargo-audit's exit
code (1 when vulns exist) even when python check passed; redirect to file first.
2026-04-22 06:39:22 +03:00
Kurdistan Tech Ministry 482cbbb1f6 fix(ci): fix taplo formatting and skip .cargo dir in workspace check
taplo.toml and deny.toml were using 2-space indent; taplo requires tabs.
check-workspace.py now skips .cargo the same way it skips target/ —
prevents 1000+ registry crates from being flagged as missing from workspace
when GitLab cache restores .cargo into the project directory.
2026-04-22 05:06:44 +03:00
Kurdistan Tech Ministry 99be20ba05 fix(ci): fix check-toml-format, check-licenses-headers, check-zepter
- taplo.toml: add .cargo/** to exclude list (prevents scanning cached registry files)
- deny.toml: reformat with taplo (tab indentation, proper spacing)
- pezpallets: add Apache-2.0 SPDX license header to 51 files missing headers
  (referral, trust, perwerde, pez-treasury, pez-rewards, welati, token-wrapper,
   messaging, staking-score, presale, identity-kyc)
- ci: check-zepter: prepend $HOME/.cargo/bin to PATH after cargo install
  so newly installed 1.82.1 takes precedence over system 1.78.2
- identity-kyc: fix clippy::needless_borrows_for_generic_args at lib.rs:326
2026-04-22 04:52:25 +03:00
Kurdistan Tech Ministry 857b63130d fix(ci): fix YAML syntax error — move audit python script to .gitlab/check-audit.py 2026-04-22 03:56:46 +03:00
Kurdistan Tech Ministry a2a37dca32 fix(ci): fix all cargo-deny and cargo-audit failures
- deny.toml: add all-features=true to [graph] — prevents krates 0.20+ panic
  on workspace crates that have std feature but don't enable it by default
- deny.toml: allow pezkuwichain/serde.git in [sources] (our wasm32v1-none fork)
- deny.toml: remove stale RUSTSEC ignores (2023-0071, 2024-0428, 2025-0055)
- deny.toml: add new wasmtime/rand/webpki advisories to ignore list
- ci: remove --exclude flag from cargo-deny jobs (flag removed in new versions)
- ci: rewrite cargo-audit to use JSON + python summary (prevents 4MB log overflow)
  and add all current advisories to ignore set with documented rationale
- ci: fix check-zepter to use --force (not --locked) so 1.82.1 actually installs
- Cargo.toml: add default=[std] to bizinikiwi-test-runtime-transaction-pool
  (std crate that was missing default feature, confusing krates graph builder)
2026-04-22 03:06:35 +03:00
Kurdistan Tech Ministry cfbde6de5a fix(ci): pass both --exclude paths to single flag (nargs=* overwrites on repeated use) 2026-04-22 01:29:52 +03:00
Kurdistan Tech Ministry 5b898402ad docs: fix all domain URLs — pezkuwichain.app → pezkuwichain.io, app link → app.pezkuwichain.io 2026-04-22 00:10:20 +03:00
Kurdistan Tech Ministry 1ca19e0956 ci: fix all failing jobs — upgrade cargo-deny/audit, fix CARGO_HOME, zepter version, mdbook image 2026-04-22 00:01:47 +03:00
pezkuwichain 0254a8ad3e ci: add Runtime Upgrade MR template 2026-04-21 20:28:22 +00:00
pezkuwichain ebecc350f9 ci: add Default MR template 2026-04-21 20:28:20 +00:00
pezkuwichain c0b0c371f5 ci: add Security issue template 2026-04-21 20:28:04 +00:00
pezkuwichain dc59853fe9 ci: add Feature Request issue template 2026-04-21 20:28:03 +00:00
pezkuwichain 04852535c6 ci: add Bug Report issue template 2026-04-21 20:28:02 +00:00
pezkuwichain 287fbfbcd2 docs: add DEVELOPMENT.md contributor setup guide 2026-04-21 20:27:35 +00:00
pezkuwichain 18d57b8e0c docs: add CODEOWNERS 2026-04-21 20:27:08 +00:00
pezkuwichain aa87740810 docs: add CHANGELOG.md 2026-04-21 20:26:51 +00:00
pezkuwichain b717fa5556 docs: add SECURITY.md — vulnerability disclosure policy 2026-04-21 20:26:11 +00:00
Kurdistan Tech Ministry 7caf11b2d2 ci: professional pipeline — unified image, nextest partitions, docs, schedules 2026-04-21 23:20:17 +03:00
Kurdistan Tech Ministry 4e6079fb47 ci: add GitLab CI pipeline with protobuf-compiler fix 2026-04-21 22:54:24 +03:00
pezkuwichain cc86ff5f2b security: remove AI tooling files — CLAUDE.md, .claude/ 2026-04-21 19:20:23 +02:00
pezkuwichain cb0ac10df2 security: ignore internal rebranding and operational scripts 2026-04-21 16:32:55 +00:00
pezkuwichain 6f61b89beb docs: remove local filesystem paths from runtimes-pallets.md 2026-04-21 16:31:49 +00:00
Kurdistan Tech Ministry 787efa3cce fix(security): update vulnerable dependencies, clean up deny.toml
Cargo.lock updates (cargo update):
- tar 0.4.44 -> 0.4.45 (RUSTSEC-2026-0067, RUSTSEC-2026-0068)
- rustls-webpki 0.103.9 -> 0.103.11 (RUSTSEC-2026-0049)
- tracing-subscriber 0.3.22 -> 0.3.23
- yamux 0.13.8 -> 0.13.10 (RUSTSEC-2024-0428 for 0.13.x branch)

deny.toml: remove fixed advisory ignores, add accurate tracking comments

Remaining known issues (cannot fix without toolchain/vendor upgrade):
- wasmtime 37.x: fix in 42.x requires rustc 1.91 (pinned to 1.88)
- yamux 0.12.1: locked by libp2p-yamux 0.47.0 in zombienet vendor
2026-04-14 00:15:21 +03:00
Kurdistan Tech Ministry a683b836fe chore: repo cleanup and security hardening
- Remove stale root files: chain_spec.json, pezkuwi.gbp, publish.log,
  test-asset-hub.toml (moved to .claude/)
- Move publish_batch.sh and publish_crates.sh to scripts/
- Remove hardcoded /home/mamostehp/res/ paths from scripts and comments
  (WALLETS_FILE env var now required, no silent fallback)
- Update .gitignore: add protection entries for regenerable artifacts
  and .claude/ experience files
2026-04-13 21:30:38 +03:00
Kurdistan Tech Ministry f82546fdb1 chore: add license files and attribution notice for Apache-2.0 compliance
- Add LICENSE-APACHE (Apache License 2.0 full text)
- Add LICENSE-GPL3 (GNU GPL 3.0 full text)
- Add NOTICE file with full attribution to original Polkadot SDK,
  Parity Technologies (UK) Ltd., and Web3 Foundation, documenting
  all significant changes made as required by Apache-2.0 Section 4(b)
- Update README License section to accurately reflect dual licensing
  and link to NOTICE file
2026-04-10 15:59:29 +03:00
Kurdistan Tech Ministry a0607b420c fix(security): add missing advisory ignores for cargo-audit + cargo-deny
Re-add RUSTSEC-2023-0071 (rsa) and RUSTSEC-2025-0055 (tracing-subscriber)
which were incorrectly removed — they are still in transitive deps.

Add new advisories:
- RUSTSEC-2026-0067 (tar symlink traversal) — no 0.4.x patch available
- RUSTSEC-2026-0068 (tar link following) — no 0.4.x patch available
2026-03-28 15:47:09 +03:00
Kurdistan Tech Ministry fd197ae78f fix: presale benchmark missing args + security audit advisory cleanup
- Fix refund_cancelled_presale benchmark: add missing start_index and
  batch_size arguments (0, 100) to match the 3-param extrinsic signature
- Remove 3 stale RUSTSEC advisories from deny.toml and security-audit.yml
  (RUSTSEC-2023-0071, RUSTSEC-2025-0055, RUSTSEC-2026-0002 no longer in deps)
- Add RUSTSEC-2026-0049 (rustls-webpki) to ignore lists (upstream kube/jsonrpsee
  haven't released compatible versions yet)
2026-03-27 09:34:47 +03:00
Kurdistan Tech Ministry 894617563a fix: default version=0.0.0 in generate-umbrella.py 2026-03-22 20:27:18 +03:00
Kurdistan Tech Ministry b27c12d306 fix(ci): add missing version field to umbrella Cargo.toml 2026-03-22 20:26:48 +03:00
Kurdistan Tech Ministry 9f4c9b4d19 style: fix formatting, regenerate umbrella, taplo format 2026-03-22 20:17:58 +03:00
Kurdistan Tech Ministry 288978c088 fix(security): audit fixes across 9 custom pallets
- pez-rewards: checked arithmetic in parliamentary reward distribution
- tiki: saturating_add in get_tiki_score fold, benchmarking cleanup
- ping: saturating_add on PingCount
- staking-score: saturating_mul on 4 duration multipliers
- pez-treasury: proper error on TreasuryStartBlock None, saturating_add on NextReleaseMonth, doc fix 70->75%
- messaging: InboxOverflow event on FIFO eviction
- token-wrapper: reorder wrap/unwrap operations, add pallet balance pre-check
- welati: u64 cast for turnout percentage overflow prevention
- presale: fix refund calculation to use net_in_treasury (98%) instead of impossible 99%, update tests
2026-03-22 18:56:37 +03:00
Kurdistan Tech Ministry ad9204cab1 fix(security): address HIGH audit findings across 5 pallets
identity-kyc (H1):
- Add IdentityHashToAccount reverse mapping to prevent same identity hash
  being used by multiple accounts
- Check uniqueness in apply_for_citizenship, populate on confirm_citizenship,
  clean up on renounce_citizenship

pez-rewards (H2):
- Add EpochTotalClaimed storage to track claimed amounts per epoch
- do_close_epoch now only claws back unclaimed rewards (total_allocated -
  total_claimed), not the entire pot balance

tiki (H3):
- Replace custom "locked" attribute with pezpallet_nfts::disable_transfer()
  which sets the system-level PalletAttributes::TransferDisabled attribute
  that is actually enforced during transfers

tiki (H4):
- Fix EnsureTiki to check UserTikis storage for non-unique roles (Wezir,
  Parlementer) instead of TikiHolder which only stores unique roles

perwerde (H5):
- Add MaxPointsPerCourse config constant (1000 in runtime)
- Validate points in complete_course against the max
- Use saturating_add in get_perwerde_score to prevent u32 overflow

welati (H6):
- Add NativeCurrency: ReservableCurrency to Config
- Actually reserve candidacy deposit from candidate's balance

welati (H7):
- Add MaxEndorsers config constant (1000 in runtime)
- Validate endorsers count at the start of register_candidate before
  any storage reads
2026-03-21 21:58:24 +03:00
Kurdistan Tech Ministry 741a65416a fix(security): address remaining CRITICAL audit findings
presale:
- C2: Convert refund_cancelled_presale to batch pattern (start_index, batch_size)
  to prevent unbounded iteration with many contributors
- C3: Add status validation to cancel_presale — prevent cancelling Finalized/Failed
  presales (prevents double-dipping: tokens distributed + refund issued)
- C4: Enforce CreatePresaleOrigin (was defined in Config but never checked)
  Changed to Success = AccountId for proper owner extraction
- Clarified presale_account_id expect() safety comment (Blake2_256 = 32 bytes,
  always sufficient for AccountId decode)
- Removed unused imports (Defensive, AccountIdConversion)

perwerde:
- C5: Prevent NextCourseId overflow — added ensure!(< u32::MAX) check and
  replaced unchecked += 1 with saturating_add

welati:
- C6: Enforce access control on all CollectiveDecisionType variants:
  ConstitutionalReview/Unanimous → Diwan members only
  ExecutiveDecision → Serok only
  HybridDecision → Parliament OR Serok
  VetoOverride → Parliament members only
2026-03-21 21:23:43 +03:00
Kurdistan Tech Ministry f1a7a7f872 fix(security): address critical audit findings in presale and validator-pool pallets
presale:
- Split unbounded finalize_presale distribution into batched batch_distribute()
  extrinsic (same pattern as batch_refund_failed_presale) to prevent block weight
  exhaustion with many contributors
- Fix u128 overflow in calculate_reward_dynamic() by using
  multiply_by_rational_with_rounding() for safe intermediate multiplication
- Fix pre-existing batch_refund test assertion (platform fee deduction was not
  accounted for in expected refund amount)

validator-pool:
- Bound PoolMembers::iter() with .take(MaxPoolSize) in select_validators_for_era()
  to prevent unbounded iteration in on_initialize
- Fix on_initialize weight accounting to include all DB reads/writes from
  do_new_era() and select_validators_for_era() (was only counting 2 reads)
2026-03-21 15:33:25 +03:00
Kurdistan Tech Ministry 420ed35169 feat: add weights, benchmarking, mock and tests for ping and teyrchain-info pallets
- ping: weights.rs (WeightInfo trait + implementations), benchmarking.rs
  (v2-style benchmarks for start/start_many/stop/stop_all), mock.rs
  (test runtime with MockXcmSender), tests.rs (26 tests covering all extrinsics)
- teyrchain-info: mock.rs (minimal test runtime), tests.rs (7 tests for
  genesis config and ParaId getter)
- Updated ping lib.rs to use WeightInfo instead of zero weights
- Added WeightInfo = () to testing runtime Config
2026-03-21 15:19:47 +03:00
Kurdistan Tech Ministry 66a4bfa86b fix(ci): trailing slash in debug Dockerfile COPY, make build-rustdoc non-blocking 2026-03-20 18:35:20 +03:00
Kurdistan Tech Ministry a525696e16 fix(docker): add trailing slash to COPY destination in malus Dockerfile 2026-03-19 18:46:53 +03:00
Kurdistan Tech Ministry 2ad475ceef ci: remove all zombienet CI infrastructure
Zombienet tests are upstream Polkadot SDK tests with no custom pallet
coverage. Mainnet has 500K+ blocks, 9 successful upgrades, and zero
breakage — these tests provide no value for our project.

Removed 22 files (2293 lines):
- 6 workflow files (zombienet_*.yml, preflight, flaky-tests check)
- 3 custom actions (zombienet, zombienet-sdk, download-binaries)
- 5 scripts (dispatch, run, parse, process-logs, check-flaky)
- 5 config files (zombienet-env, flaky-tests, test definitions)
- 1 doc file (ZOMBIENET_CI.md)
- Remaining comment references in build-publish-images.yml
2026-03-16 17:27:37 +03:00
Kurdistan Tech Ministry 86e44c151c ci: move zombienet tests to manual-only workflow_dispatch
Zombienet tests are upstream Polkadot SDK tests without custom pallets.
They consume significant VPS resources (hours of build + test time) on
every push without providing project-specific value.

Removed from automatic CI:
- 4 zombienet artifact build jobs (prepare-*-zombienet-artifacts)
- bridges-zombienet-tests Docker image build
- 4 zombienet trigger jobs + confirmation gate

Zombienet workflows remain available for manual triggering:
  gh workflow run zombienet_pezkuwi.yml
  gh workflow run zombienet_pezcumulus.yml
  gh workflow run zombienet_bizinikiwi.yml
  gh workflow run zombienet_teyrchain-template.yml
2026-03-16 17:18:17 +03:00
Kurdistan Tech Ministry 6c036bbe6f fix(ci): use upstream paritytech/zombienet Docker image
Zombienet is a 3rd-party upstream tool — its Docker image should
reference paritytech/zombienet, not pezkuwi/zombienet which doesn't
exist on Docker Hub. This fixes all zombienet test failures caused
by image pull failures.
2026-03-16 15:34:47 +03:00
Kurdistan Tech Ministry afa8bba099 fix(ci): change Docker Hub namespace from pezkuwichain/ to pezkuwi/
Docker Hub personal account namespace must match the username.
Updated all docker.io image references across workflows, actions,
docker-compose files, and zombienet configs.
2026-03-14 15:58:50 +03:00
Kurdistan Tech Ministry 012807bf14 ci: trigger full workflow re-run with updated Docker Hub credentials 2026-03-13 15:17:14 +03:00
Kurdistan Tech Ministry 3bc4c8eda1 chore(deps): update quinn-proto to 0.11.14 (RUSTSEC-2026-0037 fix)
Also updates windows-sys transitive dependency from 0.52 to 0.59.
2026-03-12 04:24:51 +03:00
Kurdistan Tech MinistryandClaude Opus 4.6 d8550e2d76 style: fix rustfmt line length in BABE benchmarking blob
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 01:22:57 +03:00
Kurdistan Tech MinistryandClaude Opus 4.6 d52551460c fix(ci): compress rustdoc artifact to prevent upload stall
The VPS runner's limited bandwidth causes upload-artifact to stall when
uploading hundreds of MB of individual HTML files. Compress crate-docs
into a tar.gz before upload and extract on the publish side.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 01:07:07 +03:00
Kurdistan Tech Ministry 0dbe3a7032 fix(benchmarks): regenerate BABE equivocation proof blob, exclude revive benchmarks
- Regenerate EQUIVOCATION_PROOF_BLOB in pezpallet-babe benchmarking:
  the old blob contained stale header hashes that caused
  check_equivocation_proof to fail with assertion error

- Exclude pezpallet_revive from quick-benchmarks via
  --exclude-pezpallets flag: revive benchmarks require PolkaVM
  toolchain (riscv64emac-unknown-none-polkavm) for fixture compilation
  which is not available in CI. This removes continue-on-error so
  real benchmark failures are now visible

- Increase build-rustdoc timeout from 180 to 240 minutes for VPS runner
2026-03-06 16:52:47 +03:00
Kurdistan Tech Ministry 827128f5f7 chore: format deny.toml with taplo (alphabetical license order) 2026-03-05 03:41:02 +03:00
Kurdistan Tech Ministry 2fbe8da2cd fix(security): add NCSA and CDLA-Permissive-2.0 licenses, disable fail-fast
- Add NCSA and CDLA-Permissive-2.0 to allowed licenses in deny.toml
  (both are permissive open-source licenses used by transitive deps)
- Set fail-fast: false on cargo-deny matrix so all checks run
  independently even if one fails
2026-03-05 03:28:41 +03:00
Kurdistan Tech Ministry 6e307b0999 fix(security): set unmaintained=none in deny.toml
All unmaintained crate warnings are transitive upstream dependencies
that we cannot replace. Disable unmaintained checks in cargo-deny
to prevent false CI failures. Track via quarterly review instead.
2026-03-05 03:11:35 +03:00
Kurdistan Tech Ministry 4f672222f7 fix(security): upgrade deps and enforce security audit workflow
- Upgrade bytes 1.11.0 → 1.11.1 (RUSTSEC-2026-0007 integer overflow)
- Upgrade time 0.3.46 → 0.3.47 (RUSTSEC-2026-0009 DoS stack exhaustion)
- Upgrade git2 0.20.3 → 0.20.4 (RUSTSEC-2026-0008 undefined behavior)
- Upgrade keccak 0.1.5 → 0.1.6 (RUSTSEC-2026-0012 unsoundness)
- Add ignore rules in deny.toml for unfixable upstream advisories
  (wasmtime 37.x, rsa, tracing-subscriber 0.2.x, lru)
- Remove continue-on-error from security-audit workflow — audit is now
  enforced and will block CI on new unignored vulnerabilities
2026-03-05 03:00:59 +03:00
Kurdistan Tech Ministry bea99ee1b4 fix(messaging): fix clippy/rustdoc errors in benchmarking
- Mark shell command doc block as ```text to fix rustdoc parsing
- Remove duplicated #![cfg(feature = "runtime-benchmarks")] (already gated in lib.rs)
- Use let _ = for unused MultiRemovalResults from clear_prefix
2026-03-04 15:01:49 +03:00
Kurdistan Tech Ministry ea249f9f96 chore: gitignore operational scripts, add statement-distribution-legacy doc
Ignore diagnostic/operational subxt examples that contain hardcoded VPS
addresses. Add missing implementers-guide documentation stub.
2026-03-04 03:59:38 +03:00
Kurdistan Tech Ministry 0d3548a87b feat(people): add pezpallet-messaging to People Chain runtime
End-to-end encrypted messaging pallet with citizenship and trust score
verification. Integrated into People Chain runtime as pallet index 55.
spec_version bumped to 1_020_009.
2026-03-04 03:55:55 +03:00
Kurdistan Tech Ministry 93f1df24a1 feat(ci): switch CI image to GHCR mirror (package now public)
GHCR package visibility set to public via org settings.
All container jobs can now pull from ghcr.io/pezkuwichain/ci-unified.
2026-03-02 21:24:30 +03:00
Kurdistan Tech Ministry 4627d08954 fix(ci): revert to paritytech CI image until GHCR package is public
GHCR packages are created as private by default and the visibility
cannot be changed via the REST API. Reverting to docker.io/paritytech
until the package visibility is changed to public via GitHub UI at:
https://github.com/orgs/pezkuwichain/packages/container/ci-unified/settings

The mirror-ci-image.yml workflow has already populated GHCR - just
need to make it public, then update this file to use GHCR.
2026-03-02 15:16:39 +03:00
Kurdistan Tech Ministry c9be37fd95 feat(ci): switch CI image to GHCR mirror
Now that the mirror-ci-image workflow has populated GHCR, switch
.github/env from docker.io/paritytech/ci-unified to our own
ghcr.io/pezkuwichain/ci-unified mirror.
2026-03-02 15:11:07 +03:00