Commit Graph
27 Commits
Author SHA1 Message Date
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 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 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 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 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 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
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