CI: baseline & diagnostic du job rust #231

Closed
opened 2026-07-01 00:05:54 +00:00 by maximus · 2 comments
Owner

Refs: spec-decisions-ci-build-optimization.md + spec-plan-ci-build-optimization.md

Mesurer la baseline du job rust Forgejo AVANT tout changement, pour confirmer la cause (le diagnostic est infere : Gitea ne scope pas les caches par branche, donc le suspect n1 est le cache manuel sur target/ que cargo reinvalide) et avoir un avant/apres chiffre.

  • Recuperer les logs du dernier run du job rust Forgejo (PR #230 / run 358) via l'UI Actions ou l'API.
  • Verifier un vrai Cache restored from key: ...-cargo-target-... (restore effectif ou miss).
  • Verifier le statut de SAUVEGARDE du cache : Cache saved vs reserveCache failed: socket hang up / timeout.
  • Chrono par etape : install (apt + rustup), restore cache, cargo check, cargo test, cargo install cargo-audit + cargo audit.
  • Conclure la cause dominante : #1 cache restaure mais cargo recompile / #2 save echoue (reseau job<->runner) / #3 cargo install dominant.
  • Consigner la baseline (total + par etape) dans cette issue.
  • Si cause #2 confirmee : ouvrir un follow-up "config reseau/hote runner" (hors fichiers workflow, acces hote requis).

Aucune dependance.

Refs: spec-decisions-ci-build-optimization.md + spec-plan-ci-build-optimization.md Mesurer la baseline du job rust Forgejo AVANT tout changement, pour confirmer la cause (le diagnostic est infere : Gitea ne scope pas les caches par branche, donc le suspect n1 est le cache manuel sur target/ que cargo reinvalide) et avoir un avant/apres chiffre. - [ ] Recuperer les logs du dernier run du job rust Forgejo (PR #230 / run 358) via l'UI Actions ou l'API. - [ ] Verifier un vrai `Cache restored from key: ...-cargo-target-...` (restore effectif ou miss). - [ ] Verifier le statut de SAUVEGARDE du cache : `Cache saved` vs `reserveCache failed: socket hang up` / timeout. - [ ] Chrono par etape : install (apt + rustup), restore cache, cargo check, cargo test, cargo install cargo-audit + cargo audit. - [ ] Conclure la cause dominante : #1 cache restaure mais cargo recompile / #2 save echoue (reseau job<->runner) / #3 cargo install dominant. - [ ] Consigner la baseline (total + par etape) dans cette issue. - [ ] Si cause #2 confirmee : ouvrir un follow-up "config reseau/hote runner" (hors fichiers workflow, acces hote requis). Aucune dependance.
maximus added this to the spec-ci-build-optimization milestone 2026-07-01 00:05:54 +00:00
maximus added the
status:ready
type:infra
source:human
labels 2026-07-01 00:05:54 +00:00
Author
Owner

Ajout /review-spec (2026-06-30) : inclure dans le chrono la durée de apt-get + rustup (install toolchain + libs système), qui n'est PAS cachée par rust-cache. Si l'install domine le temps total, la cible ~12 min peut ne pas tenir → ces chiffres serviront à re-décider l'image pré-buildée (actuellement OUT).

Ajout /review-spec (2026-06-30) : inclure dans le chrono la durée de `apt-get` + `rustup` (install toolchain + libs système), qui n'est PAS cachée par rust-cache. Si l'install domine le temps total, la cible ~12 min peut ne pas tenir → ces chiffres serviront à re-décider l'image pré-buildée (actuellement OUT).
Author
Owner

Baseline — job rust (run 358, PR #230, 100% TypeScript, Cargo.lock inchangé)

Logs récupérés via la route web /actions/runs/295/jobs/0/logs (l'API /actions/tasks/*/logs renvoie 404 ; la route web accepte le token).

Findings (preuves)

  • Restore : MISS. Cache not found for input keys: Linux-cargo-target-… ET Linux-cargo-registry-… (aucun Cache restored dans tout le log).
  • Save : ÉCHOUE. ::warning::Failed to save: reserveCache failed: Request timeout: /…/_apis/artifactcache/caches (2 fois — registry puis target).
  • Conséquence : le cache n'est jamais sauvé → toujours un miss au restore → recompilation complète de l'arbre de deps à chaque run.

Chrono par étape (total 24 min 24 s)

Étape Fenêtre Durée
Install (apt + Node.js + rustup) 20:51:10 → 20:53:09 ~2 min
Checkout + restore cache (MISS ×2) 20:53:09 → 20:53:52 ~45 s
cargo check + cargo test (compile à froid) 20:53:52 → 21:02:41 ~8.8 min
cargo install cargo-audit (compile) + audit 21:02:41 → ~21:08:13 ~5.5 min
Save cache (tar target/ multi-Go + reserveCache timeout ×2) 21:08:13 → 21:15:33 ~7.3 min, ÉCHOUE

Conclusion — cause dominante : #2 (save échoue, réseau job↔runner)

Pas #1 (cache réinvalidé) : le cache n'est même pas restauré. C'est le gotcha Gitea documenté — le conteneur job n'atteint pas (ou timeout sur) le serveur de cache de act_runner. Twist : les saves ratés gaspillent ~7 min/run (tar d'un target/ multi-Go pour rien).

Implications pour le fix (ré-oriente #232)

  1. rust-cache seul NE corrigera PAS : il utilise le même backend reserveCache. Si reserveCache timeout, son save échoue aussi → même miss. (Le prune de target/ pourrait aider si le timeout était lié à la taille — mais « Request timeout » sur reserveCache pointe vers l'accessibilité du serveur de cache, pas la taille.)
  2. Vrai correctif = connectivité serveur-de-cache du runner → follow-up créé (config act_runner : cache.host/cache.port + réseau conteneur↔runner). Accès hôte VPS requis.
  3. Quick win : tant que le save échoue, retirer le cache target/ (ou fixer la connectivité) reclame ~7 min/run gaspillées.
  4. Restent valides et indépendants : cargo-audit en binaire pré-buildé (~5.5 min), path-filter (skip rust sur PR frontend).
## Baseline — job rust (run 358, PR #230, 100% TypeScript, Cargo.lock inchangé) Logs récupérés via la route web `/actions/runs/295/jobs/0/logs` (l'API `/actions/tasks/*/logs` renvoie 404 ; la route web accepte le token). ### Findings (preuves) - **Restore : MISS.** `Cache not found for input keys: Linux-cargo-target-…` ET `Linux-cargo-registry-…` (aucun `Cache restored` dans tout le log). - **Save : ÉCHOUE.** `::warning::Failed to save: reserveCache failed: Request timeout: /…/_apis/artifactcache/caches` (2 fois — registry puis target). - Conséquence : le cache n'est **jamais** sauvé → toujours un miss au restore → recompilation complète de l'arbre de deps à chaque run. ### Chrono par étape (total 24 min 24 s) | Étape | Fenêtre | Durée | |---|---|---| | Install (apt + Node.js + rustup) | 20:51:10 → 20:53:09 | ~2 min | | Checkout + restore cache (MISS ×2) | 20:53:09 → 20:53:52 | ~45 s | | cargo check + cargo test (compile à froid) | 20:53:52 → 21:02:41 | ~8.8 min | | cargo install cargo-audit (compile) + audit | 21:02:41 → ~21:08:13 | ~5.5 min | | **Save cache (tar target/ multi-Go + reserveCache timeout ×2)** | 21:08:13 → 21:15:33 | **~7.3 min, ÉCHOUE** | ### Conclusion — cause dominante : **#2 (save échoue, réseau job↔runner)** Pas #1 (cache réinvalidé) : le cache n'est même pas restauré. C'est le gotcha Gitea documenté — le conteneur job n'atteint pas (ou timeout sur) le serveur de cache de `act_runner`. Twist : les saves ratés **gaspillent ~7 min/run** (tar d'un target/ multi-Go pour rien). ### Implications pour le fix (ré-oriente #232) 1. **rust-cache seul NE corrigera PAS** : il utilise le même backend `reserveCache`. Si `reserveCache` timeout, son save échoue aussi → même miss. (Le prune de target/ pourrait aider si le timeout était lié à la taille — mais « Request timeout » sur `reserveCache` pointe vers l'accessibilité du serveur de cache, pas la taille.) 2. **Vrai correctif = connectivité serveur-de-cache du runner** → follow-up créé (config `act_runner` : `cache.host`/`cache.port` + réseau conteneur↔runner). Accès hôte VPS requis. 3. **Quick win** : tant que le save échoue, retirer le cache target/ (ou fixer la connectivité) reclame ~7 min/run gaspillées. 4. Restent valides et indépendants : **cargo-audit en binaire pré-buildé** (~5.5 min), **path-filter** (skip rust sur PR frontend).
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#231
No description provided.