Simone d6aabe7138 docs(TODO): Remove duplicate §1 items, consolidate to Deferred section
Remove original §1.2, §1.3, §1.5 entries from main security section since
they are now consolidated in "Deferred (Home Lab)" section with better
organization and context about when to revisit.

Also removed original §1.7, §1.8 entries (was done in previous commit).

Final §1 structure: 1.1, 1.4, 1.6 (done) — 3 items.
All deferred items in separate section with clear criteria for re-enablement.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 20:32:06 +02:00

Local CI/CD System

Sistema CI/CD self-hosted su Windows per build isolati in VM efimere VMware.

Stato: production-ready — e2e verificato (e2e-009 SUCCESS)


Panoramica

Il runner act_runner riceve i job da Gitea Actions. Per ogni job, lo script Invoke-CIJob.ps1 orchestra l'intero ciclo:

Gitea push/tag
      │
      ▼
  act_runner  (Windows service, label: windows-build)
      │
      ▼
  Invoke-CIJob.ps1
      │
      ├─ 1. git clone repo su host  (con submoduli)
      ├─ 2. Linked clone da snapshot BaseClean
      ├─ 3. Avvio VM headless
      ├─ 4. Attesa WinRM ready
      ├─ 5. Zip transfer → build via WinRM → raccolta artifacts
      ├─ 6. Copia artifacts in F:\CI\Artifacts\<jobid>\
      └─ finally: stop + rimozione VM clone

Ogni build gira in una VM Windows Server 2025 usa e getta, ripristinata dallo snapshot BaseClean ad ogni run.


Requisiti Host

Componente Versione / Dettaglio
OS Windows 11
CPU/RAM i9-10900X, 64 GB RAM
VMware Workstation Pro installato, vmrun.exe disponibile
PowerShell 5.1
act_runner v1.0.2 — F:\CI\act_runner\act_runner.exe
Gitea self-hosted http://10.10.20.11:3100 / https://gitea.emulab.it

Template VM (snapshot BaseClean)

Componente Versione
OS Windows Server 2025
VMX F:\CI\Templates\WinBuild\CI-WinBuild.vmx
VS Build Tools 2026 (MSBuild 18.5.4 / toolset v145)
.NET SDK 10.0.203
Python 3.13.3
Rete VMnet8 NAT — 192.168.79.0/24
WinRM HTTPS/5986, Basic auth, self-signed cert (SkipCACheck — lab-only)

Struttura repository

├── Setup-Host.ps1                # Bootstrap host: dirs F:\CI\, credenziali, act_runner service
│
├── scripts/
│   ├── Invoke-CIJob.ps1          # Orchestratore principale
│   ├── New-BuildVM.ps1           # Linked clone da template
│   ├── Wait-VMReady.ps1          # Polling WinRM readiness
│   ├── Invoke-RemoteBuild.ps1    # Zip transfer + esecuzione build in VM
│   ├── Get-BuildArtifacts.ps1    # Copia artifacts dall'host
│   └── Remove-BuildVM.ps1        # Stop + rimozione VM clone
│
├── template/
│   ├── Prepare-WinBuild2025.ps1 # Provisioning automatico template VM (HOST-side)
│   └── Setup-WinBuild2025.ps1    # Installazione toolchain nella VM (GUEST-side)
│
├── gitea/
│   ├── workflows/
│   │   └── build-nsis.yml        # Workflow live per nsis-plugin-nsinnounp
│   └── workflow-example.yml      # Template generico adattabile
│
├── runner/
│   └── config.yaml               # Configurazione act_runner (no secrets)
│
├── docs/
│   ├── ARCHITECTURE.md           # Diagramma sistema e componenti
│   ├── CI-FLOW.md                # Flusso dettagliato passo-passo
│   ├── OPTIMIZATION.md           # Layout disco, snapshot, cache, tuning
│   ├── BEST-PRACTICES.md         # Sicurezza, WinRM, credenziali
│   └── Setup-GiteaSSH.md         # Configurazione SSH alias per Gitea
│
├── PLAN.md                       # Stato implementazione e decisioni tecniche
└── TODO.md                       # Task completati e roadmap futura

Setup rapido

1. Template VM

# Dalla directory template/, dopo aver installato Windows Server 2025 nella VM
# e annotato il suo IP DHCP su VMnet8:
.\Prepare-WinBuild2025.ps1 -VMIPAddress 192.168.79.x -SkipWindowsUpdate

Poi spegni la VM e prendi lo snapshot con nome esatto BaseClean.

2. Credenziali guest

# PowerShell elevato — una volta sola sull'host
Import-Module CredentialManager
New-StoredCredential -Target "BuildVMGuest" -UserName "ci_build" `
    -Password "<your-build-password>" -Persist LocalMachine

3. act_runner

# Registra il runner con Gitea (interattivo, usa il registration token da Gitea Admin)
F:\CI\act_runner\act_runner.exe register

# Installa come servizio Windows
nssm install act_runner "F:\CI\act_runner\act_runner.exe" daemon
nssm start act_runner

Imposta GITEA_CI_TEMPLATE_PATH nelle variabili d'ambiente del servizio: F:\CI\Templates\WinBuild\CI-WinBuild.vmx

4. SSH per Gitea

Vedi docs/Setup-GiteaSSH.md per configurare l'alias gitea-ci (SSH port 2222, necessario per git clone ssh://gitea-ci/... durante i build).


Uso — build manuale (test)

& 'N:\Code\Workspace\Local-CI-CD-System\scripts\Invoke-CIJob.ps1' `
  -JobId               'test-001' `
  -RepoUrl             'ssh://gitea-ci/Simone/nsis-plugin-nsinnounp.git' `
  -Branch              'main' `
  -Commit              '' `
  -TemplatePath        'F:\CI\Templates\WinBuild\CI-WinBuild.vmx' `
  -Submodules `
  -BuildCommand        'python build_plugin.py --final --dist-dir dist' `
  -GuestArtifactSource 'dist' `
  -GuestCredentialTarget 'BuildVMGuest'

Artifacts raccolti in: F:\CI\Artifacts\test-001\artifacts.zip


Workflow Gitea

Il file gitea/workflows/build-nsis.yml è il workflow attivo per Simone/nsis-plugin-nsinnounp. Si attiva su push di tag v* o manualmente.

Per adattarlo ad altri repository, copia gitea/workflow-example.yml e aggiorna -RepoUrl, -BuildCommand e -GuestArtifactSource.


Documentazione

File Contenuto
docs/ARCHITECTURE.md Diagramma componenti e flusso dati
docs/CI-FLOW.md Descrizione dettagliata di ogni fase del pipeline
docs/OPTIMIZATION.md Layout NVMe, snapshot strategy, cache, tuning WinRM
docs/BEST-PRACTICES.md Sicurezza WinRM, gestione credenziali, isolamento
docs/Setup-GiteaSSH.md Configurazione SSH alias gitea-ci

Note di sicurezza

WinRM usa HTTPS/5986 con certificato self-signed e Basic auth. -SkipCACheck/-SkipCNCheck sono accettabili in lab isolato (il cert non è di una CA trusted). Per ambienti condivisi o di produzione, usare un certificato CA valida e rimuovere -SkipCACheck. Vedi docs/BEST-PRACTICES.md.

S
Description
Local CI/CD system: VMware Workstation + Gitea Actions + act_runner. Ephemeral build VMs via linked clones.
Readme 6.6 MiB
Languages
Python 50.8%
PowerShell 46.1%
Shell 3.1%