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- }
101+ const env = stripUnsyncableEnvVars ( result . env ) ;
102+ const parentEnv = result . parentEnv ? stripUnsyncableEnvVars ( result . parentEnv ) : undefined ;
104103
105- // Strip out any TRIGGER_ prefix env vars
106- if ( UNSYNCABLE_ENV_VARS_PREFIXES . some ( ( prefix ) => key . startsWith ( prefix ) ) ) {
107- return acc ;
108- }
109-
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" ) ;
@@ -129,22 +118,44 @@ export function syncEnvVars(fn: SyncEnvVarsFunction, options?: SyncEnvVarsOption
129118 id : "sync-env-vars" ,
130119 deploy : {
131120 env,
121+ parentEnv,
132122 override : options ?. override ?? true ,
133123 } ,
134124 } ) ;
135125 } ,
136126 } ;
137127}
138128
129+ function stripUnsyncableEnvVars ( env : Record < string , string > ) : Record < string , string > {
130+ return Object . entries ( env ) . reduce (
131+ ( acc , [ key , value ] ) => {
132+ if ( UNSYNCABLE_ENV_VARS . includes ( key ) ) {
133+ return acc ;
134+ }
135+
136+ // Strip out any TRIGGER_ prefix env vars
137+ if ( UNSYNCABLE_ENV_VARS_PREFIXES . some ( ( prefix ) => key . startsWith ( prefix ) ) ) {
138+ return acc ;
139+ }
140+
141+ acc [ key ] = value ;
142+ return acc ;
143+ } ,
144+ { } as Record < string , string >
145+ ) ;
146+ }
147+
139148async function callSyncEnvVarsFn (
140149 syncEnvVarsFn : SyncEnvVarsFunction | undefined ,
141150 env : Record < string , string > ,
142151 environment : string ,
143152 branch : string | undefined ,
144153 context : BuildContext
145- ) : Promise < Record < string , string > | undefined > {
154+ ) : Promise < { env : Record < string , string > ; parentEnv ?: Record < string , string > } | undefined > {
146155 if ( syncEnvVarsFn && typeof syncEnvVarsFn === "function" ) {
147- let resolvedEnvVars : Record < string , string > = { } ;
156+ let resolvedEnvVars : { env : Record < string , string > ; parentEnv ?: Record < string , string > } = {
157+ env : { } ,
158+ } ;
148159 let result ;
149160
150161 try {
@@ -172,11 +183,18 @@ async function callSyncEnvVarsFn(
172183 typeof item . name === "string" &&
173184 typeof item . value === "string"
174185 ) {
175- resolvedEnvVars [ item . name ] = item . value ;
186+ if ( item . isParentEnv ) {
187+ if ( ! resolvedEnvVars . parentEnv ) {
188+ resolvedEnvVars . parentEnv = { } ;
189+ }
190+ resolvedEnvVars . parentEnv [ item . name ] = item . value ;
191+ } else {
192+ resolvedEnvVars . env [ item . name ] = item . value ;
193+ }
176194 }
177195 }
178196 } else if ( result ) {
179- resolvedEnvVars = result ;
197+ resolvedEnvVars . env = result ;
180198 }
181199
182200 return resolvedEnvVars ;
0 commit comments