@@ -196,12 +196,10 @@ export default async function (context: Context, options: Options): Promise<void
196196 managementApps . AppPlatform . WEB ,
197197 ) ) as WebConfig ;
198198 const autoinitVars = getAutoinitEnvVars ( webappConfig ) ;
199- buildEnv [ cfg . backendId ] = {
200- ...buildEnv [ cfg . backendId ] ,
201- ...Object . fromEntries (
202- Object . entries ( autoinitVars ) . map ( ( [ key , value ] ) => [ key , { value } ] ) ,
203- ) ,
204- } ;
199+ // TODO: confirm the correct priority of auto-init variables
200+ for ( const [ key , value ] of Object . entries ( autoinitVars ) ) {
201+ buildEnv [ cfg . backendId ] [ key ] = { value } ;
202+ }
205203 } catch ( e ) {
206204 logLabeledWarning (
207205 "apphosting" ,
@@ -221,11 +219,12 @@ export default async function (context: Context, options: Options): Promise<void
221219 ) ;
222220 }
223221 context . backendLocalBuilds [ cfg . backendId ] = {
224- // TODO(9114): This only works for nextjs.
225222 buildDir : outputFiles [ 0 ] ,
226- buildConfig,
223+ buildConfig : {
224+ ...buildConfig ,
225+ env : mergeEnvVars ( buildConfig . env || [ ] , runtimeEnv [ cfg . backendId ] || [ ] ) ,
226+ } ,
227227 annotations,
228- env : runtimeEnv [ cfg . backendId ] || [ ] ,
229228 } ;
230229 } catch ( e : unknown ) {
231230 const errorMsg = e instanceof Error ? e . message : String ( e ) ;
@@ -268,3 +267,21 @@ export function getBackendConfigs(options: Options): AppHostingMultiple {
268267 }
269268 return backendConfigs . filter ( ( cfg ) => backendIds . includes ( cfg . backendId ) ) ;
270269}
270+
271+ /**
272+ * Merges two lists of environment variables, giving precedence to the values in overrides.
273+ */
274+ function mergeEnvVars ( base : Env [ ] , overrides : Env [ ] ) : Env [ ] {
275+ const merged = new Map < string , Env > ( ) ;
276+ for ( const env of base ) {
277+ if ( env . variable ) {
278+ merged . set ( env . variable , env ) ;
279+ }
280+ }
281+ for ( const env of overrides ) {
282+ if ( env . variable ) {
283+ merged . set ( env . variable , env ) ;
284+ }
285+ }
286+ return Array . from ( merged . values ( ) ) ;
287+ }
0 commit comments