11import { depot } from "@depot/sdk-node" ;
2+ import { Project } from "@trigger.dev/database" ;
3+ import { prisma } from "~/db.server" ;
24import { env } from "~/env.server" ;
35
4- export async function createRemoteImageBuild ( ) {
6+ export async function createRemoteImageBuild ( project : Project ) {
57 if ( ! env . DEPOT_TOKEN || ! env . DEPOT_PROJECT_ID ) {
68 return ;
79 }
810
11+ const builderProjectId = await createBuilderProjectIfNotExists ( project ) ;
12+
913 const result = await depot . build . v1 . BuildService . createBuild (
10- { projectId : env . DEPOT_PROJECT_ID } ,
14+ { projectId : builderProjectId } ,
1115 {
1216 headers : {
1317 Authorization : `Bearer ${ env . DEPOT_TOKEN } ` ,
@@ -16,8 +20,40 @@ export async function createRemoteImageBuild() {
1620 ) ;
1721
1822 return {
19- projectId : env . DEPOT_PROJECT_ID ,
23+ projectId : builderProjectId ,
2024 buildToken : result . buildToken ,
2125 buildId : result . buildId ,
2226 } ;
2327}
28+
29+ async function createBuilderProjectIfNotExists ( project : Project ) {
30+ if ( project . builderProjectId ) {
31+ return project . builderProjectId ;
32+ }
33+
34+ const result = await depot . core . v1 . ProjectService . createProject (
35+ {
36+ name : `${ env . APP_ENV } ${ project . externalRef } ` ,
37+ organizationId : env . DEPOT_ORG_ID ,
38+ regionId : env . DEPOT_REGION ,
39+ } ,
40+ {
41+ headers : {
42+ Authorization : `Bearer ${ env . DEPOT_TOKEN } ` ,
43+ } ,
44+ }
45+ ) ;
46+
47+ if ( ! result . project ) {
48+ throw new Error ( "Failed to create builder project" ) ;
49+ }
50+
51+ await prisma . project . update ( {
52+ where : { id : project . id } ,
53+ data : {
54+ builderProjectId : result . project . projectId ,
55+ } ,
56+ } ) ;
57+
58+ return result . project . projectId ;
59+ }
0 commit comments