@@ -9,6 +9,9 @@ import type { AuthenticatedEnvironment } from "~/services/apiAuth.server";
99import { ServiceValidationError } from "./baseService.server" ;
1010import { FailDeploymentService } from "./failDeployment.server" ;
1111import { resolveComputeAccess } from "../regionAccess.server" ;
12+ import { isOrgMigrated , parseComputeBackingMap } from "~/runEngine/concerns/computeMigration.server" ;
13+ import { globalFlagsRegistry } from "~/v3/globalFlagsRegistry.server" ;
14+ import { getEntitlement } from "~/services/platform.v3.server" ;
1215
1316type TemplateCreationMode = "required" | "shadow" | "skip" ;
1417
@@ -145,10 +148,10 @@ export class ComputeTemplateCreationService {
145148 where : { id : projectId } ,
146149 select : {
147150 defaultWorkerGroup : {
148- select : { workloadType : true } ,
151+ select : { workloadType : true , masterQueue : true } ,
149152 } ,
150153 organization : {
151- select : { featureFlags : true } ,
154+ select : { id : true , featureFlags : true } ,
152155 } ,
153156 } ,
154157 } ) ;
@@ -161,6 +164,27 @@ export class ComputeTemplateCreationService {
161164 return "required" ;
162165 }
163166
167+ // Migrated orgs route runs to the compute backing even though their stored
168+ // default is still the container region, so they need a compute template too.
169+ // shadow mode: never fail a deploy over a backing the org didn't opt into.
170+ const backingMap = parseComputeBackingMap ( env . COMPUTE_BACKING_MAP ) ;
171+ const defaultQueue = project . defaultWorkerGroup ?. masterQueue ;
172+ if ( defaultQueue && backingMap [ defaultQueue ] ) {
173+ const planType = ( await getEntitlement ( project . organization . id ) ) ?. plan ?. type ;
174+ if ( ! globalFlagsRegistry . isLoaded ) {
175+ await globalFlagsRegistry . waitUntilReady ( env . GLOBAL_FLAGS_READY_TIMEOUT_MS ) ;
176+ }
177+ const migrated = isOrgMigrated ( {
178+ planType,
179+ orgId : project . organization . id ,
180+ orgFeatureFlags : project . organization . featureFlags as Record < string , unknown > | null ,
181+ flags : globalFlagsRegistry . current ( ) ,
182+ } ) ;
183+ if ( migrated ) {
184+ return "shadow" ;
185+ }
186+ }
187+
164188 const hasComputeAccess = await resolveComputeAccess ( prisma , project . organization . featureFlags ) ;
165189
166190 if ( hasComputeAccess ) {
0 commit comments