@@ -11,7 +11,6 @@ import { mkdtemp, writeFile } from "node:fs/promises";
1111import { env } from "~/env.server" ;
1212import { depot as execDepot } from "@depot/cli" ;
1313import { FinalizeDeploymentService } from "./finalizeDeployment.server" ;
14- import { FailDeploymentService } from "./failDeployment.server" ;
1514import { remoteBuildsEnabled } from "../remoteImageBuilder.server" ;
1615import { getEcrAuthToken , isEcrRegistry } from "../getDeploymentImageRef.server" ;
1716import { tryCatch } from "@trigger.dev/core" ;
@@ -25,12 +24,6 @@ export class FinalizeDeploymentV2Service extends BaseService {
2524 body : FinalizeDeploymentRequestBody ,
2625 writer ?: WritableStreamDefaultWriter
2726 ) {
28- // If remote builds are not enabled, lets just use the v1 finalize deployment service
29- if ( ! remoteBuildsEnabled ( ) ) {
30- const finalizeService = new FinalizeDeploymentService ( ) ;
31- return finalizeService . call ( authenticatedEnv , id , body ) ;
32- }
33-
3427 const deployment = await this . _prisma . workerDeployment . findFirst ( {
3528 where : {
3629 friendlyId : id ,
@@ -64,7 +57,6 @@ export class FinalizeDeploymentV2Service extends BaseService {
6457
6558 if ( deployment . status === "DEPLOYED" ) {
6659 logger . debug ( "Worker deployment is already deployed" , { id } ) ;
67-
6860 return deployment ;
6961 }
7062
@@ -74,32 +66,17 @@ export class FinalizeDeploymentV2Service extends BaseService {
7466 }
7567
7668 const finalizeService = new FinalizeDeploymentService ( ) ;
77- const templateService = new ComputeTemplateCreationService ( ) ;
78-
79- if ( body . skipPushToRegistry ) {
80- logger . debug ( "Skipping push to registry during deployment finalization" , {
81- deployment,
82- } ) ;
8369
84- let templateMode : "required" | "shadow" | "skip" = "skip" ;
85- if ( deployment . imageReference ) {
86- templateMode = await this . #handleTemplateCreation( {
87- templateService,
88- projectId : deployment . worker . project . id ,
89- imageReference : deployment . imageReference ,
90- deploymentFriendlyId : id ,
91- authenticatedEnv,
92- writer,
70+ // If remote builds are not enabled, skip image push and go straight to template + finalize
71+ if ( ! remoteBuildsEnabled ( ) || body . skipPushToRegistry ) {
72+ if ( body . skipPushToRegistry ) {
73+ logger . debug ( "Skipping push to registry during deployment finalization" , {
74+ deployment,
9375 } ) ;
9476 }
9577
96- const result = await finalizeService . call ( authenticatedEnv , id , body ) ;
97-
98- if ( templateMode === "shadow" && deployment . imageReference ) {
99- this . #fireShadowTemplateCreation( templateService , deployment . imageReference , id ) ;
100- }
101-
102- return result ;
78+ await this . #createTemplateIfNeeded( deployment , id , authenticatedEnv , writer ) ;
79+ return finalizeService . call ( authenticatedEnv , id , body ) ;
10380 }
10481
10582 const externalBuildData = deployment . externalBuildData
@@ -165,88 +142,28 @@ export class FinalizeDeploymentV2Service extends BaseService {
165142 pushedImage : pushResult . image ,
166143 } ) ;
167144
168- const templateMode = await this . #handleTemplateCreation( {
169- templateService,
170- projectId : deployment . worker . project . id ,
171- imageReference : deployment . imageReference ,
172- deploymentFriendlyId : id ,
173- authenticatedEnv,
174- writer,
175- } ) ;
176-
177- const finalizedDeployment = await finalizeService . call ( authenticatedEnv , id , body ) ;
178-
179- // Shadow mode: fire-and-forget template creation after deploy is finalized
180- if ( templateMode === "shadow" ) {
181- this . #fireShadowTemplateCreation( templateService , deployment . imageReference , id ) ;
182- }
183-
184- return finalizedDeployment ;
145+ await this . #createTemplateIfNeeded( deployment , id , authenticatedEnv , writer ) ;
146+ return finalizeService . call ( authenticatedEnv , id , body ) ;
185147 }
186148
187- async #handleTemplateCreation( options : {
188- templateService : ComputeTemplateCreationService ;
189- projectId : string ;
190- imageReference : string ;
191- deploymentFriendlyId : string ;
192- authenticatedEnv : AuthenticatedEnvironment ;
193- writer ?: WritableStreamDefaultWriter ;
194- } ) : Promise < "required" | "shadow" | "skip" > {
195- const { templateService, projectId, imageReference, deploymentFriendlyId, authenticatedEnv, writer } = options ;
196-
197- const mode = await templateService . resolveMode ( projectId , this . _prisma ) ;
198-
199- if ( mode !== "required" ) {
200- return mode ;
201- }
202-
203- if ( writer ) {
204- await writer . write (
205- `event: log\ndata: ${ JSON . stringify ( { message : "Building compute template..." } ) } \n\n`
206- ) ;
207- }
208-
209- const templateResult = await templateService . createTemplate ( imageReference ) ;
210-
211- if ( ! templateResult . success ) {
212- logger . error ( "Compute template creation failed" , {
213- id : deploymentFriendlyId ,
214- imageReference,
215- error : templateResult . error ,
216- } ) ;
217-
218- const failService = new FailDeploymentService ( ) ;
219- await failService . call ( authenticatedEnv , deploymentFriendlyId , {
220- error : {
221- name : "TemplateCreationFailed" ,
222- message : `Failed to create compute template: ${ templateResult . error } ` ,
223- } ,
224- } ) ;
225-
226- throw new ServiceValidationError (
227- `Compute template creation failed: ${ templateResult . error } `
228- ) ;
149+ async #createTemplateIfNeeded(
150+ deployment : { imageReference : string | null ; worker : { project : { id : string } } | null } ,
151+ deploymentFriendlyId : string ,
152+ authenticatedEnv : AuthenticatedEnvironment ,
153+ writer ?: WritableStreamDefaultWriter
154+ ) : Promise < void > {
155+ if ( ! deployment . imageReference || ! deployment . worker ) {
156+ return ;
229157 }
230158
231- logger . debug ( "Compute template created" , {
232- id : deploymentFriendlyId ,
233- imageReference,
234- } ) ;
235-
236- return mode ;
237- }
238-
239- #fireShadowTemplateCreation(
240- templateService : ComputeTemplateCreationService ,
241- imageReference : string ,
242- deploymentFriendlyId : string
243- ) {
244- templateService . createTemplate ( imageReference , { background : true } ) . catch ( ( error ) => {
245- logger . error ( "Shadow compute template creation failed" , {
246- id : deploymentFriendlyId ,
247- imageReference,
248- error : error instanceof Error ? error . message : String ( error ) ,
249- } ) ;
159+ const templateService = new ComputeTemplateCreationService ( ) ;
160+ await templateService . handleDeployTemplate ( {
161+ projectId : deployment . worker . project . id ,
162+ imageReference : deployment . imageReference ,
163+ deploymentFriendlyId,
164+ authenticatedEnv,
165+ prisma : this . _prisma ,
166+ writer,
250167 } ) ;
251168 }
252169}
0 commit comments