⚙️ Integrazione continua (CI): Hammers, Furnace e Incubator
L'infrastruttura di Continuous Integration di penguins-eggs (.github/workflows/) è suddivisa in tre pipeline specializzate. La divisione nasce da un'osservazione ingegneristica precisa: la pacchettizzazione è un lavoro user-space che gira felicemente nei container ospitati da GitHub, mentre la rimasterizzazione live e il collaudo dell'installazione su disco richiedono un kernel reale, mount point fisici, dischi virtuali e il controllo di un hypervisor Proxmox VE.
| Pipeline | Workflow | Dove gira | Cosa produce / collauda |
|---|---|---|---|
| 🔨 Hammers | hammers.yml | Runner GitHub (container) | Compilazione e pacchetti nativi (.apk, .pkg.tar.zst, .deb, .rpm). |
| 🏭 Furnace | furnace.yml | Self-hosted runner + Proxmox VE | Voli completi sudo eggs remaster che sfornano ISO live avviabili. |
| 🐣 Incubator | incubator-go.yml | Self-hosted runner + Proxmox VE | Collaudo automatico di installazione delle ISO su disco (krill su ext4/btrfs, BIOS/UEFI). |
🔨 1. Hammers: la matrice di pacchettizzazione
Ad ogni push o pull request su main, Hammers avvia in parallelo (fail-fast: false) un container per ciascuna famiglia supportata (Alpine, Arch Linux, Manjaro, Debian, Fedora, openSUSE):
- Allestimento della bottega: installa la toolchain nativa (GCC, Go, Make, tool di packaging) e crea l'utente non privilegiato
artisan. - Compilazione e Packaging: esegue
make(compilandooain C ecoain Go) e lanciamake packagecome utenteartisan, generando il pacchetto nativo tramiteabuild,makepkg,dpkgorpmbuild. - Smoke Test Live: installa il pacchetto appena forgiato direttamente dentro il container per verificarne metadati e dipendenze, caricandolo poi come artefatto della release.
Domanda a cui risponde Hammers: «Il codice compila e genera un pacchetto nativo valido su tutte le famiglie supportate?»
🏭 2. Furnace: rimasterizzazione sul ferro reale (Proxmox VE)
Eseguita su un runner self-hosted collegato al nodo Proxmox VE (father), Furnace mappa ogni distribuzione (Alpine, Arch, Debian, Devuan, Fedora, Manjaro, openKylin, openSUSE, Ubuntu) su una macchina virtuale KVM dedicata dotata di uno snapshot pulito (virgin):
- Rollback & Boot: riporta la VM allo snapshot
virgin(qm rollback+qm start), garantendo che ogni volo parta da un sistema incontaminato. - Scoperta IP dinamica e SSH: legge il MAC address da
qm config, individua l'IP via ARP sweep ed entra in SSH. - Installazione e Volo: scarica l'ultimo pacchetto di
penguins-eggs, lo installa ed eseguesudo eggs remastersu un kernel reale con veri mount OverlayFS. - Esportazione e Spegnimento: trasferisce la ISO generata sullo storage Proxmox tramite
eggs export iso --cleane spegne la VM (if: always()).
Domanda a cui risponde Furnace: «L'intera catena di remastering produce effettivamente una ISO live avviabile su ogni distribuzione?»
🐣 3. Incubator: collaudo di installazione automatica (incubator-go)
Una ISO generata non è davvero validata finché non viene installata su un disco e riavviata. Incubator utilizza incubator-go — un orchestratore in Go a zero dipendenze che dialoga con Proxmox VE e il QEMU Guest Agent:
- Avvio della Live: monta la ISO appena sfornata da Furnace in una VM di test dedicata (con profili BIOS + ext4, UEFI + ext4 e UEFI + btrfs).
- Installazione non presidiata: avvia la live ed esegue automaticamente l'installazione su disco tramite
krill. - Riavvio e Telemetria: scollega la ISO, riavvia la VM dal disco fisso appena installato ed estrae via QEMU Guest Agent il file
/etc/fstabe il report diagnostico (fastfetch/neofetch), pubblicando la tabella dei risultati direttamente nel riepilogo di GitHub Actions ($GITHUB_STEP_SUMMARY).
Domanda a cui risponde Incubator: «La ISO prodotta da penguins-eggs si installa e si avvia correttamente da disco su filesystem ext4 e btrfs, sia in modalità BIOS che UEFI?»