CI: Forgejo — split workflows + rust-cache + cargo-audit pre-buildt #232
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#232
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Refs: spec-decisions-ci-build-optimization.md + spec-plan-ci-build-optimization.md — RE-SEQUENCE post-baseline #231 (2026-06-30), puis re-analyse
/analyze(2026-07-24).Baseline re-mesuree — run 326 (2026-07-21, PR #304)
La baseline #231 tient toujours (job rust 21-22 min encore le 2026-07-21). Chrono exact par etape :
cargo checkcargo test(compile 4m00 + run 15s)cargo install cargo-audit(compile release 4m34) + audittarget/->reserveCache failedreserveCache failedNouveau vs #231 : le restore timeout aussi desormais (
getCacheEntry failed: Request timeout), la baseline du 30 juin n'avait qu'un MISS propre. ~12m15s des 21m44 sont retirables sans toucher au VPS.Trois constats qui revisent le cadrage
frontenddemarre a la seconde ourustfinit, sur tous les runs de l'historique. Le feedback reel d'une PR = rust + frontend = ~24,5 min, pour toutes les PR. Or 3 des 40 derniers commits first-parent demaintouchentsrc-tauri/, dont 2 sont deschore: release(push sur main, ne declenche pas check.yml). Le path-filter fait donc passer la PR typique de 24,5 min a ~2,5 min : c'est le gain dominant, pas un effet de bord.mainaenable_status_check: false/status_check_contexts: null(whitelist de push seulement). Aucune PR ne peut rester bloquee sur un check qui ne tourne plus.on.pull_request.branches: [main]ne matche pas une PR dont la base est une autre branche. Verifie sur la pile feature-gating : #305, #306, #307, #308 n'ont aucune tache CI ; seules #303 et #304 (basemain) ont tourne. L'autopilot produit des piles lineaires en routine (3 des 4 dernieres milestones) -> 4 PR sur 5 mergent sans CI. Decision (2026-07-24) : corrige ici, puisque #232 reecrit deja ces lignes.Travail a faire
.forgejo/workflows/check.yml; creercheck-rust.yml+check-frontend.yml.check-rust.yml:paths: [src-tauri/**, self]; sansbranches:(couvre les PR stackees) ;concurrency: ci-rust-${{ github.ref }};permissions: contents: read; etape « install sysdeps + Node.js + toolchain » verbatim ; envCARGO_INCREMENTAL=0/CARGO_PROFILE_TEST_DEBUG=0.cargo-auditviahttps://github.com/taiki-e/install-action@v2(tool: cargo-audit) : etape d'install sanscontinue-on-error(une panne d'outillage doit casser le job) ; etapecargo auditaveccontinue-on-erroret sans|| true(advisories visibles, non bloquantes).check-frontend.yml:paths-ignore(denylist) ;concurrency: ci-frontend-${{ github.ref }};permissions: contents: read. Ecart assume vs l'ancien corps : le cache npm est retire lui aussi — meme diagnostic (Cache not foundau restore +reserveCache failedau save), 23s gaspillees sur un job de 2m27 (~15 %), sur le job qui tournera desormais sur 39 PR sur 40.audit.ymldedie :on: schedulequotidien +workflow_dispatch; sans toolchain Rust (cargo-audit audit --file src-tauri/Cargo.lock) ; echec bloquant (c'est la notification). Retenu contre unschedulesur check-rust.yml, qui couterait ~22 min de runner/jour a capacite 1.docs/architecture.md(l. 417-426) etCLAUDE.mdsection CI/CD : les deux sont perimes (triggerpushretire en #171 ; jobs decrits « en parallele » alors qu'ils sont sequentiels).Choix de conception
paths:strict ; le job a 2,5 min prend unpaths-ignore. Si un fichier de config racine apparait plus tard, un allowlist arreterait silencieusement de le couvrir, alors qu'un denylist fait tourner un job court pour rien. Fail-safe du bon cote.Criteres d'acceptation
check-rust.yml-> self-path) :check-rustvert, aucune etape de cache,cargo-auditinstalle en binaire (< 30s au lieu de 4m41).check-rustne se declenche pas ; feedback ~2,5 min au lieu de 24,5.main) : la CI se declenche.audit.ymldeclenchable viaworkflow_dispatchet vert.Defere (follow-up apres #234)
Swatinem/rust-cache@v2(workspaces: "src-tauri -> target") une fois la connectivite serveur-de-cache reparee (#234), et remettre le cache npm cote frontend. Verifier alors un vraiCache restoredau run suivant.Depends on #231 (baseline, fait). Prerequis pour rust-cache : #234.
Ajustements issus de /review-spec (2026-06-30) — à intégrer en plus du body :
on.pull_request.branches:[main]ET un groupeconcurrencyDISTINCT (ci-rust-${{ github.ref }}/ci-frontend-${{ github.ref }}). Sinon, en héritant deci-${{ github.ref }}+cancel-in-progress, les 2 workflows s'annulent mutuellement sur une PR mixte.nodedans le PATH.permissions: contents: readen tête de chaque nouveau workflow.on: schedulequotidien (ou un workflow audit dédié sanspaths:) pour garder la couverture RustSec hors des PR Rust ; retirer le|| true(échouer sur erreur d'outillage, advisories non-bloquantes).src-tauri/** + self(retirer les globs**/*.rsredondants — tout le Rust est sous src-tauri/).Détail : spec-plan-ci-build-optimization.md → Issue 2 + « Revision — Synthese ».
Ré-orientation suite à la baseline #231 : la cause dominante est #2 (save échoue,
reserveCache timeout), pas #1. rust-cache seul ne débloquera PAS les 24 min — il partage le backendreserveCache.→ Prérequis : #234 (connectivité serveur-de-cache du runner, accès hôte VPS). Une fois #234 résolu, rust-cache reprend tout son sens (cache pruné + réellement persisté).
Restent applicables indépendamment dans cette issue (gains immédiats, sans dépendre de #234) : cargo-audit en binaire pré-buildé (~5.5 min/run), path-filter (skip rust sur PR frontend), + le fix concurrency/permissions/install-Node de la revue. À reséquencer : ces gains d'abord, rust-cache après #234.