97ec820ebb
Workflow now targets Simone/nsis-plugin-ns7zip. Renamed the file and the workflow `name:`, and updated all references in active docs (plans/archived and docs/archived left as frozen history). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.1 KiB
4.1 KiB
A4 — Closeout
Fase A4 di plans/implementation-plan-A-B.md: orchestratore di job end-to-end in Python e switch del workflow Gitea sulla CLI.
Branch: feature/python-rewrite-phase-a.
Stato attuale
commands/job.pyimplementato (entry point completo: clone → start → wait → probe → build → collect → cleanup garantito intry/except/else/finally)- Selezione backend via
backends.load_backend(config)— nessun import diretto diWorkstationVmrunBackendnel comando (hook Fase C) - Auto-detect guest OS dal VMX (
guestOS = "ubuntu-*"→ Linux, altrimenti Windows) - Override CPU/RAM (
--guest-cpu,--guest-memory-mb) via patch idempotente del clone VMX - Iniezione env extra (
--extra-env-json) con validazione regex chiavi __main__.pyregistra il sottocomandojobscripts/Invoke-CIJob.ps1ridotto a shim PS 5.1 (delega apython -m ci_orchestrator job, traduce flag PascalCase → kebab-case)gitea/actions/local-ci-build/action.ymlinvoca direttamente& $venvPython -m ci_orchestrator job ...(più nessuno@paramssplatting verso lo shim PS)runner/config.yamlesportaPYTHONIOENCODING=utf-8per garantire stdio UTF-8 nei log act_runner → Giteatests/python/test_commands_job.pyaggiunto: 13 test (happy path Linux, happy path Windows + override, skip-artifact, cleanup su build failure, cleanup su clone failure, validazione template/extra-env, helper_apply_vmx_overrides/_read_guest_os_from_vmx/_parse_extra_env_json)- Suite completa: ruff clean, mypy --strict clean, 104 pytest PASS, coverage totale 79.25%, coverage
commands/job.py83% - Workflow
build-ns7zip.ymlmatrix (Win + Linux) end-to-end PASS contro VM reali — richiede host con runner registrato - Workflow
self-test.yml/lint.ymlPASS sul nuovo entry point — stessa dipendenza - Misurazione tempo job entro ±10% del baseline PowerShell (
Measure-CIBenchmark.ps1)
Definizione di "fatto" A4
| Criterio | Stato |
|---|---|
action.yml chiama Python direttamente |
✅ |
Shim Invoke-CIJob.ps1 preservato per uso manuale |
✅ |
runner/config.yaml ha PYTHONIOENCODING=utf-8 |
✅ |
Coverage commands/job.py ≥80% |
✅ 83% |
| Cleanup VM garantito su tutti i path di errore | ✅ (test test_job_cleanup_on_*) |
| Hook Fase C (factory backend, no import workstation diretto) | ✅ |
Workflow build-ns7zip.yml matrix PASS |
⏳ validazione hardware utente |
| Tempo entro ±10% baseline | ⏳ misurazione utente |
Cosa resta a carico utente
- Eseguire
build-ns7zip.yml(matrix Win + Linux) sul runner host registrato e verificare che il job concluda con artifact pubblicato — il flusso deve passare dal nuovo entry point Python. - Lanciare
self-test.ymlelint.ymlper validare che gli altri workflow restino verdi dopo lo switch. - Eseguire
scripts/Measure-CIBenchmark.ps1(resta in PS) prima/dopo lo switch e confermare delta tempo entro ±10%. - Aggiornare
Measure-CIBenchmark.ps1se la wall-clock del nuovo entry point la rende necessaria; in caso di regressione >10%, aprire issue inTODO.mdper profiling A5. - Coverage
commands/job.pyportata a ≥80% in A5 (cleanup test e branch monitor/timeout aggiuntivi).
Riferimenti commit
feat(a4): port Invoke-CIJob.ps1 to ci_orchestrator job—commands/job.py,__main__.py, shimscripts/Invoke-CIJob.ps1,tests/python/test_commands_job.pyci(a4): switch local-ci-build action.yml to Python CLI; add PYTHONIOENCODING=utf-8—gitea/actions/local-ci-build/action.yml,runner/config.yamldocs(a4): mark A4 as code-complete; add A4-closeout.md—plans/implementation-plan-A-B.md,plans/A4-closeout.md