fix: 修复 Prisma seed 部署入口

This commit is contained in:
湛兮
2026-06-11 22:36:45 +08:00
parent d0375257ce
commit 62a2f933d3
2 changed files with 9 additions and 15 deletions
+108
View File
@@ -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);
});