@catladder/cli 0.0.0-main-4c899109 → 0.0.0-main-3df5566d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles/catenv/index.js +84 -27
- package/dist/bundles/cli/index.js +84 -27
- package/dist/pipeline/src/pipeline/createMainPipeline.js +13 -7
- package/dist/pipeline/src/pipeline/createMainPipeline.js.map +1 -1
- package/dist/pipeline/src/pipeline/generatePipelineFiles.d.ts +5 -19
- package/dist/pipeline/src/pipeline/generatePipelineFiles.js +71 -20
- package/dist/pipeline/src/pipeline/generatePipelineFiles.js.map +1 -1
- package/dist/pipeline/src/pipeline/gitlab/createGitlabJobs.d.ts +6 -4
- package/dist/pipeline/src/types/gitlab-types.d.ts +2 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -5468,7 +5468,7 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
5468
5468
|
// for all triggers create jobs and add base rules
|
|
5469
5469
|
const allJobsPerTrigger = await Promise.all(config_1.ALL_PIPELINE_TRIGGERS.map(async (trigger) => await (0, createGitlabJobs_1.createGitlabJobs)(await (0, createAllJobs_1.createAllJobs)({ config, trigger, pipelineType }), getGitlabRulesForTrigger(trigger)))).then((j) => j.flat());
|
|
5470
5470
|
const allWorkspaceJobs = allJobsPerTrigger
|
|
5471
|
-
.filter((j) => j.context.type === "workspace") // sort by componentName in the same order as they appear in the config
|
|
5471
|
+
.filter((j) => { var _a; return ((_a = j.context) === null || _a === void 0 ? void 0 : _a.type) === "workspace"; }) // sort by componentName in the same order as they appear in the config
|
|
5472
5472
|
// this is purely for better readability in git diffs when you add new components
|
|
5473
5473
|
.sort((a, b) => {
|
|
5474
5474
|
var _a;
|
|
@@ -5478,7 +5478,7 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
5478
5478
|
return aIndex - bIndex;
|
|
5479
5479
|
});
|
|
5480
5480
|
const allComponentJobs = allJobsPerTrigger
|
|
5481
|
-
.filter((j) => j.context.type === "component")
|
|
5481
|
+
.filter((j) => { var _a; return ((_a = j.context) === null || _a === void 0 ? void 0 : _a.type) === "component"; })
|
|
5482
5482
|
// sort by componentName in the same order as they appear in the config
|
|
5483
5483
|
// this is purely for better readability in git diffs when you add new components
|
|
5484
5484
|
.sort((a, b) => {
|
|
@@ -5487,18 +5487,18 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
5487
5487
|
const bIndex = componentNames.findIndex((c) => c === b.context.name);
|
|
5488
5488
|
return aIndex - bIndex;
|
|
5489
5489
|
});
|
|
5490
|
-
const allJobs = [...allWorkspaceJobs, ...allComponentJobs].reduce((acc, { gitlabJob, name }) => {
|
|
5490
|
+
const allJobs = [...allWorkspaceJobs, ...allComponentJobs].reduce((acc, { gitlabJob, name, context }) => {
|
|
5491
5491
|
var _a, _b;
|
|
5492
5492
|
// merge jobs, if a job is already there, merge the rules
|
|
5493
5493
|
// this is currently needed because of envMode: "none", which creates the same job for all triggers, so it can appear multiple times
|
|
5494
5494
|
if (acc[name]) {
|
|
5495
|
-
acc[name].rules = [
|
|
5496
|
-
...((_a = acc[name].rules) !== null && _a !== void 0 ? _a : []),
|
|
5495
|
+
acc[name].gitlabJob.rules = [
|
|
5496
|
+
...((_a = acc[name].gitlabJob.rules) !== null && _a !== void 0 ? _a : []),
|
|
5497
5497
|
...((_b = gitlabJob.rules) !== null && _b !== void 0 ? _b : []),
|
|
5498
5498
|
];
|
|
5499
5499
|
}
|
|
5500
5500
|
else {
|
|
5501
|
-
acc[name] = gitlabJob;
|
|
5501
|
+
acc[name] = { context, gitlabJob };
|
|
5502
5502
|
}
|
|
5503
5503
|
return acc;
|
|
5504
5504
|
}, {});
|
|
@@ -5506,7 +5506,13 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
5506
5506
|
stages: [...stages, "release"],
|
|
5507
5507
|
jobs: {
|
|
5508
5508
|
...allJobs,
|
|
5509
|
-
...(0, gitlabReleaseJobs_1.getGitlabReleaseJobs)(),
|
|
5509
|
+
...Object.fromEntries(Object.entries((0, gitlabReleaseJobs_1.getGitlabReleaseJobs)()).map(([name, gitlabJob]) => [
|
|
5510
|
+
name,
|
|
5511
|
+
{
|
|
5512
|
+
gitlabJob,
|
|
5513
|
+
context: null,
|
|
5514
|
+
},
|
|
5515
|
+
])),
|
|
5510
5516
|
},
|
|
5511
5517
|
variables: config.runnerVariables,
|
|
5512
5518
|
});
|
|
@@ -5537,32 +5543,83 @@ function getGitlabRulesForTrigger(trigger) {
|
|
|
5537
5543
|
"use strict";
|
|
5538
5544
|
|
|
5539
5545
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
5540
|
-
exports.
|
|
5546
|
+
exports.getGitlabCompletePipeline = exports.generatePipelineFiles = void 0;
|
|
5547
|
+
const promises_1 = __nccwpck_require__(3292);
|
|
5548
|
+
const path_1 = __nccwpck_require__(1017);
|
|
5541
5549
|
const writeFiles_1 = __nccwpck_require__(2228);
|
|
5542
5550
|
const createMainPipeline_1 = __nccwpck_require__(9192);
|
|
5543
5551
|
const sortGitLabJobDefProps_1 = __nccwpck_require__(2361);
|
|
5544
|
-
|
|
5545
|
-
|
|
5546
|
-
const jobsWithSortedProps = Object.fromEntries(Object.entries(jobs).map(([jobName, job]) => [
|
|
5547
|
-
jobName,
|
|
5548
|
-
(0, sortGitLabJobDefProps_1.sortGitLabJobDefProps)(job),
|
|
5549
|
-
]));
|
|
5550
|
-
return {
|
|
5551
|
-
image,
|
|
5552
|
-
stages,
|
|
5553
|
-
variables,
|
|
5554
|
-
workflow,
|
|
5555
|
-
...pipelineRest,
|
|
5556
|
-
// jobs need to be spread into main YAML, because GitLab pipeline YAML has no jobs key - jobs are top level with their key as their name
|
|
5557
|
-
...jobsWithSortedProps,
|
|
5558
|
-
};
|
|
5559
|
-
}
|
|
5560
|
-
exports.generateLocalPipelineContent = generateLocalPipelineContent;
|
|
5552
|
+
const CATLADDER_GENERATED_FOLDER = ".catladder-generated";
|
|
5553
|
+
const GITLAB_GENERATED_FOLDER = CATLADDER_GENERATED_FOLDER + "/gitlab";
|
|
5561
5554
|
async function generatePipelineFiles(config, pipelineType) {
|
|
5562
|
-
|
|
5563
|
-
|
|
5555
|
+
if (pipelineType !== "gitlab") {
|
|
5556
|
+
throw new Error("Pipeline type not supported");
|
|
5557
|
+
}
|
|
5558
|
+
const includes = await getGitlabPipelineIncludes(config);
|
|
5559
|
+
const mainFile = {
|
|
5560
|
+
path: ".gitlab-ci.yml",
|
|
5561
|
+
content: {
|
|
5562
|
+
include: includes.map((i) => i.path),
|
|
5563
|
+
},
|
|
5564
|
+
};
|
|
5565
|
+
const files = [mainFile, ...includes];
|
|
5566
|
+
// first clean up the folder
|
|
5567
|
+
await (0, promises_1.rm)(GITLAB_GENERATED_FOLDER, { recursive: true });
|
|
5568
|
+
// write files
|
|
5569
|
+
await Promise.all(files.map(async ({ path, content }) => {
|
|
5570
|
+
await (0, promises_1.mkdir)((0, path_1.dirname)(path), { recursive: true });
|
|
5571
|
+
await (0, writeFiles_1.writeYamlfile)(path, content);
|
|
5572
|
+
}));
|
|
5564
5573
|
}
|
|
5565
5574
|
exports.generatePipelineFiles = generatePipelineFiles;
|
|
5575
|
+
async function getGitlabPipelineIncludes(config) {
|
|
5576
|
+
const { jobs, image, stages, variables, workflow, ...pipelineRest } = await (0, createMainPipeline_1.createMainPipeline)("gitlab", config);
|
|
5577
|
+
// we will create 1 include per component or workspace
|
|
5578
|
+
// this is for better readability in git diffs and to avoid problems with yaml files beeing too large
|
|
5579
|
+
// group by context
|
|
5580
|
+
const groups = Object.entries(jobs).reduce((acc, [jobName, { gitlabJob, context }]) => {
|
|
5581
|
+
const group = !context
|
|
5582
|
+
? "global-jobs"
|
|
5583
|
+
: (context === null || context === void 0 ? void 0 : context.type) + "/" + context.name;
|
|
5584
|
+
if (!acc[group]) {
|
|
5585
|
+
acc[group] = {};
|
|
5586
|
+
}
|
|
5587
|
+
acc[group][jobName] = (0, sortGitLabJobDefProps_1.sortGitLabJobDefProps)(gitlabJob); // also sort properties for more consistent diffing
|
|
5588
|
+
return acc;
|
|
5589
|
+
}, {});
|
|
5590
|
+
const componentIncludes = Object.entries(groups).map(([group, jobs]) => {
|
|
5591
|
+
return {
|
|
5592
|
+
path: GITLAB_GENERATED_FOLDER + "/" + group + ".yaml",
|
|
5593
|
+
content: jobs,
|
|
5594
|
+
};
|
|
5595
|
+
});
|
|
5596
|
+
const mainInclude = {
|
|
5597
|
+
path: GITLAB_GENERATED_FOLDER + "/main.yaml",
|
|
5598
|
+
content: {
|
|
5599
|
+
image,
|
|
5600
|
+
stages,
|
|
5601
|
+
variables,
|
|
5602
|
+
workflow,
|
|
5603
|
+
...pipelineRest,
|
|
5604
|
+
},
|
|
5605
|
+
};
|
|
5606
|
+
const includes = [mainInclude, ...componentIncludes];
|
|
5607
|
+
return includes;
|
|
5608
|
+
}
|
|
5609
|
+
/**
|
|
5610
|
+
*
|
|
5611
|
+
* for testing purposes
|
|
5612
|
+
*/
|
|
5613
|
+
async function getGitlabCompletePipeline(config) {
|
|
5614
|
+
const includes = await getGitlabPipelineIncludes(config);
|
|
5615
|
+
return includes.reduce((acc, { content }) => {
|
|
5616
|
+
return {
|
|
5617
|
+
...acc,
|
|
5618
|
+
...content, // merge all includes into one object
|
|
5619
|
+
};
|
|
5620
|
+
}, {});
|
|
5621
|
+
}
|
|
5622
|
+
exports.getGitlabCompletePipeline = getGitlabCompletePipeline;
|
|
5566
5623
|
//# sourceMappingURL=generatePipelineFiles.js.map
|
|
5567
5624
|
|
|
5568
5625
|
/***/ }),
|
|
@@ -8405,7 +8405,7 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
8405
8405
|
// for all triggers create jobs and add base rules
|
|
8406
8406
|
const allJobsPerTrigger = await Promise.all(config_1.ALL_PIPELINE_TRIGGERS.map(async (trigger) => await (0, createGitlabJobs_1.createGitlabJobs)(await (0, createAllJobs_1.createAllJobs)({ config, trigger, pipelineType }), getGitlabRulesForTrigger(trigger)))).then((j) => j.flat());
|
|
8407
8407
|
const allWorkspaceJobs = allJobsPerTrigger
|
|
8408
|
-
.filter((j) => j.context.type === "workspace") // sort by componentName in the same order as they appear in the config
|
|
8408
|
+
.filter((j) => { var _a; return ((_a = j.context) === null || _a === void 0 ? void 0 : _a.type) === "workspace"; }) // sort by componentName in the same order as they appear in the config
|
|
8409
8409
|
// this is purely for better readability in git diffs when you add new components
|
|
8410
8410
|
.sort((a, b) => {
|
|
8411
8411
|
var _a;
|
|
@@ -8415,7 +8415,7 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
8415
8415
|
return aIndex - bIndex;
|
|
8416
8416
|
});
|
|
8417
8417
|
const allComponentJobs = allJobsPerTrigger
|
|
8418
|
-
.filter((j) => j.context.type === "component")
|
|
8418
|
+
.filter((j) => { var _a; return ((_a = j.context) === null || _a === void 0 ? void 0 : _a.type) === "component"; })
|
|
8419
8419
|
// sort by componentName in the same order as they appear in the config
|
|
8420
8420
|
// this is purely for better readability in git diffs when you add new components
|
|
8421
8421
|
.sort((a, b) => {
|
|
@@ -8424,18 +8424,18 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
8424
8424
|
const bIndex = componentNames.findIndex((c) => c === b.context.name);
|
|
8425
8425
|
return aIndex - bIndex;
|
|
8426
8426
|
});
|
|
8427
|
-
const allJobs = [...allWorkspaceJobs, ...allComponentJobs].reduce((acc, { gitlabJob, name }) => {
|
|
8427
|
+
const allJobs = [...allWorkspaceJobs, ...allComponentJobs].reduce((acc, { gitlabJob, name, context }) => {
|
|
8428
8428
|
var _a, _b;
|
|
8429
8429
|
// merge jobs, if a job is already there, merge the rules
|
|
8430
8430
|
// this is currently needed because of envMode: "none", which creates the same job for all triggers, so it can appear multiple times
|
|
8431
8431
|
if (acc[name]) {
|
|
8432
|
-
acc[name].rules = [
|
|
8433
|
-
...((_a = acc[name].rules) !== null && _a !== void 0 ? _a : []),
|
|
8432
|
+
acc[name].gitlabJob.rules = [
|
|
8433
|
+
...((_a = acc[name].gitlabJob.rules) !== null && _a !== void 0 ? _a : []),
|
|
8434
8434
|
...((_b = gitlabJob.rules) !== null && _b !== void 0 ? _b : []),
|
|
8435
8435
|
];
|
|
8436
8436
|
}
|
|
8437
8437
|
else {
|
|
8438
|
-
acc[name] = gitlabJob;
|
|
8438
|
+
acc[name] = { context, gitlabJob };
|
|
8439
8439
|
}
|
|
8440
8440
|
return acc;
|
|
8441
8441
|
}, {});
|
|
@@ -8443,7 +8443,13 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
8443
8443
|
stages: [...stages, "release"],
|
|
8444
8444
|
jobs: {
|
|
8445
8445
|
...allJobs,
|
|
8446
|
-
...(0, gitlabReleaseJobs_1.getGitlabReleaseJobs)(),
|
|
8446
|
+
...Object.fromEntries(Object.entries((0, gitlabReleaseJobs_1.getGitlabReleaseJobs)()).map(([name, gitlabJob]) => [
|
|
8447
|
+
name,
|
|
8448
|
+
{
|
|
8449
|
+
gitlabJob,
|
|
8450
|
+
context: null,
|
|
8451
|
+
},
|
|
8452
|
+
])),
|
|
8447
8453
|
},
|
|
8448
8454
|
variables: config.runnerVariables,
|
|
8449
8455
|
});
|
|
@@ -8474,32 +8480,83 @@ function getGitlabRulesForTrigger(trigger) {
|
|
|
8474
8480
|
"use strict";
|
|
8475
8481
|
|
|
8476
8482
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
8477
|
-
exports.
|
|
8483
|
+
exports.getGitlabCompletePipeline = exports.generatePipelineFiles = void 0;
|
|
8484
|
+
const promises_1 = __nccwpck_require__(73292);
|
|
8485
|
+
const path_1 = __nccwpck_require__(71017);
|
|
8478
8486
|
const writeFiles_1 = __nccwpck_require__(92228);
|
|
8479
8487
|
const createMainPipeline_1 = __nccwpck_require__(39192);
|
|
8480
8488
|
const sortGitLabJobDefProps_1 = __nccwpck_require__(72361);
|
|
8481
|
-
|
|
8482
|
-
|
|
8483
|
-
const jobsWithSortedProps = Object.fromEntries(Object.entries(jobs).map(([jobName, job]) => [
|
|
8484
|
-
jobName,
|
|
8485
|
-
(0, sortGitLabJobDefProps_1.sortGitLabJobDefProps)(job),
|
|
8486
|
-
]));
|
|
8487
|
-
return {
|
|
8488
|
-
image,
|
|
8489
|
-
stages,
|
|
8490
|
-
variables,
|
|
8491
|
-
workflow,
|
|
8492
|
-
...pipelineRest,
|
|
8493
|
-
// jobs need to be spread into main YAML, because GitLab pipeline YAML has no jobs key - jobs are top level with their key as their name
|
|
8494
|
-
...jobsWithSortedProps,
|
|
8495
|
-
};
|
|
8496
|
-
}
|
|
8497
|
-
exports.generateLocalPipelineContent = generateLocalPipelineContent;
|
|
8489
|
+
const CATLADDER_GENERATED_FOLDER = ".catladder-generated";
|
|
8490
|
+
const GITLAB_GENERATED_FOLDER = CATLADDER_GENERATED_FOLDER + "/gitlab";
|
|
8498
8491
|
async function generatePipelineFiles(config, pipelineType) {
|
|
8499
|
-
|
|
8500
|
-
|
|
8492
|
+
if (pipelineType !== "gitlab") {
|
|
8493
|
+
throw new Error("Pipeline type not supported");
|
|
8494
|
+
}
|
|
8495
|
+
const includes = await getGitlabPipelineIncludes(config);
|
|
8496
|
+
const mainFile = {
|
|
8497
|
+
path: ".gitlab-ci.yml",
|
|
8498
|
+
content: {
|
|
8499
|
+
include: includes.map((i) => i.path),
|
|
8500
|
+
},
|
|
8501
|
+
};
|
|
8502
|
+
const files = [mainFile, ...includes];
|
|
8503
|
+
// first clean up the folder
|
|
8504
|
+
await (0, promises_1.rm)(GITLAB_GENERATED_FOLDER, { recursive: true });
|
|
8505
|
+
// write files
|
|
8506
|
+
await Promise.all(files.map(async ({ path, content }) => {
|
|
8507
|
+
await (0, promises_1.mkdir)((0, path_1.dirname)(path), { recursive: true });
|
|
8508
|
+
await (0, writeFiles_1.writeYamlfile)(path, content);
|
|
8509
|
+
}));
|
|
8501
8510
|
}
|
|
8502
8511
|
exports.generatePipelineFiles = generatePipelineFiles;
|
|
8512
|
+
async function getGitlabPipelineIncludes(config) {
|
|
8513
|
+
const { jobs, image, stages, variables, workflow, ...pipelineRest } = await (0, createMainPipeline_1.createMainPipeline)("gitlab", config);
|
|
8514
|
+
// we will create 1 include per component or workspace
|
|
8515
|
+
// this is for better readability in git diffs and to avoid problems with yaml files beeing too large
|
|
8516
|
+
// group by context
|
|
8517
|
+
const groups = Object.entries(jobs).reduce((acc, [jobName, { gitlabJob, context }]) => {
|
|
8518
|
+
const group = !context
|
|
8519
|
+
? "global-jobs"
|
|
8520
|
+
: (context === null || context === void 0 ? void 0 : context.type) + "/" + context.name;
|
|
8521
|
+
if (!acc[group]) {
|
|
8522
|
+
acc[group] = {};
|
|
8523
|
+
}
|
|
8524
|
+
acc[group][jobName] = (0, sortGitLabJobDefProps_1.sortGitLabJobDefProps)(gitlabJob); // also sort properties for more consistent diffing
|
|
8525
|
+
return acc;
|
|
8526
|
+
}, {});
|
|
8527
|
+
const componentIncludes = Object.entries(groups).map(([group, jobs]) => {
|
|
8528
|
+
return {
|
|
8529
|
+
path: GITLAB_GENERATED_FOLDER + "/" + group + ".yaml",
|
|
8530
|
+
content: jobs,
|
|
8531
|
+
};
|
|
8532
|
+
});
|
|
8533
|
+
const mainInclude = {
|
|
8534
|
+
path: GITLAB_GENERATED_FOLDER + "/main.yaml",
|
|
8535
|
+
content: {
|
|
8536
|
+
image,
|
|
8537
|
+
stages,
|
|
8538
|
+
variables,
|
|
8539
|
+
workflow,
|
|
8540
|
+
...pipelineRest,
|
|
8541
|
+
},
|
|
8542
|
+
};
|
|
8543
|
+
const includes = [mainInclude, ...componentIncludes];
|
|
8544
|
+
return includes;
|
|
8545
|
+
}
|
|
8546
|
+
/**
|
|
8547
|
+
*
|
|
8548
|
+
* for testing purposes
|
|
8549
|
+
*/
|
|
8550
|
+
async function getGitlabCompletePipeline(config) {
|
|
8551
|
+
const includes = await getGitlabPipelineIncludes(config);
|
|
8552
|
+
return includes.reduce((acc, { content }) => {
|
|
8553
|
+
return {
|
|
8554
|
+
...acc,
|
|
8555
|
+
...content, // merge all includes into one object
|
|
8556
|
+
};
|
|
8557
|
+
}, {});
|
|
8558
|
+
}
|
|
8559
|
+
exports.getGitlabCompletePipeline = getGitlabCompletePipeline;
|
|
8503
8560
|
//# sourceMappingURL=generatePipelineFiles.js.map
|
|
8504
8561
|
|
|
8505
8562
|
/***/ }),
|
|
@@ -14,7 +14,7 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
14
14
|
// for all triggers create jobs and add base rules
|
|
15
15
|
const allJobsPerTrigger = await Promise.all(config_1.ALL_PIPELINE_TRIGGERS.map(async (trigger) => await (0, createGitlabJobs_1.createGitlabJobs)(await (0, createAllJobs_1.createAllJobs)({ config, trigger, pipelineType }), getGitlabRulesForTrigger(trigger)))).then((j) => j.flat());
|
|
16
16
|
const allWorkspaceJobs = allJobsPerTrigger
|
|
17
|
-
.filter((j) => j.context.type === "workspace") // sort by componentName in the same order as they appear in the config
|
|
17
|
+
.filter((j) => { var _a; return ((_a = j.context) === null || _a === void 0 ? void 0 : _a.type) === "workspace"; }) // sort by componentName in the same order as they appear in the config
|
|
18
18
|
// this is purely for better readability in git diffs when you add new components
|
|
19
19
|
.sort((a, b) => {
|
|
20
20
|
var _a;
|
|
@@ -24,7 +24,7 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
24
24
|
return aIndex - bIndex;
|
|
25
25
|
});
|
|
26
26
|
const allComponentJobs = allJobsPerTrigger
|
|
27
|
-
.filter((j) => j.context.type === "component")
|
|
27
|
+
.filter((j) => { var _a; return ((_a = j.context) === null || _a === void 0 ? void 0 : _a.type) === "component"; })
|
|
28
28
|
// sort by componentName in the same order as they appear in the config
|
|
29
29
|
// this is purely for better readability in git diffs when you add new components
|
|
30
30
|
.sort((a, b) => {
|
|
@@ -33,18 +33,18 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
33
33
|
const bIndex = componentNames.findIndex((c) => c === b.context.name);
|
|
34
34
|
return aIndex - bIndex;
|
|
35
35
|
});
|
|
36
|
-
const allJobs = [...allWorkspaceJobs, ...allComponentJobs].reduce((acc, { gitlabJob, name }) => {
|
|
36
|
+
const allJobs = [...allWorkspaceJobs, ...allComponentJobs].reduce((acc, { gitlabJob, name, context }) => {
|
|
37
37
|
var _a, _b;
|
|
38
38
|
// merge jobs, if a job is already there, merge the rules
|
|
39
39
|
// this is currently needed because of envMode: "none", which creates the same job for all triggers, so it can appear multiple times
|
|
40
40
|
if (acc[name]) {
|
|
41
|
-
acc[name].rules = [
|
|
42
|
-
...((_a = acc[name].rules) !== null && _a !== void 0 ? _a : []),
|
|
41
|
+
acc[name].gitlabJob.rules = [
|
|
42
|
+
...((_a = acc[name].gitlabJob.rules) !== null && _a !== void 0 ? _a : []),
|
|
43
43
|
...((_b = gitlabJob.rules) !== null && _b !== void 0 ? _b : []),
|
|
44
44
|
];
|
|
45
45
|
}
|
|
46
46
|
else {
|
|
47
|
-
acc[name] = gitlabJob;
|
|
47
|
+
acc[name] = { context, gitlabJob };
|
|
48
48
|
}
|
|
49
49
|
return acc;
|
|
50
50
|
}, {});
|
|
@@ -52,7 +52,13 @@ const createMainPipeline = async (pipelineType, config) => {
|
|
|
52
52
|
stages: [...stages, "release"],
|
|
53
53
|
jobs: {
|
|
54
54
|
...allJobs,
|
|
55
|
-
...(0, gitlabReleaseJobs_1.getGitlabReleaseJobs)(),
|
|
55
|
+
...Object.fromEntries(Object.entries((0, gitlabReleaseJobs_1.getGitlabReleaseJobs)()).map(([name, gitlabJob]) => [
|
|
56
|
+
name,
|
|
57
|
+
{
|
|
58
|
+
gitlabJob,
|
|
59
|
+
context: null,
|
|
60
|
+
},
|
|
61
|
+
])),
|
|
56
62
|
},
|
|
57
63
|
variables: config.runnerVariables,
|
|
58
64
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMainPipeline.js","sourceRoot":"","sources":["../../../../../pipeline/src/pipeline/createMainPipeline.ts"],"names":[],"mappings":";;;AAAA,oCAKkB;
|
|
1
|
+
{"version":3,"file":"createMainPipeline.js","sourceRoot":"","sources":["../../../../../pipeline/src/pipeline/createMainPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,7 @@
|
|
|
1
1
|
import type { Config, PipelineType } from "../types";
|
|
2
|
-
export declare function generateLocalPipelineContent<T extends PipelineType>(config: Config, pipelineType: T): Promise<{
|
|
3
|
-
image: string;
|
|
4
|
-
stages: string[];
|
|
5
|
-
variables: import("../types/gitlab-ci-yml").JobVariables1;
|
|
6
|
-
workflow: {
|
|
7
|
-
rules: {
|
|
8
|
-
if?: string;
|
|
9
|
-
changes?: import("../types/gitlab-ci-yml").Changes;
|
|
10
|
-
exists?: import("../types/gitlab-ci-yml").Exists;
|
|
11
|
-
variables?: import("../types/gitlab-ci-yml").RulesVariables;
|
|
12
|
-
when?: import("../types/gitlab-ci-yml").When;
|
|
13
|
-
start_in?: string;
|
|
14
|
-
allow_failure?: import("../types/gitlab-ci-yml").AllowFailure;
|
|
15
|
-
needs?: import("../types/gitlab-ci-yml").RulesNeeds;
|
|
16
|
-
}[];
|
|
17
|
-
};
|
|
18
|
-
} & Omit<import("../types").Pipeline<T>, "image" | "jobs" | "variables" | "workflow" | "stages"> & {
|
|
19
|
-
[k: string]: import("../types").GitlabJobDef;
|
|
20
|
-
}>;
|
|
21
2
|
export declare function generatePipelineFiles<T extends PipelineType>(config: Config, pipelineType: T): Promise<void>;
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* for testing purposes
|
|
6
|
+
*/
|
|
7
|
+
export declare function getGitlabCompletePipeline(config: Config): Promise<{}>;
|
|
@@ -1,29 +1,80 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getGitlabCompletePipeline = exports.generatePipelineFiles = void 0;
|
|
4
|
+
const promises_1 = require("fs/promises");
|
|
5
|
+
const path_1 = require("path");
|
|
4
6
|
const writeFiles_1 = require("../utils/writeFiles");
|
|
5
7
|
const createMainPipeline_1 = require("./createMainPipeline");
|
|
6
8
|
const sortGitLabJobDefProps_1 = require("./gitlab/sortGitLabJobDefProps");
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const jobsWithSortedProps = Object.fromEntries(Object.entries(jobs).map(([jobName, job]) => [
|
|
10
|
-
jobName,
|
|
11
|
-
(0, sortGitLabJobDefProps_1.sortGitLabJobDefProps)(job),
|
|
12
|
-
]));
|
|
13
|
-
return {
|
|
14
|
-
image,
|
|
15
|
-
stages,
|
|
16
|
-
variables,
|
|
17
|
-
workflow,
|
|
18
|
-
...pipelineRest,
|
|
19
|
-
// jobs need to be spread into main YAML, because GitLab pipeline YAML has no jobs key - jobs are top level with their key as their name
|
|
20
|
-
...jobsWithSortedProps,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
exports.generateLocalPipelineContent = generateLocalPipelineContent;
|
|
9
|
+
const CATLADDER_GENERATED_FOLDER = ".catladder-generated";
|
|
10
|
+
const GITLAB_GENERATED_FOLDER = CATLADDER_GENERATED_FOLDER + "/gitlab";
|
|
24
11
|
async function generatePipelineFiles(config, pipelineType) {
|
|
25
|
-
|
|
26
|
-
|
|
12
|
+
if (pipelineType !== "gitlab") {
|
|
13
|
+
throw new Error("Pipeline type not supported");
|
|
14
|
+
}
|
|
15
|
+
const includes = await getGitlabPipelineIncludes(config);
|
|
16
|
+
const mainFile = {
|
|
17
|
+
path: ".gitlab-ci.yml",
|
|
18
|
+
content: {
|
|
19
|
+
include: includes.map((i) => i.path),
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
const files = [mainFile, ...includes];
|
|
23
|
+
// first clean up the folder
|
|
24
|
+
await (0, promises_1.rm)(GITLAB_GENERATED_FOLDER, { recursive: true });
|
|
25
|
+
// write files
|
|
26
|
+
await Promise.all(files.map(async ({ path, content }) => {
|
|
27
|
+
await (0, promises_1.mkdir)((0, path_1.dirname)(path), { recursive: true });
|
|
28
|
+
await (0, writeFiles_1.writeYamlfile)(path, content);
|
|
29
|
+
}));
|
|
27
30
|
}
|
|
28
31
|
exports.generatePipelineFiles = generatePipelineFiles;
|
|
32
|
+
async function getGitlabPipelineIncludes(config) {
|
|
33
|
+
const { jobs, image, stages, variables, workflow, ...pipelineRest } = await (0, createMainPipeline_1.createMainPipeline)("gitlab", config);
|
|
34
|
+
// we will create 1 include per component or workspace
|
|
35
|
+
// this is for better readability in git diffs and to avoid problems with yaml files beeing too large
|
|
36
|
+
// group by context
|
|
37
|
+
const groups = Object.entries(jobs).reduce((acc, [jobName, { gitlabJob, context }]) => {
|
|
38
|
+
const group = !context
|
|
39
|
+
? "global-jobs"
|
|
40
|
+
: (context === null || context === void 0 ? void 0 : context.type) + "/" + context.name;
|
|
41
|
+
if (!acc[group]) {
|
|
42
|
+
acc[group] = {};
|
|
43
|
+
}
|
|
44
|
+
acc[group][jobName] = (0, sortGitLabJobDefProps_1.sortGitLabJobDefProps)(gitlabJob); // also sort properties for more consistent diffing
|
|
45
|
+
return acc;
|
|
46
|
+
}, {});
|
|
47
|
+
const componentIncludes = Object.entries(groups).map(([group, jobs]) => {
|
|
48
|
+
return {
|
|
49
|
+
path: GITLAB_GENERATED_FOLDER + "/" + group + ".yaml",
|
|
50
|
+
content: jobs,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
const mainInclude = {
|
|
54
|
+
path: GITLAB_GENERATED_FOLDER + "/main.yaml",
|
|
55
|
+
content: {
|
|
56
|
+
image,
|
|
57
|
+
stages,
|
|
58
|
+
variables,
|
|
59
|
+
workflow,
|
|
60
|
+
...pipelineRest,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
const includes = [mainInclude, ...componentIncludes];
|
|
64
|
+
return includes;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
*
|
|
68
|
+
* for testing purposes
|
|
69
|
+
*/
|
|
70
|
+
async function getGitlabCompletePipeline(config) {
|
|
71
|
+
const includes = await getGitlabPipelineIncludes(config);
|
|
72
|
+
return includes.reduce((acc, { content }) => {
|
|
73
|
+
return {
|
|
74
|
+
...acc,
|
|
75
|
+
...content, // merge all includes into one object
|
|
76
|
+
};
|
|
77
|
+
}, {});
|
|
78
|
+
}
|
|
79
|
+
exports.getGitlabCompletePipeline = getGitlabCompletePipeline;
|
|
29
80
|
//# sourceMappingURL=generatePipelineFiles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generatePipelineFiles.js","sourceRoot":"","sources":["../../../../../pipeline/src/pipeline/generatePipelineFiles.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"generatePipelineFiles.js","sourceRoot":"","sources":["../../../../../pipeline/src/pipeline/generatePipelineFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { Context, GitlabJobDef, GitlabRule } from "../../types";
|
|
2
2
|
import type { CatladderJob } from "../../types/jobs";
|
|
3
3
|
import type { AllCatladderJobs } from "../createAllJobs";
|
|
4
|
-
export type
|
|
5
|
-
name: string;
|
|
4
|
+
export type GitlabJobWithContext = {
|
|
6
5
|
gitlabJob: GitlabJobDef;
|
|
7
|
-
context: Context;
|
|
8
|
-
}
|
|
6
|
+
context: Context | null;
|
|
7
|
+
};
|
|
8
|
+
export type AllGitlabJobs = (GitlabJobWithContext & {
|
|
9
|
+
name: string;
|
|
10
|
+
})[];
|
|
9
11
|
export declare const GITLAB_ENVIRONMENT_URL_VARIABLE = "CL_GITLAB_ENVIRONMENT_URL";
|
|
10
12
|
export declare const makeGitlabJob: (context: Context, job: CatladderJob<string>, allJobs: AllCatladderJobs, baseRules?: GitlabRule[]) => [fullName: string, job: GitlabJobDef];
|
|
11
13
|
export declare const createGitlabJobs: (allJobs: AllCatladderJobs, baseRules?: GitlabRule[]) => Promise<AllGitlabJobs>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { GitlabJobWithContext } from "../pipeline/gitlab/createGitlabJobs";
|
|
1
2
|
import type { Artifacts as GitlabCiArtifacts, JobTemplate, Cache as GitlabJobCache, Rules } from "./gitlab-ci-yml";
|
|
2
3
|
export { Retry, Image as GitlabJobImage } from "./gitlab-ci-yml";
|
|
3
4
|
export type Artifacts = GitlabCiArtifacts;
|
|
@@ -22,6 +23,6 @@ export interface GitlabPipeline extends Pick<JobTemplate, "variables"> {
|
|
|
22
23
|
rules: GitlabRule[];
|
|
23
24
|
};
|
|
24
25
|
stages: string[];
|
|
25
|
-
jobs: Record<string,
|
|
26
|
+
jobs: Record<string, GitlabJobWithContext>;
|
|
26
27
|
before_script?: string[];
|
|
27
28
|
}
|