feat: optimize in-VM git clone process and add support for Linux builds
This commit is contained in:
@@ -122,6 +122,106 @@
|
||||
- [ ] Monitoraggio Windows Event Log per fallimenti servizio act_runner
|
||||
- [ ] Configurare retention artifact (pulizia `F:\CI\Artifacts` più vecchi di N giorni)
|
||||
|
||||
## In-VM Git Clone (Ottimizzazione)
|
||||
|
||||
Sfruttare l'accesso internet della VM (VMnet8 NAT) per fare il `git clone` direttamente
|
||||
nella VM, eliminando il ciclo host-clone → zip → WinRM-transfer → unzip.
|
||||
|
||||
### Strategia
|
||||
|
||||
**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:**
|
||||
- Il PAT **non deve essere nello snapshot** — viene iniettato a runtime come env var via WinRM
|
||||
(`git clone https://Simone:<pat>@gitea.emulab.it/<repo>.git`) e non viene mai persistito
|
||||
- Git deve essere installato nel template (`Setup-TemplateVM.ps1`) — ora è assente per design
|
||||
- L'implementazione deve essere **non-breaking**: nuovo switch opt-in `-UseGitClone` in `Invoke-CIJob.ps1`
|
||||
- Si perde il parallelismo parziale (clone host avviene mentre VM boota), ma si elimina
|
||||
tutto l'overhead di zip/transfer (rilevante su repo grandi o con molti submoduli)
|
||||
- Submoduli funzionano nativamente con `--recurse-submodules` (nessun workaround)
|
||||
|
||||
### Task
|
||||
|
||||
- [ ] **Setup-TemplateVM.ps1 — installare Git for Windows**
|
||||
- [ ] Scaricare e installare Git for Windows (installer silenzioso da git-scm.com)
|
||||
```powershell
|
||||
$gitUrl = 'https://github.com/git-for-windows/git/releases/download/v2.47.1.windows.1/Git-2.47.1-64-bit.exe'
|
||||
Start-Process $gitUrl '/VERYSILENT /NORESTART /COMPONENTS=gitlfs' -Wait
|
||||
```
|
||||
- [ ] Aggiungere `C:\Program Files\Git\cmd` al PATH di sistema nella VM
|
||||
- [ ] Verificare: `git --version` ritorna exit 0 nella VM
|
||||
- [ ] Rimuovere il commento "Git is NOT installed" dal docblock di Setup-TemplateVM.ps1
|
||||
|
||||
- [ ] **Setup-TemplateVM.ps1 — altri tool utili**
|
||||
- [ ] **7-Zip**: installer silenzioso — molto più veloce di `Compress-Archive`/`Expand-Archive`
|
||||
per archivi grandi (es. npm/NuGet cache warm)
|
||||
- [ ] **curl.exe**: già presente in Windows 11/Server 2025 (v7.x) — verificare disponibilità
|
||||
- [ ] Valutare: `jq` (parsing JSON in script PowerShell o bash) — opzionale
|
||||
|
||||
- [ ] **Invoke-CIJob.ps1 — aggiungere switch `-UseGitClone`**
|
||||
- [ ] Quando `-UseGitClone` è attivo:
|
||||
- Saltare Phase 1 (host git clone) e la creazione del `HostSourceDir` temporaneo
|
||||
- Dopo Wait-VMReady, leggere PAT da Windows Credential Manager sull'host
|
||||
(es. target `git:https://gitea.emulab.it/...` o un target dedicato CI)
|
||||
- Passare PAT come parametro a `Invoke-RemoteBuild.ps1` (mai loggato/stampato)
|
||||
- [ ] Comportamento default invariato (`-UseGitClone` = `$false`) — nessuna regressione
|
||||
|
||||
- [ ] **Invoke-RemoteBuild.ps1 — modalità in-VM clone**
|
||||
- [ ] Aggiungere parametri: `-CloneUrl`, `-CloneBranch`, `-CloneCommit`, `-GitPat`
|
||||
(tutti opzionali, usati solo quando `-UseGitClone` è attivo)
|
||||
- [ ] Quando presenti: anziché copiare zip, eseguire nella VM:
|
||||
```powershell
|
||||
git clone --recurse-submodules `
|
||||
"https://Simone:$env:CI_GIT_PAT@gitea.emulab.it/Simone/<repo>.git" `
|
||||
C:\CI\build
|
||||
git -C C:\CI\build checkout $CloneCommit # pin al commit esatto
|
||||
```
|
||||
- [ ] Iniettare PAT come variabile d'ambiente della sessione WinRM (non argv, non log)
|
||||
- [ ] Pulire la variabile d'ambiente dopo il clone: `[System.Environment]::SetEnvironmentVariable('CI_GIT_PAT', $null, 'Process')`
|
||||
|
||||
- [ ] **Test e2e con `-UseGitClone`**
|
||||
- [ ] Aggiornare snapshot `BaseClean` con Git installato
|
||||
- [ ] Eseguire `e2e-010` con `-UseGitClone` su `nsis-plugin-nsinnounp` (ha submoduli)
|
||||
- [ ] Confrontare tempo totale con e2e-009 (senza `-UseGitClone`)
|
||||
- [ ] Verificare che il PAT non appaia nei log di `Invoke-CIJob.ps1`
|
||||
|
||||
---
|
||||
|
||||
## Linux Build VM (Future)
|
||||
|
||||
Aggiungere supporto per build su Linux per testare la compilazione cross-platform
|
||||
(es. versione Linux del plugin o build check con GCC/Clang).
|
||||
|
||||
- [ ] **Template VM Linux** — Provisionare template VM con Ubuntu Server 24.04 LTS
|
||||
- [ ] Scegliere distro: Ubuntu 24.04 LTS (raccomandato) o Debian 12
|
||||
- [ ] Installare toolchain: GCC, Clang, CMake, Python 3.x, build-essential
|
||||
- [ ] Configurare accesso SSH (chiave pubblica da host) in alternativa/integrazione a WinRM
|
||||
- [ ] Prendere snapshot `BaseClean-Linux`
|
||||
- [ ] Archiviare credenziali SSH in Credential Manager (o key file su host)
|
||||
|
||||
- [ ] **Invoke-CIJob.ps1 — branch Linux**
|
||||
- [ ] Aggiungere parametro `-GuestOS` (`Windows` / `Linux`) o rilevamento automatico da VMX
|
||||
- [ ] Sostituire WinRM con SSH + SCP per trasferimento zip e raccolta artifacts
|
||||
- [ ] Aggiungere supporto a comandi Linux (`bash`, `make`, `cmake --build`)
|
||||
|
||||
- [ ] **Workflow Gitea — build matrix**
|
||||
- [ ] Definire matrix strategy `[windows-build, linux-build]` nel workflow
|
||||
- [ ] Aggiungere label `linux-build` al runner (o registrare runner separato se necessario)
|
||||
- [ ] Verificare che artifacts da entrambe le piattaforme vengano raccolti correttamente
|
||||
|
||||
- [ ] **Test e2e Linux** — eseguire almeno un build end-to-end su VM Linux
|
||||
- [ ] Confermare che `build_plugin.py` (o analogo script) funzioni su Linux
|
||||
- [ ] Confrontare artifact Linux con quelli Windows
|
||||
|
||||
---
|
||||
|
||||
## Security Hardening (Post-MVP)
|
||||
|
||||
- [ ] Passare WinRM da HTTP (5985) a HTTPS (5986) con certificato self-signed
|
||||
|
||||
Reference in New Issue
Block a user