# Fase A → Fase B — Bridge checklist per l'utente Questa checklist copre i passi **intermedi** tra "Fase A done" e "B1 inizia". Sono attività che girano sull'host **Windows attuale** (o sono logistiche fuori dal repo) e non rientrano né in [PhaseA-user-checklist.md](PhaseA-user-checklist.md) (validazione del codice Python) né in [PhaseB-user-checklist.md](PhaseB-user-checklist.md) (setup del nuovo host Linux). > **Quando eseguirla**: dopo Passo 9 di Fase A (merge + tag), prima di > Passo 1 di Fase B (setup host Linux Mint). > **Tempo stimato**: 1–2 ore (escluso `tar` di backup, che dipende > dalla dimensione di `F:\CI\`). --- ## Sezione 1 — Salva il baseline pre-migrazione Senza un baseline registrato, il confronto richiesto da B7 ("tempo medio entro ±20% baseline Windows") è impossibile. - [x] Eseguire benchmark sull'host Windows (post Fase A, runner Python attivo): ```powershell cd .\scripts\Measure-CIBenchmark.ps1 | Tee-Object -FilePath "baseline-windows-$(Get-Date -Format 'yyyyMMdd').txt" ``` - [x] Annotare in `docs/RUNBOOK.md` (sezione nuova "Windows host baseline"): - Data - Tempo medio per job (Windows e Linux template) - Success rate - Versione `act_runner` e `ci_orchestrator` (output di `python -m ci_orchestrator --version` se disponibile, altrimenti SHA del commit) - Hardware: i9-10900X, 64 GB RAM, NVMe SSD (da `AGENTS.md`) - [x] Committare: ```powershell git add docs/RUNBOOK.md git commit -m "docs(runbook): record Windows host pre-migration baseline" git push ``` --- ## Sezione 2 — Pre-requisiti Windows per Fase B Tutti questi vanno fatti **prima** di iniziare B1, perché B2/B3/B6 li presuppongono già pronti. ### 2.1 Inventario chiavi SSH - [x] Verificare presenza chiavi: ```powershell Get-ChildItem F:\CI\keys\ci_linux* ``` Atteso: `ci_linux` (privata, perm utente owner) e `ci_linux.pub`. Se mancano, rigenerarle con `ssh-keygen -t ed25519 -f F:\CI\keys\ci_linux -N ""` e re-installare `ci_linux.pub` nel template `LinuxBuild2404` su `~ci_build/.ssh/authorized_keys`. ### 2.2 Recupero password guest Windows (`BuildVMGuest`) La password salvata in Windows Credential Manager **non è esportabile**. Devi conoscerla per re-inserirla con `secret-tool` su Linux (Passo 3 di Fase B). - [x] Verificare di averla nel password manager personale. - [X] Se non la ricordi: bootare il template `WinBuild2025` (e `WinBuild2022`), resettare la password dell'utente CI (`net user `), ricatturare snapshot `BaseClean` da stato powered-off (vedi `AGENTS.md` errore #9), aggiornare il Credential Manager Windows con la nuova password, e annotarla in modo sicuro. ### 2.3 Generazione Gitea PAT per il nuovo runner - [x] Aprire Gitea → User Settings → Applications → Generate New Token. - [x] Nome: `ci-runner-linux`. Scope: `read:repository` + `write:package` (o gli stessi del runner Windows attuale). - [x] Annotare il token in modo sicuro (verrà inserito al Passo 3 di Fase B con `secret-tool store ... target GiteaPAT`). ### 2.4 OpenSSH Server su Windows (per rsync pull dal Linux) Necessario solo se al Passo 2 di Fase B (transfer template) preferisci fare `rsync pull` dal Linux. Alternativa: `rsync push` da Windows con WSL/Cygwin/MSYS2. - [x] Installare OpenSSH Server: ```powershell Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Start-Service sshd Set-Service sshd -StartupType Automatic New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server' -Enabled True ` -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 ``` - [x] Validare connessione da un altro host: `ssh user@ "whoami"`. - [x] (Opzionale) Configurare `authorized_keys` per il futuro user `ci-runner` del Linux box. ### 2.5 Template fully powered-off (gate per B2) > AGENTS.md errore #9: snapshot catturato con VM accesa produce > `*.vmem` che rompono il clone su host diverso. `*.vmsn` è sempre > presente (metadata snapshot) anche con VM spenta — non è un problema. - [x] Verificare che nessun template sia running: ```powershell & 'C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe' list ``` Atteso: nessun path sotto `F:\CI\Templates\` nell'output. - [x] Verificare assenza file di runtime: ```powershell Get-ChildItem F:\CI\Templates -Recurse -Include *.vmem,*.lck ``` Atteso: nessun risultato. Se ci sono `.vmem`, lo snapshot non è clean (VM era accesa) → ricatturare `BaseClean` / `BaseClean-Linux` da stato fully powered-off. `.lck` indica VM ancora in esecuzione → spegnerla prima. ### 2.6 Backup precauzionale di `F:\CI\` Da fare **prima** del cutover B6, ma anche prima del transfer B2 è una buona pratica. - [ ] Eseguire backup completo: ```powershell $stamp = Get-Date -Format 'yyyyMMdd' $archive = "F:\BACKUP\CI-pre-migration-$stamp.7z" & 'C:\Program Files\7-Zip\7z.exe' a -mx=3 -xr!ISO -xr!RunnerWork $archive 'F:\CI\' Get-FileHash $archive -Algorithm SHA256 | Tee-Object "$archive.sha256" ``` - [x] Verifica integrità (lista contenuto, primi 20 record): ```powershell & 'C:\Program Files\7-Zip\7z.exe' l $archive | Select-Object -First 20 ``` - [x] Annotare path archivio + checksum SHA256. --- ## Sezione 3 — Logistica e finestra di manutenzione Questi non sono comandi, ma checkpoint prima di iniziare B1 e B6. - [x] **Hardware Linux disponibile**: il box target è acquisito, racked, raggiungibile in rete dall'host Windows e da Gitea. - [x] **DNS / IP statico** assegnato al nuovo host Linux (per registrazione runner + raggiungibilità da admin). - [x] **Finestra di manutenzione per cutover B6 concordata**: 30–60 min di stop Gitea Actions, in un orario a basso traffico. - [x] **Comunicazione utenti del repo**: avviso che durante la finestra B6 i workflow saranno temporaneamente fermi. - [x] **Piano di rollback compreso**: rileggere la sezione "Rollback" del Passo 6 di [PhaseB-user-checklist.md](PhaseB-user-checklist.md). --- ## Tracciamento globale | Sezione | Descrizione | Stato | | ------- | ----------------------------------------------- | ----- | | 1 | Baseline benchmark salvato in `docs/RUNBOOK.md` | [x] | | 2.1 | Chiavi SSH presenti | [x] | | 2.2 | Password `BuildVMGuest` recuperata | [x] | | 2.3 | Gitea PAT generato per `ci-runner-linux` | [x] | | 2.4 | OpenSSH Server attivo (o alt. rsync) | [x] | | 2.5 | Template fully powered-off, no `.vmem` | [x] | | 2.6 | Backup `F:\CI\` con SHA256 | [x] | | 3 | Hardware + DNS + finestra + comunicazione OK | [x] | Quando tutte le righe sono `[x]`, puoi iniziare il Passo 1 di [PhaseB-user-checklist.md](PhaseB-user-checklist.md).