@catladder/cli 0.0.0-next-dccc0a36 → 0.0.0-next-89bce6d0

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 (45) hide show
  1. package/dist/apps/cli/src/catci.js +23 -0
  2. package/dist/apps/cli/src/catci.js.map +1 -1
  3. package/dist/apps/cli/src/release/githubQueuedRelease.d.ts +14 -0
  4. package/dist/apps/cli/src/release/githubQueuedRelease.js +152 -0
  5. package/dist/apps/cli/src/release/githubQueuedRelease.js.map +1 -0
  6. package/dist/bundles/catci/index.js +3 -3
  7. package/dist/bundles/catenv/index.js +340 -109
  8. package/dist/bundles/cli/index.js +340 -109
  9. package/dist/bundles/skills/catladder-deploys/references/deploy-types.md +1 -1
  10. package/dist/bundles/skills/catladder-releases/SKILL.md +13 -2
  11. package/dist/packages/bash/src/variables/VariableValueContainingReferences.d.ts +6 -0
  12. package/dist/packages/bash/src/variables/VariableValueContainingReferences.js +8 -0
  13. package/dist/packages/bash/src/variables/VariableValueContainingReferences.js.map +1 -1
  14. package/dist/packages/bash/src/variables/resolveAllReferences.d.ts +1 -2
  15. package/dist/packages/bash/src/variables/resolveAllReferences.js +4 -2
  16. package/dist/packages/bash/src/variables/resolveAllReferences.js.map +1 -1
  17. package/dist/packages/bash/src/variables/resolveAllReferencesOnce.d.ts +1 -4
  18. package/dist/packages/bash/src/variables/resolveAllReferencesOnce.js +4 -2
  19. package/dist/packages/bash/src/variables/resolveAllReferencesOnce.js.map +1 -1
  20. package/dist/packages/pipeline/src/backends/github/GithubBackend.js +7 -0
  21. package/dist/packages/pipeline/src/backends/github/GithubBackend.js.map +1 -1
  22. package/dist/packages/pipeline/src/backends/github/githubReleaseJobs.d.ts +18 -2
  23. package/dist/packages/pipeline/src/backends/github/githubReleaseJobs.js +92 -10
  24. package/dist/packages/pipeline/src/backends/github/githubReleaseJobs.js.map +1 -1
  25. package/dist/packages/pipeline/src/backends/gitlab/GitlabBackend.js +31 -5
  26. package/dist/packages/pipeline/src/backends/gitlab/GitlabBackend.js.map +1 -1
  27. package/dist/packages/pipeline/src/backends/gitlab/gitlabReleaseJobs.d.ts +285 -3
  28. package/dist/packages/pipeline/src/backends/gitlab/gitlabReleaseJobs.js +142 -54
  29. package/dist/packages/pipeline/src/backends/gitlab/gitlabReleaseJobs.js.map +1 -1
  30. package/dist/packages/pipeline/src/context/getEnvironmentVariables.js +17 -9
  31. package/dist/packages/pipeline/src/context/getEnvironmentVariables.js.map +1 -1
  32. package/dist/packages/pipeline/src/deploy/cloudRun/index.js +2 -2
  33. package/dist/packages/pipeline/src/deploy/cloudRun/index.js.map +1 -1
  34. package/dist/packages/pipeline/src/deploy/cloudRun/utils/database.d.ts +7 -9
  35. package/dist/packages/pipeline/src/deploy/cloudRun/utils/database.js +32 -24
  36. package/dist/packages/pipeline/src/deploy/cloudRun/utils/database.js.map +1 -1
  37. package/dist/packages/pipeline/src/deploy/index.d.ts +2 -2
  38. package/dist/packages/pipeline/src/types/github-types.d.ts +1 -0
  39. package/dist/packages/pipeline/src/types/release.d.ts +7 -1
  40. package/dist/skills/catladder-deploys/references/deploy-types.md +1 -1
  41. package/dist/skills/catladder-releases/SKILL.md +13 -2
  42. package/dist/tsconfig.tsbuildinfo +1 -1
  43. package/package.json +1 -1
  44. package/src/catci.ts +30 -0
  45. package/src/release/githubQueuedRelease.ts +173 -0
@@ -17,6 +17,7 @@ const evaluateSecurityAudit_1 = require("./security/evaluateSecurityAudit");
17
17
  const createSecurityAuditMergeRequest_1 = require("./security/createSecurityAuditMergeRequest");
18
18
  const changesetsReleaseJob_1 = require("./release/changesetsReleaseJob");
19
19
  const changesetCheckJob_1 = require("./release/changesetCheckJob");
20
+ const githubQueuedRelease_1 = require("./release/githubQueuedRelease");
20
21
  const npmPublishJob_1 = require("./publish/npmPublishJob");
21
22
  const GITLAB_HOST = "https://git.panter.ch";
22
23
  const USAGE = `catci — catladder CI companion
@@ -46,6 +47,18 @@ usage:
46
47
  github only: dispatches the generated taggedRelease workflow for
47
48
  the tag (tags pushed with the job token don't trigger it)
48
49
 
50
+ catci release github-queue-check
51
+ github only, first step of the manual create-release task:
52
+ releases right away when the main workflow run for HEAD is green
53
+ (queued=false step output), queues the release when it is still
54
+ running (queued=true, marker ref for the release-on-green
55
+ workflow), fails when it concluded red
56
+
57
+ catci release github-queued-guard <head-sha> <conclusion>
58
+ github only, guard of the release-on-green workflow: consumes the
59
+ queue marker when it matches the completed main run and decides
60
+ whether the release step runs (release=true step output)
61
+
49
62
  catci publish npm --dir <dir> --env-type <envType> [--access <access>] [--registry <url>] [--dist-tag <tag>]
50
63
  npmPackage deploy job: derives version + dist-tag from the
51
64
  pipeline trigger (tagged release -> tag version @latest; branch/MR
@@ -126,6 +139,16 @@ const main = async () => {
126
139
  args.length === 1) {
127
140
  return (0, changesetsReleaseJob_1.dispatchTaggedReleaseWorkflow)(args[0]);
128
141
  }
142
+ if (group === "release" &&
143
+ command === "github-queue-check" &&
144
+ args.length === 0) {
145
+ return (0, githubQueuedRelease_1.githubQueueCheckJob)();
146
+ }
147
+ if (group === "release" &&
148
+ command === "github-queued-guard" &&
149
+ args.length === 2) {
150
+ return (0, githubQueuedRelease_1.githubQueuedGuardJob)(args[0], args[1]);
151
+ }
129
152
  if (group === "publish" && command === "npm") {
130
153
  const options = (0, npmPublishJob_1.parseNpmPublishArgs)(args);
131
154
  if (options) {
@@ -1 +1 @@
1
- {"version":3,"file":"catci.js","sourceRoot":"","sources":["../../../../src/catci.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catci.js","sourceRoot":"","sources":["../../../../src/catci.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `catci release github-queue-check` — first step of the manual
3
+ * create-release dispatch job. Decides between releasing right away
4
+ * (queued=false) and queueing for the running main workflow
5
+ * (queued=true).
6
+ */
7
+ export declare const githubQueueCheckJob: () => Promise<void>;
8
+ /**
9
+ * `catci release github-queued-guard <head-sha> <conclusion>` — guard
10
+ * step of the release-on-green workflow, running on every completed
11
+ * main workflow run. Consumes the marker when it matches the run and
12
+ * decides whether the release step runs (release=true).
13
+ */
14
+ export declare const githubQueuedGuardJob: (headSha: string, conclusion: string) => Promise<void>;
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.githubQueuedGuardJob = exports.githubQueueCheckJob = void 0;
4
+ /**
5
+ * "release once the pipeline succeeds" on github.
6
+ *
7
+ * gitlab expresses this natively inside the pipeline (the `create
8
+ * release` button job plus an executor with `needs` on the whole
9
+ * pipeline); github has no cross-workflow needs, so catladder uses a
10
+ * marker ref plus a workflow_run-triggered workflow instead:
11
+ *
12
+ * - the manual `create-release` dispatch runs `github-queue-check`:
13
+ * - the main workflow run for HEAD completed green (or never ran) →
14
+ * release right away (queued=false, the job's release step runs)
15
+ * - still running → push the marker ref and stop (queued=true skips
16
+ * the release step); the release-on-green workflow takes over
17
+ * - completed red → fail with a pointer to the force task
18
+ * - the release-on-green workflow (`on: workflow_run` of the main
19
+ * workflow) runs `github-queued-guard` on every completed main run:
20
+ * it consumes the marker when it matches the run's head sha and
21
+ * releases only when the run concluded green
22
+ */
23
+ const fs_1 = require("fs");
24
+ const releaseGit_1 = require("./releaseGit");
25
+ /**
26
+ * the generated main-branch workflow whose runs gate a queued release.
27
+ * Keep in sync with `workflowFileName` / GENERATED_FILE_PREFIX in
28
+ * pipeline/src/backends/github/GithubBackend.ts.
29
+ */
30
+ const GITHUB_MAIN_WORKFLOW = "catladder-main.yml";
31
+ /**
32
+ * where a queued release is recorded: a ref outside refs/heads and
33
+ * refs/tags, pointing at the commit the release was queued for.
34
+ * Writable with the job token (`permissions: contents: write`).
35
+ */
36
+ const QUEUE_MARKER_REF = "refs/catladder/release-queued";
37
+ /**
38
+ * github container jobs: the workspace volume is owned by the host
39
+ * runner user while catci runs as the container user — git refuses the
40
+ * repo ("dubious ownership") without a safe.directory entry. The
41
+ * release entrypoint scripts do the same, but the queue commands run
42
+ * before them.
43
+ */
44
+ const ensureGitSafeDirectory = async () => {
45
+ await (0, releaseGit_1.git)("config", "--global", "--add", "safe.directory", process.cwd());
46
+ };
47
+ const requireEnv = (name) => {
48
+ const value = process.env[name];
49
+ if (!value) {
50
+ throw new Error(`${name} is not set`);
51
+ }
52
+ return value;
53
+ };
54
+ const fail = (message) => {
55
+ console.error(message);
56
+ process.exit(1);
57
+ };
58
+ /**
59
+ * step outputs of the github-actions step running the command
60
+ * (`$GITHUB_OUTPUT` is always set in workflow steps)
61
+ */
62
+ const setStepOutput = (name, value) => {
63
+ const file = process.env.GITHUB_OUTPUT;
64
+ if (!file) {
65
+ return;
66
+ }
67
+ (0, fs_1.appendFileSync)(file, `${name}=${value}\n`);
68
+ };
69
+ const getMainWorkflowRun = async (sha) => {
70
+ var _a, _b, _c;
71
+ const apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : "https://api.github.com";
72
+ const repository = requireEnv("GITHUB_REPOSITORY");
73
+ const token = requireEnv("GITHUB_TOKEN");
74
+ const response = await fetch(`${apiUrl}/repos/${repository}/actions/workflows/${GITHUB_MAIN_WORKFLOW}/runs?head_sha=${sha}&per_page=5`, {
75
+ headers: {
76
+ authorization: `Bearer ${token}`,
77
+ accept: "application/vnd.github+json",
78
+ },
79
+ });
80
+ if (!response.ok) {
81
+ throw new Error(`listing ${GITHUB_MAIN_WORKFLOW} runs failed: ${response.status} ${await response.text()}`);
82
+ }
83
+ const data = (await response.json());
84
+ // newest first — re-runs replace older attempts
85
+ return (_c = (_b = data.workflow_runs) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : null;
86
+ };
87
+ /**
88
+ * `catci release github-queue-check` — first step of the manual
89
+ * create-release dispatch job. Decides between releasing right away
90
+ * (queued=false) and queueing for the running main workflow
91
+ * (queued=true).
92
+ */
93
+ const githubQueueCheckJob = async () => {
94
+ await ensureGitSafeDirectory();
95
+ const sha = await (0, releaseGit_1.git)("rev-parse", "HEAD");
96
+ const run = await getMainWorkflowRun(sha);
97
+ if (!run) {
98
+ console.log(`no main workflow run found for ${sha} — releasing right away`);
99
+ setStepOutput("queued", "false");
100
+ return;
101
+ }
102
+ if (run.status === "completed") {
103
+ if (run.conclusion === "success") {
104
+ console.log(`main workflow for ${sha} succeeded — releasing right away`);
105
+ setStepOutput("queued", "false");
106
+ return;
107
+ }
108
+ fail(`the main workflow for ${sha} concluded '${run.conclusion}' — ` +
109
+ `fix the pipeline, or use the force-create-release task to release anyway`);
110
+ }
111
+ // queued / in_progress / waiting: record the intent and let the
112
+ // release-on-green workflow do the release. Force-push: a re-queue
113
+ // (or a stale marker of an older commit) just moves the marker.
114
+ await (0, releaseGit_1.git)("push", "origin", `+${sha}:${QUEUE_MARKER_REF}`);
115
+ console.log(`main workflow for ${sha} is ${run.status} — release queued: ` +
116
+ `the 'release on green' workflow creates the release as soon as the run succeeds`);
117
+ setStepOutput("queued", "true");
118
+ };
119
+ exports.githubQueueCheckJob = githubQueueCheckJob;
120
+ /**
121
+ * `catci release github-queued-guard <head-sha> <conclusion>` — guard
122
+ * step of the release-on-green workflow, running on every completed
123
+ * main workflow run. Consumes the marker when it matches the run and
124
+ * decides whether the release step runs (release=true).
125
+ */
126
+ const githubQueuedGuardJob = async (headSha, conclusion) => {
127
+ var _a;
128
+ await ensureGitSafeDirectory();
129
+ const markerLine = await (0, releaseGit_1.git)("ls-remote", "origin", QUEUE_MARKER_REF);
130
+ const marker = (_a = markerLine.split(/\s+/)[0]) !== null && _a !== void 0 ? _a : "";
131
+ if (!marker) {
132
+ console.log("no release queued — nothing to do");
133
+ setStepOutput("release", "false");
134
+ return;
135
+ }
136
+ if (marker !== headSha) {
137
+ console.log(`queued release is for ${marker}, this run is for ${headSha} — leaving the queue untouched`);
138
+ setStepOutput("release", "false");
139
+ return;
140
+ }
141
+ // consume the marker either way: the queued intent applied to exactly
142
+ // this run, whatever its outcome
143
+ await (0, releaseGit_1.git)("push", "origin", `:${QUEUE_MARKER_REF}`);
144
+ if (conclusion !== "success") {
145
+ fail(`queued release not executed: the main workflow concluded '${conclusion}' — ` +
146
+ `fix the pipeline and queue again (create-release task)`);
147
+ }
148
+ console.log(`main workflow for ${headSha} succeeded — releasing`);
149
+ setStepOutput("release", "true");
150
+ };
151
+ exports.githubQueuedGuardJob = githubQueuedGuardJob;
152
+ //# sourceMappingURL=githubQueuedRelease.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"githubQueuedRelease.js","sourceRoot":"","sources":["../../../../../src/release/githubQueuedRelease.ts"],"names":[],"mappings":"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"}