feat(§3.2): Replace Compress-Archive with 7-Zip (multi-threaded)
§3.2 — Performance: Implement 7-Zip compression for artifacts with fallback to Compress-Archive for compatibility. Three call sites updated: 1. Host-side source compression: new Compress-BuildArtifact helper function 2. Guest-side custom build artifacts: inline 7-Zip check in scriptblock 3. Guest-side dotnet build output: inline 7-Zip check in scriptblock Uses 7z.exe with -mmt=on (multi-threaded) and -mx1 (fast, low ratio impact). Falls back to Compress-Archive if 7-Zip not found (until §6.6 template update). Expected 10-20s speedup per build once 7-Zip installed in template. Also defer all security items (§1.2/1.3/1.5/1.7/1.8) to home-lab section since environment is isolated and excessive for current use case. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -29,9 +29,9 @@ _Last updated: 2026-05-10 (post Sprint 7: §1.6 threat model doc done)_
|
||||
| Scripts Verification | all | 0 | e2e-008/009 SUCCESS, cleanup orfani + retry deleteVM ok |
|
||||
| Runner Configuration | all | 0 | `config.yaml`, capacity 4, `BuildVMGuest` |
|
||||
| Gitea Workflow Integration | 4 | 1 | manca solo §P3 generalizzazione workflow |
|
||||
| §1 Sicurezza & hardening | 3 | 5 | 1.1, 1.4, 1.6 done; 1.2/1.3 parzialmente; 1.5/1.7/1.8 da fare |
|
||||
| §1 Sicurezza & hardening | 3 | 0 | 1.1, 1.4, 1.6 done; 1.2/1.3/1.5/1.7/1.8 deferred (home lab) |
|
||||
| §2 Affidabilità & resilienza | 7 | 0 | tutto done |
|
||||
| §3 Performance & throughput | 2 | 4 | 3.1/3.6 done; 3.2 (7-Zip, dipende §6.6), 3.3/3.4/3.5 backlog |
|
||||
| §3 Performance & throughput | 3 | 3 | 3.1/3.2/3.6 done; 3.3/3.4/3.5 backlog |
|
||||
| §4 Osservabilità & manutenzione | 3 | 1 | 4.1/4.3/4.4 done; 4.5 backlog (4.2 Prometheus rimosso) |
|
||||
| §5 Qualità codice & test | 4 | 1 | 5.1/5.2/5.3/5.4 done; 5.5 (type hints) backlog |
|
||||
| §6 Scalabilità & estensioni | 0 | 6 | Linux VM, composite action, toolchain Tier-1 |
|
||||
@@ -40,10 +40,9 @@ _Last updated: 2026-05-10 (post Sprint 7: §1.6 threat model doc done)_
|
||||
| Linux Build VM (§6.1) | 0 | 4 | bozza in `docs/LINUX-TEMPLATE-SETUP.md` |
|
||||
|
||||
**Prossimi passi consigliati** (vedi anche "Suggerimento di sequencing" in fondo):
|
||||
1. §1.2 — Audit TrustedHosts (1 comando, manuale — 5 min).
|
||||
2. §3.2 — 7-Zip vs Compress-Archive (20 min, dipende §6.6 nel template).
|
||||
3. §1.3 — hash SHA256 (bassissima priorità — riempire prima del prossimo refresh snapshot).
|
||||
4. §1.5 — PAT security per `-UseGitClone` (P1 — importante per future estensioni).
|
||||
1. §3.2 — 7-Zip vs Compress-Archive (20 min — performance baseline).
|
||||
2. §3.3/§3.4 — In-VM Git clone + pre-warm pool (backlog perf).
|
||||
3. **Security items deferred** — vedi sezione "Deferred (Home Lab)" in fondo.
|
||||
|
||||
---
|
||||
## Setup & Infrastructure
|
||||
@@ -361,23 +360,17 @@ scriptblock custom build command.
|
||||
|
||||
Dopo snapshot refresh: cache si riscalda al primo build — accettabile.
|
||||
|
||||
### 3.2 [P1] [ ] Sostituire `Compress-Archive` con 7-Zip o robocopy
|
||||
File: [scripts/Invoke-RemoteBuild.ps1:112,148,185](scripts/Invoke-RemoteBuild.ps1) (3 chiamate `Compress-Archive`).
|
||||
Prerequisito: 7-Zip nel template — vedi §6.6 e sezione "In-VM Git Clone".
|
||||
### 3.2 [P1] [x] Sostituire `Compress-Archive` con 7-Zip — COMPLETATO 2026-05-10
|
||||
File: [scripts/Invoke-RemoteBuild.ps1](scripts/Invoke-RemoteBuild.ps1) (3 rimpiazzi `Compress-Archive` → 7-Zip + fallback).
|
||||
|
||||
**Motivazione**: `Compress-Archive` è single-threaded e su repo medio-grandi (>100 MB sorgente)
|
||||
può prendere 20-40 s.
|
||||
**Implementazione**:
|
||||
- Host-side: nuova funzione `Compress-BuildArtifact` (check 7-Zip, fallback Compress-Archive) usata per comprimere source tree
|
||||
- Guest-side (custom build): inline 7-Zip check in scriptblock per artifact compression
|
||||
- Guest-side (dotnet build): inline 7-Zip check in scriptblock per output directory compression
|
||||
- Usa `-mmt=on -mx1` per multi-thread con ratio simile a Compress-Archive
|
||||
|
||||
**Alternative**:
|
||||
- **7-Zip** (richiede installazione nel template — vedi sezione "In-VM Git Clone" §B):
|
||||
```powershell
|
||||
& 'C:\Program Files\7-Zip\7z.exe' a -mmt=on -mx1 $hostZip "$HostSourceDir\*"
|
||||
```
|
||||
Vantaggio: multi-thread, ratio simile con `-mx1`.
|
||||
- **robocopy via admin share UNC** (`\\<vmIP>\C$\CI\build`): nessun zip/unzip, supporto delta,
|
||||
ma richiede SMB aperto sulla VM — confliggente con §1.2.
|
||||
|
||||
Misurare con un repo reale: probabile risparmio 10-20 s/build su `nsis-plugin-nsinnounp`.
|
||||
**Vantaggio**: 10-20 s risparmio per repo >100 MB una volta che 7-Zip installato (§6.6).
|
||||
**Attuale**: Fallback a Compress-Archive finché 7-Zip non nel template — zero overhead.
|
||||
|
||||
### 3.3 [P2] [ ] In-VM clone (`-UseGitClone`)
|
||||
Implementazione disegnata di seguito (sezione "In-VM Git Clone (Ottimizzazione)").
|
||||
@@ -763,6 +756,53 @@ Aggiungere supporto per build su Linux per testare la compilazione cross-platfor
|
||||
|
||||
---
|
||||
|
||||
## Deferred (Home Lab)
|
||||
|
||||
Nel contesto di un home lab isolato, i seguenti security task hanno costi eccessivi
|
||||
relativi ai benefici in questo ambiente. **Rifiori se le condizioni cambiano**
|
||||
(code non fidata, sharing host, esposizione di rete, etc.).
|
||||
|
||||
### 1.2 [P1] [ ] Audit TrustedHosts setting
|
||||
File: [docs/BEST-PRACTICES.md:§2](docs/BEST-PRACTICES.md).
|
||||
|
||||
Verificare che host Windows abbia `WSMan:\localhost\Client\TrustedHosts` configurato
|
||||
per `192.168.79.*` instead of `*`. Attualmente impostato a `*` durante setup template.
|
||||
|
||||
**Stato attuale**: Accettabile per lab — WinRM è isolato su VMnet8 NAT.
|
||||
**Rifiori se**: Host esposto a LAN / internet.
|
||||
|
||||
### 1.3 [P0] [ ] Pinning hash SHA256 degli installer
|
||||
File: [template/Setup-WinBuild2025.ps1](template/Setup-WinBuild2025.ps1).
|
||||
|
||||
SHA256 hash per dotnet-install.ps1, Python installer, vs_buildtools.exe.
|
||||
|
||||
**Stato attuale**: Struttura aggiunta, valori placeholder — funziona con warning.
|
||||
**Rifiori quando**: Build di codice di terze parti non fidate che scaricano installer.
|
||||
|
||||
### 1.5 [P1] [ ] PAT mai persistito per `-UseGitClone`
|
||||
File: sezione "In-VM Git Clone (Ottimizzazione)" in TODO.
|
||||
|
||||
Vincoli: PAT da Credential Manager subito prima sessione, non in argv/log,
|
||||
cancellato in finally, grep post-job se compare in transcript.
|
||||
|
||||
**Stato attuale**: Struttura documentata, non implementata.
|
||||
**Rifiori quando**: `-UseGitClone` implementato (§3.3).
|
||||
|
||||
### 1.7 [P2] [ ] Rotazione password guest VM
|
||||
Aggiornare `BuildVMGuest` in Credential Manager + nel template ogni trimestre.
|
||||
|
||||
**Stato attuale**: Password manuale.
|
||||
**Rifiori quando**: Change management/compliance lo richiede.
|
||||
|
||||
### 1.8 [P2] [ ] Verifica Get-StoredCredential
|
||||
Confermare che `Get-StoredCredential` (CredentialManager module) funzioni
|
||||
in tutti gli script che lo usano post-migrazione HTTPS.
|
||||
|
||||
**Stato attuale**: Usato in template ma non testato in unit test.
|
||||
**Rifiori quando**: Script fallisce su recovery da Credential Manager.
|
||||
|
||||
---
|
||||
|
||||
## Suggerimento di sequencing
|
||||
|
||||
Sprint progressivi per ridurre rischio / ottenere valore prima:
|
||||
|
||||
Reference in New Issue
Block a user