109 lines
2.7 KiB
JavaScript
109 lines
2.7 KiB
JavaScript
/**
|
|
* 将代码内的纳管项目清单同步到数据库,保持项目、环境和 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);
|
|
});
|