@catladder/cli 5.1.0 → 5.1.1

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 (40) hide show
  1. package/dist/apps/cli/src/apps/cli/commands/project/doctor/checkGithubImageCasing.d.ts +15 -0
  2. package/dist/apps/cli/src/apps/cli/commands/project/doctor/checkGithubImageCasing.js +60 -0
  3. package/dist/apps/cli/src/apps/cli/commands/project/doctor/checkGithubImageCasing.js.map +1 -0
  4. package/dist/apps/cli/src/apps/cli/commands/project/doctor/index.js +2 -0
  5. package/dist/apps/cli/src/apps/cli/commands/project/doctor/index.js.map +1 -1
  6. package/dist/apps/cli/src/utils/github.js +2 -2
  7. package/dist/apps/cli/src/utils/github.js.map +1 -1
  8. package/dist/bundles/catenv/index.js +150 -15
  9. package/dist/bundles/cli/index.js +221 -17
  10. package/dist/bundles/skills/catladder-config/SKILL.md +3 -1
  11. package/dist/bundles/skills/catladder-migrate-ci-backend/SKILL.md +11 -0
  12. package/dist/bundles/skills/catladder-pipelines/SKILL.md +24 -0
  13. package/dist/packages/pipeline/src/backends/github/GithubBackend.js +11 -5
  14. package/dist/packages/pipeline/src/backends/github/GithubBackend.js.map +1 -1
  15. package/dist/packages/pipeline/src/backends/github/ciVariables.d.ts +13 -2
  16. package/dist/packages/pipeline/src/backends/github/ciVariables.js +18 -5
  17. package/dist/packages/pipeline/src/backends/github/ciVariables.js.map +1 -1
  18. package/dist/packages/pipeline/src/backends/github/createGithubJobs.js +1 -1
  19. package/dist/packages/pipeline/src/backends/github/createGithubJobs.js.map +1 -1
  20. package/dist/packages/pipeline/src/backends/github/ghcr.d.ts +29 -0
  21. package/dist/packages/pipeline/src/backends/github/ghcr.js +40 -0
  22. package/dist/packages/pipeline/src/backends/github/ghcr.js.map +1 -0
  23. package/dist/packages/pipeline/src/backends/github/index.d.ts +2 -0
  24. package/dist/packages/pipeline/src/backends/github/index.js +2 -0
  25. package/dist/packages/pipeline/src/backends/github/index.js.map +1 -1
  26. package/dist/packages/pipeline/src/backends/github/registryImage.d.ts +20 -0
  27. package/dist/packages/pipeline/src/backends/github/registryImage.js +49 -0
  28. package/dist/packages/pipeline/src/backends/github/registryImage.js.map +1 -0
  29. package/dist/packages/pipeline/src/customImages/jobImagesPlan.d.ts +15 -3
  30. package/dist/packages/pipeline/src/customImages/jobImagesPlan.js +14 -3
  31. package/dist/packages/pipeline/src/customImages/jobImagesPlan.js.map +1 -1
  32. package/dist/packages/pipeline/src/types/config.d.ts +12 -0
  33. package/dist/skills/catladder-config/SKILL.md +3 -1
  34. package/dist/skills/catladder-migrate-ci-backend/SKILL.md +11 -0
  35. package/dist/skills/catladder-pipelines/SKILL.md +24 -0
  36. package/dist/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +1 -1
  38. package/src/apps/cli/commands/project/doctor/checkGithubImageCasing.ts +87 -0
  39. package/src/apps/cli/commands/project/doctor/index.ts +2 -0
  40. package/src/utils/github.ts +2 -4
@@ -0,0 +1,15 @@
1
+ import type { Config } from "../../../../../../../../packages/pipeline/src/index.js";
2
+ import type { DoctorReport } from "./DoctorReport";
3
+ /**
4
+ * ghcr image paths must be lowercase, but `${{ github.repository }}`
5
+ * interpolates github's display casing — so a repository whose owner or
6
+ * name contains an uppercase character needs a lowercased literal in the
7
+ * generated workflows. Generation bakes that in, which means committed
8
+ * workflows generated by an older catladder (or hand-edited ones) still
9
+ * carry the expression and fail every docker job with
10
+ * `repository name must be lowercase`.
11
+ *
12
+ * Unlike the rest of the github checks this needs no `gh` login — only
13
+ * the git remote and the committed files.
14
+ */
15
+ export declare const checkGithubImageCasing: (report: DoctorReport, config: Config) => Promise<void>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkGithubImageCasing = void 0;
4
+ const promises_1 = require("fs/promises");
5
+ const path_1 = require("path");
6
+ const pipeline_1 = require("../../../../../../../../packages/pipeline/src/index.js");
7
+ const secrets_1 = require("../../../../../secrets");
8
+ const WORKFLOWS_FOLDER = ".github/workflows";
9
+ const GENERATED_FILE_PREFIX = "catladder-";
10
+ /**
11
+ * the generated workflow files, or an empty list when none exist yet
12
+ */
13
+ const readGeneratedWorkflows = async () => {
14
+ const entries = await (0, promises_1.readdir)(WORKFLOWS_FOLDER).catch(() => []);
15
+ return Promise.all(entries
16
+ .filter((file) => file.startsWith(GENERATED_FILE_PREFIX))
17
+ .map((file) => (0, promises_1.readFile)((0, path_1.join)(WORKFLOWS_FOLDER, file), "utf8")));
18
+ };
19
+ /**
20
+ * ghcr image paths must be lowercase, but `${{ github.repository }}`
21
+ * interpolates github's display casing — so a repository whose owner or
22
+ * name contains an uppercase character needs a lowercased literal in the
23
+ * generated workflows. Generation bakes that in, which means committed
24
+ * workflows generated by an older catladder (or hand-edited ones) still
25
+ * carry the expression and fail every docker job with
26
+ * `repository name must be lowercase`.
27
+ *
28
+ * Unlike the rest of the github checks this needs no `gh` login — only
29
+ * the git remote and the committed files.
30
+ */
31
+ const checkGithubImageCasing = async (report, config) => {
32
+ if (!(0, pipeline_1.getEnabledPipelineTypes)(config).includes("github"))
33
+ return;
34
+ const repo = await (0, secrets_1.getConfiguredGithubRepo)();
35
+ if (!repo || repo === repo.toLowerCase()) {
36
+ // an all-lowercase repository keeps the expression on purpose (it
37
+ // stays correct in forks), and an unresolvable remote is reported
38
+ // by checkGithub already
39
+ return;
40
+ }
41
+ report.section("github image names");
42
+ const workflows = await readGeneratedWorkflows();
43
+ if (workflows.length === 0) {
44
+ report.warn(`no generated workflows in ${WORKFLOWS_FOLDER} to check`, "run: catenv");
45
+ return;
46
+ }
47
+ const stale = workflows.filter((content) => content.includes(pipeline_1.GHCR_REPOSITORY_EXPRESSION));
48
+ if (stale.length > 0) {
49
+ report.fail(`'${repo}' is mixed-case, but ${stale.length}/${workflows.length} generated workflows still use ${pipeline_1.GHCR_REPOSITORY_EXPRESSION} — ghcr rejects uppercase image paths, so every docker job fails with "repository name must be lowercase"`, "run: catenv (and commit the regenerated workflows)");
50
+ return;
51
+ }
52
+ const uppercase = workflows.flatMap((content) => [...content.matchAll(/ghcr\.io\/\S*[A-Z]\S*/g)].map(([match]) => match));
53
+ if (uppercase.length > 0) {
54
+ report.fail(`uppercase ghcr image paths in the generated workflows: ${[...new Set(uppercase)].join(", ")}`, `run: catenv — if it persists, set pipelines.github.repository (the '${(0, pipeline_1.getPipelineGitRemote)(config, "github")}' remote resolves to '${repo}')`);
55
+ return;
56
+ }
57
+ report.ok(`ghcr image paths lowercased for '${repo}'`);
58
+ };
59
+ exports.checkGithubImageCasing = checkGithubImageCasing;
60
+ //# sourceMappingURL=checkGithubImageCasing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkGithubImageCasing.js","sourceRoot":"","sources":["../../../../../../../../../src/apps/cli/commands/project/doctor/checkGithubImageCasing.ts"],"names":[],"mappings":";;;AAAA,0CAAgD;AAChD,+BAA4B;AAE5B,kDAI6B;AAC7B,oDAAiE;AAGjE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAC7C,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAE3C;;GAEG;AACH,MAAM,sBAAsB,GAAG,KAAK,IAAuB,EAAE;IAC3D,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAChE,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO;SACJ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;SACxD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CACjE,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACI,MAAM,sBAAsB,GAAG,KAAK,EACzC,MAAoB,EACpB,MAAc,EACd,EAAE;IACF,IAAI,CAAC,IAAA,kCAAuB,EAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO;IAEhE,MAAM,IAAI,GAAG,MAAM,IAAA,iCAAuB,GAAE,CAAC;IAC7C,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACzC,kEAAkE;QAClE,kEAAkE;QAClE,yBAAyB;QACzB,OAAO;IACT,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAErC,MAAM,SAAS,GAAG,MAAM,sBAAsB,EAAE,CAAC;IACjD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CACT,6BAA6B,gBAAgB,WAAW,EACxD,aAAa,CACd,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACzC,OAAO,CAAC,QAAQ,CAAC,qCAA0B,CAAC,CAC7C,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CACT,IAAI,IAAI,wBAAwB,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,kCAAkC,qCAA0B,2GAA2G,EACvO,oDAAoD,CACrD,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC9C,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CACxE,CAAC;IACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CACT,0DAA0D,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC9F,uEAAuE,IAAA,+BAAoB,EAAC,MAAM,EAAE,QAAQ,CAAC,yBAAyB,IAAI,IAAI,CAC/I,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,oCAAoC,IAAI,GAAG,CAAC,CAAC;AACzD,CAAC,CAAC;AAhDW,QAAA,sBAAsB,0BAgDjC"}
@@ -5,6 +5,7 @@ const pipeline_1 = require("../../../../../../../../packages/pipeline/src/index.
5
5
  const getProjectConfig_1 = require("../../../../../config/getProjectConfig");
6
6
  const checkCloudRun_1 = require("./checkCloudRun");
7
7
  const checkGithub_1 = require("./checkGithub");
8
+ const checkGithubImageCasing_1 = require("./checkGithubImageCasing");
8
9
  const checkGitlab_1 = require("./checkGitlab");
9
10
  const checkStore_1 = require("./checkStore");
10
11
  const DoctorReport_1 = require("./DoctorReport");
@@ -40,6 +41,7 @@ const doctorProject = async (instance, onlyComponents) => {
40
41
  await (0, checkGitlab_1.checkGitlab)(instance, report, contexts);
41
42
  }
42
43
  await (0, checkCloudRun_1.checkCloudRun)(report, contexts);
44
+ await (0, checkGithubImageCasing_1.checkGithubImageCasing)(report, config);
43
45
  await (0, checkGithub_1.checkGithub)(report, config);
44
46
  report.summarize();
45
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../src/apps/cli/commands/project/doctor/index.ts"],"names":[],"mappings":";;;AACA,kDAA8D;AAC9D,6EAGgD;AAEhD,mDAAgD;AAChD,+CAA4C;AAC5C,+CAA4C;AAC5C,6CAA0C;AAC1C,iDAA8C;AAE9C;;;;;;;;;;;GAWG;AACI,MAAM,aAAa,GAAG,KAAK,EAChC,QAAY,EACZ,cAAkC,EAClC,EAAE;IACF,MAAM,MAAM,GAAG,MAAM,IAAA,mCAAgB,GAAE,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,QAAQ,CAAC,GAAG,CACV,oEAAoE,CACrE,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,2BAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,IAAA,uBAAU,EAAC,MAAM,CAAC,CAAC;IAEzB,IAAI,QAAQ,GAAuB,EAAE,CAAC;IACtC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAA,yCAAsB,EAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CACT,uCAAuC,CAAC,CAAC,OAAO,EAAE,EAClD,8BAA8B,CAC/B,CAAC;IACJ,CAAC;IAED,IAAI,IAAA,kCAAuB,EAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,IAAA,yBAAW,EAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,IAAA,6BAAa,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,IAAA,yBAAW,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC,MAAM,CAAC,SAAS,EAAE,CAAC;AACrB,CAAC,CAAC;AAjCW,QAAA,aAAa,iBAiCxB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../src/apps/cli/commands/project/doctor/index.ts"],"names":[],"mappings":";;;AACA,kDAA8D;AAC9D,6EAGgD;AAEhD,mDAAgD;AAChD,+CAA4C;AAC5C,qEAAkE;AAClE,+CAA4C;AAC5C,6CAA0C;AAC1C,iDAA8C;AAE9C;;;;;;;;;;;GAWG;AACI,MAAM,aAAa,GAAG,KAAK,EAChC,QAAY,EACZ,cAAkC,EAClC,EAAE;IACF,MAAM,MAAM,GAAG,MAAM,IAAA,mCAAgB,GAAE,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,QAAQ,CAAC,GAAG,CACV,oEAAoE,CACrE,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,2BAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,IAAA,uBAAU,EAAC,MAAM,CAAC,CAAC;IAEzB,IAAI,QAAQ,GAAuB,EAAE,CAAC;IACtC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAA,yCAAsB,EAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CACT,uCAAuC,CAAC,CAAC,OAAO,EAAE,EAClD,8BAA8B,CAC/B,CAAC;IACJ,CAAC;IAED,IAAI,IAAA,kCAAuB,EAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,IAAA,yBAAW,EAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,IAAA,6BAAa,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,IAAA,+CAAsB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAA,yBAAW,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC,MAAM,CAAC,SAAS,EAAE,CAAC;AACrB,CAAC,CAAC;AAlCW,QAAA,aAAa,iBAkCxB"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ghApiJson = exports.ensureGithubEnvironment = exports.setGithubVariable = exports.setGithubSecret = exports.listGithubVariableNames = exports.listGithubSecretNames = exports.listGithubEnvironments = exports.getGithubRepoFromRemote = exports.isGhAuthenticated = void 0;
4
4
  const child_process_1 = require("child_process");
5
5
  const util_1 = require("util");
6
+ const pipeline_1 = require("../../../../packages/pipeline/src/index.js");
6
7
  const execFile = (0, util_1.promisify)(child_process_1.execFile);
7
8
  /**
8
9
  * whether the github cli (gh) is installed and authenticated
@@ -25,8 +26,7 @@ exports.isGhAuthenticated = isGhAuthenticated;
25
26
  const getGithubRepoFromRemote = async (remoteName) => {
26
27
  try {
27
28
  const { stdout } = await execFile("git", ["remote", "get-url", remoteName]);
28
- const match = stdout.match(/github\.com[:/]([\w.-]+\/[\w.-]+?)(\.git)?\s*$/);
29
- return match === null || match === void 0 ? void 0 : match[1];
29
+ return (0, pipeline_1.parseGithubRepoFromRemoteUrl)(stdout);
30
30
  }
31
31
  catch (_a) {
32
32
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../../src/utils/github.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../../src/utils/github.ts"],"names":[],"mappings":"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"}
@@ -2642,6 +2642,7 @@ const path_1 = __nccwpck_require__(16928);
2642
2642
  const createAllJobs_1 = __nccwpck_require__(83477);
2643
2643
  const config_1 = __nccwpck_require__(75591);
2644
2644
  const ciVariables_1 = __nccwpck_require__(17300);
2645
+ const registryImage_1 = __nccwpck_require__(24333);
2645
2646
  const index_1 = __nccwpck_require__(62853);
2646
2647
  const createGithubJobs_1 = __nccwpck_require__(73474);
2647
2648
  const jobImagesPlan_1 = __nccwpck_require__(59623);
@@ -2695,7 +2696,10 @@ class GithubBackend {
2695
2696
  await (0, promises_1.rm)(scriptFiles_1.GITHUB_SCRIPTS_FOLDER, { recursive: true, force: true });
2696
2697
  }
2697
2698
  async createFiles(config) {
2698
- const images = this.createImagesPlan(config);
2699
+ // ghcr rejects uppercase image paths, and `${{ github.repository }}`
2700
+ // interpolates github's display casing — a mixed-case owner or repo
2701
+ // needs a lowercased literal instead (see ./ghcr)
2702
+ const images = this.createImagesPlan(config, await (0, registryImage_1.resolveGithubRegistryImage)(config));
2699
2703
  const scripts = new scriptFiles_1.GithubScriptFiles();
2700
2704
  const workflows = await this.createWorkflows(config, images, scripts);
2701
2705
  return [
@@ -2710,8 +2714,8 @@ class GithubBackend {
2710
2714
  ...(0, shippedCatci_1.getCatciGeneratedFiles)(),
2711
2715
  ];
2712
2716
  }
2713
- createImagesPlan(config) {
2714
- return new jobImagesPlan_1.JobImagesPlan(this.type, config.images);
2717
+ createImagesPlan(config, registryImage) {
2718
+ return new jobImagesPlan_1.JobImagesPlan(this.type, config.images, registryImage);
2715
2719
  }
2716
2720
  /**
2717
2721
  * all workflows keyed by file name, mainly for testing purposes
@@ -2720,9 +2724,11 @@ class GithubBackend {
2720
2724
  var _a, _b, _c, _d;
2721
2725
  const workflows = {};
2722
2726
  // per-pipeline-type variables (pipelines.github.runnerVariables);
2723
- // workflow-level env, so job-level runnerVariables take precedence
2727
+ // workflow-level env, so job-level runnerVariables take precedence.
2728
+ // The images plan is the single source of the ghcr namespace, so the
2729
+ // workflow env and the container images can never disagree.
2724
2730
  const workflowEnv = {
2725
- ...ciVariables_1.GITHUB_INJECTED_WORKFLOW_ENV,
2731
+ ...(0, ciVariables_1.getGithubInjectedWorkflowEnv)(images.registryImageRef()),
2726
2732
  ...(0, index_1.getPipelineOptions)(config, this.type).runnerVariables,
2727
2733
  };
2728
2734
  const reviewStopJobs = {};
@@ -3065,12 +3071,13 @@ exports.makeAggregateCheckJob = makeAggregateCheckJob;
3065
3071
  /***/ }),
3066
3072
 
3067
3073
  /***/ 17300:
3068
- /***/ ((__unused_webpack_module, exports) => {
3074
+ /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
3069
3075
 
3070
3076
  "use strict";
3071
3077
 
3072
3078
  Object.defineProperty(exports, "__esModule", ({ value: true }));
3073
- exports.GITHUB_INJECTED_WORKFLOW_ENV = exports.GITHUB_CI_VARIABLES = void 0;
3079
+ exports.GITHUB_INJECTED_WORKFLOW_ENV_NAMES = exports.getGithubInjectedWorkflowEnv = exports.GITHUB_CI_VARIABLES = void 0;
3080
+ const ghcr_1 = __nccwpck_require__(59011);
3074
3081
  /**
3075
3082
  * how the github backend names the predefined CI variables.
3076
3083
  *
@@ -3091,16 +3098,28 @@ exports.GITHUB_CI_VARIABLES = {
3091
3098
  };
3092
3099
  /**
3093
3100
  * the workflow-level env the backend injects to provide the CL_*
3094
- * variables referenced by {@link GITHUB_CI_VARIABLES}
3101
+ * variables referenced by {@link GITHUB_CI_VARIABLES}.
3102
+ *
3103
+ * `registryImage` is the ghcr namespace to push to — the actions
3104
+ * expression for an all-lowercase repository, a lowercased literal for
3105
+ * a mixed-case one (see `./ghcr`).
3095
3106
  */
3096
- exports.GITHUB_INJECTED_WORKFLOW_ENV = {
3107
+ const getGithubInjectedWorkflowEnv = (registryImage = ghcr_1.GHCR_REPOSITORY_EXPRESSION) => ({
3097
3108
  CL_JOB_TOKEN: "${{ github.token }}",
3098
3109
  CL_REGISTRY: "ghcr.io",
3099
- CL_REGISTRY_IMAGE: "ghcr.io/${{ github.repository }}",
3110
+ CL_REGISTRY_IMAGE: registryImage,
3100
3111
  CL_REGISTRY_USER: "${{ github.actor }}",
3101
3112
  // empty outside of pull request events
3102
3113
  CL_PR_NUMBER: "${{ github.event.number }}",
3103
- };
3114
+ });
3115
+ exports.getGithubInjectedWorkflowEnv = getGithubInjectedWorkflowEnv;
3116
+ /**
3117
+ * the names of the injected workflow-level env — the values differ per
3118
+ * repository (see {@link getGithubInjectedWorkflowEnv}), the names never
3119
+ * do, so lookups that only ask "does the workflow already provide this?"
3120
+ * use this instead.
3121
+ */
3122
+ exports.GITHUB_INJECTED_WORKFLOW_ENV_NAMES = new Set(Object.keys((0, exports.getGithubInjectedWorkflowEnv)()));
3104
3123
  //# sourceMappingURL=ciVariables.js.map
3105
3124
 
3106
3125
  /***/ }),
@@ -3327,7 +3346,7 @@ const getSecretsEnv = (context, kinds) => {
3327
3346
  */
3328
3347
  const getReferencedSecretsEnv = (script, kinds) => Object.fromEntries([...script.matchAll(/\$\{?(CL_[A-Za-z0-9_]+)\}?/g)]
3329
3348
  .map((match) => match[1])
3330
- .filter((name) => !(name in ciVariables_1.GITHUB_INJECTED_WORKFLOW_ENV))
3349
+ .filter((name) => !ciVariables_1.GITHUB_INJECTED_WORKFLOW_ENV_NAMES.has(name))
3331
3350
  .map((name) => [name, vaultValueExpression(name, kinds)]));
3332
3351
  const makeGithubJob = (context, job, allJobs, uploadProviderIds, images, scripts, secretKinds = new Map()) => {
3333
3352
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
@@ -3591,6 +3610,53 @@ exports.makeEnsureImageGithubJobs = makeEnsureImageGithubJobs;
3591
3610
 
3592
3611
  /***/ }),
3593
3612
 
3613
+ /***/ 59011:
3614
+ /***/ ((__unused_webpack_module, exports) => {
3615
+
3616
+ "use strict";
3617
+
3618
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
3619
+ exports.toGhcrRegistryImage = exports.parseGithubRepoFromRemoteUrl = exports.GHCR_REPOSITORY_EXPRESSION = void 0;
3620
+ /**
3621
+ * the ghcr namespace expressed through the actions context — portable
3622
+ * across forks, and what every all-lowercase repository keeps using
3623
+ */
3624
+ exports.GHCR_REPOSITORY_EXPRESSION = "ghcr.io/${{ github.repository }}";
3625
+ /**
3626
+ * parses `owner/name` out of a github remote url (ssh or https, with or
3627
+ * without the `.git` suffix).
3628
+ *
3629
+ * Shared with the cli (`apps/cli/src/utils/github.ts`) so the two can't
3630
+ * drift apart.
3631
+ */
3632
+ const parseGithubRepoFromRemoteUrl = (url) => { var _a; return (_a = url.match(/github\.com[:/]([\w.-]+\/[\w.-]+?)(\.git)?\s*$/)) === null || _a === void 0 ? void 0 : _a[1]; };
3633
+ exports.parseGithubRepoFromRemoteUrl = parseGithubRepoFromRemoteUrl;
3634
+ /**
3635
+ * the ghcr image prefix for an `owner/name` repository.
3636
+ *
3637
+ * The OCI distribution spec only allows `[a-z0-9]` plus `.`, `_` and `-`
3638
+ * separators in a repository name, so a mixed-case owner or repo (very
3639
+ * common for org logins: `AcmeCorp`, …) makes the docker client reject
3640
+ * every tag before it even reaches the network. Lowercasing is not a
3641
+ * workaround: the org `AcmeCorp` owns the namespace `ghcr.io/acmecorp`,
3642
+ * so the lowercased path is the correct address.
3643
+ *
3644
+ * Returns the `${{ github.repository }}` expression when lowercasing
3645
+ * would change nothing — it is equivalent for those repositories, and
3646
+ * unlike a literal it keeps working in a fork (whose token can only
3647
+ * push to the fork's own namespace).
3648
+ */
3649
+ const toGhcrRegistryImage = (repository) => {
3650
+ const lowercased = repository.toLowerCase();
3651
+ return lowercased === repository
3652
+ ? exports.GHCR_REPOSITORY_EXPRESSION
3653
+ : `ghcr.io/${lowercased}`;
3654
+ };
3655
+ exports.toGhcrRegistryImage = toGhcrRegistryImage;
3656
+ //# sourceMappingURL=ghcr.js.map
3657
+
3658
+ /***/ }),
3659
+
3594
3660
  /***/ 25073:
3595
3661
  /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
3596
3662
 
@@ -3900,12 +3966,70 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
3900
3966
  Object.defineProperty(exports, "__esModule", ({ value: true }));
3901
3967
  __exportStar(__nccwpck_require__(48476), exports);
3902
3968
  __exportStar(__nccwpck_require__(17300), exports);
3969
+ __exportStar(__nccwpck_require__(59011), exports);
3970
+ __exportStar(__nccwpck_require__(24333), exports);
3903
3971
  __exportStar(__nccwpck_require__(61071), exports);
3904
3972
  __exportStar(__nccwpck_require__(82145), exports);
3905
3973
  //# sourceMappingURL=index.js.map
3906
3974
 
3907
3975
  /***/ }),
3908
3976
 
3977
+ /***/ 24333:
3978
+ /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
3979
+
3980
+ "use strict";
3981
+
3982
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
3983
+ exports.resolveGithubRegistryImage = exports.githubRegistryImageFromConfig = void 0;
3984
+ const child_process_1 = __nccwpck_require__(35317);
3985
+ const util_1 = __nccwpck_require__(39023);
3986
+ const index_1 = __nccwpck_require__(62853);
3987
+ const ghcr_1 = __nccwpck_require__(59011);
3988
+ const execFile = (0, util_1.promisify)(child_process_1.execFile);
3989
+ /**
3990
+ * the ghcr image prefix derived from the config alone
3991
+ * (`pipelines.github.repository`), without touching git.
3992
+ *
3993
+ * Used where generation must stay pure and hermetic (tests, examples);
3994
+ * {@link resolveGithubRegistryImage} adds the git remote fallback.
3995
+ */
3996
+ const githubRegistryImageFromConfig = (config) => {
3997
+ const { repository } = (0, index_1.getPipelineOptions)(config, "github");
3998
+ return repository ? (0, ghcr_1.toGhcrRegistryImage)(repository) : undefined;
3999
+ };
4000
+ exports.githubRegistryImageFromConfig = githubRegistryImageFromConfig;
4001
+ /**
4002
+ * the ghcr image prefix to generate with: the configured repository, or
4003
+ * the one the github git remote points at.
4004
+ *
4005
+ * Falls back to the `${{ github.repository }}` expression when the
4006
+ * remote is unavailable (a checkout without the remote, a tarball, …).
4007
+ * That is the pre-existing behavior and correct for every all-lowercase
4008
+ * repository; `project doctor` catches the mixed-case case it is not
4009
+ * correct for.
4010
+ */
4011
+ const resolveGithubRegistryImage = async (config) => {
4012
+ const fromConfig = (0, exports.githubRegistryImageFromConfig)(config);
4013
+ if (fromConfig) {
4014
+ return fromConfig;
4015
+ }
4016
+ const remote = (0, index_1.getPipelineGitRemote)(config, "github");
4017
+ try {
4018
+ const { stdout } = await execFile("git", ["remote", "get-url", remote]);
4019
+ const repository = (0, ghcr_1.parseGithubRepoFromRemoteUrl)(stdout);
4020
+ return repository
4021
+ ? (0, ghcr_1.toGhcrRegistryImage)(repository)
4022
+ : ghcr_1.GHCR_REPOSITORY_EXPRESSION;
4023
+ }
4024
+ catch (_a) {
4025
+ return ghcr_1.GHCR_REPOSITORY_EXPRESSION;
4026
+ }
4027
+ };
4028
+ exports.resolveGithubRegistryImage = resolveGithubRegistryImage;
4029
+ //# sourceMappingURL=registryImage.js.map
4030
+
4031
+ /***/ }),
4032
+
3909
4033
  /***/ 61071:
3910
4034
  /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
3911
4035
 
@@ -8015,6 +8139,7 @@ exports.JobImagesPlan = exports.PROJECT_IMAGES_FOLDER = exports.GENERATED_IMAGES
8015
8139
  const fs_1 = __nccwpck_require__(79896);
8016
8140
  const path_1 = __nccwpck_require__(16928);
8017
8141
  const ciVariables_1 = __nccwpck_require__(91215);
8142
+ const ghcr_1 = __nccwpck_require__(59011);
8018
8143
  const docker_1 = __nccwpck_require__(12354);
8019
8144
  const runner_1 = __nccwpck_require__(92146);
8020
8145
  const gitlab_1 = __nccwpck_require__(86962);
@@ -8075,9 +8200,16 @@ exports.PROJECT_IMAGES_FOLDER = `${exports.GENERATED_IMAGES_FOLDER}/project`;
8075
8200
  * Reference-driven: only images actually used by a job are built.
8076
8201
  */
8077
8202
  class JobImagesPlan {
8078
- constructor(pipelineType, projectImages = {}) {
8203
+ constructor(pipelineType, projectImages = {},
8204
+ /**
8205
+ * the registry image prefix to generate with, overriding the
8206
+ * pipeline type's default. On github this carries the lowercased
8207
+ * ghcr namespace (see `resolveGithubRegistryImage`).
8208
+ */
8209
+ registryImage) {
8079
8210
  this.pipelineType = pipelineType;
8080
8211
  this.projectImages = projectImages;
8212
+ this.registryImage = registryImage;
8081
8213
  this.used = new Map();
8082
8214
  this.usedProject = new Map();
8083
8215
  }
@@ -8102,11 +8234,14 @@ class JobImagesPlan {
8102
8234
  }
8103
8235
  /**
8104
8236
  * the registry image prefix. On github, container images can't use
8105
- * runtime env vars — the expression form is required.
8237
+ * runtime env vars — a literal or an actions expression is required.
8106
8238
  */
8107
8239
  registryImageRef() {
8240
+ if (this.registryImage) {
8241
+ return this.registryImage;
8242
+ }
8108
8243
  return this.pipelineType === "github"
8109
- ? "ghcr.io/${{ github.repository }}"
8244
+ ? ghcr_1.GHCR_REPOSITORY_EXPRESSION
8110
8245
  : `${(0, ciVariables_1.getCiVariable)({ pipelineType: this.pipelineType }, "registryImage")}`;
8111
8246
  }
8112
8247
  useProject(name) {