@catladder/cli 0.0.0-next-e95e1f20 → 0.0.0-next-ca8f99e2
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/apps/cli/src/apps/cli/commands/project/doctor/checkGithub.js +40 -0
- package/dist/apps/cli/src/apps/cli/commands/project/doctor/checkGithub.js.map +1 -1
- package/dist/apps/cli/src/apps/cli/commands/project/setup/index.js +12 -3
- package/dist/apps/cli/src/apps/cli/commands/project/setup/index.js.map +1 -1
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupGithub.d.ts +20 -0
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupGithub.js +92 -0
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupGithub.js.map +1 -0
- package/dist/apps/cli/src/utils/github.d.ts +2 -0
- package/dist/apps/cli/src/utils/github.js +24 -1
- package/dist/apps/cli/src/utils/github.js.map +1 -1
- package/dist/bundles/catenv/index.js +72 -1
- package/dist/bundles/cli/index.js +247 -5
- package/dist/bundles/skills/catladder-migrate-ci-backend/SKILL.md +12 -0
- package/dist/packages/pipeline/src/backends/github/GithubBackend.js +12 -1
- package/dist/packages/pipeline/src/backends/github/GithubBackend.js.map +1 -1
- package/dist/packages/pipeline/src/backends/github/aggregateCheckJob.d.ts +26 -0
- package/dist/packages/pipeline/src/backends/github/aggregateCheckJob.js +52 -0
- package/dist/packages/pipeline/src/backends/github/aggregateCheckJob.js.map +1 -0
- package/dist/packages/pipeline/src/backends/github/index.d.ts +1 -0
- package/dist/packages/pipeline/src/backends/github/index.js +1 -0
- package/dist/packages/pipeline/src/backends/github/index.js.map +1 -1
- package/dist/skills/catladder-migrate-ci-backend/SKILL.md +12 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/apps/cli/commands/project/doctor/checkGithub.ts +55 -0
- package/src/apps/cli/commands/project/setup/index.ts +17 -4
- package/src/apps/cli/commands/project/setup/setupGithub.ts +117 -0
- package/src/utils/github.ts +30 -0
|
@@ -710,8 +710,48 @@ const checkGithub = async (report, config) => {
|
|
|
710
710
|
report.ok(`repo level: all ${repoLevelReferenced.length} referenced secrets/variables present`);
|
|
711
711
|
}
|
|
712
712
|
}
|
|
713
|
+
await checkGithubMergeGating(report, repo);
|
|
713
714
|
};
|
|
714
715
|
exports.checkGithub = checkGithub;
|
|
716
|
+
/**
|
|
717
|
+
* verifies the merge gating `project setup` configures: auto-merge
|
|
718
|
+
* enabled and the generated `catladder ✅` aggregate check required on
|
|
719
|
+
* the default branch. Without it a PR is mergeable while its checks
|
|
720
|
+
* are still running — gitlab ships this behavior built-in, github
|
|
721
|
+
* silently does not.
|
|
722
|
+
*/
|
|
723
|
+
const checkGithubMergeGating = async (report, repo) => {
|
|
724
|
+
var _a, _b;
|
|
725
|
+
let repoInfo;
|
|
726
|
+
try {
|
|
727
|
+
repoInfo = await (0, github_1.ghApiJson)("GET", `repos/${repo}`);
|
|
728
|
+
}
|
|
729
|
+
catch (e) {
|
|
730
|
+
report.warn(`could not read repo settings of ${repo} (${e.message})`);
|
|
731
|
+
return;
|
|
732
|
+
}
|
|
733
|
+
if (repoInfo.allow_auto_merge) {
|
|
734
|
+
report.ok("auto-merge enabled");
|
|
735
|
+
}
|
|
736
|
+
else {
|
|
737
|
+
report.fail("auto-merge disabled — the merge-when-pipeline-succeeds button cannot appear", "run: catladder project setup");
|
|
738
|
+
}
|
|
739
|
+
const branch = repoInfo.default_branch;
|
|
740
|
+
const protection = await (0, github_1.ghApiJson)("GET", `repos/${repo}/branches/${branch}/protection`).catch(() => null);
|
|
741
|
+
const checks = (_b = (_a = protection === null || protection === void 0 ? void 0 : protection.required_status_checks) === null || _a === void 0 ? void 0 : _a.checks) !== null && _b !== void 0 ? _b : [];
|
|
742
|
+
if (checks.some((c) => c.context === pipeline_1.AGGREGATE_CHECK_JOB_NAME)) {
|
|
743
|
+
report.ok(`'${pipeline_1.AGGREGATE_CHECK_JOB_NAME}' required on ${branch}`);
|
|
744
|
+
}
|
|
745
|
+
else {
|
|
746
|
+
report.fail(`'${pipeline_1.AGGREGATE_CHECK_JOB_NAME}' is not a required check on ${branch} — PRs can merge while the pipeline is red or still running`, "run: catladder project setup");
|
|
747
|
+
}
|
|
748
|
+
const stale = checks.filter((c) => c.context !== pipeline_1.AGGREGATE_CHECK_JOB_NAME);
|
|
749
|
+
if (stale.length > 0) {
|
|
750
|
+
report.warn(`${branch} requires ${stale.length} additional named check(s) (${stale
|
|
751
|
+
.map((c) => c.context)
|
|
752
|
+
.join(", ")}) — job names change with components; prefer only '${pipeline_1.AGGREGATE_CHECK_JOB_NAME}'`);
|
|
753
|
+
}
|
|
754
|
+
};
|
|
715
755
|
//# sourceMappingURL=checkGithub.js.map
|
|
716
756
|
|
|
717
757
|
/***/ }),
|
|
@@ -976,6 +1016,7 @@ const setupAccessTokens_1 = __nccwpck_require__(48907);
|
|
|
976
1016
|
const setupContext_1 = __nccwpck_require__(18120);
|
|
977
1017
|
const setupTopic_1 = __nccwpck_require__(34612);
|
|
978
1018
|
const setupAgents_1 = __nccwpck_require__(7873);
|
|
1019
|
+
const setupGithub_1 = __nccwpck_require__(40148);
|
|
979
1020
|
const logSection_1 = __nccwpck_require__(62213);
|
|
980
1021
|
const ensureGcloudProjectNumbers_1 = __nccwpck_require__(28897);
|
|
981
1022
|
const setupProject = async (instance, onlyComponents) => {
|
|
@@ -995,16 +1036,24 @@ const setupProject = async (instance, onlyComponents) => {
|
|
|
995
1036
|
allContext.forEach((context) => {
|
|
996
1037
|
instance.log(` - ${context.name}:${context.env}`);
|
|
997
1038
|
});
|
|
1039
|
+
const enabledPipelines = config ? (0, pipeline_1.getEnabledPipelineTypes)(config) : [];
|
|
998
1040
|
await (0, logSection_1.logSection)(instance, "base setup", async () => {
|
|
999
|
-
|
|
1041
|
+
// gitlab-specific provisioning (access token, agent webhooks) —
|
|
1042
|
+
// meaningless (and failing) on a github-only project
|
|
1043
|
+
if (enabledPipelines.includes("gitlab")) {
|
|
1044
|
+
await (0, setupAccessTokens_1.setupAccessTokens)(instance);
|
|
1045
|
+
await (0, setupAgents_1.setupAgents)(instance);
|
|
1046
|
+
}
|
|
1000
1047
|
await (0, setupTopic_1.setupTopic)(instance);
|
|
1001
|
-
|
|
1048
|
+
if (config) {
|
|
1049
|
+
await (0, setupGithub_1.setupGithub)(instance, config);
|
|
1050
|
+
}
|
|
1002
1051
|
});
|
|
1003
1052
|
for (const context of allContext) {
|
|
1004
1053
|
await (0, setupContext_1.setupContext)(instance, context);
|
|
1005
1054
|
}
|
|
1006
1055
|
instance.log("");
|
|
1007
|
-
instance.log("gitlab is ready!
|
|
1056
|
+
instance.log(`${enabledPipelines.join(" + ") || "gitlab"} is ready! 🥂`);
|
|
1008
1057
|
instance.log("\n");
|
|
1009
1058
|
instance.log("do not forget to make sure that:");
|
|
1010
1059
|
[
|
|
@@ -1370,6 +1419,105 @@ exports.setupContext = setupContext;
|
|
|
1370
1419
|
|
|
1371
1420
|
/***/ }),
|
|
1372
1421
|
|
|
1422
|
+
/***/ 40148:
|
|
1423
|
+
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
1424
|
+
|
|
1425
|
+
"use strict";
|
|
1426
|
+
|
|
1427
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1428
|
+
exports.setupGithub = void 0;
|
|
1429
|
+
const pipeline_1 = __nccwpck_require__(51082);
|
|
1430
|
+
const commandSecretsSyncGithub_1 = __nccwpck_require__(42462);
|
|
1431
|
+
const github_1 = __nccwpck_require__(26928);
|
|
1432
|
+
/**
|
|
1433
|
+
* configures github merge gating — the sane default gitlab ships
|
|
1434
|
+
* built-in and a fresh github repository lacks entirely: without it a
|
|
1435
|
+
* PR is mergeable the moment it opens, checks still running, and the
|
|
1436
|
+
* auto-merge button never appears.
|
|
1437
|
+
*
|
|
1438
|
+
* - repo settings: allow auto-merge, delete merged head branches
|
|
1439
|
+
* - branch protection on the default branch: require the generated
|
|
1440
|
+
* `catladder ✅` aggregate check (the one stable context — individual
|
|
1441
|
+
* job names change with every component add/rename)
|
|
1442
|
+
*
|
|
1443
|
+
* Deliberately non-destructive: existing protection settings
|
|
1444
|
+
* (enforce-admins, required reviews, restrictions, strictness) are
|
|
1445
|
+
* preserved; the aggregate context is merged into the required checks
|
|
1446
|
+
* rather than replacing them. Admins can still bypass per PR — this is
|
|
1447
|
+
* a default, not a cage.
|
|
1448
|
+
*/
|
|
1449
|
+
const setupGithub = async (instance, config) => {
|
|
1450
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
1451
|
+
if (!(0, pipeline_1.getEnabledPipelineTypes)(config).includes("github")) {
|
|
1452
|
+
return;
|
|
1453
|
+
}
|
|
1454
|
+
if (!(await (0, github_1.isGhAuthenticated)())) {
|
|
1455
|
+
instance.log("⚠️ github cli (gh) not authenticated — skipping github merge-gating setup (run: gh auth login)");
|
|
1456
|
+
return;
|
|
1457
|
+
}
|
|
1458
|
+
const repo = await (0, commandSecretsSyncGithub_1.getConfiguredGithubRepo)();
|
|
1459
|
+
if (!repo) {
|
|
1460
|
+
instance.log(`⚠️ no github repository found on the '${(0, pipeline_1.getPipelineGitRemote)(config, "github")}' remote — skipping github merge-gating setup`);
|
|
1461
|
+
return;
|
|
1462
|
+
}
|
|
1463
|
+
const repoInfo = await (0, github_1.ghApiJson)("GET", `repos/${repo}`);
|
|
1464
|
+
if (!repoInfo.allow_auto_merge || !repoInfo.delete_branch_on_merge) {
|
|
1465
|
+
await (0, github_1.ghApiJson)("PATCH", `repos/${repo}`, {
|
|
1466
|
+
allow_auto_merge: true,
|
|
1467
|
+
delete_branch_on_merge: true,
|
|
1468
|
+
});
|
|
1469
|
+
instance.log("✅ auto-merge + delete-merged-branches enabled");
|
|
1470
|
+
}
|
|
1471
|
+
else {
|
|
1472
|
+
instance.log("✅ auto-merge already enabled");
|
|
1473
|
+
}
|
|
1474
|
+
const branch = repoInfo.default_branch;
|
|
1475
|
+
const protection = await (0, github_1.ghApiJson)("GET", `repos/${repo}/branches/${branch}/protection`).catch(() => null); // 404: branch not protected yet
|
|
1476
|
+
const existingChecks = (_b = (_a = protection === null || protection === void 0 ? void 0 : protection.required_status_checks) === null || _a === void 0 ? void 0 : _a.checks) !== null && _b !== void 0 ? _b : [];
|
|
1477
|
+
if (existingChecks.some((c) => c.context === pipeline_1.AGGREGATE_CHECK_JOB_NAME)) {
|
|
1478
|
+
instance.log(`✅ '${pipeline_1.AGGREGATE_CHECK_JOB_NAME}' already required on ${branch}`);
|
|
1479
|
+
return;
|
|
1480
|
+
}
|
|
1481
|
+
// merge into whatever protection exists; PUT replaces the whole rule,
|
|
1482
|
+
// so every preserved setting must be carried over explicitly
|
|
1483
|
+
await (0, github_1.ghApiJson)("PUT", `repos/${repo}/branches/${branch}/protection`, {
|
|
1484
|
+
required_status_checks: {
|
|
1485
|
+
strict: (_d = (_c = protection === null || protection === void 0 ? void 0 : protection.required_status_checks) === null || _c === void 0 ? void 0 : _c.strict) !== null && _d !== void 0 ? _d : false,
|
|
1486
|
+
checks: [
|
|
1487
|
+
...existingChecks.map(({ context, app_id }) => ({
|
|
1488
|
+
context,
|
|
1489
|
+
...(app_id !== undefined ? { app_id } : {}),
|
|
1490
|
+
})),
|
|
1491
|
+
{ context: pipeline_1.AGGREGATE_CHECK_JOB_NAME },
|
|
1492
|
+
],
|
|
1493
|
+
},
|
|
1494
|
+
enforce_admins: (_f = (_e = protection === null || protection === void 0 ? void 0 : protection.enforce_admins) === null || _e === void 0 ? void 0 : _e.enabled) !== null && _f !== void 0 ? _f : false,
|
|
1495
|
+
required_pull_request_reviews: (protection === null || protection === void 0 ? void 0 : protection.required_pull_request_reviews)
|
|
1496
|
+
? {
|
|
1497
|
+
required_approving_review_count: (_g = protection.required_pull_request_reviews
|
|
1498
|
+
.required_approving_review_count) !== null && _g !== void 0 ? _g : 0,
|
|
1499
|
+
dismiss_stale_reviews: (_h = protection.required_pull_request_reviews.dismiss_stale_reviews) !== null && _h !== void 0 ? _h : false,
|
|
1500
|
+
require_code_owner_reviews: (_j = protection.required_pull_request_reviews
|
|
1501
|
+
.require_code_owner_reviews) !== null && _j !== void 0 ? _j : false,
|
|
1502
|
+
}
|
|
1503
|
+
: null,
|
|
1504
|
+
restrictions: (protection === null || protection === void 0 ? void 0 : protection.restrictions)
|
|
1505
|
+
? {
|
|
1506
|
+
users: protection.restrictions.users.map((u) => u.login),
|
|
1507
|
+
teams: protection.restrictions.teams.map((t) => t.slug),
|
|
1508
|
+
apps: protection.restrictions.apps.map((a) => a.slug),
|
|
1509
|
+
}
|
|
1510
|
+
: null,
|
|
1511
|
+
allow_force_pushes: (_l = (_k = protection === null || protection === void 0 ? void 0 : protection.allow_force_pushes) === null || _k === void 0 ? void 0 : _k.enabled) !== null && _l !== void 0 ? _l : false,
|
|
1512
|
+
allow_deletions: (_o = (_m = protection === null || protection === void 0 ? void 0 : protection.allow_deletions) === null || _m === void 0 ? void 0 : _m.enabled) !== null && _o !== void 0 ? _o : false,
|
|
1513
|
+
});
|
|
1514
|
+
instance.log(`✅ branch protection on ${branch}: '${pipeline_1.AGGREGATE_CHECK_JOB_NAME}' required (merges now wait for the pipeline)`);
|
|
1515
|
+
};
|
|
1516
|
+
exports.setupGithub = setupGithub;
|
|
1517
|
+
//# sourceMappingURL=setupGithub.js.map
|
|
1518
|
+
|
|
1519
|
+
/***/ }),
|
|
1520
|
+
|
|
1373
1521
|
/***/ 347:
|
|
1374
1522
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
1375
1523
|
|
|
@@ -6374,7 +6522,7 @@ exports["default"] = async () => {
|
|
|
6374
6522
|
"use strict";
|
|
6375
6523
|
|
|
6376
6524
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
6377
|
-
exports.ensureGithubEnvironment = exports.setGithubVariable = exports.setGithubSecret = exports.listGithubVariableNames = exports.listGithubSecretNames = exports.listGithubEnvironments = exports.getGithubRepoFromRemote = exports.isGhAuthenticated = void 0;
|
|
6525
|
+
exports.ghApiJson = exports.ensureGithubEnvironment = exports.setGithubVariable = exports.setGithubSecret = exports.listGithubVariableNames = exports.listGithubSecretNames = exports.listGithubEnvironments = exports.getGithubRepoFromRemote = exports.isGhAuthenticated = void 0;
|
|
6378
6526
|
const child_process_1 = __nccwpck_require__(35317);
|
|
6379
6527
|
const util_1 = __nccwpck_require__(39023);
|
|
6380
6528
|
const execFile = (0, util_1.promisify)(child_process_1.execFile);
|
|
@@ -6485,6 +6633,29 @@ const ensureGithubEnvironment = async (repo, environment) => new Promise((resolv
|
|
|
6485
6633
|
: reject(new Error(`creating github environment ${environment} failed: ${stderr.trim()}`)));
|
|
6486
6634
|
});
|
|
6487
6635
|
exports.ensureGithubEnvironment = ensureGithubEnvironment;
|
|
6636
|
+
/** runs `gh api` with an optional JSON body and returns the parsed response */
|
|
6637
|
+
const ghApiJson = async (method, path, body) => {
|
|
6638
|
+
var _a, _b, _c, _d;
|
|
6639
|
+
const args = ["api", "-X", method, path];
|
|
6640
|
+
const child = (0, child_process_1.spawn)("gh", [...args, ...(body ? ["--input", "-"] : [])], {
|
|
6641
|
+
stdio: [body ? "pipe" : "ignore", "pipe", "pipe"],
|
|
6642
|
+
});
|
|
6643
|
+
let stdout = "";
|
|
6644
|
+
let stderr = "";
|
|
6645
|
+
(_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => (stdout += data));
|
|
6646
|
+
(_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => (stderr += data));
|
|
6647
|
+
if (body) {
|
|
6648
|
+
(_c = child.stdin) === null || _c === void 0 ? void 0 : _c.write(JSON.stringify(body));
|
|
6649
|
+
(_d = child.stdin) === null || _d === void 0 ? void 0 : _d.end();
|
|
6650
|
+
}
|
|
6651
|
+
return new Promise((resolve, reject) => {
|
|
6652
|
+
child.on("error", reject);
|
|
6653
|
+
child.on("close", (code) => code === 0
|
|
6654
|
+
? resolve(stdout ? JSON.parse(stdout) : undefined)
|
|
6655
|
+
: reject(new Error(`gh api ${method} ${path} failed: ${stderr.trim()}`)));
|
|
6656
|
+
});
|
|
6657
|
+
};
|
|
6658
|
+
exports.ghApiJson = ghApiJson;
|
|
6488
6659
|
//# sourceMappingURL=github.js.map
|
|
6489
6660
|
|
|
6490
6661
|
/***/ }),
|
|
@@ -8317,6 +8488,7 @@ const index_1 = __nccwpck_require__(68906);
|
|
|
8317
8488
|
const createGithubJobs_1 = __nccwpck_require__(57877);
|
|
8318
8489
|
const jobImagesPlan_1 = __nccwpck_require__(47864);
|
|
8319
8490
|
const ensureImageJobs_1 = __nccwpck_require__(70051);
|
|
8491
|
+
const aggregateCheckJob_1 = __nccwpck_require__(88288);
|
|
8320
8492
|
const shippedCatci_1 = __nccwpck_require__(79024);
|
|
8321
8493
|
const githubReleaseJobs_1 = __nccwpck_require__(89800);
|
|
8322
8494
|
const scriptFiles_1 = __nccwpck_require__(30966);
|
|
@@ -8533,11 +8705,21 @@ class GithubBackend {
|
|
|
8533
8705
|
}
|
|
8534
8706
|
}
|
|
8535
8707
|
if (Object.keys(jobs).length > 0) {
|
|
8708
|
+
const workflowJobs = { ...(0, ensureImageJobs_1.makeEnsureImageGithubJobs)(images), ...jobs };
|
|
8536
8709
|
workflows[`${GENERATED_FILE_PREFIX}${workflowFileName(trigger)}`] = {
|
|
8537
8710
|
...TRIGGER_WORKFLOWS[trigger],
|
|
8538
8711
|
...workflowPermissions(images),
|
|
8539
8712
|
env: workflowEnv,
|
|
8540
|
-
|
|
8713
|
+
// the review workflow additionally gets the aggregate job —
|
|
8714
|
+
// the one stable required-status context for branch
|
|
8715
|
+
// protection. Requiring real job names instead goes stale on
|
|
8716
|
+
// every component change: a renamed required job blocks its
|
|
8717
|
+
// own PR forever, a new component's jobs are silently not
|
|
8718
|
+
// required. Added at finalization so its needs cover the
|
|
8719
|
+
// image-build jobs too.
|
|
8720
|
+
jobs: trigger === "mr"
|
|
8721
|
+
? { ...workflowJobs, ...(0, aggregateCheckJob_1.makeAggregateCheckJob)(workflowJobs) }
|
|
8722
|
+
: workflowJobs,
|
|
8541
8723
|
};
|
|
8542
8724
|
}
|
|
8543
8725
|
}
|
|
@@ -8665,6 +8847,65 @@ const manualKind = (job) => job.stage === "stop"
|
|
|
8665
8847
|
|
|
8666
8848
|
/***/ }),
|
|
8667
8849
|
|
|
8850
|
+
/***/ 88288:
|
|
8851
|
+
/***/ ((__unused_webpack_module, exports) => {
|
|
8852
|
+
|
|
8853
|
+
"use strict";
|
|
8854
|
+
|
|
8855
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
8856
|
+
exports.makeAggregateCheckJob = exports.AGGREGATE_CHECK_JOB_NAME = exports.AGGREGATE_CHECK_JOB_ID = void 0;
|
|
8857
|
+
exports.AGGREGATE_CHECK_JOB_ID = "catladder-ok";
|
|
8858
|
+
exports.AGGREGATE_CHECK_JOB_NAME = "catladder ✅";
|
|
8859
|
+
/**
|
|
8860
|
+
* one job that succeeds exactly when every other job of the review
|
|
8861
|
+
* workflow succeeded — the single, STABLE required-status context for
|
|
8862
|
+
* branch protection.
|
|
8863
|
+
*
|
|
8864
|
+
* Requiring the real job names instead goes stale on every component
|
|
8865
|
+
* change: a renamed required job never reports on the very PR that
|
|
8866
|
+
* renames it ("Expected — waiting for status", unmergeable), and a new
|
|
8867
|
+
* component's jobs are silently not required at all. This job's `needs`
|
|
8868
|
+
* are regenerated with the workflow, so protection stays correct with
|
|
8869
|
+
* a single one-time setup.
|
|
8870
|
+
*
|
|
8871
|
+
* Semantics:
|
|
8872
|
+
* - `if: always()` — the job must run (and fail) when an ancestor
|
|
8873
|
+
* failed; without it a failed need would leave it skipped, and a
|
|
8874
|
+
* skipped required check blocks the merge with no explanation.
|
|
8875
|
+
* - a skipped need counts as failure: review jobs are unconditional,
|
|
8876
|
+
* so skipped always means "an ancestor failed".
|
|
8877
|
+
* - `continue-on-error` jobs (security audit, changeset check) report
|
|
8878
|
+
* `success` to `needs` even when red, so they stay non-blocking here
|
|
8879
|
+
* by the same mechanism that keeps their workflow green.
|
|
8880
|
+
*/
|
|
8881
|
+
const makeAggregateCheckJob = (reviewJobs) => ({
|
|
8882
|
+
[exports.AGGREGATE_CHECK_JOB_ID]: {
|
|
8883
|
+
name: exports.AGGREGATE_CHECK_JOB_NAME,
|
|
8884
|
+
"runs-on": "ubuntu-latest",
|
|
8885
|
+
needs: Object.keys(reviewJobs).sort(),
|
|
8886
|
+
if: "always()",
|
|
8887
|
+
steps: [
|
|
8888
|
+
{
|
|
8889
|
+
name: exports.AGGREGATE_CHECK_JOB_NAME,
|
|
8890
|
+
// the needs context only interpolates inside the workflow file,
|
|
8891
|
+
// so this script stays inline
|
|
8892
|
+
run: [
|
|
8893
|
+
`results='\${{ toJSON(needs) }}'`,
|
|
8894
|
+
`echo "$results"`,
|
|
8895
|
+
`if echo "$results" | grep -qE '"result": "(failure|cancelled|skipped)"'; then`,
|
|
8896
|
+
` echo "a required job did not succeed"; exit 1`,
|
|
8897
|
+
`fi`,
|
|
8898
|
+
].join("\n"),
|
|
8899
|
+
shell: "bash",
|
|
8900
|
+
},
|
|
8901
|
+
],
|
|
8902
|
+
},
|
|
8903
|
+
});
|
|
8904
|
+
exports.makeAggregateCheckJob = makeAggregateCheckJob;
|
|
8905
|
+
//# sourceMappingURL=aggregateCheckJob.js.map
|
|
8906
|
+
|
|
8907
|
+
/***/ }),
|
|
8908
|
+
|
|
8668
8909
|
/***/ 88393:
|
|
8669
8910
|
/***/ ((__unused_webpack_module, exports) => {
|
|
8670
8911
|
|
|
@@ -9497,6 +9738,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
9497
9738
|
__exportStar(__nccwpck_require__(85385), exports);
|
|
9498
9739
|
__exportStar(__nccwpck_require__(88393), exports);
|
|
9499
9740
|
__exportStar(__nccwpck_require__(30966), exports);
|
|
9741
|
+
__exportStar(__nccwpck_require__(88288), exports);
|
|
9500
9742
|
//# sourceMappingURL=index.js.map
|
|
9501
9743
|
|
|
9502
9744
|
/***/ }),
|
|
@@ -255,6 +255,18 @@ now-wrong `gitRemote`, regenerate once more, and finish with
|
|
|
255
255
|
|
|
256
256
|
## After the cut-over
|
|
257
257
|
|
|
258
|
+
- **Set up merge gating — GitHub has none by default.** On GitLab,
|
|
259
|
+
"merge when pipeline succeeds" is built in; on a fresh GitHub repo a
|
|
260
|
+
PR is mergeable the moment it opens, checks still running, and the
|
|
261
|
+
auto-merge button does not even appear. `yarn catladder project setup`
|
|
262
|
+
configures it: auto-merge + delete-merged-branches on the repo, and a
|
|
263
|
+
branch protection rule on the default branch requiring the generated
|
|
264
|
+
**`catladder ✅`** aggregate check (the one stable context — never
|
|
265
|
+
require individual job names, they change with every component
|
|
266
|
+
add/rename and a stale required name blocks its own PR forever).
|
|
267
|
+
`project doctor` verifies it. Two things stay human choices: "Do not
|
|
268
|
+
allow bypassing" (leave it off — generated CI means a generation bug
|
|
269
|
+
can only be fixed via the admin bypass) and required reviews.
|
|
258
270
|
- Tell the team where the pipeline lives now and how manual actions
|
|
259
271
|
work there (on GitHub, manual jobs are dispatch workflows in the
|
|
260
272
|
Actions sidebar — `🚀 catladder create release`, `▶️ catladder deploy`,
|
|
@@ -10,6 +10,7 @@ const index_1 = require("../index");
|
|
|
10
10
|
const createGithubJobs_1 = require("./createGithubJobs");
|
|
11
11
|
const jobImagesPlan_1 = require("../../customImages/jobImagesPlan");
|
|
12
12
|
const ensureImageJobs_1 = require("./ensureImageJobs");
|
|
13
|
+
const aggregateCheckJob_1 = require("./aggregateCheckJob");
|
|
13
14
|
const shippedCatci_1 = require("../../catci/shippedCatci");
|
|
14
15
|
const githubReleaseJobs_1 = require("./githubReleaseJobs");
|
|
15
16
|
const scriptFiles_1 = require("./scriptFiles");
|
|
@@ -226,11 +227,21 @@ class GithubBackend {
|
|
|
226
227
|
}
|
|
227
228
|
}
|
|
228
229
|
if (Object.keys(jobs).length > 0) {
|
|
230
|
+
const workflowJobs = { ...(0, ensureImageJobs_1.makeEnsureImageGithubJobs)(images), ...jobs };
|
|
229
231
|
workflows[`${GENERATED_FILE_PREFIX}${workflowFileName(trigger)}`] = {
|
|
230
232
|
...TRIGGER_WORKFLOWS[trigger],
|
|
231
233
|
...workflowPermissions(images),
|
|
232
234
|
env: workflowEnv,
|
|
233
|
-
|
|
235
|
+
// the review workflow additionally gets the aggregate job —
|
|
236
|
+
// the one stable required-status context for branch
|
|
237
|
+
// protection. Requiring real job names instead goes stale on
|
|
238
|
+
// every component change: a renamed required job blocks its
|
|
239
|
+
// own PR forever, a new component's jobs are silently not
|
|
240
|
+
// required. Added at finalization so its needs cover the
|
|
241
|
+
// image-build jobs too.
|
|
242
|
+
jobs: trigger === "mr"
|
|
243
|
+
? { ...workflowJobs, ...(0, aggregateCheckJob_1.makeAggregateCheckJob)(workflowJobs) }
|
|
244
|
+
: workflowJobs,
|
|
234
245
|
};
|
|
235
246
|
}
|
|
236
247
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GithubBackend.js","sourceRoot":"","sources":["../../../../../../../../packages/pipeline/src/backends/github/GithubBackend.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GithubBackend.js","sourceRoot":"","sources":["../../../../../../../../packages/pipeline/src/backends/github/GithubBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { GithubJob } from "../../types/github-types";
|
|
2
|
+
export declare const AGGREGATE_CHECK_JOB_ID = "catladder-ok";
|
|
3
|
+
export declare const AGGREGATE_CHECK_JOB_NAME = "catladder \u2705";
|
|
4
|
+
/**
|
|
5
|
+
* one job that succeeds exactly when every other job of the review
|
|
6
|
+
* workflow succeeded — the single, STABLE required-status context for
|
|
7
|
+
* branch protection.
|
|
8
|
+
*
|
|
9
|
+
* Requiring the real job names instead goes stale on every component
|
|
10
|
+
* change: a renamed required job never reports on the very PR that
|
|
11
|
+
* renames it ("Expected — waiting for status", unmergeable), and a new
|
|
12
|
+
* component's jobs are silently not required at all. This job's `needs`
|
|
13
|
+
* are regenerated with the workflow, so protection stays correct with
|
|
14
|
+
* a single one-time setup.
|
|
15
|
+
*
|
|
16
|
+
* Semantics:
|
|
17
|
+
* - `if: always()` — the job must run (and fail) when an ancestor
|
|
18
|
+
* failed; without it a failed need would leave it skipped, and a
|
|
19
|
+
* skipped required check blocks the merge with no explanation.
|
|
20
|
+
* - a skipped need counts as failure: review jobs are unconditional,
|
|
21
|
+
* so skipped always means "an ancestor failed".
|
|
22
|
+
* - `continue-on-error` jobs (security audit, changeset check) report
|
|
23
|
+
* `success` to `needs` even when red, so they stay non-blocking here
|
|
24
|
+
* by the same mechanism that keeps their workflow green.
|
|
25
|
+
*/
|
|
26
|
+
export declare const makeAggregateCheckJob: (reviewJobs: Record<string, GithubJob>) => Record<string, GithubJob>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeAggregateCheckJob = exports.AGGREGATE_CHECK_JOB_NAME = exports.AGGREGATE_CHECK_JOB_ID = void 0;
|
|
4
|
+
exports.AGGREGATE_CHECK_JOB_ID = "catladder-ok";
|
|
5
|
+
exports.AGGREGATE_CHECK_JOB_NAME = "catladder ✅";
|
|
6
|
+
/**
|
|
7
|
+
* one job that succeeds exactly when every other job of the review
|
|
8
|
+
* workflow succeeded — the single, STABLE required-status context for
|
|
9
|
+
* branch protection.
|
|
10
|
+
*
|
|
11
|
+
* Requiring the real job names instead goes stale on every component
|
|
12
|
+
* change: a renamed required job never reports on the very PR that
|
|
13
|
+
* renames it ("Expected — waiting for status", unmergeable), and a new
|
|
14
|
+
* component's jobs are silently not required at all. This job's `needs`
|
|
15
|
+
* are regenerated with the workflow, so protection stays correct with
|
|
16
|
+
* a single one-time setup.
|
|
17
|
+
*
|
|
18
|
+
* Semantics:
|
|
19
|
+
* - `if: always()` — the job must run (and fail) when an ancestor
|
|
20
|
+
* failed; without it a failed need would leave it skipped, and a
|
|
21
|
+
* skipped required check blocks the merge with no explanation.
|
|
22
|
+
* - a skipped need counts as failure: review jobs are unconditional,
|
|
23
|
+
* so skipped always means "an ancestor failed".
|
|
24
|
+
* - `continue-on-error` jobs (security audit, changeset check) report
|
|
25
|
+
* `success` to `needs` even when red, so they stay non-blocking here
|
|
26
|
+
* by the same mechanism that keeps their workflow green.
|
|
27
|
+
*/
|
|
28
|
+
const makeAggregateCheckJob = (reviewJobs) => ({
|
|
29
|
+
[exports.AGGREGATE_CHECK_JOB_ID]: {
|
|
30
|
+
name: exports.AGGREGATE_CHECK_JOB_NAME,
|
|
31
|
+
"runs-on": "ubuntu-latest",
|
|
32
|
+
needs: Object.keys(reviewJobs).sort(),
|
|
33
|
+
if: "always()",
|
|
34
|
+
steps: [
|
|
35
|
+
{
|
|
36
|
+
name: exports.AGGREGATE_CHECK_JOB_NAME,
|
|
37
|
+
// the needs context only interpolates inside the workflow file,
|
|
38
|
+
// so this script stays inline
|
|
39
|
+
run: [
|
|
40
|
+
`results='\${{ toJSON(needs) }}'`,
|
|
41
|
+
`echo "$results"`,
|
|
42
|
+
`if echo "$results" | grep -qE '"result": "(failure|cancelled|skipped)"'; then`,
|
|
43
|
+
` echo "a required job did not succeed"; exit 1`,
|
|
44
|
+
`fi`,
|
|
45
|
+
].join("\n"),
|
|
46
|
+
shell: "bash",
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
exports.makeAggregateCheckJob = makeAggregateCheckJob;
|
|
52
|
+
//# sourceMappingURL=aggregateCheckJob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregateCheckJob.js","sourceRoot":"","sources":["../../../../../../../../packages/pipeline/src/backends/github/aggregateCheckJob.ts"],"names":[],"mappings":";;;AAEa,QAAA,sBAAsB,GAAG,cAAc,CAAC;AACxC,QAAA,wBAAwB,GAAG,aAAa,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACI,MAAM,qBAAqB,GAAG,CACnC,UAAqC,EACV,EAAE,CAAC,CAAC;IAC/B,CAAC,8BAAsB,CAAC,EAAE;QACxB,IAAI,EAAE,gCAAwB;QAC9B,SAAS,EAAE,eAAe;QAC1B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;QACrC,EAAE,EAAE,UAAU;QACd,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,gCAAwB;gBAC9B,gEAAgE;gBAChE,8BAA8B;gBAC9B,GAAG,EAAE;oBACH,iCAAiC;oBACjC,iBAAiB;oBACjB,+EAA+E;oBAC/E,iDAAiD;oBACjD,IAAI;iBACL,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,MAAM;aACd;SACF;KACF;CACF,CAAC,CAAC;AAxBU,QAAA,qBAAqB,yBAwB/B"}
|
|
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./GithubBackend"), exports);
|
|
18
18
|
__exportStar(require("./ciVariables"), exports);
|
|
19
19
|
__exportStar(require("./scriptFiles"), exports);
|
|
20
|
+
__exportStar(require("./aggregateCheckJob"), exports);
|
|
20
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/pipeline/src/backends/github/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,gDAA8B;AAC9B,gDAA8B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/pipeline/src/backends/github/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,gDAA8B;AAC9B,gDAA8B;AAC9B,sDAAoC"}
|
|
@@ -255,6 +255,18 @@ now-wrong `gitRemote`, regenerate once more, and finish with
|
|
|
255
255
|
|
|
256
256
|
## After the cut-over
|
|
257
257
|
|
|
258
|
+
- **Set up merge gating — GitHub has none by default.** On GitLab,
|
|
259
|
+
"merge when pipeline succeeds" is built in; on a fresh GitHub repo a
|
|
260
|
+
PR is mergeable the moment it opens, checks still running, and the
|
|
261
|
+
auto-merge button does not even appear. `yarn catladder project setup`
|
|
262
|
+
configures it: auto-merge + delete-merged-branches on the repo, and a
|
|
263
|
+
branch protection rule on the default branch requiring the generated
|
|
264
|
+
**`catladder ✅`** aggregate check (the one stable context — never
|
|
265
|
+
require individual job names, they change with every component
|
|
266
|
+
add/rename and a stale required name blocks its own PR forever).
|
|
267
|
+
`project doctor` verifies it. Two things stay human choices: "Do not
|
|
268
|
+
allow bypassing" (leave it off — generated CI means a generation bug
|
|
269
|
+
can only be fixed via the admin bypass) and required reviews.
|
|
258
270
|
- Tell the team where the pipeline lives now and how manual actions
|
|
259
271
|
work there (on GitHub, manual jobs are dispatch workflows in the
|
|
260
272
|
Actions sidebar — `🚀 catladder create release`, `▶️ catladder deploy`,
|