@catladder/cli 5.0.1 → 5.1.0
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 +3 -3
- 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/setupAccessTokens.js +2 -2
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupAccessTokens.js.map +1 -1
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupGithub.js +2 -2
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupGithub.js.map +1 -1
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupKubernetes.js +23 -7
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupKubernetes.js.map +1 -1
- package/dist/apps/cli/src/commands/index.d.ts +1 -0
- package/dist/apps/cli/src/commands/index.js +4 -1
- package/dist/apps/cli/src/commands/index.js.map +1 -1
- package/dist/apps/cli/src/commands/project/commandConfigSecrets.js +2 -1
- package/dist/apps/cli/src/commands/project/commandConfigSecrets.js.map +1 -1
- package/dist/apps/cli/src/commands/project/commandMrPin.d.ts +21 -0
- package/dist/apps/cli/src/commands/project/commandMrPin.js +119 -0
- package/dist/apps/cli/src/commands/project/commandMrPin.js.map +1 -0
- package/dist/apps/cli/src/commands/project/commandSecretsSyncGithub.d.ts +1 -42
- package/dist/apps/cli/src/commands/project/commandSecretsSyncGithub.js +5 -124
- package/dist/apps/cli/src/commands/project/commandSecretsSyncGithub.js.map +1 -1
- package/dist/apps/cli/src/commands/project/secrets/commandSecretsPush.js +2 -1
- package/dist/apps/cli/src/commands/project/secrets/commandSecretsPush.js.map +1 -1
- package/dist/apps/cli/src/commands/project/secrets/commandSecretsSet.js +2 -2
- package/dist/apps/cli/src/commands/project/secrets/commandSecretsSet.js.map +1 -1
- package/dist/apps/cli/src/commands/project/secrets/document.d.ts +1 -12
- package/dist/apps/cli/src/commands/project/secrets/document.js +1 -79
- package/dist/apps/cli/src/commands/project/secrets/document.js.map +1 -1
- package/dist/apps/cli/src/gcloud/serviceAccounts.js +15 -4
- package/dist/apps/cli/src/gcloud/serviceAccounts.js.map +1 -1
- package/dist/apps/cli/src/secrets/github.d.ts +41 -0
- package/dist/apps/cli/src/secrets/github.js +127 -0
- package/dist/apps/cli/src/secrets/github.js.map +1 -0
- package/dist/apps/cli/src/secrets/index.d.ts +2 -0
- package/dist/apps/cli/src/secrets/index.js +19 -0
- package/dist/apps/cli/src/secrets/index.js.map +1 -0
- package/dist/apps/cli/src/secrets/writeSecrets.d.ts +18 -0
- package/dist/apps/cli/src/secrets/writeSecrets.js +88 -0
- package/dist/apps/cli/src/secrets/writeSecrets.js.map +1 -0
- package/dist/apps/cli/src/utils/gitlab.d.ts +10 -0
- package/dist/apps/cli/src/utils/gitlab.js +30 -5
- package/dist/apps/cli/src/utils/gitlab.js.map +1 -1
- package/dist/apps/cli/src/vault/BitwardenVault.d.ts +6 -0
- package/dist/apps/cli/src/vault/BitwardenVault.js +11 -1
- package/dist/apps/cli/src/vault/BitwardenVault.js.map +1 -1
- package/dist/apps/cli/src/vault/GitlabVault.d.ts +2 -2
- package/dist/apps/cli/src/vault/GitlabVault.js +3 -2
- package/dist/apps/cli/src/vault/GitlabVault.js.map +1 -1
- package/dist/apps/cli/src/vault/VaultManager.d.ts +2 -2
- package/dist/apps/cli/src/vault/VaultManager.js +2 -2
- package/dist/apps/cli/src/vault/VaultManager.js.map +1 -1
- package/dist/apps/cli/src/vault/types.d.ts +16 -2
- package/dist/bundles/catenv/index.js +115 -13
- package/dist/bundles/cli/index.js +749 -431
- package/dist/bundles/skills/catladder-cli/references/commands.md +13 -0
- package/dist/bundles/skills/catladder-deploys/SKILL.md +7 -0
- package/dist/bundles/skills/catladder-migrate-ci-backend/SKILL.md +7 -2
- package/dist/bundles/skills/catladder-pipelines/SKILL.md +27 -1
- package/dist/bundles/skills/catladder-secrets/SKILL.md +16 -0
- package/dist/packages/pipeline/src/autoStop.d.ts +22 -0
- package/dist/packages/pipeline/src/autoStop.js +30 -0
- package/dist/packages/pipeline/src/autoStop.js.map +1 -0
- package/dist/packages/pipeline/src/backends/gitlab/GitlabBackend.js +2 -0
- package/dist/packages/pipeline/src/backends/gitlab/GitlabBackend.js.map +1 -1
- package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.d.ts +4 -1
- package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.js +21 -1
- package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.js.map +1 -1
- package/dist/packages/pipeline/src/deploy/base/deploy.js +8 -2
- package/dist/packages/pipeline/src/deploy/base/deploy.js.map +1 -1
- package/dist/packages/pipeline/src/index.d.ts +1 -0
- package/dist/packages/pipeline/src/index.js +1 -0
- package/dist/packages/pipeline/src/index.js.map +1 -1
- package/dist/packages/pipeline/src/types/config.d.ts +32 -0
- package/dist/skills/catladder-cli/references/commands.md +13 -0
- package/dist/skills/catladder-deploys/SKILL.md +7 -0
- package/dist/skills/catladder-migrate-ci-backend/SKILL.md +7 -2
- package/dist/skills/catladder-pipelines/SKILL.md +27 -1
- package/dist/skills/catladder-secrets/SKILL.md +16 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/apps/cli/commands/project/doctor/checkGithub.ts +1 -1
- package/src/apps/cli/commands/project/setup/setupAccessTokens.ts +3 -2
- package/src/apps/cli/commands/project/setup/setupGithub.ts +1 -1
- package/src/apps/cli/commands/project/setup/setupKubernetes.ts +31 -20
- package/src/commands/index.ts +1 -0
- package/src/commands/project/commandConfigSecrets.ts +1 -1
- package/src/commands/project/commandMrPin.ts +184 -0
- package/src/commands/project/commandSecretsSyncGithub.ts +7 -154
- package/src/commands/project/secrets/commandSecretsPush.ts +2 -5
- package/src/commands/project/secrets/commandSecretsSet.ts +2 -2
- package/src/commands/project/secrets/document.ts +2 -127
- package/src/gcloud/serviceAccounts.ts +16 -7
- package/src/secrets/__tests__/writeSecrets.test.ts +147 -0
- package/src/secrets/github.ts +157 -0
- package/src/secrets/index.ts +2 -0
- package/src/secrets/writeSecrets.ts +138 -0
- package/src/utils/gitlab.ts +34 -7
- package/src/vault/BitwardenVault.ts +10 -1
- package/src/vault/GitlabVault.ts +9 -2
- package/src/vault/VaultManager.ts +3 -2
- package/src/vault/__tests__/BitwardenVault.test.ts +88 -0
- package/src/vault/types.ts +17 -1
|
@@ -978,7 +978,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
978
978
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
979
979
|
};
|
|
980
980
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
981
|
-
exports.upsertAllVariables = exports.clearBackups = exports.getVariableValueByRawName = exports.getAllVariables = exports.getProjectInfo = exports.doGitlabRequestAllPages = exports.doGitlabRequest = exports.getGitlabToken = exports.setupGitlabToken = exports.hasGitlabToken = void 0;
|
|
981
|
+
exports.upsertAllVariables = exports.clearBackups = exports.getVariableValueByRawName = exports.getAllVariables = exports.getProjectInfo = exports.doGitlabRequestAllPages = exports.doGitlabRequest = exports.GitlabNotFoundError = exports.getGitlabToken = exports.setupGitlabToken = exports.hasGitlabToken = void 0;
|
|
982
982
|
const pipeline_1 = __nccwpck_require__(53695);
|
|
983
983
|
const lodash_es_1 = __nccwpck_require__(50210);
|
|
984
984
|
const memoizee_1 = __importDefault(__nccwpck_require__(6575));
|
|
@@ -1030,6 +1030,20 @@ const getGitlabToken = async (io) => {
|
|
|
1030
1030
|
return (0, preferences_1.getPreference)(TOKEN_KEY);
|
|
1031
1031
|
};
|
|
1032
1032
|
exports.getGitlabToken = getGitlabToken;
|
|
1033
|
+
/**
|
|
1034
|
+
* a gitlab api call that came back 404. Carries the path so a caller
|
|
1035
|
+
* that wants to treat "does not exist yet" as normal can say so
|
|
1036
|
+
* (`instanceof`) instead of matching on a message.
|
|
1037
|
+
*/
|
|
1038
|
+
class GitlabNotFoundError extends Error {
|
|
1039
|
+
constructor(path, host) {
|
|
1040
|
+
super(`gitlab api: ${path} not found on ${host}`);
|
|
1041
|
+
this.path = path;
|
|
1042
|
+
this.host = host;
|
|
1043
|
+
this.name = "GitlabNotFoundError";
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
exports.GitlabNotFoundError = GitlabNotFoundError;
|
|
1033
1047
|
const doGitlabRequest = async (io, path, data = undefined, method = "GET") => {
|
|
1034
1048
|
const [rootToken, { gitRemoteHost }] = await Promise.all([
|
|
1035
1049
|
(0, exports.getGitlabToken)(io),
|
|
@@ -1051,7 +1065,7 @@ const doGitlabRequest = async (io, path, data = undefined, method = "GET") => {
|
|
|
1051
1065
|
return null;
|
|
1052
1066
|
}
|
|
1053
1067
|
if (result.status === 404) {
|
|
1054
|
-
throw new
|
|
1068
|
+
throw new GitlabNotFoundError(path, gitRemoteHost);
|
|
1055
1069
|
}
|
|
1056
1070
|
throw new Error(`Could not send request to gitlab api ${path}: ${result.status} "${result.statusText}".\nResponse: ${JSON.stringify(await result.json(), null, 2)}`);
|
|
1057
1071
|
};
|
|
@@ -1077,9 +1091,20 @@ const doGitlabRequestAllPages = async (io, path) => {
|
|
|
1077
1091
|
};
|
|
1078
1092
|
exports.doGitlabRequestAllPages = doGitlabRequestAllPages;
|
|
1079
1093
|
const getProjectInfo = async (io) => {
|
|
1080
|
-
const { gitRemotePath } = await (0, gitProjectInformation_1.getGitRemoteHostAndPath)();
|
|
1081
|
-
|
|
1082
|
-
|
|
1094
|
+
const { gitRemoteHost, gitRemotePath } = await (0, gitProjectInformation_1.getGitRemoteHostAndPath)();
|
|
1095
|
+
try {
|
|
1096
|
+
return await (0, exports.doGitlabRequest)(io, `projects/${encodeURIComponent(gitRemotePath)}`);
|
|
1097
|
+
}
|
|
1098
|
+
catch (e) {
|
|
1099
|
+
if (e instanceof GitlabNotFoundError) {
|
|
1100
|
+
// the classic: the remote is not a gitlab at all (a github one,
|
|
1101
|
+
// say), so the request goes to a host without /api/v4 and every
|
|
1102
|
+
// path answers 404
|
|
1103
|
+
throw new Error(`no gitlab project '${gitRemotePath}' on '${gitRemoteHost}'. ` +
|
|
1104
|
+
"Check the git remote and `pipelines` in catladder.ts — this command talks to the gitlab api.");
|
|
1105
|
+
}
|
|
1106
|
+
throw e;
|
|
1107
|
+
}
|
|
1083
1108
|
};
|
|
1084
1109
|
exports.getProjectInfo = getProjectInfo;
|
|
1085
1110
|
exports.getAllVariables = (0, memoizee_1.default)(async (io, n = 5) => {
|
|
@@ -1400,7 +1425,14 @@ class BitwardenVault {
|
|
|
1400
1425
|
}
|
|
1401
1426
|
return secrets;
|
|
1402
1427
|
}
|
|
1428
|
+
/**
|
|
1429
|
+
* upserts into the item's yaml note. The note is rewritten as a
|
|
1430
|
+
* whole, so the values that are not part of this write have to be
|
|
1431
|
+
* carried over — a single-key write (`secrets-set`, a credential
|
|
1432
|
+
* provisioned by `project setup`) must not drop the rest.
|
|
1433
|
+
*/
|
|
1403
1434
|
async writeSecrets(io, env, componentName, secrets) {
|
|
1435
|
+
var _a;
|
|
1404
1436
|
const { config, collectionName } = this;
|
|
1405
1437
|
const bwSession = await this.session(io);
|
|
1406
1438
|
const collection = await findCollection(bwSession, collectionName);
|
|
@@ -1413,7 +1445,10 @@ class BitwardenVault {
|
|
|
1413
1445
|
"--search",
|
|
1414
1446
|
name,
|
|
1415
1447
|
])).find((item) => item.name === name);
|
|
1416
|
-
const
|
|
1448
|
+
const previous = (existing === null || existing === void 0 ? void 0 : existing.notes)
|
|
1449
|
+
? ((_a = (0, yaml_1.parse)(existing.notes)) !== null && _a !== void 0 ? _a : {})
|
|
1450
|
+
: {};
|
|
1451
|
+
const notes = (0, yaml_1.stringify)({ ...previous, ...secrets });
|
|
1417
1452
|
if (existing) {
|
|
1418
1453
|
await (0, bw_1.runBw)(bwSession, [
|
|
1419
1454
|
"edit",
|
|
@@ -1467,8 +1502,9 @@ class GitlabVault {
|
|
|
1467
1502
|
const variables = await (0, gitlab_1.getAllVariables)(io);
|
|
1468
1503
|
return Object.fromEntries(variables.map((v) => [v.key, v.value]));
|
|
1469
1504
|
}
|
|
1470
|
-
async writeSecrets(io, env, componentName, secrets) {
|
|
1471
|
-
|
|
1505
|
+
async writeSecrets(io, env, componentName, secrets, options = {}) {
|
|
1506
|
+
var _a;
|
|
1507
|
+
await (0, gitlab_1.upsertAllVariables)(io, secrets, env, componentName, (_a = options.backup) !== null && _a !== void 0 ? _a : true);
|
|
1472
1508
|
}
|
|
1473
1509
|
}
|
|
1474
1510
|
exports.GitlabVault = GitlabVault;
|
|
@@ -1554,11 +1590,11 @@ class VaultManager {
|
|
|
1554
1590
|
* writes secrets of one env/component to the vault and updates the
|
|
1555
1591
|
* local cache (write-through, "local" env only)
|
|
1556
1592
|
*/
|
|
1557
|
-
async writeSecrets(env, componentName, secrets, io = this.io) {
|
|
1593
|
+
async writeSecrets(env, componentName, secrets, io = this.io, options = {}) {
|
|
1558
1594
|
if (!io) {
|
|
1559
1595
|
throw new Error("writing to the vault requires an interactive context");
|
|
1560
1596
|
}
|
|
1561
|
-
await this.vault.writeSecrets(io, env, componentName, secrets);
|
|
1597
|
+
await this.vault.writeSecrets(io, env, componentName, secrets, options);
|
|
1562
1598
|
if (env === CACHED_ENV) {
|
|
1563
1599
|
await (0, cache_1.updateSecretsCache)(this.vault.id, env, componentName, Object.fromEntries(Object.entries(secrets).map(([key, value]) => [
|
|
1564
1600
|
key,
|
|
@@ -2557,6 +2593,43 @@ exports.getAgentSkillTargets = getAgentSkillTargets;
|
|
|
2557
2593
|
|
|
2558
2594
|
/***/ }),
|
|
2559
2595
|
|
|
2596
|
+
/***/ 72792:
|
|
2597
|
+
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
2598
|
+
|
|
2599
|
+
"use strict";
|
|
2600
|
+
|
|
2601
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
2602
|
+
exports.getPinLabelRegexSource = exports.getAutoStopConfig = exports.DEFAULT_PIN_LABEL = exports.DEFAULT_DEV_AUTO_STOP = exports.DEFAULT_REVIEW_AUTO_STOP = exports.REVIEW_AUTO_STOP_VARIABLE = void 0;
|
|
2603
|
+
const lodash_es_1 = __nccwpck_require__(50210);
|
|
2604
|
+
/**
|
|
2605
|
+
* pipeline-level variable holding the `auto_stop_in` of review
|
|
2606
|
+
* environments. Review deploy jobs reference it instead of a literal,
|
|
2607
|
+
* so the pin label's workflow rule can override it to `never` for the
|
|
2608
|
+
* whole pipeline (all components at once).
|
|
2609
|
+
*/
|
|
2610
|
+
exports.REVIEW_AUTO_STOP_VARIABLE = "CL_REVIEW_AUTO_STOP";
|
|
2611
|
+
exports.DEFAULT_REVIEW_AUTO_STOP = "1 week";
|
|
2612
|
+
exports.DEFAULT_DEV_AUTO_STOP = "4 weeks";
|
|
2613
|
+
exports.DEFAULT_PIN_LABEL = "catladder::pin-review";
|
|
2614
|
+
const getAutoStopConfig = (config) => {
|
|
2615
|
+
var _a, _b, _c, _d, _e, _f;
|
|
2616
|
+
return ({
|
|
2617
|
+
review: (_b = (_a = config.autoStop) === null || _a === void 0 ? void 0 : _a.review) !== null && _b !== void 0 ? _b : exports.DEFAULT_REVIEW_AUTO_STOP,
|
|
2618
|
+
dev: (_d = (_c = config.autoStop) === null || _c === void 0 ? void 0 : _c.dev) !== null && _d !== void 0 ? _d : exports.DEFAULT_DEV_AUTO_STOP,
|
|
2619
|
+
pinLabel: (_f = (_e = config.autoStop) === null || _e === void 0 ? void 0 : _e.pinLabel) !== null && _f !== void 0 ? _f : exports.DEFAULT_PIN_LABEL,
|
|
2620
|
+
});
|
|
2621
|
+
};
|
|
2622
|
+
exports.getAutoStopConfig = getAutoStopConfig;
|
|
2623
|
+
/**
|
|
2624
|
+
* matches the pin label inside `$CI_MERGE_REQUEST_LABELS`
|
|
2625
|
+
* (comma-separated) — anchored so `pin` never matches `no-pin`
|
|
2626
|
+
*/
|
|
2627
|
+
const getPinLabelRegexSource = (pinLabel) => `(^|,)${(0, lodash_es_1.escapeRegExp)(pinLabel).replaceAll("/", "\\/")}(,|$)`;
|
|
2628
|
+
exports.getPinLabelRegexSource = getPinLabelRegexSource;
|
|
2629
|
+
//# sourceMappingURL=autoStop.js.map
|
|
2630
|
+
|
|
2631
|
+
/***/ }),
|
|
2632
|
+
|
|
2560
2633
|
/***/ 48476:
|
|
2561
2634
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
2562
2635
|
|
|
@@ -3935,6 +4008,7 @@ exports.GitlabBackend = void 0;
|
|
|
3935
4008
|
const promises_1 = __nccwpck_require__(91943);
|
|
3936
4009
|
const rules_1 = __nccwpck_require__(78503);
|
|
3937
4010
|
const config_1 = __nccwpck_require__(75591);
|
|
4011
|
+
const autoStop_1 = __nccwpck_require__(72792);
|
|
3938
4012
|
const createAllJobs_1 = __nccwpck_require__(83477);
|
|
3939
4013
|
const jobImagesPlan_1 = __nccwpck_require__(59623);
|
|
3940
4014
|
const shippedCatci_1 = __nccwpck_require__(27967);
|
|
@@ -4120,6 +4194,7 @@ class GitlabBackend {
|
|
|
4120
4194
|
// per-pipeline-type variables (pipelines.gitlab.runnerVariables)
|
|
4121
4195
|
...(0, index_1.getPipelineOptions)(config, this.type).runnerVariables,
|
|
4122
4196
|
},
|
|
4197
|
+
autoStop: (0, autoStop_1.getAutoStopConfig)(config),
|
|
4123
4198
|
});
|
|
4124
4199
|
}
|
|
4125
4200
|
}
|
|
@@ -4564,6 +4639,7 @@ function getGitlabNeedsForWorkspaceJob(context, { needs }, allJobs) {
|
|
|
4564
4639
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
4565
4640
|
exports.createGitlabPipelineWithDefaults = void 0;
|
|
4566
4641
|
const bash_1 = __nccwpck_require__(94143);
|
|
4642
|
+
const autoStop_1 = __nccwpck_require__(72792);
|
|
4567
4643
|
const rules_1 = __nccwpck_require__(78503);
|
|
4568
4644
|
/**
|
|
4569
4645
|
* gitlab requires a top-level default image for jobs that don't set their
|
|
@@ -4572,7 +4648,8 @@ const rules_1 = __nccwpck_require__(78503);
|
|
|
4572
4648
|
* build-free image (a catladder job image would drag in a build job).
|
|
4573
4649
|
*/
|
|
4574
4650
|
const DEFAULT_PIPELINE_IMAGE = "node:22";
|
|
4575
|
-
const createGitlabPipelineWithDefaults = ({ image, variables, before_script, ...config }) => {
|
|
4651
|
+
const createGitlabPipelineWithDefaults = ({ image, variables, before_script, autoStop, ...config }) => {
|
|
4652
|
+
const pinLabel = autoStop && autoStop.pinLabel;
|
|
4576
4653
|
return {
|
|
4577
4654
|
image: image !== null && image !== void 0 ? image : DEFAULT_PIPELINE_IMAGE,
|
|
4578
4655
|
variables: {
|
|
@@ -4581,6 +4658,10 @@ const createGitlabPipelineWithDefaults = ({ image, variables, before_script, ...
|
|
|
4581
4658
|
CACHE_COMPRESSION_LEVEL: "fast", // same as above, but for caches
|
|
4582
4659
|
TRANSFER_METER_FREQUENCY: "5s", // how often we should update the transfer meter for cache upload/download
|
|
4583
4660
|
GIT_DEPTH: "1", // no need the full depth
|
|
4661
|
+
// review env lifetime — the pin-label workflow rule below
|
|
4662
|
+
// overrides this to "never" (workflow rule variables take
|
|
4663
|
+
// precedence over pipeline-level variables)
|
|
4664
|
+
...(pinLabel ? { [autoStop_1.REVIEW_AUTO_STOP_VARIABLE]: autoStop.review } : {}),
|
|
4584
4665
|
...(variables !== null && variables !== void 0 ? variables : {}),
|
|
4585
4666
|
},
|
|
4586
4667
|
before_script: [
|
|
@@ -4597,6 +4678,20 @@ const createGitlabPipelineWithDefaults = ({ image, variables, before_script, ...
|
|
|
4597
4678
|
PIPELINE_NAME: "Thinking...",
|
|
4598
4679
|
},
|
|
4599
4680
|
},
|
|
4681
|
+
// pinned MRs (rules stop at the first match, so this must come
|
|
4682
|
+
// before the plain merge-request rule)
|
|
4683
|
+
...(pinLabel
|
|
4684
|
+
? [
|
|
4685
|
+
{
|
|
4686
|
+
if: `${rules_1.RULE_IS_MERGE_REQUEST.if} && $CI_MERGE_REQUEST_LABELS =~ /${(0, autoStop_1.getPinLabelRegexSource)(pinLabel)}/`,
|
|
4687
|
+
variables: {
|
|
4688
|
+
PIPELINE_ICON: "🐱📌",
|
|
4689
|
+
PIPELINE_NAME: "mr$CI_MERGE_REQUEST_IID - $CI_MERGE_REQUEST_TITLE",
|
|
4690
|
+
[autoStop_1.REVIEW_AUTO_STOP_VARIABLE]: "never",
|
|
4691
|
+
},
|
|
4692
|
+
},
|
|
4693
|
+
]
|
|
4694
|
+
: []),
|
|
4600
4695
|
{
|
|
4601
4696
|
if: rules_1.RULE_IS_MERGE_REQUEST.if,
|
|
4602
4697
|
variables: {
|
|
@@ -8311,6 +8406,7 @@ const docker_1 = __nccwpck_require__(12354);
|
|
|
8311
8406
|
const context_1 = __nccwpck_require__(73938);
|
|
8312
8407
|
const jobs_1 = __nccwpck_require__(98521);
|
|
8313
8408
|
const utils_1 = __nccwpck_require__(71286);
|
|
8409
|
+
const autoStop_1 = __nccwpck_require__(72792);
|
|
8314
8410
|
const stop_1 = __nccwpck_require__(35937);
|
|
8315
8411
|
const variables_1 = __nccwpck_require__(54768);
|
|
8316
8412
|
exports.DEPLOY_JOB_NAME = "🚀 Deploy";
|
|
@@ -8319,10 +8415,15 @@ class DeployJob extends jobs_1.CatladderJob {
|
|
|
8319
8415
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
8320
8416
|
const hasDocker = (0, docker_1.requiresDockerBuild)(context);
|
|
8321
8417
|
const isStoppable = (0, utils_1.contextIsStoppable)(context);
|
|
8418
|
+
const autoStopConfig = (0, autoStop_1.getAutoStopConfig)(context.fullConfig);
|
|
8322
8419
|
const autoStop = context.environment.envType === "review"
|
|
8323
|
-
?
|
|
8420
|
+
? // review envs read the lifetime from a pipeline variable, so
|
|
8421
|
+
// the pin label's workflow rule can override it to "never"
|
|
8422
|
+
autoStopConfig.pinLabel === false
|
|
8423
|
+
? autoStopConfig.review
|
|
8424
|
+
: `$${autoStop_1.REVIEW_AUTO_STOP_VARIABLE}`
|
|
8324
8425
|
: context.environment.envType === "dev"
|
|
8325
|
-
?
|
|
8426
|
+
? autoStopConfig.dev
|
|
8326
8427
|
: undefined;
|
|
8327
8428
|
const deployConfig = (_a = context.deploy) === null || _a === void 0 ? void 0 : _a.config;
|
|
8328
8429
|
// if auto or manual is configured explicitly, use that
|
|
@@ -11151,6 +11252,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
11151
11252
|
};
|
|
11152
11253
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
11153
11254
|
__exportStar(__nccwpck_require__(46734), exports);
|
|
11255
|
+
__exportStar(__nccwpck_require__(72792), exports);
|
|
11154
11256
|
__exportStar(__nccwpck_require__(62853), exports);
|
|
11155
11257
|
__exportStar(__nccwpck_require__(63557), exports);
|
|
11156
11258
|
__exportStar(__nccwpck_require__(78503), exports);
|