ci: rename build-nsInnoUnp.yml -> build-ns7zip.yml; update doc refs

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>
This commit is contained in:
Simone
2026-05-17 20:12:25 +02:00
parent facf3670b2
commit 97ec820ebb
12 changed files with 45 additions and 45 deletions
@@ -1,4 +1,4 @@
# Build (Local CI) — pipeline per nsis-plugin-ns7zip # Build ns7zip (Local CI) — pipeline per nsis-plugin-ns7zip
# #
# Cross-platform matrix build: runs in parallel on both windows-build (WinRM) # Cross-platform matrix build: runs in parallel on both windows-build (WinRM)
# and linux-build (SSH) runners using the reusable composite action. # and linux-build (SSH) runners using the reusable composite action.
@@ -6,7 +6,7 @@
# #
# Trigger: push su tag v*, oppure run manuale # Trigger: push su tag v*, oppure run manuale
name: Build (Local CI) name: Build ns7zip (Local CI)
on: on:
push: push:
+6 -6
View File
@@ -120,7 +120,7 @@ Variante **Windows Server 2022**: `*WinBuild2022.ps1` + VMX `F:\CI\Templates\Win
│ ├── actions/ │ ├── actions/
│ │ └── local-ci-build/action.yml # Composite action riusabile (wrap Invoke-CIJob.ps1) │ │ └── local-ci-build/action.yml # Composite action riusabile (wrap Invoke-CIJob.ps1)
│ ├── workflows/ │ ├── workflows/
│ │ ├── build-nsInnoUnp.yml # Workflow matrix Windows+Linux per nsis-plugin-nsinnounp │ │ ├── build-ns7zip.yml # Workflow matrix Windows+Linux per nsis-plugin-ns7zip
│ │ └── lint.yml # PSScriptAnalyzer su push/PR (§5.4) │ │ └── lint.yml # PSScriptAnalyzer su push/PR (§5.4)
│ └── workflow-example.yml # Template generico adattabile │ └── workflow-example.yml # Template generico adattabile
@@ -215,7 +215,7 @@ python -m ci_orchestrator report job --job-id smoke-001
# End-to-end orchestrator (replaces Invoke-CIJob.ps1) # End-to-end orchestrator (replaces Invoke-CIJob.ps1)
python -m ci_orchestrator job ` python -m ci_orchestrator job `
--job-id smoke-001 ` --job-id smoke-001 `
--repo-url ssh://gitea-ci/Simone/nsis-plugin-nsinnounp.git ` --repo-url ssh://gitea-ci/Simone/nsis-plugin-ns7zip.git `
--branch main ` --branch main `
--template-path F:\CI\Templates\WinBuild2025\WinBuild2025.vmx ` --template-path F:\CI\Templates\WinBuild2025\WinBuild2025.vmx `
--build-command "python build_plugin.py --final --dist-dir dist" ` --build-command "python build_plugin.py --final --dist-dir dist" `
@@ -346,7 +346,7 @@ Vedi [docs/Setup-GiteaSSH.md](docs/Setup-GiteaSSH.md) per configurare l'alias `g
```powershell ```powershell
& 'N:\Code\Workspace\Local-CI-CD-System\scripts\Invoke-CIJob.ps1' ` & 'N:\Code\Workspace\Local-CI-CD-System\scripts\Invoke-CIJob.ps1' `
-JobId 'test-win-001' ` -JobId 'test-win-001' `
-RepoUrl 'ssh://gitea-ci/Simone/nsis-plugin-nsinnounp.git' ` -RepoUrl 'ssh://gitea-ci/Simone/nsis-plugin-ns7zip.git' `
-Branch 'main' ` -Branch 'main' `
-TemplatePath 'F:\CI\Templates\WinBuild2025\WinBuild2025.vmx' ` -TemplatePath 'F:\CI\Templates\WinBuild2025\WinBuild2025.vmx' `
-Submodules ` -Submodules `
@@ -360,7 +360,7 @@ Vedi [docs/Setup-GiteaSSH.md](docs/Setup-GiteaSSH.md) per configurare l'alias `g
```powershell ```powershell
& 'N:\Code\Workspace\Local-CI-CD-System\scripts\Invoke-CIJob.ps1' ` & 'N:\Code\Workspace\Local-CI-CD-System\scripts\Invoke-CIJob.ps1' `
-JobId 'test-linux-001' ` -JobId 'test-linux-001' `
-RepoUrl 'ssh://gitea-ci/Simone/nsis-plugin-nsinnounp.git' ` -RepoUrl 'ssh://gitea-ci/Simone/nsis-plugin-ns7zip.git' `
-Branch 'main' ` -Branch 'main' `
-TemplatePath 'F:\CI\Templates\LinuxBuild2404\LinuxBuild2404.vmx' ` -TemplatePath 'F:\CI\Templates\LinuxBuild2404\LinuxBuild2404.vmx' `
-SnapshotName 'BaseClean-Linux' ` -SnapshotName 'BaseClean-Linux' `
@@ -378,8 +378,8 @@ Aggiungi `-SkipArtifact` per job che non producono output (es. lint, test puri).
## Workflow Gitea ## Workflow Gitea
Il file [gitea/workflows/build-nsInnoUnp.yml](gitea/workflows/build-nsInnoUnp.yml) è il workflow Il file [gitea/workflows/build-ns7zip.yml](gitea/workflows/build-ns7zip.yml) è il workflow
attivo per `Simone/nsis-plugin-nsinnounp`. Si attiva su push di tag `v*` o manualmente. attivo per `Simone/nsis-plugin-ns7zip`. Si attiva su push di tag `v*` o manualmente.
Usa una **strategy matrix** `[windows, linux]` che esegue in parallelo su entrambi i runner. Usa una **strategy matrix** `[windows, linux]` che esegue in parallelo su entrambi i runner.
La composite action [gitea/actions/local-ci-build/action.yml](gitea/actions/local-ci-build/action.yml) La composite action [gitea/actions/local-ci-build/action.yml](gitea/actions/local-ci-build/action.yml)
+12 -12
View File
@@ -1,7 +1,7 @@
# TODO — Local CI/CD System # TODO — Local CI/CD System
<!-- Last updated: 2026-05-11 — Sprint 15: §7.5 DONE (Rinomina Setup-* → Install-CIToolchain-*: WinBuild2025/2022/Linux2404; tutti i riferimenti aggiornati in Prepare/Deploy/docs/README/TODO/action.yml) --> <!-- Last updated: 2026-05-11 — Sprint 15: §7.5 DONE (Rinomina Setup-* → Install-CIToolchain-*: WinBuild2025/2022/Linux2404; tutti i riferimenti aggiornati in Prepare/Deploy/docs/README/TODO/action.yml) -->
<!-- Sprint 14: §6.4+§6.5 DONE (build-nsInnoUnp.yml matrix windows+linux via composite action; ExtraGuestEnv chain Invoke-CIJob→Invoke-RemoteBuild, Windows session inject + Linux export prefix) --> <!-- Sprint 14: §6.4+§6.5 DONE (build-ns7zip.yml matrix windows+linux via composite action; ExtraGuestEnv chain Invoke-CIJob→Invoke-RemoteBuild, Windows session inject + Linux export prefix) -->
<!-- Sprint 13: §6.2 Composite Action DONE (gitea/actions/local-ci-build/action.yml — inputs: build-command/artifact-source/submodules/guest-os/use-git-clone) --> <!-- Sprint 13: §6.2 Composite Action DONE (gitea/actions/local-ci-build/action.yml — inputs: build-command/artifact-source/submodules/guest-os/use-git-clone) -->
<!-- Sprint 12: §6.1 Linux Build VM DONE (Deploy/Prepare/Setup/Transport/e2e 4xPASS — nsis7z.dll 2272 KB parity Windows) --> <!-- Sprint 12: §6.1 Linux Build VM DONE (Deploy/Prepare/Setup/Transport/e2e 4xPASS — nsis7z.dll 2272 KB parity Windows) -->
<!-- Sprint 11: §6.6 Tier-2 Toolchain DONE (Pwsh7/NSIS/CMake/Node.js/WiX/gh CLI/Sysinternals/vcpkg — Step 12 in Install-CIToolchain-WinBuild2025) --> <!-- Sprint 11: §6.6 Tier-2 Toolchain DONE (Pwsh7/NSIS/CMake/Node.js/WiX/gh CLI/Sysinternals/vcpkg — Step 12 in Install-CIToolchain-WinBuild2025) -->
@@ -56,7 +56,7 @@ _Last updated: 2026-05-11 (post Sprint 15: §7.5 DONE — Rinomina Setup-* → I
- [x] **Gitea Server** — già in esecuzione su `http://10.10.20.11:3100` (e `https://gitea.emulab.it`) - [x] **Gitea Server** — già in esecuzione su `http://10.10.20.11:3100` (e `https://gitea.emulab.it`)
- [x] Runner registration token ottenuto e usato - [x] Runner registration token ottenuto e usato
- [x] Create at least one test repository with `.gitea/workflows/build.yml` - [x] Create at least one test repository with `.gitea/workflows/build.yml`
(`Simone/nsis-plugin-nsinnounp` — testato e2e, workflow in `gitea/workflows/build-nsInnoUnp.yml`) (`Simone/nsis-plugin-ns7zip` — testato e2e, workflow in `gitea/workflows/build-ns7zip.yml`)
- [x] Gitea Actions abilitato (runner registrato con successo) - [x] Gitea Actions abilitato (runner registrato con successo)
- [x] **act_runner** — installato e registrato sull'host Windows - [x] **act_runner** — installato e registrato sull'host Windows
@@ -155,7 +155,7 @@ _Last updated: 2026-05-11 (post Sprint 15: §7.5 DONE — Rinomina Setup-* → I
- [x] Test `Invoke-RemoteBuild.ps1` — dotnet restore + build OK, artifacts.zip creato in VM (2026-05-08) - [x] Test `Invoke-RemoteBuild.ps1` — dotnet restore + build OK, artifacts.zip creato in VM (2026-05-08)
- [x] Test `Get-BuildArtifacts.ps1` — artifacts.zip (78 KB) copiato in F:\CI\Artifacts\test-003\ (2026-05-08) - [x] Test `Get-BuildArtifacts.ps1` — artifacts.zip (78 KB) copiato in F:\CI\Artifacts\test-003\ (2026-05-08)
- [x] Test `Remove-BuildVM.ps1` — VM spenta + directory rimossa correttamente (2026-05-08) - [x] Test `Remove-BuildVM.ps1` — VM spenta + directory rimossa correttamente (2026-05-08)
- [x] Test `Invoke-CIJob.ps1` end-to-end su una soluzione reale (nsis-plugin-nsinnounp) - [x] Test `Invoke-CIJob.ps1` end-to-end su una soluzione reale (nsis-plugin-ns7zip)
- [x] e2e-008: SUCCESS — build OK + artifact raccolto (1632 KB) - [x] e2e-008: SUCCESS — build OK + artifact raccolto (1632 KB)
- [x] e2e-009: SUCCESS — cleanup automatico VM + clone confermato (finally block) - [x] e2e-009: SUCCESS — cleanup automatico VM + clone confermato (finally block)
- [x] `scripts/Cleanup-OrphanedBuildVMs.ps1` creato e verificato — `-WhatIf`, soglia `-MaxAgeHours`, hard stop + deleteVM + rimozione dir (2026-05-09) - [x] `scripts/Cleanup-OrphanedBuildVMs.ps1` creato e verificato — `-WhatIf`, soglia `-MaxAgeHours`, hard stop + deleteVM + rimozione dir (2026-05-09)
@@ -171,7 +171,7 @@ _Last updated: 2026-05-11 (post Sprint 15: §7.5 DONE — Rinomina Setup-* → I
## Gitea Workflow Integration ## Gitea Workflow Integration
- [x] Copiare `gitea/workflow-example.yml` in `.gitea/workflows/build.yml` nel repo di test - [x] Copiare `gitea/workflow-example.yml` in `.gitea/workflows/build.yml` nel repo di test
(workflow `build-nsInnoUnp.yml` già presente e funzionante per `nsis-plugin-nsinnounp`) (workflow `build-ns7zip.yml` già presente e funzionante per `nsis-plugin-ns7zip`)
- [x] Push commit e verificare job in Gitea Actions UI - [x] Push commit e verificare job in Gitea Actions UI
- [x] Verificare artifact scaricabile da Gitea dopo build riuscita - [x] Verificare artifact scaricabile da Gitea dopo build riuscita
- [x] `gitea/workflows/lint.yml` creato — PSScriptAnalyzer su push/PR che toccano `.ps1` (2026-05-09) - [x] `gitea/workflows/lint.yml` creato — PSScriptAnalyzer su push/PR che toccano `.ps1` (2026-05-09)
@@ -343,13 +343,13 @@ File: [scripts/Invoke-CIJob.ps1](scripts/Invoke-CIJob.ps1), [scripts/Invoke-Remo
- Prerequisiti satisfatti: Git + 7-Zip in template (§6.6, completato) - Prerequisiti satisfatti: Git + 7-Zip in template (§6.6, completato)
**Beneficio**: Elimina host-zip-transfer overhead (rilevante per repo > 200 MB con submoduli). **Beneficio**: Elimina host-zip-transfer overhead (rilevante per repo > 200 MB con submoduli).
**Prossimo**: E2E test con nsis-plugin-nsinnounp (-UseGitClone flag) per misurare impatto. **Prossimo**: E2E test con nsis-plugin-ns7zip (-UseGitClone flag) per misurare impatto.
### 3.5 [P2] [ ] vCPU/RAM tuning per workload — DEFERRED (home lab) ### 3.5 [P2] [ ] vCPU/RAM tuning per workload — DEFERRED (home lab)
File: [docs/OPTIMIZATION.md:82-89](docs/OPTIMIZATION.md), VMX template. File: [docs/OPTIMIZATION.md:82-89](docs/OPTIMIZATION.md), VMX template.
`numvcpus=4`, `memsize=6144` è ragionevole ma non ottimo per ogni build. Per `numvcpus=4`, `memsize=6144` è ragionevole ma non ottimo per ogni build. Per
`nsis-plugin-nsinnounp` (4 build paralleli interni con thread divisi) 4 vCPU sono già saturati. `nsis-plugin-ns7zip` (4 build paralleli interni con thread divisi) 4 vCPU sono già saturati.
Considerare: Considerare:
- VMX pinning: 6 vCPU per build C++ pesanti, 2 vCPU per build .NET piccoli. - VMX pinning: 6 vCPU per build C++ pesanti, 2 vCPU per build .NET piccoli.
@@ -506,14 +506,14 @@ Già supportato lato Gitea, basta replicare il setup.
**Deferred**: in un home lab single-host questa funzionalità non serve. Non pianificare. **Deferred**: in un home lab single-host questa funzionalità non serve. Non pianificare.
### 6.4 [P3] [x] Build matrix nel workflow ### 6.4 [P3] [x] Build matrix nel workflow
File: [gitea/workflows/build-nsInnoUnp.yml](gitea/workflows/build-nsInnoUnp.yml). File: [gitea/workflows/build-ns7zip.yml](gitea/workflows/build-ns7zip.yml).
**Status**: COMPLETATO 2026-05-11 — `build-nsInnoUnp.yml` riscritto con matrix strategy. **Status**: COMPLETATO 2026-05-11 — `build-ns7zip.yml` riscritto con matrix strategy.
Matrix `target: [windows, linux]`, `runs-on: ${{ matrix.target }}-build`, Matrix `target: [windows, linux]`, `runs-on: ${{ matrix.target }}-build`,
`fail-fast: false`. Usa la composite action con `job-id-suffix: ${{ matrix.target }}` `fail-fast: false`. Usa la composite action con `job-id-suffix: ${{ matrix.target }}`
per artifact dir separate e `repo-url: ssh://gitea-ci/Simone/nsis-plugin-nsinnounp.git`. per artifact dir separate e `repo-url: ssh://gitea-ci/Simone/nsis-plugin-ns7zip.git`.
Artifact separati: `nsis-plugin-nsinnounp-windows-<tag>` e `nsis-plugin-nsinnounp-linux-<tag>`. Artifact separati: `nsis-plugin-ns7zip-windows-<tag>` e `nsis-plugin-ns7zip-linux-<tag>`.
### 6.5 [P3] [x] Secret injection workflow-level ### 6.5 [P3] [x] Secret injection workflow-level
@@ -549,7 +549,7 @@ build più ampi senza toccare il template.
| **Git for Windows** | 2.54.0.windows.1 | Self-clone in VM, submodule fetch, fallback §3.2 | | **Git for Windows** | 2.54.0.windows.1 | Self-clone in VM, submodule fetch, fallback §3.2 |
| **7-Zip** | 26.01 | Unpack/zip universale; usato da Step 12 stesso (vcpkg) | | **7-Zip** | 26.01 | Unpack/zip universale; usato da Step 12 stesso (vcpkg) |
| **PowerShell 7.x** | 7.6.1 | Parallel pipelines, operatori moderni, pwsh in CI | | **PowerShell 7.x** | 7.6.1 | Parallel pipelines, operatori moderni, pwsh in CI |
| **NSIS** | 3.12 | Build installer Windows (es. `nsis-plugin-nsinnounp`) | | **NSIS** | 3.12 | Build installer Windows (es. `nsis-plugin-ns7zip`) |
| **gh CLI** | 2.92.0 | Upload artifact a release Gitea/GitHub, comment PR | | **gh CLI** | 2.92.0 | Upload artifact a release Gitea/GitHub, comment PR |
### Tier-2 — Step 12 (implementato) ### Tier-2 — Step 12 (implementato)
@@ -716,7 +716,7 @@ VM avviata → WinRM: git clone --recurse-submodules https://<token>@gitea/...
- [x] **Test e2e con `-UseGitClone`** — COMPLETATO 2026-05-10 - [x] **Test e2e con `-UseGitClone`** — COMPLETATO 2026-05-10
- [x] Aggiornare snapshot `BaseClean` con Git installato - [x] Aggiornare snapshot `BaseClean` con Git installato
- [x] Eseguire `e2e-010` con `-UseGitClone` su `nsis-plugin-nsinnounp` (ha submoduli) - [x] Eseguire `e2e-010` con `-UseGitClone` su `nsis-plugin-ns7zip` (ha submoduli)
- [x] Confrontare tempo totale con e2e-009 (senza `-UseGitClone`) — 34s / 25.7% più veloce - [x] Confrontare tempo totale con e2e-009 (senza `-UseGitClone`) — 34s / 25.7% più veloce
- [x] Verificare che il PAT non appaia nei log di `Invoke-CIJob.ps1` - [x] Verificare che il PAT non appaia nei log di `Invoke-CIJob.ps1`
+2 -2
View File
@@ -56,7 +56,7 @@ docs/TEST-PLAN-v1.3-to-HEAD.md, gitea/actions/local-ci-build/action.yml.
## 2026-05-11 — Sprint 14: §6.4 Build matrix + §6.5 Secret injection ## 2026-05-11 — Sprint 14: §6.4 Build matrix + §6.5 Secret injection
**§6.4** — `build-nsInnoUnp.yml` rewritten with matrix strategy `target: [windows, linux]`. **§6.4** — `build-ns7zip.yml` rewritten with matrix strategy `target: [windows, linux]`.
Separate artifact dirs; `fail-fast: false`; composite action used for both targets. Separate artifact dirs; `fail-fast: false`; composite action used for both targets.
**§6.5** — `ExtraGuestEnv [hashtable]` added to `Invoke-CIJob.ps1` and `Invoke-RemoteBuild.ps1`: **§6.5** — `ExtraGuestEnv [hashtable]` added to `Invoke-CIJob.ps1` and `Invoke-RemoteBuild.ps1`:
@@ -127,7 +127,7 @@ disables wuauserv/UsoSvc permanently.
`-UseGitClone` switch added to `Invoke-CIJob.ps1` and `Invoke-RemoteBuild.ps1`. `-UseGitClone` switch added to `Invoke-CIJob.ps1` and `Invoke-RemoteBuild.ps1`.
- Skips host git clone + zip + WinRM transfer overhead. - Skips host git clone + zip + WinRM transfer overhead.
- PAT injected at runtime, never persisted in snapshot. - PAT injected at runtime, never persisted in snapshot.
- E2E result: 34 s saving, 25.7% reduction vs baseline on nsis-plugin-nsinnounp. - E2E result: 34 s saving, 25.7% reduction vs baseline on nsis-plugin-ns7zip.
--- ---
+3 -3
View File
@@ -1,6 +1,6 @@
# Configurazione accesso SSH a Gitea # Configurazione accesso SSH a Gitea
**Target**: clone da `git@gitea.emulab.it:Simone/nsis-plugin-nsinnounp.git` **Target**: clone da `git@gitea.emulab.it:Simone/nsis-plugin-ns7zip.git`
**Gitea**: `http://10.10.20.11:3100` / `https://gitea.emulab.it` **Gitea**: `http://10.10.20.11:3100` / `https://gitea.emulab.it`
--- ---
@@ -83,13 +83,13 @@ Hi there, Simone! You've successfully authenticated with the key named ci-build@
Usare l'alias `gitea-ci` definito in `~\.ssh\config`: Usare l'alias `gitea-ci` definito in `~\.ssh\config`:
```powershell ```powershell
-RepoUrl 'ssh://gitea-ci/Simone/nsis-plugin-nsinnounp.git' -RepoUrl 'ssh://gitea-ci/Simone/nsis-plugin-ns7zip.git'
``` ```
Oppure con IP/porta espliciti (equivalente): Oppure con IP/porta espliciti (equivalente):
```powershell ```powershell
-RepoUrl 'ssh://git@10.10.20.11:2222/Simone/nsis-plugin-nsinnounp.git' -RepoUrl 'ssh://git@10.10.20.11:2222/Simone/nsis-plugin-ns7zip.git'
``` ```
--- ---
+3 -3
View File
@@ -16,7 +16,7 @@ Branch: `feature/python-rewrite-phase-a`.
- [x] `runner/config.yaml` esporta `PYTHONIOENCODING=utf-8` per garantire stdio UTF-8 nei log act_runner → Gitea - [x] `runner/config.yaml` esporta `PYTHONIOENCODING=utf-8` per garantire stdio UTF-8 nei log act_runner → Gitea
- [x] `tests/python/test_commands_job.py` aggiunto: 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`) - [x] `tests/python/test_commands_job.py` aggiunto: 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`)
- [x] Suite completa: ruff clean, mypy --strict clean, **104 pytest PASS**, coverage totale **79.25%**, coverage `commands/job.py` **83%** - [x] Suite completa: ruff clean, mypy --strict clean, **104 pytest PASS**, coverage totale **79.25%**, coverage `commands/job.py` **83%**
- [ ] Workflow `build-nsInnoUnp.yml` matrix (Win + Linux) end-to-end PASS contro VM reali — richiede host con runner registrato - [ ] Workflow `build-ns7zip.yml` matrix (Win + Linux) end-to-end PASS contro VM reali — richiede host con runner registrato
- [ ] Workflow `self-test.yml` / `lint.yml` PASS sul nuovo entry point — stessa dipendenza - [ ] Workflow `self-test.yml` / `lint.yml` PASS sul nuovo entry point — stessa dipendenza
- [ ] Misurazione tempo job entro ±10% del baseline PowerShell (`Measure-CIBenchmark.ps1`) - [ ] Misurazione tempo job entro ±10% del baseline PowerShell (`Measure-CIBenchmark.ps1`)
@@ -30,12 +30,12 @@ Branch: `feature/python-rewrite-phase-a`.
| Coverage `commands/job.py` ≥80% | ✅ 83% | | Coverage `commands/job.py` ≥80% | ✅ 83% |
| Cleanup VM garantito su tutti i path di errore | ✅ (test `test_job_cleanup_on_*`) | | Cleanup VM garantito su tutti i path di errore | ✅ (test `test_job_cleanup_on_*`) |
| Hook Fase C (factory backend, no import workstation diretto) | ✅ | | Hook Fase C (factory backend, no import workstation diretto) | ✅ |
| Workflow `build-nsInnoUnp.yml` matrix PASS | ⏳ validazione hardware utente | | Workflow `build-ns7zip.yml` matrix PASS | ⏳ validazione hardware utente |
| Tempo entro ±10% baseline | ⏳ misurazione utente | | Tempo entro ±10% baseline | ⏳ misurazione utente |
## Cosa resta a carico utente ## Cosa resta a carico utente
1. Eseguire `build-nsInnoUnp.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. 1. 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.
2. Lanciare `self-test.yml` e `lint.yml` per validare che gli altri workflow restino verdi dopo lo switch. 2. Lanciare `self-test.yml` e `lint.yml` per validare che gli altri workflow restino verdi dopo lo switch.
3. Eseguire `scripts/Measure-CIBenchmark.ps1` (resta in PS) prima/dopo lo switch e confermare delta tempo entro ±10%. 3. Eseguire `scripts/Measure-CIBenchmark.ps1` (resta in PS) prima/dopo lo switch e confermare delta tempo entro ±10%.
4. Aggiornare `Measure-CIBenchmark.ps1` se la wall-clock del nuovo entry point la rende necessaria; in caso di regressione >10%, aprire issue in `TODO.md` per profiling A5. 4. Aggiornare `Measure-CIBenchmark.ps1` se la wall-clock del nuovo entry point la rende necessaria; in caso di regressione >10%, aprire issue in `TODO.md` per profiling A5.
+3 -3
View File
@@ -52,7 +52,7 @@ Branch: `feature/python-rewrite-phase-a`.
- [ ] Burn-in 4 job concorrenti × 10 round (versione Python di - [ ] Burn-in 4 job concorrenti × 10 round (versione Python di
`Test-CapacityBurnIn`) — **richiede VM reali, lasciato a carico `Test-CapacityBurnIn`) — **richiede VM reali, lasciato a carico
utente**. utente**.
- [ ] Workflow `build-nsInnoUnp.yml` matrix (Win + Linux) end-to-end - [ ] Workflow `build-ns7zip.yml` matrix (Win + Linux) end-to-end
PASS — eredita pendenza da A4 (richiede runner registrato). PASS — eredita pendenza da A4 (richiede runner registrato).
## Definizione di "fatto" A5 ## Definizione di "fatto" A5
@@ -82,11 +82,11 @@ sostituirà con `*.service` + `*.timer` su systemd).
## Cosa resta a carico utente ## Cosa resta a carico utente
1. Eseguire un burn-in concorrente (4 job × 10 round) usando il workflow 1. Eseguire un burn-in concorrente (4 job × 10 round) usando il workflow
`build-nsInnoUnp.yml` matrix o `scripts/Test-CapacityBurnIn.ps1` (che `build-ns7zip.yml` matrix o `scripts/Test-CapacityBurnIn.ps1` (che
ora delega via shim alla CLI Python `job`) e verificare: ora delega via shim alla CLI Python `job`) e verificare:
- PASS senza VM orfane (`vm cleanup` non rimuove nulla a fine round). - PASS senza VM orfane (`vm cleanup` non rimuove nulla a fine round).
- Wall-clock entro ±20% del baseline pre-Python (`Measure-CIBenchmark.ps1`). - Wall-clock entro ±20% del baseline pre-Python (`Measure-CIBenchmark.ps1`).
2. Validare `build-nsInnoUnp.yml` matrix (Win + Linux) end-to-end PASS 2. Validare `build-ns7zip.yml` matrix (Win + Linux) end-to-end PASS
sul runner reale — pendenza ereditata da A4. sul runner reale — pendenza ereditata da A4.
3. Validare `self-test.yml` e `lint.yml` post-switch. 3. Validare `self-test.yml` e `lint.yml` post-switch.
+2 -2
View File
@@ -232,7 +232,7 @@ Validazione di A4 lato runner reale.
Note: artifact github-free (no upload-artifact; file raw su Note: artifact github-free (no upload-artifact; file raw su
`F:\CI\Artifacts\<job>`); `use-git-clone`/`submodules` default ON. `F:\CI\Artifacts\<job>`); `use-git-clone`/`submodules` default ON.
- [ ] `build-nsInnoUnp.yml` matrix Win+Linux → atteso PASS, - [ ] `build-ns7zip.yml` matrix Win+Linux → atteso PASS,
artifact pubblicato per entrambe le piattaforme. artifact pubblicato per entrambe le piattaforme.
- [ ] Se uno fallisce: scaricare i log dell'esecuzione, aprire issue in - [ ] Se uno fallisce: scaricare i log dell'esecuzione, aprire issue in
@@ -244,7 +244,7 @@ Validazione di A4 lato runner reale.
Validazione finale di A5 (definizione di "fatto Fase A"). Validazione finale di A5 (definizione di "fatto Fase A").
- [ ] Triggerare il workflow `build-nsInnoUnp.yml` 4 volte di seguito - [ ] Triggerare il workflow `build-ns7zip.yml` 4 volte di seguito
(oppure usare lo script `scripts/Test-CapacityBurnIn.ps1` che ora (oppure usare lo script `scripts/Test-CapacityBurnIn.ps1` che ora
delega via shim alla CLI Python `job`): delega via shim alla CLI Python `job`):
+1 -1
View File
@@ -367,7 +367,7 @@ finestra di manutenzione concordata.
- [ ] Verificare runner Linux online su Gitea UI. - [ ] Verificare runner Linux online su Gitea UI.
- [ ] Smoke trigger: - [ ] Smoke trigger:
- [ ] `self-test.yml` → PASS dal runner Linux - [ ] `self-test.yml` → PASS dal runner Linux
- [ ] `build-nsInnoUnp.yml` matrix Win+Linux → PASS dal runner Linux - [ ] `build-ns7zip.yml` matrix Win+Linux → PASS dal runner Linux
- [ ] Monitorare per ≥30 min: - [ ] Monitorare per ≥30 min:
```bash ```bash
+1 -1
View File
@@ -202,7 +202,7 @@ gitea/ # workflow + actions invariati
- [ ] `pytest` verde con coverage minima 70% su `src/ci_orchestrator/` - [ ] `pytest` verde con coverage minima 70% su `src/ci_orchestrator/`
- [ ] `ruff check` + `mypy --strict` puliti su tutto `src/` - [ ] `ruff check` + `mypy --strict` puliti su tutto `src/`
- [ ] `lint.yml` aggiornato: PSSA per file PS legacy + ruff/mypy per Python - [ ] `lint.yml` aggiornato: PSSA per file PS legacy + ruff/mypy per Python
- [ ] Workflow `build-nsInnoUnp.yml` PASS su matrice Windows + Linux - [ ] Workflow `build-ns7zip.yml` PASS su matrice Windows + Linux
- [ ] Smoke test (`Test-Smoke.ps1` o equivalente Python) PASS - [ ] Smoke test (`Test-Smoke.ps1` o equivalente Python) PASS
- [ ] Capacity burn-in 4 job concorrenti PASS - [ ] Capacity burn-in 4 job concorrenti PASS
- [ ] `README.md`, `AGENTS.md`, `docs/ARCHITECTURE.md`, `docs/HOST-SETUP.md` aggiornati - [ ] `README.md`, `AGENTS.md`, `docs/ARCHITECTURE.md`, `docs/HOST-SETUP.md` aggiornati
+2 -2
View File
@@ -132,7 +132,7 @@ Finestra di manutenzione concordata:
3. Verificare nessun job in coda lato Gitea 3. Verificare nessun job in coda lato Gitea
4. Avviare act_runner Linux (`systemctl start act-runner`) 4. Avviare act_runner Linux (`systemctl start act-runner`)
5. Trigger manuale di un workflow di smoke test 5. Trigger manuale di un workflow di smoke test
6. Trigger del workflow matrix `build-nsInnoUnp.yml` (Win + Linux build) 6. Trigger del workflow matrix `build-ns7zip.yml` (Win + Linux build)
Se PASS → cutover confermato. Se FAIL → rollback (riavvio runner Windows, Se PASS → cutover confermato. Se FAIL → rollback (riavvio runner Windows,
nessun dato è stato distrutto). nessun dato è stato distrutto).
@@ -205,7 +205,7 @@ Costo: codebase divisa in due ambienti, maggiore overhead operativo.
- [ ] act_runner gira come systemd service `act-runner.service` su Linux Mint - [ ] act_runner gira come systemd service `act-runner.service` su Linux Mint
- [ ] Tutti i template VM (`WinBuild2025`, `WinBuild2022`, `LinuxBuild2404`) - [ ] Tutti i template VM (`WinBuild2025`, `WinBuild2022`, `LinuxBuild2404`)
operativi dal nuovo host con snapshot integri operativi dal nuovo host con snapshot integri
- [ ] Workflow `build-nsInnoUnp.yml` (matrix Win+Linux) PASS dal nuovo host - [ ] Workflow `build-ns7zip.yml` (matrix Win+Linux) PASS dal nuovo host
- [ ] Burn-in capacity 4 job concorrenti PASS, tempi entro ±20% del baseline - [ ] Burn-in capacity 4 job concorrenti PASS, tempi entro ±20% del baseline
- [ ] Storage migrato a `/var/lib/ci/`, host Windows in stand-by come rollback - [ ] Storage migrato a `/var/lib/ci/`, host Windows in stand-by come rollback
- [ ] Tutti i timer systemd attivi e schedulati - [ ] Tutti i timer systemd attivi e schedulati
+8 -8
View File
@@ -13,7 +13,7 @@ Sintesi fasi:
- **Fase A — Rewrite Python dell'orchestratore (host Windows attuale)** - **Fase A — Rewrite Python dell'orchestratore (host Windows attuale)**
- Output verificabile: `python -m ci_orchestrator job ...` sostituisce - Output verificabile: `python -m ci_orchestrator job ...` sostituisce
`Invoke-CIJob.ps1`; `pytest` ≥70% coverage; workflow `Invoke-CIJob.ps1`; `pytest` ≥70% coverage; workflow
`build-nsInnoUnp.yml` PASS. `build-ns7zip.yml` PASS.
- Stato: da iniziare. - Stato: da iniziare.
- **Fase B — Migrazione host a Linux Mint + Workstation Pro Linux** - **Fase B — Migrazione host a Linux Mint + Workstation Pro Linux**
- Output verificabile: act_runner come `act-runner.service` systemd; - Output verificabile: act_runner come `act-runner.service` systemd;
@@ -67,7 +67,7 @@ A4; cambiano solo path/env vars in Fase B).
- [x] [A4] Portare `Invoke-CIJob.ps1``python -m ci_orchestrator job` - [x] [A4] Portare `Invoke-CIJob.ps1``python -m ci_orchestrator job`
- [x] [A4] Aggiornare `gitea/actions/local-ci-build/action.yml` per invocare la CLI Python direttamente - [x] [A4] Aggiornare `gitea/actions/local-ci-build/action.yml` per invocare la CLI Python direttamente
- [x] [A4] Forzare `PYTHONIOENCODING=utf-8` in `runner/config.yaml` - [x] [A4] Forzare `PYTHONIOENCODING=utf-8` in `runner/config.yaml`
- [ ] [A4] Eseguire workflow `build-nsInnoUnp.yml` (matrix Win+Linux) end-to-end PASS - [ ] [A4] Eseguire workflow `build-ns7zip.yml` (matrix Win+Linux) end-to-end PASS
- [x] [A5] Convertire errori frequenti `AGENTS.md` #9, #10, #11, #12 in test pytest dedicati - [x] [A5] Convertire errori frequenti `AGENTS.md` #9, #10, #11, #12 in test pytest dedicati
- [x] [A5] Aggiornare `AGENTS.md` con sezione "Python development" (venv, ruff, mypy, pytest) - [x] [A5] Aggiornare `AGENTS.md` con sezione "Python development" (venv, ruff, mypy, pytest)
- [x] [A5] Aggiornare `docs/ARCHITECTURE.md` con nuovo layout package - [x] [A5] Aggiornare `docs/ARCHITECTURE.md` con nuovo layout package
@@ -93,7 +93,7 @@ A4; cambiano solo path/env vars in Fase B).
- [ ] [B5] Abilitare tutti i timer con `systemctl enable --now` e validare `systemctl list-timers` - [ ] [B5] Abilitare tutti i timer con `systemctl enable --now` e validare `systemctl list-timers`
- [ ] [B6] Stop act_runner sull'host Windows e verifica coda Gitea vuota - [ ] [B6] Stop act_runner sull'host Windows e verifica coda Gitea vuota
- [ ] [B6] Rsync incrementale finale `F:\CI\Artifacts\``/var/lib/ci/artifacts/` - [ ] [B6] Rsync incrementale finale `F:\CI\Artifacts\``/var/lib/ci/artifacts/`
- [ ] [B6] Trigger smoke workflow + `build-nsInnoUnp.yml` matrix da host Linux PASS - [ ] [B6] Trigger smoke workflow + `build-ns7zip.yml` matrix da host Linux PASS
- [ ] [B7] Eseguire burn-in 4 job concorrenti × 10 round su template Windows e Linux con tempi entro ±20% baseline - [ ] [B7] Eseguire burn-in 4 job concorrenti × 10 round su template Windows e Linux con tempi entro ±20% baseline
- [ ] [B8] Backup finale di `F:\CI\` su archivio - [ ] [B8] Backup finale di `F:\CI\` su archivio
- [ ] [B8] Lasciare host Windows spento ma reinstallato per ≥1 mese come rollback - [ ] [B8] Lasciare host Windows spento ma reinstallato per ≥1 mese come rollback
@@ -278,7 +278,7 @@ Gitea per chiamare la CLI Python direttamente.
- [x] Aggiungere `PYTHONIOENCODING=utf-8` in `runner/config.yaml` env - [x] Aggiungere `PYTHONIOENCODING=utf-8` in `runner/config.yaml` env
- [x] Lasciare `Invoke-CIJob.ps1` come shim per scheduled task / chiamate manuali esterne (rimosso in A5) - [x] Lasciare `Invoke-CIJob.ps1` come shim per scheduled task / chiamate manuali esterne (rimosso in A5)
- [x] Test pytest end-to-end con mock backend + transport: `test_commands_job.py` - [x] Test pytest end-to-end con mock backend + transport: `test_commands_job.py`
- [ ] Eseguire workflow `build-nsInnoUnp.yml` matrix (Win + Linux) PASS - [ ] Eseguire workflow `build-ns7zip.yml` matrix (Win + Linux) PASS
- [ ] Eseguire workflow `self-test.yml` PASS - [ ] Eseguire workflow `self-test.yml` PASS
- [ ] Eseguire workflow `lint.yml` PASS - [ ] Eseguire workflow `lint.yml` PASS
@@ -290,7 +290,7 @@ factory `backends.load_backend(config)`.
**Test / validazione**: **Test / validazione**:
- `pytest tests/test_commands_job.py` PASS con coverage ≥80% sul comando `job` - `pytest tests/test_commands_job.py` PASS con coverage ≥80% sul comando `job`
- Workflow `build-nsInnoUnp.yml` end-to-end PASS dal nuovo entry point - Workflow `build-ns7zip.yml` end-to-end PASS dal nuovo entry point
- Output catturato da act_runner leggibile (no encoding broken, no ANSI rotti) - Output catturato da act_runner leggibile (no encoding broken, no ANSI rotti)
- Tempi job entro ±10% rispetto al baseline PS (misurati con `Measure-CIBenchmark` ancora in PS, lecito) - Tempi job entro ±10% rispetto al baseline PS (misurati con `Measure-CIBenchmark` ancora in PS, lecito)
@@ -589,7 +589,7 @@ una finestra di manutenzione concordata.
- [ ] Rsync incrementale finale `F:\CI\Artifacts\``/var/lib/ci/artifacts/` (preserva permessi) - [ ] Rsync incrementale finale `F:\CI\Artifacts\``/var/lib/ci/artifacts/` (preserva permessi)
- [ ] Verificare che il runner Linux sia "online" e non "paused" su Gitea - [ ] Verificare che il runner Linux sia "online" e non "paused" su Gitea
- [ ] Trigger manuale di workflow smoke (`self-test.yml`) PASS - [ ] Trigger manuale di workflow smoke (`self-test.yml`) PASS
- [ ] Trigger manuale `build-nsInnoUnp.yml` matrix Win + Linux PASS - [ ] Trigger manuale `build-ns7zip.yml` matrix Win + Linux PASS
- [ ] Monitorare `journalctl -u act-runner -f` per ≥30 min sotto carico reale - [ ] Monitorare `journalctl -u act-runner -f` per ≥30 min sotto carico reale
**Hook futuri Fase C**: nessuno specifico in B6. Cutover non tocca **Hook futuri Fase C**: nessuno specifico in B6. Cutover non tocca
@@ -603,7 +603,7 @@ backend.
**Test / validazione**: **Test / validazione**:
- `self-test.yml` PASS dal runner Linux - `self-test.yml` PASS dal runner Linux
- `build-nsInnoUnp.yml` matrix Win+Linux PASS dal runner Linux - `build-ns7zip.yml` matrix Win+Linux PASS dal runner Linux
- Nessun errore in `journalctl -u act-runner --since "1h ago"` di severità critica - Nessun errore in `journalctl -u act-runner --since "1h ago"` di severità critica
- Artifact correttamente in `/var/lib/ci/artifacts/` - Artifact correttamente in `/var/lib/ci/artifacts/`
@@ -987,7 +987,7 @@ Ogni voce: **Rischio** — Fase / Severità / Mitigazione / Owner action item.
- [ ] `lint.yml` dual-stack (PSSA per PS legacy + ruff/mypy/pytest per Python) PASS - [ ] `lint.yml` dual-stack (PSSA per PS legacy + ruff/mypy/pytest per Python) PASS
- [ ] act_runner gira come `act-runner.service` systemd su Linux Mint - [ ] act_runner gira come `act-runner.service` systemd su Linux Mint
- [ ] Tutti i template VM (`WinBuild2025`, `WinBuild2022`, `LinuxBuild2404`) operativi dal nuovo host con snapshot integri - [ ] Tutti i template VM (`WinBuild2025`, `WinBuild2022`, `LinuxBuild2404`) operativi dal nuovo host con snapshot integri
- [ ] Workflow `build-nsInnoUnp.yml` matrix Win+Linux PASS dal nuovo host - [ ] Workflow `build-ns7zip.yml` matrix Win+Linux PASS dal nuovo host
- [ ] Burn-in capacity 4 job concorrenti × 10 round PASS, tempi entro ±20% baseline Windows - [ ] Burn-in capacity 4 job concorrenti × 10 round PASS, tempi entro ±20% baseline Windows
- [ ] Storage migrato a `/var/lib/ci/`, host Windows spento come rollback - [ ] Storage migrato a `/var/lib/ci/`, host Windows spento come rollback
- [ ] Tutti i timer systemd attivi e schedulati equivalenti ai Task Scheduler Windows - [ ] Tutti i timer systemd attivi e schedulati equivalenti ai Task Scheduler Windows