Skip to main content
Questo è il riferimento completo ai campi dei blueprint. Per un’introduzione ai blueprint e a come si inseriscono nell’ambiente di Devin, consulta Configurazione dichiarativa dell’ambiente.
Un blueprint definisce come viene configurato l’ambiente di Devin: quali strumenti installare, come mantenere aggiornate le dipendenze e quali comandi Devin deve conoscere.

Panoramica

Un blueprint comprende tre sezioni principali di primo livello, oltre a una sezione post-build per i blueprint a livello di org ed enterprise e a una sezione clone facoltativa per i blueprint a livello di repo:
Tutte le sezioni sono facoltative. Puoi includerne qualsiasi combinazione. initialize viene eseguito durante le build complete e per i workspace ricostruiti da zero. I risultati vengono salvati nello snapshot. In una build differenziale, i workspace ereditati saltano initialize, recuperano il codice più recente ed eseguono solo maintenance. Scrivi maintenance in modo che sia autosufficiente e possa essere eseguito in modo indipendente sullo snapshot esistente, senza richiedere che initialize venga eseguito immediatamente prima né fare affidamento sulle variabili d’ambiente che initialize ha precedentemente scritto in $ENVRC. All’inizio di ogni sessione, i comandi di maintenance non vengono eseguiti automaticamente — vengono invece presentati all’agente come contesto, così sa quali comandi per le dipendenze eseguire se necessario (ad es. dopo aver aggiornato il codice all’ultima versione). I comandi devono comunque essere rapidi e incrementali. Le build vengono eseguite automaticamente quando il tuo blueprint cambia e periodicamente (circa ogni 24 ore).

initialize

Usa initialize per installare strumenti e runtime che non dipendono dallo stato specifico del tuo codice: runtime dei linguaggi, pacchetti di sistema, CLI globali.

Forma semplice

Per i comandi shell più semplici, usa uno scalare a blocco:

Formato strutturato

Per i passaggi denominati, le variabili d’ambiente o le GitHub Actions, usa un elenco:
Le due forme possono essere combinate. La forma semplice equivale a un unico passaggio con run.

Quando usare initialize anziché maintenance

Entrambe le sezioni vengono eseguite durante le build complete. Nelle build differenziali, i workspace ereditati saltano initialize ed eseguono solo maintenance dopo aver scaricato il codice più recente. Strumenti e runtime vanno in initialize; i comandi per le dipendenze che si basano sui file di lock del codice vanno in maintenance.

maintenance

Usa maintenance per installare le dipendenze e per altri comandi che devono essere eseguiti dopo il clone del codice. Questi comandi vengono eseguiti durante le build e vengono esposti all’agente all’inizio della sessione, così che possa eseguirli di nuovo se le dipendenze sono cambiate. Qui vanno npm install, pip install, uv sync e comandi simili.
Oppure in formato strutturato:
Per i blueprint a livello di repo, i comandi maintenance vengono eseguiti dalla directory radice del repository. Per i blueprint a livello di org, vengono eseguiti dalla home directory (~).

knowledge

La sezione knowledge non viene eseguita. Fornisce informazioni di riferimento che Devin utilizza quando lavora nel tuo progetto. È qui che indichi a Devin i comandi corretti per il linting, il testing, la build e qualsiasi altro flusso di lavoro specifico del progetto.
Ogni elemento di conoscenza include: Il campo name è un’etichetta. Per convenzione, lint, test e build sono i nomi standard. Devin fa riferimento a questi nomi quando verifica il proprio lavoro. Puoi aggiungere altri elementi di conoscenza con nomi personalizzati:

post-build

La sezione post-build è disponibile solo nei blueprint a livello di organizzazione e di Enterprise (non è supportata nei blueprint a livello di repo). I suoi passaggi vengono eseguiti durante la build dopo che tutti i repository sono stati clonati e che i relativi passaggi initialize e maintenance sono stati completati, ma prima del controllo di integrità e della creazione dell’immagine snapshot. Questo la rende il punto ideale per la convalida tra più repo e per i controlli di integrità che richiedono un ambiente completamente configurato. Poiché viene eseguito nelle fasi finali della build, con l’intero ambiente già pronto, un passaggio post-build può accedere a ogni repo clonata e a ogni strumento installato dai blueprint di Enterprise, org e repo.
Oppure in forma strutturata:
I passaggi post-build fanno fallire la build se restituiscono un codice di uscita diverso da zero. Se un passaggio post-build termina con un codice diverso da zero, la build viene segnata come non riuscita e non viene prodotta alcuna immagine snapshot. Usali per vincolare gli snapshot ai controlli di integrità, ma assicurati che i comandi siano affidabili, così un controllo intermittente non bloccherà le build.
I passaggi post-build usano gli stessi tipi di passaggio di initialize e maintenance (comandi shell run e GitHub Actions uses) e vengono eseguiti dalla home directory (~).

clone

Per i blueprint a livello di repo, la sezione facoltativa clone sovrascrive i valori predefiniti usati quando Devin clona il repository nello snapshot. Ogni campo è facoltativo e, se non specificato, usa un valore predefinito appropriato che preserva il comportamento corrente.
clone si applica solo ai blueprint a livello di repo: controlla come quello specifico repo viene clonato nello snapshot. Non ha alcun effetto nei blueprint a livello di org o enterprise-level.

Tipi di passaggi

Ogni passaggio in initialize, maintenance o post-build usa uno di due tipi: comandi shell (run) o GitHub Actions (uses).

Comandi shell (run)

Esegui comandi shell personalizzati in bash:
Dettagli di esecuzione:
  • I comandi vengono eseguiti in bash. Se un comando in uno script su più righe non riesce, l’intero passaggio si interrompe immediatamente.
  • I blueprint a livello di org vengono eseguiti nella directory home (~).
  • I blueprint a livello di repo vengono eseguiti nella directory radice del repository clonato.
  • Ogni passaggio ha un timeout di 1 ora.
  • I secret sono automaticamente disponibili come variabili d’ambiente.

GitHub Actions (uses)

Esegui direttamente nel tuo blueprint le GitHub Actions basate su Node.js:
Formato del riferimento dell’azione:
Il prefisso github.com/ e il suffisso @<ref> sono entrambi obbligatori. Il ref è in genere un tag di versione come v5. Azioni di uso comune:
Sono supportate solo le GitHub Actions basate su Node.js. Le azioni composite e quelle basate su Docker non sono supportate.
Come funzionano i valori di with: I valori passati tramite with vengono forniti all’azione come input, seguendo le stesse convenzioni dei flussi di lavoro di GitHub Actions. Tutti i valori vengono convertiti in stringhe.
Come le azioni propagano le modifiche: Le azioni possono modificare l’ambiente per i passaggi successivi. Ad esempio, setup-python aggiunge l’eseguibile di Python a PATH, che rimane disponibile in tutti i passaggi successivi e in maintenance.

run vs uses: quale usare

In pratica, nella maggior parte delle configurazioni si usa uses per i runtime dei linguaggi e run per tutto il resto.

Variabili d’ambiente e segreti

Variabili d’ambiente a livello di singolo passaggio

Qualsiasi passaggio può definire variabili d’ambiente aggiuntive tramite il campo env:
Queste sono limitate a questo passaggio e non persistono nei passaggi successivi.

Variabili d’ambiente tra i passaggi ($ENVRC)

Per rendere disponibili le variabili d’ambiente tra i vari passaggi, scrivile nel file $ENVRC:
Le variabili scritte in $ENVRC vengono esportate automaticamente e sono disponibili in tutti i passaggi successivi e nella sessione di Devin prodotta dalla build corrente. Funziona in modo analogo a $GITHUB_ENV in GitHub Actions. Questo vale anche per PATH. Se installi uno strumento in una directory non standard (qualsiasi directory al di fuori di /usr/bin o /usr/local/bin), aggiungila a $ENVRC in modo che i passaggi successivi e i blueprint a livello di repo possano trovare il binario:
Un semplice export PATH=... all’interno di un blocco run: ha effetto solo sulla shell di quel passaggio. Ogni passaggio avvia un nuovo processo shell, quindi le modifiche a PATH che non vengono scritte in $ENVRC vanno perse.
Le azioni uses: (ad es. actions/setup-node) propagano automaticamente le aggiunte a PATH in $ENVRC — devi farlo manualmente solo per i passaggi run:.
$ENVRC viene reimpostato all’inizio di ogni build, incluse le build differenziali. I valori scritti durante una build non sono disponibili nella build successiva. In particolare, un workspace ereditato esegue solo maintenance, quindi non può fare affidamento su PATH o su altre variabili che initialize ha scritto in $ENVRC nella build di origine. Configura qualsiasi ambiente richiesto da maintenance all’interno di maintenance stessa.

Segreti

I segreti configurati nell’interfaccia di Devin (tramite la scheda Secrets in ogni editor di blueprint) vengono iniettati automaticamente come variabili d’ambiente. Non devi dichiararli nel blueprint. Ti basta richiamarli per nome (ad es. $MY_SECRET). I segreti vengono iniettati prima dell’esecuzione di ogni passaggio durante le build e nuovamente all’inizio di ogni sessione. Vengono rimossi dall’immagine snapshot stessa, quindi le credenziali non vengono mai incorporate nelle immagini macchina salvate.
  • Segreti dell’organizzazione: Disponibili come variabili d’ambiente in ogni passaggio di tutti i blueprint dell’org. Impostali nella scheda Secrets dell’editor del blueprint per tutta l’org.
  • Segreti Enterprise: Uniti ai segreti dell’org (i segreti dell’org hanno la precedenza in caso di conflitto di nomi). Disponibili in tutte le org dell’Enterprise.
  • Segreti del repository: Scritti in un file dedicato per repo in /run/repo_secrets/{owner/repo}/.env.secrets. Durante le build, i segreti del repo vengono caricati automaticamente prima dell’esecuzione dei passaggi del blueprint di quel repo. Durante la sessione, Devin li carica quando lavora nel repo. Configurali nella scheda Secrets dell’editor del blueprint del repository.
Segreti solo build: I segreti contrassegnati come “build only” sono disponibili durante le build snapshot, ma vengono rimossi prima che lo snapshot venga salvato. Usali per credenziali necessarie solo in fase di build (ad es. per scaricare artifact privati durante initialize).
maintenance viene eseguito durante le build. All’inizio della sessione, i comandi maintenance vengono esposti all’agente (non eseguiti automaticamente), quindi l’agente può eseguirli di nuovo se necessario. Se un passaggio maintenance scrive segreti nei file di configurazione (ad es. ~/.m2/settings.xml, ~/.npmrc), questi file verranno incorporati nello snapshot. Inserisci i passaggi che scrivono credenziali in maintenance (non in initialize) in modo che vengano aggiornati durante le build periodiche, ma tieni presente che i file generati restano nell’immagine. Per la massima sicurezza, usa variabili d’ambiente o $ENVRC invece di scrivere le credenziali su disco.

File allegati

Puoi caricare file (come .npmrc, settings.xml e file di configurazione) tramite l’editor dei blueprint. I file caricati vengono salvati in ~/.files/ e viene impostata una variabile d’ambiente che punta al percorso di ciascun file:
Il nome della variabile deriva dal nome del file: in maiuscolo, con i caratteri non alfanumerici sostituiti da trattini bassi e con il prefisso FILE_. Usa file allegati nei passaggi del blueprint:

Blueprint basati su Git

Puoi archiviare i blueprint come file .devin/blueprint.yaml direttamente nel tuo repository e poi sincronizzarli tramite l’API o la UI. Consulta Git-backed blueprints per le istruzioni di configurazione e i dettagli.

Esempio completo

Per capire come i blueprint si compongono nei vari livelli (enterprise → org → repo), gli stati delle build, gli stati del repository e cosa attiva una nuova build, consulta Build e sessioni nella pagina della configurazione dichiarativa.

Blueprint per tutta l’org

Strumenti condivisi necessari a ogni repo dell’org. Viene eseguito per primo (dopo eventuali blueprint Enterprise), nella directory home.

Blueprint a livello di repo

Configurazione specifica del progetto per un monorepo Node.js + Python. Viene eseguito dopo il blueprint per tutta l’org, nella directory del repository.