@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.
Files changed (100) hide show
  1. package/dist/apps/cli/src/apps/cli/commands/project/doctor/checkGithub.js +3 -3
  2. package/dist/apps/cli/src/apps/cli/commands/project/doctor/checkGithub.js.map +1 -1
  3. package/dist/apps/cli/src/apps/cli/commands/project/setup/setupAccessTokens.js +2 -2
  4. package/dist/apps/cli/src/apps/cli/commands/project/setup/setupAccessTokens.js.map +1 -1
  5. package/dist/apps/cli/src/apps/cli/commands/project/setup/setupGithub.js +2 -2
  6. package/dist/apps/cli/src/apps/cli/commands/project/setup/setupGithub.js.map +1 -1
  7. package/dist/apps/cli/src/apps/cli/commands/project/setup/setupKubernetes.js +23 -7
  8. package/dist/apps/cli/src/apps/cli/commands/project/setup/setupKubernetes.js.map +1 -1
  9. package/dist/apps/cli/src/commands/index.d.ts +1 -0
  10. package/dist/apps/cli/src/commands/index.js +4 -1
  11. package/dist/apps/cli/src/commands/index.js.map +1 -1
  12. package/dist/apps/cli/src/commands/project/commandConfigSecrets.js +2 -1
  13. package/dist/apps/cli/src/commands/project/commandConfigSecrets.js.map +1 -1
  14. package/dist/apps/cli/src/commands/project/commandMrPin.d.ts +21 -0
  15. package/dist/apps/cli/src/commands/project/commandMrPin.js +119 -0
  16. package/dist/apps/cli/src/commands/project/commandMrPin.js.map +1 -0
  17. package/dist/apps/cli/src/commands/project/commandSecretsSyncGithub.d.ts +1 -42
  18. package/dist/apps/cli/src/commands/project/commandSecretsSyncGithub.js +5 -124
  19. package/dist/apps/cli/src/commands/project/commandSecretsSyncGithub.js.map +1 -1
  20. package/dist/apps/cli/src/commands/project/secrets/commandSecretsPush.js +2 -1
  21. package/dist/apps/cli/src/commands/project/secrets/commandSecretsPush.js.map +1 -1
  22. package/dist/apps/cli/src/commands/project/secrets/commandSecretsSet.js +2 -2
  23. package/dist/apps/cli/src/commands/project/secrets/commandSecretsSet.js.map +1 -1
  24. package/dist/apps/cli/src/commands/project/secrets/document.d.ts +1 -12
  25. package/dist/apps/cli/src/commands/project/secrets/document.js +1 -79
  26. package/dist/apps/cli/src/commands/project/secrets/document.js.map +1 -1
  27. package/dist/apps/cli/src/gcloud/serviceAccounts.js +15 -4
  28. package/dist/apps/cli/src/gcloud/serviceAccounts.js.map +1 -1
  29. package/dist/apps/cli/src/secrets/github.d.ts +41 -0
  30. package/dist/apps/cli/src/secrets/github.js +127 -0
  31. package/dist/apps/cli/src/secrets/github.js.map +1 -0
  32. package/dist/apps/cli/src/secrets/index.d.ts +2 -0
  33. package/dist/apps/cli/src/secrets/index.js +19 -0
  34. package/dist/apps/cli/src/secrets/index.js.map +1 -0
  35. package/dist/apps/cli/src/secrets/writeSecrets.d.ts +18 -0
  36. package/dist/apps/cli/src/secrets/writeSecrets.js +88 -0
  37. package/dist/apps/cli/src/secrets/writeSecrets.js.map +1 -0
  38. package/dist/apps/cli/src/utils/gitlab.d.ts +10 -0
  39. package/dist/apps/cli/src/utils/gitlab.js +30 -5
  40. package/dist/apps/cli/src/utils/gitlab.js.map +1 -1
  41. package/dist/apps/cli/src/vault/BitwardenVault.d.ts +6 -0
  42. package/dist/apps/cli/src/vault/BitwardenVault.js +11 -1
  43. package/dist/apps/cli/src/vault/BitwardenVault.js.map +1 -1
  44. package/dist/apps/cli/src/vault/GitlabVault.d.ts +2 -2
  45. package/dist/apps/cli/src/vault/GitlabVault.js +3 -2
  46. package/dist/apps/cli/src/vault/GitlabVault.js.map +1 -1
  47. package/dist/apps/cli/src/vault/VaultManager.d.ts +2 -2
  48. package/dist/apps/cli/src/vault/VaultManager.js +2 -2
  49. package/dist/apps/cli/src/vault/VaultManager.js.map +1 -1
  50. package/dist/apps/cli/src/vault/types.d.ts +16 -2
  51. package/dist/bundles/catenv/index.js +115 -13
  52. package/dist/bundles/cli/index.js +749 -431
  53. package/dist/bundles/skills/catladder-cli/references/commands.md +13 -0
  54. package/dist/bundles/skills/catladder-deploys/SKILL.md +7 -0
  55. package/dist/bundles/skills/catladder-migrate-ci-backend/SKILL.md +7 -2
  56. package/dist/bundles/skills/catladder-pipelines/SKILL.md +27 -1
  57. package/dist/bundles/skills/catladder-secrets/SKILL.md +16 -0
  58. package/dist/packages/pipeline/src/autoStop.d.ts +22 -0
  59. package/dist/packages/pipeline/src/autoStop.js +30 -0
  60. package/dist/packages/pipeline/src/autoStop.js.map +1 -0
  61. package/dist/packages/pipeline/src/backends/gitlab/GitlabBackend.js +2 -0
  62. package/dist/packages/pipeline/src/backends/gitlab/GitlabBackend.js.map +1 -1
  63. package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.d.ts +4 -1
  64. package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.js +21 -1
  65. package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.js.map +1 -1
  66. package/dist/packages/pipeline/src/deploy/base/deploy.js +8 -2
  67. package/dist/packages/pipeline/src/deploy/base/deploy.js.map +1 -1
  68. package/dist/packages/pipeline/src/index.d.ts +1 -0
  69. package/dist/packages/pipeline/src/index.js +1 -0
  70. package/dist/packages/pipeline/src/index.js.map +1 -1
  71. package/dist/packages/pipeline/src/types/config.d.ts +32 -0
  72. package/dist/skills/catladder-cli/references/commands.md +13 -0
  73. package/dist/skills/catladder-deploys/SKILL.md +7 -0
  74. package/dist/skills/catladder-migrate-ci-backend/SKILL.md +7 -2
  75. package/dist/skills/catladder-pipelines/SKILL.md +27 -1
  76. package/dist/skills/catladder-secrets/SKILL.md +16 -0
  77. package/dist/tsconfig.tsbuildinfo +1 -1
  78. package/package.json +1 -1
  79. package/src/apps/cli/commands/project/doctor/checkGithub.ts +1 -1
  80. package/src/apps/cli/commands/project/setup/setupAccessTokens.ts +3 -2
  81. package/src/apps/cli/commands/project/setup/setupGithub.ts +1 -1
  82. package/src/apps/cli/commands/project/setup/setupKubernetes.ts +31 -20
  83. package/src/commands/index.ts +1 -0
  84. package/src/commands/project/commandConfigSecrets.ts +1 -1
  85. package/src/commands/project/commandMrPin.ts +184 -0
  86. package/src/commands/project/commandSecretsSyncGithub.ts +7 -154
  87. package/src/commands/project/secrets/commandSecretsPush.ts +2 -5
  88. package/src/commands/project/secrets/commandSecretsSet.ts +2 -2
  89. package/src/commands/project/secrets/document.ts +2 -127
  90. package/src/gcloud/serviceAccounts.ts +16 -7
  91. package/src/secrets/__tests__/writeSecrets.test.ts +147 -0
  92. package/src/secrets/github.ts +157 -0
  93. package/src/secrets/index.ts +2 -0
  94. package/src/secrets/writeSecrets.ts +138 -0
  95. package/src/utils/gitlab.ts +34 -7
  96. package/src/vault/BitwardenVault.ts +10 -1
  97. package/src/vault/GitlabVault.ts +9 -2
  98. package/src/vault/VaultManager.ts +3 -2
  99. package/src/vault/__tests__/BitwardenVault.test.ts +88 -0
  100. 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 Error("not found");
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
- const project = await (0, exports.doGitlabRequest)(io, `projects/${encodeURIComponent(gitRemotePath)}`);
1082
- return project;
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 notes = (0, yaml_1.stringify)(secrets);
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
- await (0, gitlab_1.upsertAllVariables)(io, secrets, env, componentName);
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
- ? "1 week"
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
- ? "4 weeks"
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);