11import { BuildContext , BuildExtension } from "@trigger.dev/core/v3/build" ;
22
3- export type SyncEnvVarsBody = Record < string , string > | Array < { name : string ; value : string } > ;
3+ export type SyncEnvVarsBody =
4+ | Record < string , string >
5+ | Array < { name : string ; value : string ; isParentEnv ?: boolean } > ;
46
57export type SyncEnvVarsResult =
68 | SyncEnvVarsBody
@@ -96,24 +98,11 @@ export function syncEnvVars(fn: SyncEnvVarsFunction, options?: SyncEnvVarsOption
9698 return ;
9799 }
98100
99- const env = Object . entries ( result ) . reduce (
100- ( acc , [ key , value ] ) => {
101- if ( UNSYNCABLE_ENV_VARS . includes ( key ) ) {
102- return acc ;
103- }
104-
105- // Strip out any TRIGGER_ prefix env vars
106- if ( UNSYNCABLE_ENV_VARS_PREFIXES . some ( ( prefix ) => key . startsWith ( prefix ) ) ) {
107- return acc ;
108- }
101+ const env = stripUnsyncableEnvVars ( result . env ) ;
102+ const parentEnv = result . parentEnv ? stripUnsyncableEnvVars ( result . parentEnv ) : undefined ;
109103
110- acc [ key ] = value ;
111- return acc ;
112- } ,
113- { } as Record < string , string >
114- ) ;
115-
116- const numberOfEnvVars = Object . keys ( env ) . length ;
104+ const numberOfEnvVars =
105+ Object . keys ( env ) . length + ( parentEnv ? Object . keys ( parentEnv ) . length : 0 ) ;
117106
118107 if ( numberOfEnvVars === 0 ) {
119108 $spinner . stop ( "No env vars detected" ) ;
@@ -125,26 +114,54 @@ export function syncEnvVars(fn: SyncEnvVarsFunction, options?: SyncEnvVarsOption
125114 $spinner . stop ( `Found ${ numberOfEnvVars } env vars to sync` ) ;
126115 }
127116
117+ context . logger . debug ( "syncEnvVars" , {
118+ env,
119+ parentEnv,
120+ numberOfEnvVars,
121+ } ) ;
122+
128123 context . addLayer ( {
129124 id : "sync-env-vars" ,
130125 deploy : {
131126 env,
127+ parentEnv,
132128 override : options ?. override ?? true ,
133129 } ,
134130 } ) ;
135131 } ,
136132 } ;
137133}
138134
135+ function stripUnsyncableEnvVars ( env : Record < string , string > ) : Record < string , string > {
136+ return Object . entries ( env ) . reduce (
137+ ( acc , [ key , value ] ) => {
138+ if ( UNSYNCABLE_ENV_VARS . includes ( key ) ) {
139+ return acc ;
140+ }
141+
142+ // Strip out any TRIGGER_ prefix env vars
143+ if ( UNSYNCABLE_ENV_VARS_PREFIXES . some ( ( prefix ) => key . startsWith ( prefix ) ) ) {
144+ return acc ;
145+ }
146+
147+ acc [ key ] = value ;
148+ return acc ;
149+ } ,
150+ { } as Record < string , string >
151+ ) ;
152+ }
153+
139154async function callSyncEnvVarsFn (
140155 syncEnvVarsFn : SyncEnvVarsFunction | undefined ,
141156 env : Record < string , string > ,
142157 environment : string ,
143158 branch : string | undefined ,
144159 context : BuildContext
145- ) : Promise < Record < string , string > | undefined > {
160+ ) : Promise < { env : Record < string , string > ; parentEnv ?: Record < string , string > } | undefined > {
146161 if ( syncEnvVarsFn && typeof syncEnvVarsFn === "function" ) {
147- let resolvedEnvVars : Record < string , string > = { } ;
162+ let resolvedEnvVars : { env : Record < string , string > ; parentEnv ?: Record < string , string > } = {
163+ env : { } ,
164+ } ;
148165 let result ;
149166
150167 try {
@@ -172,11 +189,18 @@ async function callSyncEnvVarsFn(
172189 typeof item . name === "string" &&
173190 typeof item . value === "string"
174191 ) {
175- resolvedEnvVars [ item . name ] = item . value ;
192+ if ( item . isParentEnv ) {
193+ if ( ! resolvedEnvVars . parentEnv ) {
194+ resolvedEnvVars . parentEnv = { } ;
195+ }
196+ resolvedEnvVars . parentEnv [ item . name ] = item . value ;
197+ } else {
198+ resolvedEnvVars . env [ item . name ] = item . value ;
199+ }
176200 }
177201 }
178202 } else if ( result ) {
179- resolvedEnvVars = result ;
203+ resolvedEnvVars . env = result ;
180204 }
181205
182206 return resolvedEnvVars ;
0 commit comments