Files
local-ci-cd-system/PLAN.md
T
Simone dd238121b3 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.
2026-05-08 23:25:50 +02:00

2.2 KiB

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