GitHub Actions 101

  • Di
  • 2023-03-07 - 4 minuti
banner

Probabilmente hai familiarità con GitHub: sai già che si tratta di una piattaforma straordinaria per creare software, collaborare con i tuoi colleghi di team e contribuire a progetti open source.

GitHub offre molte funzionalità che ti semplificano la vita come sviluppatore o sviluppatrice.

In questo articolo, parleremo di come lavorare con una feature su GitHub killer estremamente potente e sempre sottovalutata: GitHub Actions.

GitHub Actions

GitHub Actions è una piattaforma che automatizza la creazione, il test e la distribuzione del software. Ma non si ferma qui: ti permette anche di eseguire qualsiasi tipo di operazione sul tuo repository quando si verifica un evento specifico.

Componenti

Per avere un quadro completo di cosa sia GitHub Actions, aiuta a scomporlo nei suoi numerosi componenti:

Eventi

Un evento è tutto ciò che può accadere su un repository GitHub. Questo va dal push di un codice, alla creazione di un branch, all’apertura di una richiesta di pull e persino al commento di un problema. L’elenco dei trigger è molto più lungo: puoi verificarlo qui.

Workload

Un flusso di lavoro è un processo automatizzato composto da una serie di lavori che viene eseguito quando viene attivato da un evento.

I workload sono definiti nei file YAML e sono archiviati in una directory .github/workflows nella radice del repository. Un repository può anche avere più flussi di lavoro.

Job

Un job è una serie di attività che vengono eseguite in un flusso di lavoro dopo essere state attivate da un evento. Ogni passaggio è uno script o un’azione GitHub. Un flusso di lavoro può avere più jobs eseguiti in parallelo.

Runner

I runner sono processi su un server che eseguono il flusso di lavoro quando viene attivato. Ogni runner è responsabile dell’esecuzione di un determinato lavoro. I runner sono ospitati nel cloud ma possono anche essere ospitati autonomamente in ambienti cloud personalizzati.

Actions

Le azioni sono attività individuali: sono chiamate all’interno di un workload e vengono utilizzate per eseguire attività complesse che puoi richiamare più volte.

Alcuni esempi di azioni sono: pubblicazione di un pacchetto Python su PyPi, invio di un’e-mail di notifica, impostazione di Python su una versione specifica prima di eseguire uno script, ecc.

Puoi creare le tue azioni oppure puoi riutilizzare alcune azioni open source dal marketplace di Github e aggiungerle al tuo flusso di lavoro direttamente quando soddisfano le tue esigenze.

Quanto descritto finora è riassumibile nella seguente immagine:

Scopo

L’obiettivo dell’aggiunta di Github Actions è fondamentalmente quello di automatizzare le attività che vorresti fossero eseguite ripetutamente ad ogni specifico evento.

Facciamo un esempio qui: immagina che ogni volta che committi un nuovo pezzo di codice sul tuo repository, ti piacerebbe eseguire una serie di unit test su di esso attraverso una macchina Ubuntu che ha una configurazione specifica.

Come fare?

Un’opzione è quella di eseguire il push del codice su GitHub, connettersi al server dove vuoi eseguire i test, aggiornare il codice, eseguire i test e attendere l’output finale. Inutile dire che è un processo noioso e lungo.

Grazie alla creazione di una GitHub Action, è sufficiente creare un workload che venga eseguito ad ogni push e che esegua la stessa serie di azioni descritta poco fa: avviare un server, fare il checkout del codice, eseguire una serie di unit test e mostrare i risultati in una console.

Come funziona

Ogni flusso di lavoro è definito in un file YAML all’interno della cartella workflows nel repository.

Un esempio estremamente semplice è il seguente: ad ogni push sul repository (sezione on) nel branch chiamato main, esegui un job (sezione jobs) chiamato print_hello e utilizza un runner basato su Ubuntu (sezione runs-on) per stampare “Hello world” nella console (sezione steps):

on:
  push:
    branches:
      - main

jobs:
  print_hello:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Hello World!"

Questo esempio è volutamente molto semplice ma dovrebbe dare un’idea delle infinite possibilità offerte da Github Actions: infatti, qualsiasi sequenza di comandi che avvieresti manualmente su una macchina virtuale remota può essere avviata all’interno di un workload: questo può essere una serie di unit test, una serie di fasi di compilazione Docker, una distribuzione di un’API, ecc.

In sintesi, qualsiasi cosa tu possa immaginare di fare, può essere attivata e automatizzata per l’esecuzione tramite una GitHub Action.

Puoi saperne di più sulla sintassi tramite la documentazione presente qui, ma ecco alcune istruzioni fondamentali:

  • on : l’evento che attiva il workload
  • runs-on : la macchina che ogni lavoro dovrebbe eseguire (ad esempio ubuntu-latest)
  • jobs: l’elenco delle attività che compongono il flusso di lavoro
  • steps: la serie di attività che vengono eseguite all’interno di ogni job
  • run : il comando che viene eseguito

Risorse utili

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Codemotion
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls
Logo di Improove
Logo del libro open source
Logo di NgRome
Logo de La Locanda del Tech
Logo di Tomorrow Devs
Logo di Coderful

Non perderti gli ultimi aggiornamenti, iscriviti a TheRedCode Digest!

La tecnologia corre, e tu devi correre più veloce per rimanere sempre sul pezzo! 🚀

Riceverai una volta al mese (o anche meno) con codici sconto per partecipare agli eventi del settore, quiz per vincere dei gadget e i recap degli articoli più interessanti pubblicati sul blog

Ci sto!

#TheRedComics

Edizione di Ottobre

A cura di Sophie Aiello, copy di Chiara Romano

Fumetto di agosto di Sophie Aiello

Vuoi diventare #tech content creator? 🖊️

Se vuoi raccontare la tua sul mondo #tech con dei post a tema o vuoi condividere la tua esperienza con la community, sei nel posto giusto! 😉

Manda una mail a collaborazioni[at]theredcode.it con la tua proposta e diventa la prossima penna del blog!

Ma sì, facciamolo!