@mannyc1/ts-release 0.0.2 → 0.0.5

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 (181) hide show
  1. package/ARCHITECTURE.md +55 -15
  2. package/README.md +229 -75
  3. package/SPEC.md +53 -9
  4. package/dist/config/errors.d.ts +2 -1
  5. package/dist/config/errors.d.ts.map +1 -1
  6. package/dist/config/errors.js +4 -3
  7. package/dist/config/errors.js.map +1 -1
  8. package/dist/config/load.d.ts.map +1 -1
  9. package/dist/config/load.js +5 -3
  10. package/dist/config/load.js.map +1 -1
  11. package/dist/config/schema.d.ts +4 -0
  12. package/dist/config/schema.d.ts.map +1 -1
  13. package/dist/config/schema.js +13 -0
  14. package/dist/config/schema.js.map +1 -1
  15. package/dist/domain/artifact.d.ts +3 -3
  16. package/dist/domain/artifact.d.ts.map +1 -1
  17. package/dist/domain/artifact.js +1 -1
  18. package/dist/domain/artifact.js.map +1 -1
  19. package/dist/domain/evidence.d.ts +18 -14
  20. package/dist/domain/evidence.d.ts.map +1 -1
  21. package/dist/domain/evidence.js +8 -3
  22. package/dist/domain/evidence.js.map +1 -1
  23. package/dist/domain/operation.d.ts +15 -14
  24. package/dist/domain/operation.d.ts.map +1 -1
  25. package/dist/domain/operation.js +117 -1
  26. package/dist/domain/operation.js.map +1 -1
  27. package/dist/domain/release.d.ts +84 -9
  28. package/dist/domain/release.d.ts.map +1 -1
  29. package/dist/domain/release.js +76 -5
  30. package/dist/domain/release.js.map +1 -1
  31. package/dist/domain/remote-state.d.ts +21 -16
  32. package/dist/domain/remote-state.d.ts.map +1 -1
  33. package/dist/domain/remote-state.js +14 -8
  34. package/dist/domain/remote-state.js.map +1 -1
  35. package/dist/domain/status.d.ts +4 -4
  36. package/dist/domain/status.d.ts.map +1 -1
  37. package/dist/domain/status.js +3 -2
  38. package/dist/domain/status.js.map +1 -1
  39. package/dist/domain/target.d.ts +7 -7
  40. package/dist/domain/target.d.ts.map +1 -1
  41. package/dist/domain/target.js +1 -1
  42. package/dist/domain/target.js.map +1 -1
  43. package/dist/host/host.d.ts +1 -0
  44. package/dist/host/host.d.ts.map +1 -1
  45. package/dist/host/host.js +2 -1
  46. package/dist/host/host.js.map +1 -1
  47. package/dist/host/http-live.d.ts.map +1 -1
  48. package/dist/host/http-live.js +7 -3
  49. package/dist/host/http-live.js.map +1 -1
  50. package/dist/host/http.d.ts +4 -1
  51. package/dist/host/http.d.ts.map +1 -1
  52. package/dist/host/http.js +5 -2
  53. package/dist/host/http.js.map +1 -1
  54. package/dist/host/platform.d.ts.map +1 -1
  55. package/dist/host/platform.js +2 -2
  56. package/dist/host/platform.js.map +1 -1
  57. package/dist/host/test.d.ts +1 -0
  58. package/dist/host/test.d.ts.map +1 -1
  59. package/dist/host/test.js +67 -7
  60. package/dist/host/test.js.map +1 -1
  61. package/dist/internal/workspace-path.d.ts +16 -0
  62. package/dist/internal/workspace-path.d.ts.map +1 -0
  63. package/dist/internal/workspace-path.js +33 -0
  64. package/dist/internal/workspace-path.js.map +1 -0
  65. package/dist/planner/artifact-inventory.d.ts.map +1 -1
  66. package/dist/planner/artifact-inventory.js +28 -9
  67. package/dist/planner/artifact-inventory.js.map +1 -1
  68. package/dist/planner/create-release-plan.d.ts +1 -1
  69. package/dist/planner/errors.d.ts +12 -6
  70. package/dist/planner/errors.d.ts.map +1 -1
  71. package/dist/planner/errors.js +20 -12
  72. package/dist/planner/errors.js.map +1 -1
  73. package/dist/planner/evidence-recorder.d.ts.map +1 -1
  74. package/dist/planner/evidence-recorder.js +32 -10
  75. package/dist/planner/evidence-recorder.js.map +1 -1
  76. package/dist/planner/executor.d.ts +4 -4
  77. package/dist/planner/executor.d.ts.map +1 -1
  78. package/dist/planner/executor.js +36 -4
  79. package/dist/planner/executor.js.map +1 -1
  80. package/dist/planner/normalize-release.d.ts +11 -2
  81. package/dist/planner/normalize-release.d.ts.map +1 -1
  82. package/dist/planner/normalize-release.js +98 -19
  83. package/dist/planner/normalize-release.js.map +1 -1
  84. package/dist/planner/reconcile.d.ts +1 -1
  85. package/dist/planner/reconcile.d.ts.map +1 -1
  86. package/dist/planner/reconcile.js +75 -92
  87. package/dist/planner/reconcile.js.map +1 -1
  88. package/dist/planner/release-eligibility.d.ts +20 -14
  89. package/dist/planner/release-eligibility.d.ts.map +1 -1
  90. package/dist/planner/release-eligibility.js +431 -25
  91. package/dist/planner/release-eligibility.js.map +1 -1
  92. package/dist/planner/render-plan.d.ts +10 -0
  93. package/dist/planner/render-plan.d.ts.map +1 -1
  94. package/dist/planner/render-plan.js +159 -0
  95. package/dist/planner/render-plan.js.map +1 -1
  96. package/dist/planner/status.d.ts +1 -1
  97. package/dist/planner/status.d.ts.map +1 -1
  98. package/dist/planner/status.js +8 -2
  99. package/dist/planner/status.js.map +1 -1
  100. package/dist/targets/adapter-helpers.d.ts +20 -2
  101. package/dist/targets/adapter-helpers.d.ts.map +1 -1
  102. package/dist/targets/adapter-helpers.js +32 -1
  103. package/dist/targets/adapter-helpers.js.map +1 -1
  104. package/dist/targets/github-release.d.ts +25 -0
  105. package/dist/targets/github-release.d.ts.map +1 -0
  106. package/dist/targets/github-release.js +82 -0
  107. package/dist/targets/github-release.js.map +1 -0
  108. package/dist/targets/github.d.ts +2 -2
  109. package/dist/targets/github.d.ts.map +1 -1
  110. package/dist/targets/github.js +28 -66
  111. package/dist/targets/github.js.map +1 -1
  112. package/dist/targets/homebrew.d.ts +2 -2
  113. package/dist/targets/homebrew.d.ts.map +1 -1
  114. package/dist/targets/homebrew.js +15 -31
  115. package/dist/targets/homebrew.js.map +1 -1
  116. package/dist/targets/scoop.d.ts +2 -2
  117. package/dist/targets/scoop.d.ts.map +1 -1
  118. package/dist/targets/scoop.js +13 -28
  119. package/dist/targets/scoop.js.map +1 -1
  120. package/dist/workflows/config.d.ts +191 -18
  121. package/dist/workflows/config.d.ts.map +1 -1
  122. package/dist/workflows/config.js +339 -61
  123. package/dist/workflows/config.js.map +1 -1
  124. package/dist/workflows/diagnostics.d.ts +62 -0
  125. package/dist/workflows/diagnostics.d.ts.map +1 -0
  126. package/dist/workflows/diagnostics.js +536 -0
  127. package/dist/workflows/diagnostics.js.map +1 -0
  128. package/dist/workflows/evidence.d.ts +8 -3
  129. package/dist/workflows/evidence.d.ts.map +1 -1
  130. package/dist/workflows/evidence.js +9 -0
  131. package/dist/workflows/evidence.js.map +1 -1
  132. package/dist/workflows/index.d.ts +7 -0
  133. package/dist/workflows/index.d.ts.map +1 -0
  134. package/dist/workflows/index.js +6 -0
  135. package/dist/workflows/index.js.map +1 -0
  136. package/dist/workflows/init.d.ts +84 -0
  137. package/dist/workflows/init.d.ts.map +1 -0
  138. package/dist/workflows/init.js +451 -0
  139. package/dist/workflows/init.js.map +1 -0
  140. package/dist/workflows/live.d.ts +2 -0
  141. package/dist/workflows/live.d.ts.map +1 -1
  142. package/dist/workflows/live.js +2 -0
  143. package/dist/workflows/live.js.map +1 -1
  144. package/dist/workflows/options.d.ts +30 -0
  145. package/dist/workflows/options.d.ts.map +1 -0
  146. package/dist/workflows/options.js +16 -0
  147. package/dist/workflows/options.js.map +1 -0
  148. package/examples/README.md +16 -12
  149. package/examples/github-release/release.config.json +1 -0
  150. package/examples/homebrew-tap/release.config.json +1 -0
  151. package/examples/multi-target/release.config.json +5 -1
  152. package/examples/non-strict-skips/release.config.json +1 -0
  153. package/examples/npm-first-publish/release.config.json +1 -0
  154. package/examples/npm-only/release.config.json +5 -1
  155. package/examples/pypi-registry/release.config.json +1 -0
  156. package/examples/scoop-bucket/release.config.json +1 -0
  157. package/package.json +37 -26
  158. package/templates/README.md +59 -0
  159. package/templates/github-actions/plan-and-approved-execute.yml +58 -0
  160. package/templates/github-actions/plan-only.yml +33 -0
  161. package/templates/github-actions/trusted-publishing.yml +61 -0
  162. package/templates/multi-target-homebrew/release.config.json +70 -0
  163. package/templates/multi-target-scoop/release.config.json +72 -0
  164. package/templates/npm-github/release.config.json +50 -0
  165. package/templates/npm-only/release.config.json +39 -0
  166. package/dist/cli/command.d.ts +0 -4
  167. package/dist/cli/command.d.ts.map +0 -1
  168. package/dist/cli/command.js +0 -173
  169. package/dist/cli/command.js.map +0 -1
  170. package/dist/cli/main.d.ts +0 -3
  171. package/dist/cli/main.d.ts.map +0 -1
  172. package/dist/cli/main.js +0 -9
  173. package/dist/cli/main.js.map +0 -1
  174. package/dist/runtime/bun.d.ts +0 -9
  175. package/dist/runtime/bun.d.ts.map +0 -1
  176. package/dist/runtime/bun.js +0 -10
  177. package/dist/runtime/bun.js.map +0 -1
  178. package/dist/version.d.ts +0 -2
  179. package/dist/version.d.ts.map +0 -1
  180. package/dist/version.js +0 -2
  181. package/dist/version.js.map +0 -1
@@ -0,0 +1,536 @@
1
+ import * as Config from "effect/Config";
2
+ import * as Effect from "effect/Effect";
3
+ import * as FileSystem from "effect/FileSystem";
4
+ import * as Option from "effect/Option";
5
+ import * as Path from "effect/Path";
6
+ import * as Schema from "effect/Schema";
7
+ import { parseReleaseIntent } from "../config/load.js";
8
+ import { DEFAULT_CONFIG_PATH } from "../config/schema.js";
9
+ import { ReleaseName, ReleaseVersion } from "../domain/release.js";
10
+ import { TargetId, targetCapabilitiesOrder, targetOrder } from "../domain/target.js";
11
+ import { resolveReleaseIdentitySource } from "../planner/normalize-release.js";
12
+ import { targetCapabilities } from "../targets/registry.js";
13
+ import { PlanReleaseConfigOptions, planReleaseConfig, ValidateReleaseConfigFileOptions, validateReleaseConfigFile } from "./config.js";
14
+ import { releaseConfigFields, releaseFormatField } from "./options.js";
15
+ export const ReleaseDiagnosticStatus = Schema.Literals(["ok", "warn", "fail", "info"]);
16
+ export const ReleaseDiagnosticConfidence = Schema.Literals(["confirmed", "inferred", "not-checked"]);
17
+ export const ReleaseDiagnosticsFormat = Schema.Literals(["json", "text", "markdown"]);
18
+ export const ReleaseCiProvider = Schema.Literals(["github-actions"]);
19
+ export class ReleaseDiagnosticCheck extends Schema.Class("ReleaseDiagnosticCheck")({
20
+ id: Schema.NonEmptyString,
21
+ targetId: Schema.optionalKey(TargetId),
22
+ status: ReleaseDiagnosticStatus,
23
+ confidence: ReleaseDiagnosticConfidence,
24
+ message: Schema.String
25
+ }) {
26
+ }
27
+ export class ReleaseDiagnosticReport extends Schema.Class("ReleaseDiagnosticReport")({
28
+ schemaVersion: Schema.Literal("release-diagnostics/v1"),
29
+ releaseName: ReleaseName,
30
+ releaseVersion: ReleaseVersion,
31
+ checks: Schema.Array(ReleaseDiagnosticCheck)
32
+ }) {
33
+ }
34
+ export class ReleaseDiagnosticsOptions extends Schema.Class("ReleaseDiagnosticsOptions")({
35
+ root: Schema.optionalKey(Schema.String),
36
+ configPath: Schema.optionalKey(Schema.String),
37
+ target: Schema.optionalKey(Schema.String),
38
+ provider: Schema.optionalKey(ReleaseCiProvider),
39
+ workflow: Schema.optionalKey(Schema.String),
40
+ format: Schema.optionalKey(ReleaseDiagnosticsFormat),
41
+ missingCiIsNotChecked: Schema.optionalKey(Schema.Boolean)
42
+ }) {
43
+ }
44
+ const releaseDiagnosticsOptionsFromInput = (input = {}) => ReleaseDiagnosticsOptions.make({
45
+ ...releaseConfigFields(input),
46
+ ...(input.target === undefined ? {} : { target: input.target }),
47
+ ...(input.provider === undefined ? {} : { provider: input.provider }),
48
+ ...(input.workflow === undefined ? {} : { workflow: input.workflow }),
49
+ ...releaseFormatField(input),
50
+ ...(input.missingCiIsNotChecked === undefined ? {} : { missingCiIsNotChecked: input.missingCiIsNotChecked })
51
+ });
52
+ const readOptionalEnv = (name) => Config.string(name).pipe(Effect.option, Effect.map(Option.getOrUndefined));
53
+ const envExists = Effect.fn("diagnostics.envExists")(function* (name) {
54
+ const value = yield* readOptionalEnv(name);
55
+ return value !== undefined;
56
+ });
57
+ const check = (input) => ReleaseDiagnosticCheck.make({
58
+ id: input.id,
59
+ ...(input.targetId === undefined ? {} : { targetId: input.targetId }),
60
+ status: input.status,
61
+ confidence: input.confidence,
62
+ message: input.message
63
+ });
64
+ const reportForPlan = (plan, checks) => ReleaseDiagnosticReport.make({
65
+ schemaVersion: "release-diagnostics/v1",
66
+ releaseName: plan.identity.name,
67
+ releaseVersion: plan.identity.version,
68
+ checks: [...checks]
69
+ });
70
+ const reportForSubject = (subject, checks) => ReleaseDiagnosticReport.make({
71
+ schemaVersion: "release-diagnostics/v1",
72
+ releaseName: subject.identity.name,
73
+ releaseVersion: subject.identity.version,
74
+ checks: [...checks]
75
+ });
76
+ const plannedFailure = (message) => ({
77
+ _tag: "Failed",
78
+ message
79
+ });
80
+ const plannedSuccess = (plan) => ({
81
+ _tag: "Ok",
82
+ plan
83
+ });
84
+ const targetMatches = (target, filter) => filter === undefined ||
85
+ target.id === filter ||
86
+ target._tag.toLowerCase().includes(filter.toLowerCase());
87
+ const operationsForTarget = (plan, targetId) => plan.operations.filter((operation) => operation.targetId === targetId);
88
+ const commandEnvNames = (operations) => {
89
+ const names = new Set();
90
+ for (const operation of operations) {
91
+ if ("command" in operation) {
92
+ for (const name of operation.command.requiredEnv) {
93
+ names.add(name);
94
+ }
95
+ }
96
+ if (operation._tag === "VerifyHttpOperation") {
97
+ for (const name of operation.request.requiredEnv) {
98
+ names.add(name);
99
+ }
100
+ }
101
+ }
102
+ return [...names].sort();
103
+ };
104
+ const commandExecutables = (operations) => {
105
+ const names = new Set();
106
+ for (const operation of operations) {
107
+ if ("command" in operation) {
108
+ names.add(operation.command.executable);
109
+ }
110
+ }
111
+ return [...names].sort();
112
+ };
113
+ const authChecksForPlan = Effect.fn("diagnostics.authChecksForPlan")(function* (plan, targetFilter) {
114
+ const checks = [];
115
+ for (const target of plan.targets.filter((candidate) => targetMatches(candidate, targetFilter))) {
116
+ const capability = plan.targetCapabilities.find((candidate) => candidate.targetId === target.id);
117
+ const operations = operationsForTarget(plan, target.id);
118
+ if (capability?.authRequirement === "env-token") {
119
+ for (const name of commandEnvNames(operations)) {
120
+ const present = yield* envExists(name);
121
+ checks.push(check({
122
+ id: `${target.id}:env:${name}`,
123
+ targetId: target.id,
124
+ status: present ? "ok" : "fail",
125
+ confidence: "confirmed",
126
+ message: present
127
+ ? `${target.id} requires ${name}; the variable is present.`
128
+ : `${target.id} requires ${name}; the variable is missing.`
129
+ }));
130
+ }
131
+ continue;
132
+ }
133
+ if (capability?.authRequirement === "trusted-publishing") {
134
+ const hasOidcUrl = yield* envExists("ACTIONS_ID_TOKEN_REQUEST_URL");
135
+ const hasOidcToken = yield* envExists("ACTIONS_ID_TOKEN_REQUEST_TOKEN");
136
+ checks.push(check({
137
+ id: `${target.id}:trusted-publishing`,
138
+ targetId: target.id,
139
+ status: hasOidcUrl && hasOidcToken ? "ok" : "info",
140
+ confidence: hasOidcUrl && hasOidcToken ? "confirmed" : "inferred",
141
+ message: hasOidcUrl && hasOidcToken
142
+ ? `${target.id} has GitHub Actions OIDC request environment available.`
143
+ : `${target.id} uses npm trusted publishing; provider setup is confirmed only inside GitHub Actions.`
144
+ }));
145
+ if (capability.authSetup !== undefined) {
146
+ checks.push(check({
147
+ id: `${target.id}:trusted-publishing-setup`,
148
+ targetId: target.id,
149
+ status: "info",
150
+ confidence: "inferred",
151
+ message: `${target.id} expects workflow ${capability.authSetup.workflow}, ` +
152
+ `permissions ${capability.authSetup.requiredPermissions.map((permission) => `${permission.name}: ${permission.value}`).join(", ")}, ` +
153
+ `and prerequisites ${capability.authSetup.prerequisites.join(", ")}.`
154
+ }));
155
+ }
156
+ continue;
157
+ }
158
+ const executables = commandExecutables(operations);
159
+ checks.push(check({
160
+ id: `${target.id}:cli-auth`,
161
+ targetId: target.id,
162
+ status: "info",
163
+ confidence: "inferred",
164
+ message: executables.length === 0
165
+ ? `${target.id} has no command-line authentication checks in the plan.`
166
+ : `${target.id} expects local CLI/auth readiness for: ${executables.join(", ")}.`
167
+ }));
168
+ }
169
+ if (checks.length === 0) {
170
+ checks.push(check({
171
+ id: "auth:no-targets",
172
+ status: "info",
173
+ confidence: "not-checked",
174
+ message: targetFilter === undefined
175
+ ? "No release targets were found."
176
+ : `No release target matched ${targetFilter}.`
177
+ }));
178
+ }
179
+ return checks;
180
+ });
181
+ const basename = (pathName) => {
182
+ const parts = pathName.replaceAll("\\", "/").split("/");
183
+ return parts[parts.length - 1] ?? pathName;
184
+ };
185
+ const workspacePath = (path, root, pathName) => path.isAbsolute(pathName) ? pathName : path.resolve(root, pathName);
186
+ const configRoot = (path, options) => {
187
+ if (options.root !== undefined) {
188
+ return options.root;
189
+ }
190
+ if (options.configPath !== undefined && path.isAbsolute(options.configPath)) {
191
+ return path.dirname(options.configPath);
192
+ }
193
+ return ".";
194
+ };
195
+ const planOptionsFromDiagnostics = (options) => PlanReleaseConfigOptions.make(releaseConfigFields(options));
196
+ const validationOptionsFromDiagnostics = (options) => ValidateReleaseConfigFileOptions.make(releaseConfigFields(options));
197
+ const configPath = (options) => options.configPath ?? DEFAULT_CONFIG_PATH;
198
+ const configReadPath = (path, options) => {
199
+ const pathName = configPath(options);
200
+ return path.isAbsolute(pathName) ? pathName : path.resolve(configRoot(path, options), pathName);
201
+ };
202
+ const readReleaseCiDiagnosticSubject = Effect.fn("diagnostics.readReleaseCiDiagnosticSubject")(function* (options) {
203
+ const fs = yield* FileSystem.FileSystem;
204
+ const path = yield* Path.Path;
205
+ const pathName = configPath(options);
206
+ const root = configRoot(path, options);
207
+ const contents = yield* fs.readFileString(configReadPath(path, options));
208
+ const intent = yield* parseReleaseIntent(contents, pathName);
209
+ const identity = yield* resolveReleaseIdentitySource(intent.identity, root);
210
+ const targets = [...intent.targets].sort(targetOrder);
211
+ const capabilities = yield* Effect.forEach(targets, targetCapabilities);
212
+ return {
213
+ identity,
214
+ targets,
215
+ targetCapabilities: capabilities.sort(targetCapabilitiesOrder)
216
+ };
217
+ });
218
+ const inferredTrustedPublishingWorkflow = (subject) => {
219
+ for (const target of subject.targets) {
220
+ if (target._tag === "NpmRegistryTarget" && target.trustedPublishing !== undefined) {
221
+ return target.trustedPublishing.workflow;
222
+ }
223
+ }
224
+ return undefined;
225
+ };
226
+ const defaultWorkflowPath = (subject) => {
227
+ const workflow = inferredTrustedPublishingWorkflow(subject);
228
+ return workflow === undefined ? undefined : `.github/workflows/${workflow}`;
229
+ };
230
+ const workflowJobBlocks = (contents) => {
231
+ const lines = contents.split(/\r?\n/);
232
+ const jobsStart = lines.findIndex((line) => /^jobs:\s*$/.test(line));
233
+ if (jobsStart < 0) {
234
+ return [];
235
+ }
236
+ const jobs = [];
237
+ for (let index = jobsStart + 1; index < lines.length; index += 1) {
238
+ const line = lines[index] ?? "";
239
+ if (/^[A-Za-z0-9_-]+:\s*$/.test(line)) {
240
+ break;
241
+ }
242
+ const match = /^ ([A-Za-z0-9_-]+):\s*$/.exec(line);
243
+ if (match === null) {
244
+ continue;
245
+ }
246
+ const name = match[1] ?? "";
247
+ const collected = [];
248
+ for (let jobIndex = index; jobIndex < lines.length; jobIndex += 1) {
249
+ const jobLine = lines[jobIndex] ?? "";
250
+ if (jobIndex > index && (/^ [A-Za-z0-9_-]+:\s*$/.test(jobLine) || /^[A-Za-z0-9_-]+:\s*$/.test(jobLine))) {
251
+ break;
252
+ }
253
+ collected.push(jobLine);
254
+ }
255
+ jobs.push({
256
+ name,
257
+ contents: collected.join("\n")
258
+ });
259
+ }
260
+ return jobs;
261
+ };
262
+ const hasPermission = (block, name, value) => {
263
+ const pattern = new RegExp(`^\\s+${name}:\\s*${value}\\s*$`, "m");
264
+ return pattern.test(block);
265
+ };
266
+ const hasUploadAlways = (block) => block.includes("actions/upload-artifact") && /^\s+if:\s*always\(\)\s*$/m.test(block);
267
+ const hasTsReleaseAction = (block) => /^\s+(?:-\s+)?uses:\s+(mannyc2\/ts-release-action@v1|\.\/apps\/ts-release-action)\s*$/m.test(block);
268
+ const hasYamlValue = (block, name, value) => {
269
+ const escaped = value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
270
+ return new RegExp(`^\\s+${name}:\\s*["']?${escaped}["']?\\s*$`, "m").test(block);
271
+ };
272
+ const hasActionCommand = (block, command) => hasTsReleaseAction(block) && hasYamlValue(block, "command", command);
273
+ const hasActionTruthyInput = (block, name) => hasTsReleaseAction(block) && hasYamlValue(block, name, "true");
274
+ const hasCliPlanReview = (block) => (block.includes(" cli plan ") || block.includes(" release plan ") || block.includes("run cli plan ")) &&
275
+ block.includes("--format markdown");
276
+ const hasActionPlanReview = (block) => hasActionCommand(block, "plan") && hasYamlValue(block, "format", "markdown");
277
+ const hasPlanReview = (block) => hasCliPlanReview(block) || hasActionPlanReview(block);
278
+ const jobExecutesRelease = (block) => block.includes("--execute") ||
279
+ hasActionTruthyInput(block, "execute") ||
280
+ hasActionCommand(block, "run") ||
281
+ hasActionCommand(block, "resume") ||
282
+ hasActionCommand(block, "reconcile");
283
+ const hasCliApprovedExecution = (block) => block.includes("run") && block.includes("--execute") && block.includes("--approve-irreversible");
284
+ const hasActionApprovedExecution = (block) => hasActionCommand(block, "run") &&
285
+ hasActionTruthyInput(block, "execute") &&
286
+ hasActionTruthyInput(block, "approve-irreversible");
287
+ const hasApprovedExecution = (block) => hasCliApprovedExecution(block) || hasActionApprovedExecution(block);
288
+ const hasEnvironment = (block) => /^\s+environment:\s*\S+/m.test(block);
289
+ const planReviewJobs = (jobs) => jobs.filter((job) => hasPlanReview(job.contents) && !jobExecutesRelease(job.contents));
290
+ const planExecutionCandidates = (jobs) => jobs.filter((job) => job.name === "plan" || hasPlanReview(job.contents));
291
+ const executeJobCandidates = (jobs) => jobs.filter((job) => hasApprovedExecution(job.contents));
292
+ const fallbackNamedJob = (jobs, name) => jobs.find((job) => job.name === name);
293
+ const hasWorkflowTrustedTarget = (subject) => subject.targets.some((target) => target._tag === "NpmRegistryTarget" && target.trustedPublishing !== undefined);
294
+ const hasGitHubReleaseTarget = (subject) => subject.targets.some((target) => target._tag === "GitHubReleaseTarget");
295
+ const ciChecksForContents = (subject, workflowPath, contents) => {
296
+ const checks = [
297
+ check({
298
+ id: "ci:workflow-file",
299
+ status: "ok",
300
+ confidence: "confirmed",
301
+ message: `Workflow file ${workflowPath} exists.`
302
+ })
303
+ ];
304
+ const expectedWorkflow = inferredTrustedPublishingWorkflow(subject);
305
+ if (expectedWorkflow !== undefined) {
306
+ const matches = basename(workflowPath) === expectedWorkflow;
307
+ checks.push(check({
308
+ id: "ci:workflow-name",
309
+ status: matches ? "ok" : "fail",
310
+ confidence: "confirmed",
311
+ message: matches
312
+ ? `Workflow filename matches trusted publishing workflow ${expectedWorkflow}.`
313
+ : `Workflow filename ${basename(workflowPath)} does not match trusted publishing workflow ${expectedWorkflow}.`
314
+ }));
315
+ }
316
+ const jobs = workflowJobBlocks(contents);
317
+ const safePlanJobs = planReviewJobs(jobs);
318
+ const unsafePlanJobs = planExecutionCandidates(jobs).filter((job) => jobExecutesRelease(job.contents));
319
+ const planJob = safePlanJobs[0] ?? fallbackNamedJob(jobs, "plan");
320
+ const executeJobs = executeJobCandidates(jobs);
321
+ const executeJob = executeJobs[0] ?? fallbackNamedJob(jobs, "execute");
322
+ const executeJobHasApprovedExecution = executeJob === undefined ? false : hasApprovedExecution(executeJob.contents);
323
+ checks.push(check({
324
+ id: "ci:plan-job",
325
+ status: safePlanJobs.length === 0 ? "fail" : "ok",
326
+ confidence: "confirmed",
327
+ message: safePlanJobs.length === 0
328
+ ? "Workflow is missing a plan review job."
329
+ : `Workflow has a plan review job (${safePlanJobs[0]?.name ?? "unknown"}).`
330
+ }));
331
+ checks.push(check({
332
+ id: "ci:plan-job-no-execute",
333
+ status: unsafePlanJobs.length > 0 ? "fail" : "ok",
334
+ confidence: "confirmed",
335
+ message: unsafePlanJobs.length > 0
336
+ ? `Plan review candidate includes release execution (${unsafePlanJobs.map((job) => job.name).join(", ")}).`
337
+ : "Plan review jobs do not execute release operations."
338
+ }));
339
+ checks.push(check({
340
+ id: "ci:plan-review",
341
+ status: safePlanJobs.length > 0 ? "ok" : "warn",
342
+ confidence: "confirmed",
343
+ message: safePlanJobs.length > 0
344
+ ? "Plan review job records a Markdown release plan."
345
+ : "Workflow should record a Markdown release plan in a non-executing job."
346
+ }));
347
+ checks.push(check({
348
+ id: "ci:plan-artifact",
349
+ status: planJob !== undefined && hasUploadAlways(planJob.contents) ? "ok" : "warn",
350
+ confidence: "confirmed",
351
+ message: planJob !== undefined && hasUploadAlways(planJob.contents)
352
+ ? "Plan review job uploads review artifacts with if: always()."
353
+ : "Plan review job should upload review artifacts with if: always()."
354
+ }));
355
+ checks.push(check({
356
+ id: "ci:execute-job",
357
+ status: executeJobHasApprovedExecution ? "ok" : "fail",
358
+ confidence: "confirmed",
359
+ message: executeJobHasApprovedExecution
360
+ ? `Workflow has an approved execute job (${executeJob?.name ?? "unknown"}).`
361
+ : "Workflow is missing a job that runs approved release execution."
362
+ }));
363
+ if (executeJob !== undefined) {
364
+ checks.push(check({
365
+ id: "ci:execute-environment",
366
+ status: hasEnvironment(executeJob.contents) ? "ok" : "fail",
367
+ confidence: "confirmed",
368
+ message: hasEnvironment(executeJob.contents)
369
+ ? "Execute job is protected by a GitHub environment."
370
+ : "Execute job must configure a GitHub environment."
371
+ }));
372
+ if (hasWorkflowTrustedTarget(subject)) {
373
+ checks.push(check({
374
+ id: "ci:execute-id-token",
375
+ status: hasPermission(executeJob.contents, "id-token", "write") ? "ok" : "fail",
376
+ confidence: "confirmed",
377
+ message: hasPermission(executeJob.contents, "id-token", "write")
378
+ ? "Execute job grants id-token: write for trusted publishing."
379
+ : "Execute job must grant id-token: write for trusted publishing."
380
+ }));
381
+ }
382
+ if (hasGitHubReleaseTarget(subject)) {
383
+ checks.push(check({
384
+ id: "ci:execute-contents",
385
+ status: hasPermission(executeJob.contents, "contents", "write") ? "ok" : "fail",
386
+ confidence: "confirmed",
387
+ message: hasPermission(executeJob.contents, "contents", "write")
388
+ ? "Execute job grants contents: write for GitHub Releases."
389
+ : "Execute job must grant contents: write for GitHub Releases."
390
+ }));
391
+ }
392
+ checks.push(check({
393
+ id: "ci:execute-approval",
394
+ status: executeJobHasApprovedExecution ? "ok" : "fail",
395
+ confidence: "confirmed",
396
+ message: executeJobHasApprovedExecution
397
+ ? "Execute job runs approved release execution."
398
+ : "Execute job must run release execution with execute and irreversible approval."
399
+ }));
400
+ checks.push(check({
401
+ id: "ci:execute-evidence",
402
+ status: hasUploadAlways(executeJob.contents) ? "ok" : "warn",
403
+ confidence: "confirmed",
404
+ message: hasUploadAlways(executeJob.contents)
405
+ ? "Execute job uploads evidence with if: always()."
406
+ : "Execute job should upload evidence with if: always()."
407
+ }));
408
+ }
409
+ return checks;
410
+ };
411
+ const readWorkflowChecks = Effect.fn("diagnostics.readWorkflowChecks")(function* (subject, options) {
412
+ const fs = yield* FileSystem.FileSystem;
413
+ const path = yield* Path.Path;
414
+ const root = configRoot(path, options);
415
+ const workflowPath = options.workflow ?? defaultWorkflowPath(subject) ?? ".github/workflows/release.yml";
416
+ const absolutePath = workspacePath(path, root, workflowPath);
417
+ const exists = yield* fs.exists(absolutePath);
418
+ if (!exists) {
419
+ return [
420
+ check({
421
+ id: "ci:workflow-file",
422
+ status: options.missingCiIsNotChecked === true ? "info" : "fail",
423
+ confidence: "not-checked",
424
+ message: options.missingCiIsNotChecked === true
425
+ ? `Workflow file ${workflowPath} was not found; CI was not checked.`
426
+ : `Workflow file ${workflowPath} was not found.`
427
+ })
428
+ ];
429
+ }
430
+ const contents = yield* fs.readFileString(absolutePath);
431
+ return ciChecksForContents(subject, workflowPath, contents);
432
+ });
433
+ export const checkAuthReleaseConfig = Effect.fn("diagnostics.checkAuthReleaseConfig")(function* (input = {}) {
434
+ const options = releaseDiagnosticsOptionsFromInput(input);
435
+ const plan = yield* planReleaseConfig(planOptionsFromDiagnostics(options));
436
+ const checks = yield* authChecksForPlan(plan, options.target);
437
+ return reportForPlan(plan, checks);
438
+ });
439
+ export const checkCiReleaseConfig = Effect.fn("diagnostics.checkCiReleaseConfig")(function* (input = {}) {
440
+ const options = releaseDiagnosticsOptionsFromInput(input);
441
+ const subject = yield* readReleaseCiDiagnosticSubject(options);
442
+ const checks = yield* readWorkflowChecks(subject, options);
443
+ return reportForSubject(subject, checks);
444
+ });
445
+ export const doctorReleaseConfig = Effect.fn("diagnostics.doctorReleaseConfig")(function* (input = {}) {
446
+ const options = releaseDiagnosticsOptionsFromInput(input);
447
+ const validation = yield* validateReleaseConfigFile(validationOptionsFromDiagnostics(options)).pipe(Effect.match({
448
+ onFailure: (error) => check({
449
+ id: "config:validation",
450
+ status: "fail",
451
+ confidence: "confirmed",
452
+ message: `Config validation failed: ${error.message}`
453
+ }),
454
+ onSuccess: (result) => check({
455
+ id: "config:validation",
456
+ status: "ok",
457
+ confidence: "confirmed",
458
+ message: `Config ${result.path} is valid.`
459
+ })
460
+ }));
461
+ const planned = yield* planReleaseConfig(planOptionsFromDiagnostics(options)).pipe(Effect.match({
462
+ onFailure: (error) => plannedFailure(error.message),
463
+ onSuccess: plannedSuccess
464
+ }));
465
+ if (planned._tag === "Failed") {
466
+ return ReleaseDiagnosticReport.make({
467
+ schemaVersion: "release-diagnostics/v1",
468
+ releaseName: "unknown",
469
+ releaseVersion: "unknown",
470
+ checks: [
471
+ validation,
472
+ check({
473
+ id: "plan:construction",
474
+ status: "fail",
475
+ confidence: "confirmed",
476
+ message: `Plan construction failed: ${planned.message}`
477
+ })
478
+ ]
479
+ });
480
+ }
481
+ const authChecks = yield* authChecksForPlan(planned.plan, options.target);
482
+ const workflow = options.workflow ?? defaultWorkflowPath(planned.plan);
483
+ const ciChecks = yield* readWorkflowChecks(planned.plan, ReleaseDiagnosticsOptions.make({
484
+ ...releaseConfigFields(options),
485
+ ...(workflow === undefined ? {} : { workflow }),
486
+ missingCiIsNotChecked: true
487
+ }));
488
+ return reportForPlan(planned.plan, [
489
+ validation,
490
+ check({
491
+ id: "plan:construction",
492
+ status: "ok",
493
+ confidence: "confirmed",
494
+ message: "Release plan can be constructed."
495
+ }),
496
+ ...authChecks,
497
+ ...ciChecks
498
+ ]);
499
+ });
500
+ export const renderReleaseDiagnosticsJson = (report) => `${JSON.stringify(report, null, 2)}\n`;
501
+ export const renderReleaseDiagnosticsText = (report) => {
502
+ const lines = [
503
+ `diagnostics: ${report.releaseName}@${report.releaseVersion}`
504
+ ];
505
+ for (const item of report.checks) {
506
+ lines.push(`${item.status.padEnd(4)} ${item.confidence.padEnd(11)} ${item.id}: ${item.message}`);
507
+ }
508
+ return `${lines.join("\n")}\n`;
509
+ };
510
+ export const renderReleaseDiagnosticsMarkdown = (report) => {
511
+ const lines = [
512
+ `# Release Diagnostics ${report.releaseName}@${report.releaseVersion}`,
513
+ "",
514
+ "| Status | Confidence | Check | Message |",
515
+ "| --- | --- | --- | --- |"
516
+ ];
517
+ for (const item of report.checks) {
518
+ lines.push(`| ${item.status} | ${item.confidence} | ${item.id} | ${item.message.replaceAll("|", "\\|")} |`);
519
+ }
520
+ return `${lines.join("\n")}\n`;
521
+ };
522
+ export const renderReleaseDiagnostics = (report, format = "text") => {
523
+ switch (format) {
524
+ case "json":
525
+ return renderReleaseDiagnosticsJson(report);
526
+ case "markdown":
527
+ return renderReleaseDiagnosticsMarkdown(report);
528
+ case "text":
529
+ return renderReleaseDiagnosticsText(report);
530
+ }
531
+ };
532
+ export const checkAuth = checkAuthReleaseConfig;
533
+ export const checkCi = checkCiReleaseConfig;
534
+ export const doctor = doctorReleaseConfig;
535
+ export const render = renderReleaseDiagnostics;
536
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/workflows/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  import * as Effect from "effect/Effect";
2
+ import type * as FileSystem from "effect/FileSystem";
3
+ import type * as Path from "effect/Path";
2
4
  import * as Schema from "effect/Schema";
3
5
  import { EvidenceBundle, ReleaseWorkflowEvidence, ReleaseWorkflowFailureEvidence } from "../domain/evidence.js";
4
6
  import { ReleasePlan } from "../domain/release.js";
7
+ import { EvidenceWriteError, OperationFailedError } from "../planner/errors.js";
5
8
  export type * from "../types/effect-internal.js";
6
9
  declare const WorkflowEvidencePathsWritten_base: Schema.Class<WorkflowEvidencePathsWritten, Schema.Struct<{
7
10
  readonly render: Schema.optionalKey<Schema.String>;
@@ -12,10 +15,12 @@ declare const WorkflowEvidencePathsWritten_base: Schema.Class<WorkflowEvidencePa
12
15
  export declare class WorkflowEvidencePathsWritten extends WorkflowEvidencePathsWritten_base {
13
16
  }
14
17
  export declare const releaseEvidencePath: (plan: ReleasePlan, name: string) => string;
15
- export declare const writeNamedEvidence: (plan: ReleasePlan, name: string, evidence: EvidenceBundle) => Effect.Effect<string, import("../planner/errors.js").EvidenceWriteError, import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
18
+ export declare const writeNamedEvidence: (plan: ReleasePlan, name: string, evidence: EvidenceBundle) => Effect.Effect<string, EvidenceWriteError, FileSystem.FileSystem | Path.Path>;
16
19
  export declare const writeFailedOperationEvidence: (plan: ReleasePlan, name: string, error: {
17
20
  readonly evidence?: EvidenceBundle | undefined;
18
- }) => Effect.Effect<string | undefined, import("../planner/errors.js").EvidenceWriteError, import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
21
+ }) => Effect.Effect<string | undefined, EvidenceWriteError, FileSystem.FileSystem | Path.Path>;
22
+ export declare const writeNamedEvidenceWithFailure: <E, R>(plan: ReleasePlan, name: string, effect: Effect.Effect<EvidenceBundle, E | OperationFailedError, R>) => Effect.Effect<EvidenceBundle, E | OperationFailedError | EvidenceWriteError, R | FileSystem.FileSystem | Path.Path>;
19
23
  type WritableWorkflowEvidence = ReleaseWorkflowEvidence | ReleaseWorkflowFailureEvidence;
20
- export declare const writeWorkflowEvidence: (plan: ReleasePlan, evidence: WritableWorkflowEvidence) => Effect.Effect<WorkflowEvidencePathsWritten, import("../planner/errors.js").EvidenceWriteError, import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
24
+ export declare const writeWorkflowEvidence: (plan: ReleasePlan, evidence: WritableWorkflowEvidence) => Effect.Effect<WorkflowEvidencePathsWritten, EvidenceWriteError, FileSystem.FileSystem | Path.Path>;
25
+ export declare const writeWorkflowEvidenceWithFailure: <E, R>(plan: ReleasePlan, effect: Effect.Effect<ReleaseWorkflowEvidence, E | OperationFailedError, R>) => Effect.Effect<WorkflowEvidencePathsWritten, E | OperationFailedError | EvidenceWriteError, R | FileSystem.FileSystem | Path.Path>;
21
26
  //# sourceMappingURL=evidence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/workflows/evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAA;AAC/G,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIlD,mBAAmB,6BAA6B,CAAA;;;;;;;AAEhD,qBAAa,4BAA6B,SAAQ,iCAOhD;CAAG;AAEL,eAAO,MAAM,mBAAmB,GAAI,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,MAC5B,CAAA;AAE1C,eAAO,MAAM,kBAAkB,8MAQ7B,CAAA;AAEF,eAAO,MAAM,4BAA4B;wBAGV,cAAc,GAAG,SAAS;+JAMvD,CAAA;AAEF,KAAK,wBAAwB,GAAG,uBAAuB,GAAG,8BAA8B,CAAA;AAExF,eAAO,MAAM,qBAAqB,gOA8BhC,CAAA"}
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/workflows/evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,UAAU,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAA;AAC/G,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAG/E,mBAAmB,6BAA6B,CAAA;;;;;;;AAEhD,qBAAa,4BAA6B,SAAQ,iCAOhD;CAAG;AAEL,eAAO,MAAM,mBAAmB,GAAI,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,MAC5B,CAAA;AAE1C,eAAO,MAAM,kBAAkB,6IAQ7B,CAAA;AAEF,eAAO,MAAM,4BAA4B;wBAGV,cAAc,GAAG,SAAS;8FAMvD,CAAA;AAgBF,eAAO,MAAM,6BAA6B,GAAI,CAAC,EAAE,CAAC,EAChD,MAAM,WAAW,EACjB,MAAM,MAAM,EACZ,QAAQ,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,CAAC,KAChE,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,GAAG,oBAAoB,GAAG,kBAAkB,EAAE,CAAC,GAAG,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAYnH,CAAA;AAEH,KAAK,wBAAwB,GAAG,uBAAuB,GAAG,8BAA8B,CAAA;AAExF,eAAO,MAAM,qBAAqB,+JA8BhC,CAAA;AAEF,eAAO,MAAM,gCAAgC,GAAI,CAAC,EAAE,CAAC,EACnD,MAAM,WAAW,EACjB,QAAQ,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,CAAC,KACzE,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,GAAG,oBAAoB,GAAG,kBAAkB,EAAE,CAAC,GAAG,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAUjI,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import * as Schema from "effect/Schema";
3
3
  import { writeEvidenceBundle } from "../planner/evidence-recorder.js";
4
+ import { OperationFailedError } from "../planner/errors.js";
4
5
  import { workflowEvidencePaths } from "../planner/status.js";
5
6
  export class WorkflowEvidencePathsWritten extends Schema.Class("WorkflowEvidencePathsWritten")({
6
7
  render: Schema.optionalKey(Schema.String),
@@ -21,6 +22,13 @@ export const writeFailedOperationEvidence = Effect.fn("workflows.evidence.writeF
21
22
  }
22
23
  return yield* writeNamedEvidence(plan, name, error.evidence);
23
24
  });
25
+ const isOperationFailedError = (error) => error instanceof OperationFailedError ||
26
+ (typeof error === "object" &&
27
+ error !== null &&
28
+ "_tag" in error &&
29
+ error._tag === "OperationFailedError");
30
+ const hasWorkflowEvidence = (error) => isOperationFailedError(error) && error.workflowEvidence !== undefined;
31
+ export const writeNamedEvidenceWithFailure = (plan, name, effect) => effect.pipe(Effect.catchIf(isOperationFailedError, (error) => writeFailedOperationEvidence(plan, name, error).pipe(Effect.flatMap(() => Effect.fail(error)))), Effect.flatMap((evidence) => writeNamedEvidence(plan, name, evidence).pipe(Effect.map(() => evidence))));
24
32
  export const writeWorkflowEvidence = Effect.fn("workflows.evidence.writeWorkflowEvidence")(function* (plan, evidence) {
25
33
  const paths = workflowEvidencePaths(plan);
26
34
  const written = {};
@@ -42,4 +50,5 @@ export const writeWorkflowEvidence = Effect.fn("workflows.evidence.writeWorkflow
42
50
  }
43
51
  return WorkflowEvidencePathsWritten.make(written);
44
52
  });
53
+ export const writeWorkflowEvidenceWithFailure = (plan, effect) => effect.pipe(Effect.catchIf(hasWorkflowEvidence, (error) => writeWorkflowEvidence(plan, error.workflowEvidence).pipe(Effect.flatMap(() => Effect.fail(error)))), Effect.flatMap((evidence) => writeWorkflowEvidence(plan, evidence)));
45
54
  //# sourceMappingURL=evidence.js.map