11import { BuildExtension } from "@trigger.dev/core/v3/build" ;
22import { syncEnvVars } from "../core.js" ;
33
4+ type EnvVar = { name : string ; value : string ; gitBranch ?: string } ;
5+
46export function syncVercelEnvVars ( options ?: {
57 projectId ?: string ;
68 vercelAccessToken ?: string ;
@@ -57,7 +59,7 @@ export function syncVercelEnvVars(options?: {
5759 }
5860 const params = new URLSearchParams ( { decrypt : "true" } ) ;
5961 if ( vercelTeamId ) params . set ( "teamId" , vercelTeamId ) ;
60- if ( branch ) params . set ( "gitBranch " , branch ) ;
62+ params . set ( "target " , vercelEnvironment ) ;
6163 const vercelApiUrl = `https://api.vercel.com/v8/projects/${ projectId } /env?${ params } ` ;
6264
6365 try {
@@ -73,17 +75,37 @@ export function syncVercelEnvVars(options?: {
7375
7476 const data = await response . json ( ) ;
7577
76- const filteredEnvs = data . envs
78+ const filteredEnvs : EnvVar [ ] = data . envs
7779 . filter (
7880 ( env : { type : string ; value : string ; target : string [ ] } ) =>
7981 env . value && env . target . includes ( vercelEnvironment )
8082 )
81- . map ( ( env : { key : string ; value : string } ) => ( {
83+ . map ( ( env : { key : string ; value : string ; gitBranch ?: string } ) => ( {
8284 name : env . key ,
8385 value : env . value ,
86+ gitBranch : env . gitBranch ,
8487 } ) ) ;
8588
86- return filteredEnvs ;
89+ let envMap : Map < string , EnvVar > = new Map ( ) ;
90+
91+ // if there's a branch we want to prefer branch values over base values
92+ if ( branch ) {
93+ for ( const env of filteredEnvs ) {
94+ if ( ! envMap . has ( env . name ) ) {
95+ envMap . set ( env . name , env ) ;
96+ continue ;
97+ }
98+
99+ //if there's a gitBranch we want to override any previous value
100+ if ( env . gitBranch === branch ) {
101+ envMap . set ( env . name , env ) ;
102+ }
103+ }
104+ } else {
105+ envMap = new Map ( filteredEnvs . map ( ( env ) => [ env . name , env ] ) ) ;
106+ }
107+
108+ return Array . from ( envMap . values ( ) ) ;
87109 } catch ( error ) {
88110 console . error ( "Error fetching or processing Vercel environment variables:" , error ) ;
89111 throw error ; // Re-throw the error to be handled by the caller
0 commit comments