Che cos'è GitHub Script?

Completato

In questa unità verrà illustrato come GitHub Script consente di automatizzare i processi GitHub comuni usando i flussi di lavoro di GitHub Actions.

Che cos'è GitHub Script?

GitHub Script è un'azione che fornisce un client octokit autenticato e consente di scrivere JavaScript direttamente in un file del flusso di lavoro. Viene eseguito in Node.js e si possono quindi sfruttare tutte le potenzialità di tale piattaforma quando si scrivono gli script.

Che cos'è octokit?

octokit è la raccolta ufficiale di client per l'API GitHub. Uno di questi client, rest.js, fornisce l'accesso JavaScript all'interfaccia REST di GitHub.

È sempre stato possibile automatizzare l'API GitHub tramite octokit/rest.js, ma configurarla e gestirla potrebbe essere difficile. Uno dei vantaggi principali dell'uso di GitHub Script è che gestisce tutto il sovraccarico consentendo di iniziare subito a usare l'API. Non è necessario preoccuparsi delle dipendenze, della configurazione e nemmeno dell'autenticazione.

Quali operazioni può eseguire octokit/rest.js?

La risposta breve è che è può eseguire praticamente qualsiasi operazione per quanto riguarda l'automazione di GitHub. Non si ha accesso solo ai commit, alle richieste pull e ai problemi, ma anche agli utenti, ai progetti e alle organizzazioni. È possibile recuperare elenchi di file di uso comune, ad esempio le licenze più popolari o i file .gitignore. È anche possibile eseguire il rendering di Markdown.

Se si sta sviluppando una funzionalità per integrare GitHub, è probabile che nella documentazione completa di octokit/rest.js sia disponibile quello che serve.

In che modo l'uso di GitHub Script è diverso da octokit/rest.js?

La differenza principale nell'utilizzo è che GitHub Script fornisce un client octokit/rest.js pre-autenticato denominato github.

Quindi invece di:

octokit.issues.createComment({

Si userà:

github.issues.createComment({

Oltre alla variabile github, vengono fornite anche le variabili seguenti:

Creazione di un flusso di lavoro che usa GitHub Script

Le azioni GitHub Script fanno parte di un flusso di lavoro come qualsiasi altra azione. Di conseguenza, è anche possibile combinarle con i flussi di lavoro esistenti, ad esempio quelli già configurati per CI/CD. Per illustrarne la praticità, si creerà ora un flusso di lavoro completo che usa GitHub Script per inviare automaticamente un commento a tutti i nuovi problemi creati.

Si inizierà con name e con una clausola on che specifica che questo flusso di lavoro viene eseguito quando vengono aperti i problemi.

name: Learning GitHub Script

on:
  issues:
    types: [opened]

Verrà poi definito un processo denominato comment eseguito in Linux con una serie di passaggi.

jobs:
  comment:
    runs-on: ubuntu-latest
    steps:

In questo caso, il passaggio è uno solo: l'azione GitHub Script.

      - uses: actions/github-script@0.8.0
        with:
          github-token: ${{secrets.GITHUB_TOKEN}}
          script: |
            github.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: "🎉 You've created this issue comment using GitHub Script!!!"
            })

L'uso di GitHub Actions può davvero aiutare ad automatizzare gli eventi che si verificano nei repository. Si supponga che un visitatore del repository abbia aperto un nuovo problema contenente informazioni su un bug critico. Si potrebbe volerlo ringraziare per averlo fatto notare; tuttavia, questa semplice attività può diventare eccessiva man mano che il repository attira sempre più visitatori. Automatizzando i commenti ai problemi, è possibile automatizzare il processo per ringraziare ogni volta i visitatori.

Uso di actions/github-script@0.8.0

L'azione actions/github-script@0.8.0, nota anche come GitHub Script, esegue tutte le operazioni complesse per l'integrazione con l'API GitHub.

Per questa azione è necessario github-token, che viene fornito in fase di esecuzione in modo che le richieste vengano autenticate. Questa operazione viene eseguita automaticamente, quindi è possibile usare il codice senza modificarlo.

Il parametro script può essere praticamente qualsiasi script JavaScript che usa il client octokit/rest/js archiviato in github. In questo caso, si tratta di una sola riga (divisa su più righe per una maggiore leggibilità) che crea un commento hardcoded.

Dopo l'esecuzione del flusso di lavoro, GitHub Script registra il codice eseguito per poterlo riesaminare nella scheda Actions (Azioni).

Screenshot of a completed workflow using GitHub Script.

Esecuzione da un file separato

In alcuni casi potrebbe essere necessario usare un codice significativo per completare lo scenario di GitHub Script. In tal caso, è possibile tenere lo script in un file separato e farvi riferimento dal flusso di lavoro invece di inserire tutto lo script inline.

Ecco un esempio di un semplice flusso di lavoro per ottenere questo risultato:

on: push

jobs:
  echo-input:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/github-script@v2
        with:
          script: |
            const path = require('path')
            const scriptPath = path.resolve('./path/to/script.js')
            console.log(require(scriptPath)({context}))

Vedere altri esempi di GitHub Script.