Collapse completed setup history into a single summary block. Absorb FIX-TODO open items (IP octet validation, SHA256 installer check, Cleanup scheduled task) into the appropriate TODO sections. Remove FIX-TODO.md — single source of truth restored. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
6.6 KiB
TODO — Local CI/CD System
Completato (storico)
- Sistema operativo: Gitea Actions + act_runner + ephemeral VMware VMs su VMnet8 NAT
- Template VM (Windows Server 2025), snapshot
BaseClean, credenziali in Credential Manager - e2e-009 SUCCESS —
nsis-plugin-nsinnounpbuild OK, artifact 1632 KB, VM cleanup automatico - Fix v1.0: shallow clone + unshallow fallback, artifact size check (raw bytes), hardcoded password
rimossa da tutti i file, WSMan AllowUnencrypted restore in
finally,upload-artifact@v3→@v4 scripts/Cleanup-OrphanedBuildVMs.ps1creato (WhatIf, MaxAgeHours, hard stop + deleteVM + dir removal)gitea/workflows/lint.ymlcreato — PSScriptAnalyzer su push/PR che toccano.ps1vmrun deleteVMfix: pollvmrun listfino a lock rilasciato + retry 3× con backoff 0/3/6s
Open — Bug / Operativo
-
Validazione IP ottetti —
scripts/Invoke-CIJob.ps1ValidatePatternattuale accetta999.x.x.x. Sostituire con validazione per-ottetto 0-255. -
Verifica SHA256 installer —
template/Setup-TemplateVM.ps1Python, VS BuildTools, dotnet-install.ps1 scaricati senza verifica hash. Aggiungere-ExpectedHasho hash hardcoded per le versioni pinnate. -
Scheduled task Cleanup-OrphanedBuildVMs.ps1 Creare via Task Scheduler o estendere
Setup-Host.ps1. Suggerito: ogni 6 ore,-MaxAgeHours 4. -
Adattare workflow per altri repository Generalizzare
BUILD_COMMANDeARTIFACT_SOURCEingitea/workflows/build-nsis.ymlcome template riutilizzabile per repo arbitrari.
Open — Performance & Maintenance
- Benchmark: tempo creazione clone + tempo WinRM readiness
- Configurare NuGet package cache su shared folder host (vedi
docs/OPTIMIZATION.md) - Refresh semestrale snapshot template VM (KMS lease = 180 giorni):
Boot template su VMnet8 (NAT) →
slmgr /ato→ nuovo snapshotBaseClean - Monitoraggio Windows Event Log per fallimenti servizio
act_runner - Retention artifact — pulizia automatica
F:\CI\Artifactspiù vecchi di N giorni
In-VM Git Clone
Sfruttare internet della VM (VMnet8 NAT) per git clone direttamente nella VM,
eliminando il ciclo host-clone → zip → WinRM-transfer → unzip.
Flusso attuale:
host: git clone → host: Compress-Archive → WinRM: copia zip → VM: Expand-Archive → VM: build
Flusso proposto:
VM avviata → WinRM: git clone --recurse-submodules https://<token>@gitea/... → VM: build
Punti chiave:
- PAT iniettato a runtime come env var WinRM — mai nello snapshot, mai loggato
- Git deve essere installato nel template — ora assente per design
- Switch opt-in
-UseGitCloneinInvoke-CIJob.ps1— default invariato, nessuna regressione - Si perde parallelismo parziale (host clone mentre VM boota); si elimina overhead zip/transfer
Task
-
Setup-TemplateVM.ps1 — Git for Windows
- Installer silenzioso:
Git-2.47.1-64-bit.exe /VERYSILENT /NORESTART /COMPONENTS=gitlfs - Aggiungere
C:\Program Files\Git\cmdal PATH di sistema nella VM - Verificare:
git --versionritorna exit 0 nella VM
- Installer silenzioso:
-
Setup-TemplateVM.ps1 — tool opzionali
- 7-Zip: installer silenzioso — più veloce di
Compress-Archive/Expand-Archivesu archivi grandi - curl.exe: già presente in Server 2025 — verificare disponibilità nel PATH
- 7-Zip: installer silenzioso — più veloce di
-
Invoke-CIJob.ps1 — switch
-UseGitClone- Quando attivo: saltare Phase 1 (host clone) e creazione
HostSourceDirtemporaneo - Leggere PAT da Credential Manager host, passarlo a
Invoke-RemoteBuild.ps1(mai loggato) - Default
$false— comportamento attuale invariato
- Quando attivo: saltare Phase 1 (host clone) e creazione
-
Invoke-RemoteBuild.ps1 — modalità in-VM clone
- Parametri aggiuntivi:
-CloneUrl,-CloneBranch,-CloneCommit,-GitPat - Iniettare PAT come env var della sessione WinRM (non argv, non log)
- Pulire dopo clone:
[System.Environment]::SetEnvironmentVariable('CI_GIT_PAT', $null, 'Process')
- Parametri aggiuntivi:
-
Test e2e con
-UseGitClone—e2e-010- Aggiornare snapshot
BaseCleancon Git installato - Eseguire su
nsis-plugin-nsinnounp(ha submoduli) - Confrontare tempo totale con e2e-009
- Verificare che PAT non appaia nei log
- Aggiornare snapshot
Linux Build VM (Future)
- Template VM Ubuntu 24.04 LTS — GCC, Clang, CMake, Python 3.x, build-essential
- Accesso SSH (chiave pubblica da host), snapshot
BaseClean-Linux Invoke-CIJob.ps1— parametro-GuestOS(Windows/Linux), SSH+SCP invece di WinRM- Workflow Gitea — matrix strategy
[windows-build, linux-build] - Test e2e Linux — confermare
build_plugin.pyfunzioni su Linux
Security Hardening (Post-MVP)
- WinRM HTTP (5985) → HTTPS (5986) con certificato self-signed
- Rimuovere
AllowUnencrypted=truedopo migrazione HTTPS - Regole firewall — limitare WinRM a
192.168.79.0/24(VMnet8 NAT) - Rotazione password guest VM trimestralmente
Reference Paths
| Item | Path / Value |
|---|---|
| vmrun.exe | C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe |
| act_runner | F:\CI\act_runner\act_runner.exe (servizio: act_runner) |
| act_runner config | F:\CI\act_runner\config.yaml |
| act_runner logs | F:\CI\act_runner\logs\ |
| Template VMX | F:\CI\Templates\WinBuild\CI-WinBuild.vmx |
| Snapshot name | BaseClean |
| Clone base dir | F:\CI\BuildVMs\ |
| Artifact dir | F:\CI\Artifacts\ |
| Log dir | F:\CI\Logs\ (retention: 30 giorni) |
| Gitea URL (LAN) | http://10.10.20.11:3100 |
| Gitea URL (ext) | https://gitea.emulab.it |
| Runner name | local-windows-runner (ID: 1) |
| Build VM subnet | 192.168.79.0/24 (VMnet8 — NAT, internet access per build) |
| Credential Manager target | BuildVMGuest |
| Guest username | ci_build |