Files
Eric Allam a42e94c75f
🚀 Publish Trigger.dev Docker / ʦ TypeScript (push) Has been cancelled
🚀 Publish Trigger.dev Docker / Unit Tests (push) Has been cancelled
🚀 Publish Trigger.dev Docker / e2e Tests (push) Has been cancelled
🚀 Publish Trigger.dev Docker / publish (push) Has been cancelled
Add the STAGING environment by default
2023-09-27 18:17:19 +01:00

153 lines
4.1 KiB
TypeScript

/* eslint-disable turbo/no-undeclared-env-vars */
import { integrationCatalog } from "../app/services/externalApis/integrationCatalog.server";
import { seedCloud } from "./seedCloud";
import { prisma } from "../app/db.server";
import { createEnvironment } from "~/models/organization.server";
async function seedIntegrationAuthMethods() {
for (const [_, integration] of Object.entries(integrationCatalog.getIntegrations())) {
await prisma.integrationDefinition.upsert({
where: {
id: integration.identifier,
},
create: {
id: integration.identifier,
name: integration.name,
icon: integration.icon ?? integration.identifier,
instructions: "Instructions go here",
description: integration.description,
packageName: integration.packageName,
},
update: {
name: integration.name,
description: integration.description,
packageName: integration.packageName,
icon: integration.icon ?? integration.identifier,
},
});
for (const [key, authMethod] of Object.entries(integration.authenticationMethods)) {
if (authMethod.type === "oauth2") {
console.log(`Upserting auth method ${integration.identifier}.${key}`);
await prisma.integrationAuthMethod.upsert({
where: {
definitionId_key: {
definitionId: integration.identifier,
key,
},
},
create: {
key,
name: authMethod.name,
description: authMethod.description ?? "",
type: authMethod.type,
client: authMethod.client,
config: authMethod.config,
scopes: authMethod.scopes,
definition: {
connect: {
id: integration.identifier,
},
},
help: authMethod.help,
},
update: {
name: authMethod.name,
description: authMethod.description ?? "",
type: authMethod.type,
client: authMethod.client,
config: authMethod.config,
scopes: authMethod.scopes,
help: authMethod.help,
},
});
}
}
}
}
async function runDataMigrations() {
await runStagingEnvironmentMigration();
}
async function runStagingEnvironmentMigration() {
try {
await prisma.$transaction(async (tx) => {
const existingDataMigration = await tx.dataMigration.findUnique({
where: {
name: "2023-09-27-AddStagingEnvironments",
},
});
if (existingDataMigration) {
return;
}
await tx.dataMigration.create({
data: {
name: "2023-09-27-AddStagingEnvironments",
},
});
console.log("Running data migration 2023-09-27-AddStagingEnvironments");
const projectsWithoutStagingEnvironments = await tx.project.findMany({
where: {
environments: {
none: {
type: "STAGING",
},
},
},
include: {
organization: true,
},
});
for (const project of projectsWithoutStagingEnvironments) {
try {
console.log(
`Creating staging environment for project ${project.slug} on org ${project.organization.slug}`
);
await createEnvironment(project.organization, project, "STAGING", undefined, tx);
} catch (error) {
console.error(error);
}
}
await tx.dataMigration.update({
where: {
name: "2023-09-27-AddStagingEnvironments",
},
data: {
completedAt: new Date(),
},
});
});
} catch (error) {
console.error(error);
}
}
async function seed() {
await seedIntegrationAuthMethods();
if (process.env.NODE_ENV === "development" && process.env.SEED_CLOUD === "enabled") {
await seedCloud(prisma);
}
await runDataMigrations();
}
seed()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});