Foglio di riferimento per GitHub Actions - Struttura standard e elenco delle azioni più utili

Una breve panoramica su GitHub Actions comuni e la loro struttura.

Indice

GitHub Actions è una piattaforma di automazione e CI/CD all’interno di GitHub, utilizzata per costruire, testare e distribuire il tuo codice in base a eventi come push, richieste di pull o su un orario predefinito.

Oltre all’utilizzo standard di GitHub, puoi utilizzare GitHub Actions anche in un server Gitea self-hosted.

github actions flow

Questo riepilogo copre la struttura di GitHub Actions, una breve descrizione e le azioni più comuni utilizzate nei flussi di lavoro open source e commerciali. Le azioni coprono strumenti ufficiali, della comunità e di terze parti, supportando l’automazione da costruzioni e test alla distribuzione, gestione delle release, QA e notifiche.

Struttura di Configurazione Base

I workflow di GitHub Actions sono definiti in file YAML situati nella directory .github/workflows all’interno del repository.

name: Nome del Workflow
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Configura Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - name: Esegui test
        run: npm test
  • Il blocco on specifica gli eventi di attivazione.
  • Ogni job viene eseguito su un proprio runner.
  • steps possono eseguire comandi shell o chiamare azioni riutilizzabili.

Componenti Principali del Workflow

Componente Descrizione
Workflow Processo automatizzato (YAML) attivato da un evento
Evento Attività che attiva il workflow (push, pull_request, ecc.)
Job Serie di passaggi eseguiti su un runner, possono essere eseguiti sequenzialmente o in parallelo
Step Ogni comando o azione in un job
Runner VM o container dove vengono eseguiti i job
Azione Estensione o add-on riutilizzabile che incapsula un compito

Eventi di Attivazione

  • push
  • pull_request
  • schedule (utilizzando la sintassi cron)
  • workflow_dispatch (attivazione manuale, consente parametri di input)
  • release, issue, ecc.

Esempio:

on:
  push:
    branches: [ main ]
  workflow_dispatch:
    inputs:
      environment:
        description: 'Ambiente di distribuzione'
        required: true
        default: 'production'
        type: string

Azioni Utili Predefinite

Azione Scopo Parametri Comuni
actions/checkout Controlla il codice del repository ref, token, submodules, persist-credentials
actions/setup-node Configura l’ambiente Node.js node-version, cache, architecture, check-latest
actions/setup-python Configura Python python-version, architecture
actions/cache Caching delle dipendenze path, key, restore-keys
docker/build-push-action Costruisci e pusha immagini Docker context, file, platforms, tags, push, build-args
actions/upload-artifact Carica artefatti di build name, path, if-no-files-found
actions/download-artifact Scarica artefatti name, path
github/email-actions Invia notifiche email to, subject, content, attachments
peter-evans/create-pull-request Crea PRs tramite workflow branch, title, body, labels, base
actions/github-script Esegui JavaScript arbitrario nel tuo workflow script, github-token

Parametri delle Azioni

Parametri Generali per qualsiasi Chiamata di Azione:

- name: Alcuna Azione o Passo
  uses: owner/repo@ref
  with:
    param1: valore
    param2: valore
  env:
    ENV_VAR: valore
  if: ${{ condizione }}
  run: comando_da_eseguire
  shell: bash|pwsh|python|sh
  continue-on-error: true|false
  • with: argomenti passati all’azione (vedi la documentazione dell’azione per tutte le opzioni)
  • env: variabili ambiente per il passo
  • if: esecuzione condizionale
  • run: comandi shell (se non si utilizza un’azione)
  • shell: shell utilizzata per eseguire il passo
  • continue-on-error: procedi anche se il passo fallisce

Definizione di Input Personalizzati per un’Azioni

Nella metadata dell’azione (action.yml):

inputs:
  example-input:
    description: 'Un esempio di input'
    required: false
    default: 'default-value'

Quando utilizzato in un workflow:

- uses: my/action@v1
  with:
    example-input: 'custom-value'

Accessibile come variabile ambiente INPUT_EXAMPLE_INPUT quando l’azione viene eseguita.

Esempio: Workflow con Parametri Manuali

name: Deploy
on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Ambiente di distribuzione'
        required: true
        default: 'production'
        type: string
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout del codice
        uses: actions/checkout@v4
      - name: Distribuisci nell'ambiente
        run: echo "Distribuendo a ${{ github.event.inputs.environment }}"

Mercato delle Azioni

  • Disponibili migliaia di azioni riutilizzabili nel GitHub Marketplace.
  • Le categorie includono: distribuzioni cloud, strumenti di notifica, framework di test, analisi del codice, e molto altro.
  • Esplora: actions/checkout, actions/setup-node, docker/build-push-action, actions/cache, actions/upload-artifact, e molti altri.

Consigli Veloci

  • Posiziona i file del workflow in .github/workflows.
  • Utilizza workflow_dispatch con inputs per esecuzioni manuali e parametrizzate.
  • Utilizza l’azione cache per velocizzare l’installazione delle dipendenze.
  • Utilizza la matrice job per testare diverse versioni di OS/running.
  • Utilizza i segreti per dati sensibili, riferiti come ${{ secrets.SECRET_NAME }}.

Questo riferimento copre gli elementi essenziali per utilizzare, configurare e estendere GitHub Actions per l’automazione, CI/CD e altro. Per maggiori dettagli e aggiornamenti, controlla sempre la documentazione ufficiale di GitHub e i repository delle azioni.

Azioni GitHub Comuni

Ecco un elenco pratico di azioni GitHub frequentemente utilizzate che aiutano ad automatizzare CI/CD, test, costruzione, distribuzione e compiti di workflow:

Azioni Ufficiali Principali

Azione Scopo Parametri Chiave
actions/checkout Controlla il codice del repository ref, submodules
actions/setup-node Configura l’ambiente Node.js node-version, cache
actions/setup-python Configura l’ambiente Python python-version
actions/setup-java Configura il JDK Java distribution, java-version
actions/cache Caching delle dipendenze e output di build path, key, restore-keys
actions/upload-artifact Carica artefatti di build name, path
actions/download-artifact Scarica artefatti da un workflow name, path
actions/github-script Esegui JavaScript utilizzando il contesto GitHub e API script
actions/create-release Crea un rilascio GitHub tag_name, release_name
actions/upload-release-asset Carica asset a un rilascio upload_url, asset_path
actions/labeler Applica automaticamente etichette a issue/PR repo-token, configuration-path

Azioni della Comunità e di Terze Parti Popolari

Azione Scopo
docker/build-push-action Costruisci e pusha immagini Docker
actions/setup-go Configura l’ambiente Go
super-linter/super-linter Lint automatico del codice universale
trufflesecurity/trufflehog Scansiona segreti e credenziali
peaceiris/actions-gh-pages Distribuisci siti statici a GitHub Pages
JamesIves/github-pages-deploy-action Distribuisci progetti a GitHub Pages
peter-evans/create-pull-request Crea richieste di pull automaticamente
softprops/action-gh-release Crea e carica rilasci GitHub
ad-m/github-push-action Pusha modifiche indietro al repository GitHub
actions/setup-dotnet Configura il .NET SDK
azure/login Autenticati ad Azure
google-github-actions/auth Autenticati a Google Cloud

Azioni per Test, QA e Reporting

Azione Scopo
actions/setup-ruby Configura l’ambiente Ruby
codecov/codecov-action Carica report di copertura del codice a Codecov
coverallsapp/github-action Carica i risultati della copertura a Coveralls
dorny/test-reporter Collega i risultati dei test a GitHub Checks
stefanzweifel/git-auto-commit-action Auto-committa e pusha modifiche ai file

Azioni per Distribuzione e Notifica

Azione Scopo
appleboy/scp-action Carica file utilizzando SCP
SamKirkland/FTP-Deploy-Action Distribuisci file tramite FTP/FTPS
cypress-io/github-action Esegui test end-to-end con Cypress
slackapi/slack-github-action Invia messaggi a Slack
dawidd6/action-send-mail Invia email durante l’esecuzione del workflow

Azioni di Utilità e Gestione dei Workflow

Azione Scopo
peter-evans/repository-dispatch Triggera workflow in repository esterne
fregante/setup-git-user Imposta le credenziali Git per i commit
andymckay/labeler Etichetta issue e PR in base ai percorsi
actions/configure-pages Configura la pubblicazione su GitHub Pages
EndBug/add-and-commit Aggiungi e committa file all’interno di un workflow
dangoslen/changelog-enforcer Verifica se un changelog è stato aggiornato per le PRs

Come Trovare di Più

Esistono molte azioni di GitHub che abilitano l’automazione dei workflow come i test automatici, la distribuzione in produzione, le notifiche e le integrazioni con altri servizi. Il GitHub Marketplace elencano migliaia di azioni in categorie come test, sicurezza, distribuzione, notifiche, qualità del codice e integrazioni. Elenco curati come “Awesome Actions” sono anche ottimi per ispirazione e scoperta.