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:
@@ -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:
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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`):
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user