chore: initial commit local CI/CD system (e2e verified, production-ready)

Sistema CI locale basato su VMware Workstation + Gitea Actions + act_runner.
Testato e2e con nsis-plugin-nsinnounp (MSBuild + Python, 4 configurazioni parallele).

- scripts/: Invoke-CIJob, Invoke-RemoteBuild, New/Remove-BuildVM, Wait-VMReady, Get-BuildArtifacts
- runner/: act_runner config (windows-build label, capacity 4)
- gitea/workflows/: build-nsis.yml (template per progetti MSBuild/Python)
- template/: script di provisioning template VM (VS BuildTools 2026, .NET SDK 10, Python 3.13)
- docs/: ARCHITECTURE, CI-FLOW, OPTIMIZATION, BEST-PRACTICES, Setup-GiteaSSH

Verificato: e2e-009 SUCCESS in 02:09, cleanup automatico VM confermato.
This commit is contained in:
Simone
2026-05-08 23:25:50 +02:00
commit dd238121b3
21 changed files with 3574 additions and 0 deletions
+44
View File
@@ -0,0 +1,44 @@
# Local CI/CD System — Design & Status
## Sistema implementato e operativo (2026-05-08)
### Hardware
- Windows 11 host — CPU i9-10900X, 64 GB RAM, NVMe SSD
### Hypervisor
- VMware Workstation Pro
- Template VM: Windows Server 2025
- VMX: `F:\CI\Templates\WinBuild\CI-WinBuild.vmx`
- Snapshot: `BaseClean`
- Toolchain: VS Build Tools 2026 (MSBuild 18.5.4 / v145), .NET SDK 10.0.203, Python 3.13.3
### CI System
- Gitea self-hosted — `http://10.10.20.11:3100`
- act_runner v1.0.2 — Windows service su host, label `windows-build`
- Build VMs: subnet VMnet8 NAT — `192.168.79.0/24`
- WinRM HTTP/5985 (Basic auth, lab-only)
### Architettura implementata
1. Gitea Actions enqueue job → act_runner lo prende
2. `Invoke-CIJob.ps1` orchestra 6 fasi:
- **Phase 1**: `git clone` repo (con submoduli) su host in `C:\Temp\ci-src-<jobid>`
- **Phase 2**: `New-BuildVM.ps1` — linked clone da template snapshot `BaseClean`
- **Phase 3**: `vmrun start` VM headless
- **Phase 4**: `Wait-VMReady.ps1` — polling WinRM readiness (~5s)
- **Phase 5**: `Invoke-RemoteBuild.ps1` — trasferisce sorgente (zip), esegue build via WinRM, raccoglie `artifacts.zip`
- **Phase 6**: `Get-BuildArtifacts.ps1` — copia zip in `F:\CI\Artifacts\<jobid>\`
3. `finally`: `Remove-BuildVM.ps1` — stop VM + rimozione directory clone
### Caso d'uso implementato e testato
- Repo: `Simone/nsis-plugin-nsinnounp` (NSIS plugin C++ — MSBuild)
- Build command: `python build_plugin.py --final --dist-dir dist`
- 4 configurazioni parallele: x86-unicode, x64-unicode, cli-x86, cli-x64
- Artifact: `dist/x86-unicode/nsInnoUnp.dll`, `dist/amd64-unicode/nsInnoUnp.dll`, `dist/nsInnoUnpCLI.exe`, `dist/nsInnoUnpCLI64.exe`
- e2e-009: SUCCESS in 02:09, cleanup automatico confermato
### Fix critici applicati durante sviluppo
- **TRK0002 Windows quota exhaustion**: `build_plugin.py` divide thread count per numero di build parallele
- **MSBuild detection per VS 2026**: fix in `build_plugin.py` per vswhere con VS 2026 BuildTools
- **Output filter nascondeva errori**: filtro cambiato da substring a prefix match
- **--dist-dir**: nuovo flag per raccogliere artifact in cartella piatta pre-clean
- **--no-clean / --no-copy**: flag CI-friendly per skip cleanup e skip copia verso plugins dir