Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.devin.ai/llms.txt

Use this file to discover all available pages before exploring further.

Invece di scrivere script shell per installare strumenti, puoi fare riferimento direttamente a GitHub Actions nelle sezioni initialize o maintenance del tuo blueprint. Devin scarica ed esegue l’action durante la snapshot build, proprio come i runner CI di GitHub eseguono i passaggi delle action. Questo è particolarmente utile per le action di configurazione dei linguaggi come setup-python, setup-node e setup-go, che gestiscono automaticamente la gestione delle versioni e la configurazione del PATH.

Sintassi

Aggiungi un passaggio uses a una qualsiasi sezione del tuo blueprint:
initialize:
  - name: Install Python 3.12
    uses: github.com/actions/setup-python@v5
    with:
      python-version: "3.12"
CampoTipoDescrizione
namestring (facoltativo)Etichetta leggibile dall’utente visualizzata nei log di build
usesstringRiferimento a una GitHub Action (vedi il formato qui sotto)
withmap (facoltativo)Parametri di input passati all’azione
envmap (facoltativo)Variabili d’ambiente aggiuntive per il passaggio
Un passaggio deve specificare run (un comando shell) oppure uses (un’azione), non entrambi.

Formato di riferimento per le azioni

github.com/<owner>/<repo>@<ref>
github.com/<owner>/<repo>/<subpath>@<ref>
Il prefisso github.com/ e il suffisso @<ref> sono entrambi obbligatori. Il ref è in genere un tag di versione come v5. Esempi:
RiferimentoA cosa corrisponde
github.com/actions/setup-python@v5actions/setup-python al tag v5
github.com/actions/setup-node@v4actions/setup-node al tag v4
github.com/gradle/actions/setup-gradle@v4repo gradle/actions, sottodirectory setup-gradle, tag v4

Passare input

Usa il campo with per passare input alla action. Tutti i valori vengono trattati come stringhe, in linea con il comportamento di GitHub Actions:
initialize:
  - uses: github.com/actions/setup-java@v4
    with:
      java-version: "21"
      distribution: "temurin"
Racchiudi sempre tra virgolette i numeri di versione nei valori with. YAML interpreta 3.10 senza virgolette come il numero in virgola mobile 3.1, che non è ciò che vuoi. Scrivi invece python-version: "3.10".

Impostare le variabili d’ambiente

Usa il campo env per impostare variabili d’ambiente nell’ambito di un singolo passaggio della action:
initialize:
  - uses: github.com/actions/setup-node@v4
    with:
      node-version: "20"
    env:
      RUNNER_DEBUG: "1"
Le variabili d’ambiente impostate da una action (tramite GITHUB_ENV o GITHUB_PATH) vengono propagate automaticamente ai passaggi successivi del blueprint.

Esempi

Progetto Python con una versione specifica

initialize:
  - name: Install Python 3.12
    uses: github.com/actions/setup-python@v5
    with:
      python-version: "3.12"

maintenance: |
  pip install -r requirements.txt

knowledge:
  - name: test
    contents: pytest

Progetto multilingue

initialize:
  - name: Install Node.js
    uses: github.com/actions/setup-node@v4
    with:
      node-version: "20"
  - name: Install Python
    uses: github.com/actions/setup-python@v5
    with:
      python-version: "3.12"
  - name: Install Go
    uses: github.com/actions/setup-go@v5
    with:
      go-version: "1.22"

Combinare azioni e comandi shell

Azioni e comandi shell possono essere combinati liberamente nella stessa sezione:
initialize:
  - name: Install Python
    uses: github.com/actions/setup-python@v5
    with:
      python-version: "3.12"
  - name: Install project tools
    run: pip install ruff pytest
  - name: Install Node.js
    uses: github.com/actions/setup-node@v4
    with:
      node-version: "20"
  - name: Install frontend deps
    run: npm install -g pnpm

Progetto Java con Gradle

initialize:
  - name: Install JDK 21
    uses: github.com/actions/setup-java@v4
    with:
      java-version: "21"
      distribution: "temurin"
  - name: Install Gradle
    uses: github.com/gradle/actions/setup-gradle@v4

maintenance: |
  ./gradlew dependencies

knowledge:
  - name: build
    contents: ./gradlew build
  - name: test
    contents: ./gradlew test

Actions vs. script shell

Non è necessario usare le actions: anche i semplici comandi shell funzionano benissimo. Le actions sono comode quando lo script shell equivalente sarebbe lungo o soggetto a errori.
initialize:
  - uses: github.com/actions/setup-go@v5
    with:
      go-version: "1.23"

Come funziona

Quando Devin incontra un passaggio uses durante una snapshot build:
  1. Scarica la repository della action (clone shallow del ref bloccato)
  2. Legge i metadati action.yml della action per determinare il runtime e i punti di ingresso
  3. Crea l’ambiente di esecuzione con le variabili INPUT_*, GITHUB_* e RUNNER_*
  4. Esegue il passaggio pre della action (se definito) e poi il punto di ingresso main
  5. Propaga gli effetti collaterali: tutte le voci scritte dalla action in GITHUB_PATH o GITHUB_ENV vengono applicate ai passaggi successivi del blueprint
Le action vengono eseguite al di fuori di un vero flusso di lavoro GitHub. Le variabili di contesto come github.repository vengono popolate con valori fittizi. Le action che richiedono accesso in tempo reale all’API di GitHub (ad es. commentare le pull request (PR) o creare release) non funzioneranno nei blueprint.

Limitazioni

  • Solo GitHub Actions Node.js — Sono supportate solo le GitHub Actions che usano un runtime Node.js (node16, node20, node24). Le action basate su Docker e quelle composite non sono supportate.
  • Nessun ciclo di vita post — Devin esegue i passaggi pre e main, ma salta i passaggi di pulizia post, poiché le build vengono eseguite in VM temporanee.
  • Contesto GitHub fittizio — Le action che dipendono da chiamate API di GitHub, dai dati degli eventi del flusso di lavoro o dal contesto del repository potrebbero non funzionare correttamente, perché questi valori sono segnaposto nell’ambiente di build.
  • Blocca le versioni — Fai sempre riferimento a un tag di versione specifico (ad es. @v5) anziché al nome di un branch, per ottenere build riproducibili.