Featured image of post Testare le GitHub Actions in locale con act

Testare le GitHub Actions in locale con act

Come testare le GitHub Actions in locale utilizzando act per velocizzare il debugging dei workflow, ottimizzare il ciclo di sviluppo e ridurre i tempi di attesa.

Chi usa GitHub prima o poi si scontra con i workflow. Di recente stiamo affrontando una sfida solo all’apparenza banale: migrare alcuni dei nostri repo su Github e implementare le actions necessarie alle necessità di CI/CD.

Di base sarebbe banale, in rete ci sono gazilioni di esempi, template, guide e perfino wizard che, in teoria, ti forniscono gli script già pronti.

Migrando uno degli ultimi repo però mi è successa una cosa particolare. Stavo usando per il workflow da eseguire sulle pull-request lo stesso script usato con successo in altri repo (sono tutti sistemi basati su Laravel). Questa volta però non andava, errori di connessione al db, test che fallivano in maniera inaspettata.

Tentavo le correzioni, push su GitHub, interminabile attesa che il workflow girasse per esaminare gli errori.

Un modo mooolto lento di procedere.

Installare e usare act per testare le GitHub Actions

Per fortuna c’è un’alternativa: act - https://nektosact.com/ questa fantastica utility scritta in Go permette di eseguire le actions di GitHub in locale grazie alla creazione al volo di una serie di container (nel mio caso uso Podman invece di Docker).

L’installazione è banale, nel mio caso su Mac

brew install act

Dopodiché basta avere il servizio Docker (o Podman) attivo e lanciare l’utility.

Ecco un esempio completo di comando, con tutti i parametri che uso nel mio ambiente:

act \
  --workflows ".github/workflows/main.yml" \
  --secret-file .secrets \
  --var-file .vars \
  --pull=false \
  --container-architecture linux/arm64 \
  -P ubuntu-latest=catthehacker/ubuntu:act-latest \
  -P self-hosted=catthehacker/ubuntu:act-latest

Configurare act: i parametri principali

Vi spiego i vari parametri:

ParametroDescrizione
--workflowsPath del file .yml del workflow da eseguire
--secret-fileVariabili SECRET in formato NOME=valore (una per riga)
--var-fileVariabili VARIABLE in formato NOME=valore (una per riga)
--pullSe false, evita di scaricare ogni volta l’immagine del container
--container-architectureArchitettura da usare per i container (es. linux/arm64)
-PSpecifica l’immagine da usare per il container che eseguirà il workflow

Nel mio caso per il container ho scelto catthehacker/ubuntu:act-latest rispetto a catthehacker/ubuntu:full-latest perché quest’ultima, anche se ha la massima compatibilità integrando praticamente tutti i tool necessari, è enorme (60Gb una volta estratta) e non era necessaria.

Conclusioni: perché usare act

Utilizzare act mi ha permesso di testare molto più velocemente il workflow, individuare i problemi e correggerlo in una frazione del tempo rispetto al classico edit->commit->push->execute action->repeat

Un’ultima cosa. Una volta messo a punto il workflow, girava perfettamente su act, è successo che alcuni test fallissero una volta che il workflow veniva eseguito su GitHub. La spiegazione è tanto banale quanto insidiosa: act, ma anche un banale php artisan test useranno il vostro file .env se presente. Tenetene conto quando scrivete il workflow.

Nota importante ⚠️
act utilizza il file .env locale per eseguire i test, mentre GitHub Actions potrebbe avere un contesto diverso.
Assicurati di configurare correttamente le variabili d’ambiente nel workflow per evitare comportamenti inattesi.

Federico Maiorini
Realizzato con Hugo
Tema Stack realizzato da Jimmy