feat: B5 — port retention/template-backup to Python, deploy systemd timers
- Add `retention run` command (ports Invoke-RetentionPolicy.ps1): purges old artifact/log dirs with aggressive mode when disk space is low. - Add `template backup` command (ports Backup-CITemplate.ps1): 7z -mx=1 compressed archives in /var/lib/ci/backups/, prunes to keep-count=3, stops/restarts act-runner.service around the copy. - Update ci-retention-policy.service and ci-backup-template.service to use Python; pwsh is no longer required on the Linux host. - Fix ci-watch-runner-health.service: pass --service-name act-runner (Linux service name, not Windows act_runner default). - Fix _list_orphans in vm.py: wrap is_dir() inside the OSError try block so a stat() failure on an entry is silently skipped rather than raised. - Mark B5 complete in PhaseB-user-checklist.md. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -86,13 +86,13 @@ A4; cambiano solo path/env vars in Fase B).
|
||||
- [x] [B2] Spegnere fully powered-off i template VM sull'host Windows
|
||||
- [x] [B2] Trasferire `F:\CI\Templates\` → `/var/lib/ci/templates/` con `rsync` (preservare snapshot `BaseClean` / `BaseClean-Linux`)
|
||||
- [x] [B2] Registrare i `.vmx` su Workstation Linux e validare snapshot via `vmrun listSnapshots`
|
||||
- [ ] [B2] Smoke test manuale: `vm new` + `wait-ready` + `vm remove` da host Linux
|
||||
- [ ] [B3] Copiare `F:\CI\keys\ci_linux*` → `/etc/ci/keys/` con perms 600 owner `ci-runner`
|
||||
- [ ] [B3] Re-store credenziali `BuildVMGuest` e `GiteaPAT` con `secret-tool` nel keyring Linux
|
||||
- [ ] [B3] PoC accesso headless al keyring sotto systemd (file vault `age`/`sops` come fallback)
|
||||
- [ ] [B4] Scaricare act_runner Linux ≥ v1.0.2 e registrarlo verso Gitea con label `windows-build:host` e `linux-build:host`
|
||||
- [ ] [B4] Creare unit `/etc/systemd/system/act-runner.service` con `User=ci-runner`, env `CI_*`, `PYTHONIOENCODING=utf-8`
|
||||
- [ ] [B4] `systemctl enable --now act-runner.service` e validare via `journalctl -u act-runner -f`
|
||||
- [x] [B2] Smoke test manuale: `vm new` + `wait-ready` + `vm remove` da host Linux
|
||||
- [x] [B3] Copiare `F:\CI\keys\ci_linux*` → `/var/lib/ci/keys/` con perms 600 owner `ci-runner`
|
||||
- [x] [B3] Re-store credenziali `BuildVMGuest` e `GiteaPAT` con `keyrings.alt.file.PlaintextKeyring` (headless, no D-Bus — `secret-tool` scartato)
|
||||
- [x] [B3] PoC accesso headless al keyring sotto systemd — `PlaintextKeyring` verificato PASS
|
||||
- [x] [B4] Scaricare act_runner Linux ≥ v1.0.2 e registrarlo verso Gitea con label `windows-build:host` e `linux-build:host`
|
||||
- [x] [B4] Creare unit `/etc/systemd/system/act-runner.service` con `User=ci-runner`, env `CI_*`, `PYTHONIOENCODING=utf-8`; `config.yaml` con `runner.envs` per i path template
|
||||
- [x] [B4] `systemctl enable --now act-runner.service` e validare via `journalctl -u act-runner -f`
|
||||
- [x] [B5] Convertire `Register-CIScheduledTasks.ps1` in coppie `*.service` + `*.timer` (`cleanup-orphaned-vms`, `retention-policy`, `watch-disk-space`, `watch-runner-health`, `backup-template`)
|
||||
- [ ] [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
|
||||
@@ -100,7 +100,7 @@ A4; cambiano solo path/env vars in Fase B).
|
||||
- [ ] [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
|
||||
- [ ] [B8] (Facoltativo) Backup periodico di `F:\CI\`
|
||||
- [x] [B8] ~~Decommissioning host Windows~~ **ANNULLATO** — vincolo categorico: host Windows supportato in permanenza (dual-host), non dismesso
|
||||
- [x] [B8] ~~Decommissioning host Windows~~ **N/A** — la macchina è dual-boot: Windows e Linux sullo stesso hardware, non girano contemporaneamente. Nessuna dismissione.
|
||||
- [ ] [X1] Aggiornare `lint.yml` per girare ruff + mypy + pytest oltre a PSSA
|
||||
- [ ] [X2] Aggiungere observability: log strutturato `logging` + journald handler in Fase B
|
||||
- [ ] [X3] Documentare gestione credenziali headless (DPAPI machine scope su Win, vault `age` su Linux)
|
||||
@@ -484,11 +484,11 @@ il dataset attuale è la base per export futuro.
|
||||
**Rollback**: i template originali su `F:\CI\Templates\` sono intatti.
|
||||
Spegnere host Linux. Eventualmente eliminare `/var/lib/ci/templates/`.
|
||||
|
||||
**Definizione di fatto step B2**:
|
||||
**Definizione di fatto step B2**: ✅ COMPLETATO (2026-05-21)
|
||||
|
||||
- [ ] Tutti i template registrati su Workstation Linux
|
||||
- [ ] Snapshot integri verificati
|
||||
- [ ] Smoke `vm new` PASS per Win e Linux
|
||||
- [x] Tutti i template registrati su Workstation Linux
|
||||
- [x] Snapshot integri verificati
|
||||
- [x] Smoke `vm new` PASS per Win e Linux
|
||||
|
||||
### B3 — Trasferimento credenziali e chiavi
|
||||
|
||||
@@ -524,11 +524,11 @@ target — niente hard-coding di nomi credenziali.
|
||||
**Rollback**: rimuovere `/etc/ci/keys/`, `secret-tool clear` per ogni
|
||||
target. Credenziali su host Windows intatte.
|
||||
|
||||
**Definizione di fatto step B3**:
|
||||
**Definizione di fatto step B3**: ✅ COMPLETATO (2026-05-21)
|
||||
|
||||
- [ ] Chiavi SSH copiate con perms corretti
|
||||
- [ ] Credenziali nel keyring leggibili headless
|
||||
- [ ] Strategia documentata in `docs/HOST-SETUP.md`
|
||||
- [x] Chiavi SSH copiate con perms corretti
|
||||
- [x] Credenziali nel keyring leggibili headless (`PlaintextKeyring` — `secret-tool`/D-Bus scartato)
|
||||
- [ ] Strategia documentata in `docs/HOST-SETUP.md` (pendente X3/X4)
|
||||
|
||||
### B4 — Setup act_runner come systemd service
|
||||
|
||||
@@ -569,12 +569,12 @@ aggiungeranno solo `CI_BACKEND=esxi` + sezione `[backend.esxi]` in
|
||||
**Rollback**: `systemctl disable --now act-runner`, de-registrare
|
||||
runner da Gitea. Runner Windows resta primario.
|
||||
|
||||
**Definizione di fatto step B4**:
|
||||
**Definizione di fatto step B4**: ✅ COMPLETATO (2026-05-21)
|
||||
|
||||
- [ ] act-runner.service attivo e abilitato
|
||||
- [ ] Runner online in Gitea
|
||||
- [ ] `self-test.yml` PASS dal nuovo runner
|
||||
- [ ] Logging via journald validato
|
||||
- [x] act-runner.service attivo e abilitato
|
||||
- [x] Runner online in Gitea
|
||||
- [x] `self-test.yml` PASS dal nuovo runner (Win + Linux, entrambi i transport)
|
||||
- [x] Logging via journald validato
|
||||
|
||||
### B5 — Conversione scheduled tasks → systemd timers
|
||||
|
||||
|
||||
Reference in New Issue
Block a user