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.
Panoramica
Un blueprint comprende tre sezioni principali di primo livello, oltre ai campi facoltativiruns-on, shell e includes, a una sezione post-build per i blueprint a livello di organizzazione ed Enterprise e a una sezione clone 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
Usainitialize 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: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
Usamaintenance 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.
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 sezioneknowledge 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.
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:
runs-on
Il campo facoltativo di primo livelloruns-on accetta una stringa o un elenco di stringhe. Il valore predefinito è ["default"]. Le etichette default e linux sono alias che non distinguono tra maiuscole e minuscole per la piattaforma Linux predefinita. Qualsiasi altra etichetta deve corrispondere a una configurazione macchina registrata nel tuo account, ad esempio windows o macos.
Quando un blocco elenca più etichette di piattaforma, Devin crea una build dello snapshot per ogni piattaforma ed esegue gli stessi passaggi su ciascuna. Due blocchi nello stesso file non possono corrispondere alla stessa piattaforma; ciò include gli alias default e linux.
Per la configurazione specifica della piattaforma, consulta Supporto per Windows e Supporto per macOS.
shell
Il campo facoltativo di primo livelloshell specifica la shell con cui vengono eseguiti i passaggi run del blocco sulle macchine Windows. Si applica a tutti i passaggi run nelle sezioni initialize, maintenance e post-build del blocco.
I valori non fanno distinzione tra maiuscole e minuscole. Qualsiasi altro valore viene rifiutato con l’errore
shell: must be 'default', 'bash', or 'powershell'.
shell: powershell:
- I segreti, le variabili
enva livello di passaggio, le variabili scritte in$ENVRCdai passaggi precedenti e la directory di lavoro sono gli stessi dei passaggi bash. Leggi le variabili d’ambiente con la sintassi di PowerShell ($env:NAME). - Gli esempi di
$ENVRCtra passaggi sono pensati per i passaggi bash. In un passaggio PowerShell,$env:ENVRCcontiene il percorso del file in stile Git Bash (/c/...), quindi quegli esempi non funzionano così come sono; i passaggi che devono rendere disponibili le variabili ai passaggi successivi vanno inseriti in un blocco che usa la shell predefinita. - Usa percorsi Windows nativi (
C:\Users\...) anziché il formato Git Bash/c/.... - Un errore di PowerShell (ad esempio, un cmdlet che non riesce o un comando sconosciuto) interrompe il passaggio.
- Per gli eseguibili nativi, il risultato del passaggio dipende solo dal codice di uscita dell’ultimo eseguito dallo script. Verifica
$LASTEXITCODEdopo i comandi nativi precedenti il cui errore deve interrompere il passaggio. - I passaggi
uses(GitHub Actions) non sono interessati.
shell si imposta per singolo blocco, un blueprint multi-documento può usare shell: powershell nel documento Windows senza influire su quello Linux. In un blocco che elenca più piattaforme in runs-on, gli stessi corpi run vengono eseguiti in PowerShell su Windows e in bash su tutte le altre piattaforme, quindi devono essere validi in entrambe le shell.
includes
Il campo facoltativoincludes si applica solo ai blueprint supportati da Git: Devin lo interpreta quando rileva il file .devin/blueprint.yaml nella directory root di un repository. Viene ignorato nei blueprint creati nell’editor Settings e non è consentito in un blueprint del workspace incluso.
Accetta una stringa o un elenco di stringhe. Ogni voce identifica una sottodirectory del workspace; Devin cerca <dir>/.devin/blueprint.yaml, ma è valido anche il percorso completo del file. I percorsi non possono contenere ...
Le inclusioni annidate vengono rifiutate e ciascun percorso del workspace può comparire una sola volta. Se un file incluso non è presente, Devin considera quel workspace come rimosso.
post-build
La sezionepost-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ù repository 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 repository clonata e a ogni strumento installato dai blueprint di Enterprise, organizzazione e repository.
I passaggi
post-build usano gli stessi tipi di passaggio di initialize (comandi shell run e GitHub Actions uses) e vengono eseguiti dalla home directory (~).clone
Per i blueprint a livello di repo, la sezione facoltativaclone 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 repository viene clonato nello snapshot. Non ha alcun effetto nei blueprint a livello di organizzazione o blueprint a livello di Enterprise.Tipi di passaggi
Ogni passaggio ininitialize, maintenance o post-build usa uno di due tipi: comandi shell (run) o GitHub Actions (uses). I passaggi maintenance supportano solo run; vedi GitHub Actions.
Regole di abbreviazione e convalida
- Una sezione specificata come semplice stringa diventa un unico passaggio
run. - Un elemento di elenco specificato come semplice stringa diventa un passaggio
run. - Un passaggio deve definire
runoppureuses, ma non entrambi. - I passaggi
usesnon possono essere utilizzati inmaintenance. La build non va a buon fine con l’errore'uses' steps are not supported in maintenance sections. withè valido solo nei passaggiuses.- Tutti i valori di
withvengono convertiti in stringhe; racchiudi tra virgolette i valori numerici quando l’action prevede una stringa.
Regole per i documenti YAML
Ogni documento--- deve essere una mappatura YAML. Una sequenza al livello superiore viene rifiutata con each YAML document must be a mapping, not a sequence; use '---' to separate multiple blocks.
Comandi shell (run)
Esegui comandi shell personalizzati in bash oppure, su Windows, in Windows PowerShell quando il blocco imposta shell: powershell:
Dettagli di esecuzione:
- I comandi vengono eseguiti in bash (Git Bash su Windows). Se un comando in uno script su più righe non riesce, l’intero passaggio si interrompe immediatamente. Su Windows, per eseguire i comandi in Windows PowerShell, imposta il campo di primo livello
shellsupowershell. - 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 3 ore.
- I segreti sono automaticamente disponibili come variabili d’ambiente.
GitHub Actions (uses)
Esegui le GitHub Actions direttamente nella sezione initialize (o post-build) del tuo blueprint:
Formato del riferimento dell’azione:
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 le azioni Node.js (
node16, node20, node24) e le azioni composite. Le azioni Docker sono supportate solo nelle build Linux, non nelle build Windows. I passaggi di pulizia post vengono ignorati. Consulta le limitazioni di GitHub Actions.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.
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 campoenv:
Variabili d’ambiente tra i passaggi ($ENVRC)
Per rendere disponibili le variabili d’ambiente tra i vari passaggi, scrivile nel file $ENVRC:
$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:
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. Vengono rimossi dall’immagine snapshot stessa, quindi le credenziali non vengono mai incorporate nelle immagini macchina salvate. Al di fuori dei comandi dei blueprint, i segreti non vengono esportati in ogni shell; Devin li associa ai comandi specifici che ne hanno bisogno.
- 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: Disponibili come variabili d’ambiente nei passaggi e nei comandi del blueprint di quel repo. Configurali nella scheda Secrets dell’editor del blueprint del repository.
Segreti solo build: I segreti Enterprise possono essere contrassegnati come Build only quando li aggiungi nella scheda Secrets dell’editor del blueprint Enterprise. Questa opzione non è disponibile per i segreti dell’org o del repository. Un segreto solo build è disponibile unicamente per i passaggi dei blueprint Enterprise e dell’org durante le build snapshot. Viene rimosso prima che i repository vengano clonati, quindi i passaggi dei blueprint del repo e i passaggi
post-build non possono leggerlo, e non viene mai iniettato nelle sessioni Devin. Usalo per credenziali necessarie solo durante la configurazione Enterprise o dell’org (ad es. per scaricare artifact privati nell’initialize del blueprint Enterprise).File allegati
Puoi caricare file (comesettings.xml o altri 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:
FILE_.
I nomi dei file devono essere nomi semplici: non possono iniziare con un punto né contenere separatori di percorso, spazi o caratteri di controllo. Per usare un dotfile come .npmrc, caricalo con un nome senza il punto iniziale (per esempio, npmrc) e copialo nella posizione corretta in un passaggio del blueprint.
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.

