fix: 修复 Prisma seed 部署入口
This commit is contained in:
+108
@@ -0,0 +1,108 @@
|
||||
/**
|
||||
* 将代码内的纳管项目清单同步到数据库,保持项目、环境和 Jenkins Job 可重复初始化。
|
||||
*/
|
||||
const { EnvironmentKind, PrismaClient, ProjectStatus } = require('@prisma/client');
|
||||
const { seedProjects } = require('../dist/projects/project.seed');
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
for (const project of seedProjects) {
|
||||
const projectRecord = await prisma.project.upsert({
|
||||
where: {
|
||||
key: project.key,
|
||||
},
|
||||
create: {
|
||||
id: project.id,
|
||||
key: project.key,
|
||||
name: project.name,
|
||||
repositoryUrl: project.repositoryUrl,
|
||||
defaultBranch: project.defaultBranch,
|
||||
status:
|
||||
project.status === 'active'
|
||||
? ProjectStatus.ACTIVE
|
||||
: ProjectStatus.ARCHIVED,
|
||||
metadata: {
|
||||
source: 'seedProjects',
|
||||
},
|
||||
},
|
||||
update: {
|
||||
name: project.name,
|
||||
repositoryUrl: project.repositoryUrl,
|
||||
defaultBranch: project.defaultBranch,
|
||||
status:
|
||||
project.status === 'active'
|
||||
? ProjectStatus.ACTIVE
|
||||
: ProjectStatus.ARCHIVED,
|
||||
metadata: {
|
||||
source: 'seedProjects',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
for (const environment of project.environments) {
|
||||
await upsertEnvironment(projectRecord.id, environment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function upsertEnvironment(projectId, environment) {
|
||||
const environmentName = toEnvironmentKind(environment.name);
|
||||
const environmentRecord = await prisma.environment.upsert({
|
||||
where: {
|
||||
projectId_name: {
|
||||
projectId,
|
||||
name: environmentName,
|
||||
},
|
||||
},
|
||||
create: {
|
||||
projectId,
|
||||
name: environmentName,
|
||||
displayName: environment.displayName,
|
||||
},
|
||||
update: {
|
||||
displayName: environment.displayName,
|
||||
},
|
||||
});
|
||||
|
||||
await prisma.deployJob.upsert({
|
||||
where: {
|
||||
projectId_environmentId: {
|
||||
projectId,
|
||||
environmentId: environmentRecord.id,
|
||||
},
|
||||
},
|
||||
create: {
|
||||
projectId,
|
||||
environmentId: environmentRecord.id,
|
||||
jenkinsJobPath: environment.jenkinsJobPath,
|
||||
jenkinsParameters: {
|
||||
releasePolicy: environment.releasePolicy,
|
||||
refPattern: environment.refPattern,
|
||||
},
|
||||
},
|
||||
update: {
|
||||
jenkinsJobPath: environment.jenkinsJobPath,
|
||||
jenkinsParameters: {
|
||||
releasePolicy: environment.releasePolicy,
|
||||
refPattern: environment.refPattern,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function toEnvironmentKind(environment) {
|
||||
return environment === 'test'
|
||||
? EnvironmentKind.TEST
|
||||
: EnvironmentKind.PRODUCTION;
|
||||
}
|
||||
|
||||
main()
|
||||
.then(async () => {
|
||||
await prisma.$disconnect();
|
||||
})
|
||||
.catch(async (error) => {
|
||||
console.error(error);
|
||||
await prisma.$disconnect();
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user