@async/pipeline 0.4.0 → 0.4.2

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.
@@ -0,0 +1,504 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync, readFileSync, rmSync } from "node:fs";
3
+ import { chmod, cp, mkdtemp, readFile, writeFile } from "node:fs/promises";
4
+ import { tmpdir } from "node:os";
5
+ import { isAbsolute, join, relative, resolve } from "node:path";
6
+ const GITHUB_REGISTRY = "https://npm.pkg.github.com";
7
+ const NPM_REGISTRY = "https://registry.npmjs.org/";
8
+ const COMMENT_MARKER = "<!-- github-packages-pr-preview -->";
9
+ const SHA_PATTERN = /^[0-9a-f]{40}$/;
10
+ const NAME_PATTERN = /^@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*$/;
11
+ const SEMVER_PATTERN = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
12
+ export async function publishGitHubPackage(mode, options) {
13
+ const context = await readPackageContext(options.cwd, options.packagePath);
14
+ const { packageDir, manifest } = context;
15
+ assertPublicPackage(manifest);
16
+ const repository = options.env.GITHUB_REPOSITORY ?? packageRepositoryName(manifest) ?? "";
17
+ const owner = (options.env.GITHUB_REPOSITORY_OWNER ?? repository.split("/")[0] ?? "").toLowerCase();
18
+ if (!repository || !owner) {
19
+ throw new Error("Set GITHUB_REPOSITORY or package.json repository so GitHub Packages publishing can resolve the repository owner.");
20
+ }
21
+ const mirrorName = githubMirrorPackageName(manifest.name, owner);
22
+ const token = options.env.GITHUB_TOKEN ?? options.env.NODE_AUTH_TOKEN;
23
+ const apiBase = (options.env.GITHUB_API_URL ?? "https://api.github.com").replace(/\/$/, "");
24
+ const releaseContext = await resolveGitHubPublishContext(mode, { manifest, repository, env: options.env, io: options.io });
25
+ if (!token) {
26
+ throw new Error("Set GITHUB_TOKEN (or NODE_AUTH_TOKEN) with packages:write to publish to GitHub Packages.");
27
+ }
28
+ if (!existsSync(join(packageDir, "dist"))) {
29
+ throw new Error(`${relativeLabel(options.cwd, packageDir)}/dist is missing. Build before publishing.`);
30
+ }
31
+ const stagingDir = await mkdtemp(join(tmpdir(), "async-pipeline-github-publish-"));
32
+ try {
33
+ const staged = {
34
+ ...manifest,
35
+ name: mirrorName,
36
+ version: releaseContext.version,
37
+ publishConfig: { registry: GITHUB_REGISTRY }
38
+ };
39
+ delete staged.scripts;
40
+ delete staged.devDependencies;
41
+ await writeFile(join(stagingDir, "package.json"), `${JSON.stringify(staged, null, 2)}\n`, "utf8");
42
+ await cp(join(packageDir, "dist"), join(stagingDir, "dist"), { recursive: true });
43
+ for (const extra of ["LICENSE", "README.md"]) {
44
+ if (existsSync(join(packageDir, extra))) {
45
+ await cp(join(packageDir, extra), join(stagingDir, extra));
46
+ }
47
+ }
48
+ const registryUrl = new URL(GITHUB_REGISTRY);
49
+ const registryAuthPath = `${registryUrl.host}${registryUrl.pathname.replace(/\/$/, "")}`;
50
+ const npmConfig = join(stagingDir, ".github-packages.npmrc");
51
+ await writeFile(npmConfig, `@${owner}:registry=${GITHUB_REGISTRY}\n//${registryAuthPath}/:_authToken=${token}\n`, "utf8");
52
+ await chmod(npmConfig, 0o600);
53
+ const npm = (args, runOptions = {}) => spawnSync("npm", args, {
54
+ cwd: stagingDir,
55
+ stdio: runOptions.capture ? ["ignore", "pipe", "pipe"] : "inherit",
56
+ encoding: "utf8",
57
+ env: { ...options.env, NPM_CONFIG_USERCONFIG: npmConfig }
58
+ });
59
+ const spec = `${mirrorName}@${releaseContext.version}`;
60
+ const view = npm(["view", spec, "version", "--registry", GITHUB_REGISTRY], { capture: true });
61
+ const viewOutput = npmOutput(view);
62
+ const exists = view.status === 0;
63
+ if (!exists && !isMissingVersion(view)) {
64
+ options.io.stderr(viewOutput.slice(0, 2000));
65
+ throw new Error(`Could not check whether ${spec} already exists on GitHub Packages; refusing to guess. See npm output above.`);
66
+ }
67
+ if (exists) {
68
+ options.io.stdout(`${spec} already exists on GitHub Packages; skipping publish.\n`);
69
+ }
70
+ else {
71
+ options.io.stdout(`Publishing ${spec} to GitHub Packages with tag ${releaseContext.distTag}.\n`);
72
+ const publish = npm(["publish", "--tag", releaseContext.distTag, "--ignore-scripts", "--registry", GITHUB_REGISTRY]);
73
+ if (publish.status !== 0) {
74
+ throw new Error(`Failed to publish ${spec} to GitHub Packages. Check the job's packages:write permission, package visibility, and whether this immutable version already exists.`);
75
+ }
76
+ }
77
+ const moveDistTag = () => {
78
+ const result = npm(["dist-tag", "add", spec, releaseContext.distTag, "--registry", GITHUB_REGISTRY]);
79
+ if (result.status !== 0) {
80
+ throw new Error(`Failed to move GitHub Packages dist-tag ${releaseContext.distTag} to ${spec}.`);
81
+ }
82
+ };
83
+ const ghApi = async (path, init = {}) => {
84
+ const response = await fetch(`${apiBase}${path}`, {
85
+ ...init,
86
+ headers: {
87
+ authorization: `Bearer ${token}`,
88
+ accept: "application/vnd.github+json",
89
+ "content-type": "application/json",
90
+ "x-github-api-version": "2022-11-28",
91
+ ...init.headers
92
+ }
93
+ });
94
+ if (!response.ok) {
95
+ const text = await response.text();
96
+ throw new Error(`GitHub API ${init.method ?? "GET"} ${path} failed with ${response.status}: ${text.slice(0, 500)}`);
97
+ }
98
+ return response.status === 204 ? null : response.json();
99
+ };
100
+ if (mode === "release") {
101
+ moveDistTag();
102
+ }
103
+ else if (mode === "main") {
104
+ const branch = await guardedApi(() => ghApi(`/repos/${repository}/branches/main`), "Could not read the current main branch head");
105
+ const branchSha = asRecord(asRecord(branch).commit).sha;
106
+ if (branchSha === options.env.GITHUB_SHA) {
107
+ moveDistTag();
108
+ }
109
+ else {
110
+ options.io.stdout(`::notice::Not moving ${releaseContext.distTag}: main moved from ${options.env.GITHUB_SHA} to ${String(branchSha)}.\n`);
111
+ }
112
+ }
113
+ else {
114
+ const pr = releaseContext.prContext;
115
+ if (!pr)
116
+ throw new Error("Internal error: missing PR context.");
117
+ const pull = await guardedApi(() => ghApi(`/repos/${repository}/pulls/${pr.number}`), "Could not read the current PR head");
118
+ const currentHead = asRecord(asRecord(pull).head).sha;
119
+ if (currentHead !== pr.headSha) {
120
+ options.io.stdout(`::notice::Not moving ${releaseContext.distTag}: PR head moved from ${pr.headSha} to ${String(currentHead)}.\n`);
121
+ return;
122
+ }
123
+ moveDistTag();
124
+ const installTarget = (versionOrTag) => {
125
+ const target = `${mirrorName}@${versionOrTag}`;
126
+ return mirrorName === manifest.name ? target : `${manifest.name}@npm:${target}`;
127
+ };
128
+ const body = [
129
+ COMMENT_MARKER,
130
+ "### Preview package",
131
+ "",
132
+ `Preview for PR head \`${pr.headSha}\` (built from its merge with main), published to GitHub Packages as \`${mirrorName}\`.`,
133
+ "",
134
+ "Latest successful build for this PR:",
135
+ "```sh",
136
+ `pnpm add ${installTarget(releaseContext.distTag)}`,
137
+ "```",
138
+ "",
139
+ "Exact commit build:",
140
+ "```sh",
141
+ `pnpm add ${installTarget(releaseContext.version)}`,
142
+ "```",
143
+ "",
144
+ `Requires GitHub Packages auth and \`@${owner}:registry=${GITHUB_REGISTRY}\` in your npm config.`
145
+ ].join("\n");
146
+ const comments = await guardedApi(() => ghApi(`/repos/${repository}/issues/${pr.number}/comments?per_page=100`), "Could not list PR comments");
147
+ const previous = Array.isArray(comments)
148
+ ? comments.find((comment) => {
149
+ const record = asRecord(comment);
150
+ return typeof record.body === "string"
151
+ && record.body.includes(COMMENT_MARKER)
152
+ && asRecord(record.user).login === "github-actions[bot]";
153
+ })
154
+ : undefined;
155
+ if (previous) {
156
+ await guardedApi(() => ghApi(`/repos/${repository}/issues/comments/${String(asRecord(previous).id)}`, { method: "PATCH", body: JSON.stringify({ body }) }), "Failed to update the PR preview comment");
157
+ }
158
+ else {
159
+ await guardedApi(() => ghApi(`/repos/${repository}/issues/${pr.number}/comments`, { method: "POST", body: JSON.stringify({ body }) }), "Failed to create the PR preview comment");
160
+ }
161
+ }
162
+ options.io.stdout(`GitHub Packages ${mode} publish complete: ${spec} (${releaseContext.distTag}).\n`);
163
+ }
164
+ finally {
165
+ rmSync(stagingDir, { force: true, recursive: true });
166
+ }
167
+ }
168
+ export async function publishNpmPackage(options) {
169
+ const { packageDir, manifest } = await readPackageContext(options.cwd, options.packagePath);
170
+ assertPublicPackage(manifest);
171
+ const spec = `${manifest.name}@${manifest.version}`;
172
+ const npm = (args, runOptions = {}) => spawnSync("npm", args, {
173
+ cwd: packageDir,
174
+ encoding: "utf8",
175
+ stdio: runOptions.inherit ? "inherit" : ["ignore", "pipe", "pipe"],
176
+ env: {
177
+ ...options.env,
178
+ NPM_CONFIG_CACHE: options.env.NPM_CONFIG_CACHE ?? join(options.cwd, ".async", "npm-cache")
179
+ }
180
+ });
181
+ const ensurePublicAccess = () => {
182
+ options.io.stdout(`Ensuring ${manifest.name} is public on npm.\n`);
183
+ const access = npm(["access", "set", "status=public", manifest.name, "--registry", NPM_REGISTRY], { inherit: true });
184
+ if (access.status !== 0) {
185
+ throw new Error(`Failed to set npm package access for ${manifest.name}.`);
186
+ }
187
+ };
188
+ const view = npm(["view", spec, "version", "--registry", NPM_REGISTRY]);
189
+ if (view.status === 0 && view.stdout.trim() === manifest.version) {
190
+ ensurePublicAccess();
191
+ options.io.stdout(`${spec} is already published to npm; skipping.\n`);
192
+ return;
193
+ }
194
+ if (!isMissingVersion(view)) {
195
+ options.io.stderr(npmOutput(view).slice(0, 2000));
196
+ throw new Error(`Could not determine whether ${spec} exists on npm; refusing to guess.`);
197
+ }
198
+ options.io.stdout(`Publishing ${spec} to npm with provenance.\n`);
199
+ const publish = npm(["publish", "--access", "public", "--registry", NPM_REGISTRY, "--provenance"], { inherit: true });
200
+ if (publish.status !== 0) {
201
+ throw new Error(`Failed to publish ${spec} to npm.`);
202
+ }
203
+ ensurePublicAccess();
204
+ }
205
+ export async function ensureGitHubRelease(options) {
206
+ const { manifest } = await readPackageContext(options.cwd, options.packagePath);
207
+ assertPublicPackage(manifest);
208
+ if (!SEMVER_PATTERN.test(manifest.version)) {
209
+ throw new Error(`${manifest.name} version must be simple semver for release creation. Found: ${manifest.version}`);
210
+ }
211
+ const repository = options.env.GITHUB_REPOSITORY ?? packageRepositoryName(manifest);
212
+ if (!repository) {
213
+ throw new Error("Set GITHUB_REPOSITORY or package.json repository so release creation can resolve GitHub state.");
214
+ }
215
+ const token = options.env.GITHUB_TOKEN;
216
+ if (!token) {
217
+ throw new Error("Set GITHUB_TOKEN with contents:write so release creation can create tags and GitHub Releases.");
218
+ }
219
+ const targetSha = options.env.GITHUB_SHA;
220
+ if (!targetSha || !SHA_PATTERN.test(targetSha)) {
221
+ throw new Error("Set GITHUB_SHA to the commit that the release tag should point at.");
222
+ }
223
+ const apiBase = (options.env.GITHUB_API_URL ?? "https://api.github.com").replace(/\/$/, "");
224
+ const tagName = `v${manifest.version}`;
225
+ const encodedTagName = encodeURIComponent(tagName);
226
+ const ghApi = async (path, init = {}, allowMissing = false) => {
227
+ const response = await fetch(`${apiBase}${path}`, {
228
+ ...init,
229
+ headers: {
230
+ authorization: `Bearer ${token}`,
231
+ accept: "application/vnd.github+json",
232
+ "content-type": "application/json",
233
+ "x-github-api-version": "2022-11-28",
234
+ ...init.headers
235
+ }
236
+ });
237
+ if (allowMissing && response.status === 404)
238
+ return undefined;
239
+ if (!response.ok) {
240
+ const text = await response.text();
241
+ throw new Error(`GitHub API ${init.method ?? "GET"} ${path} failed with ${response.status}: ${text.slice(0, 500)}`);
242
+ }
243
+ return response.status === 204 ? null : response.json();
244
+ };
245
+ const resolveRefCommit = async (ref) => {
246
+ const object = asRecord(asRecord(ref).object);
247
+ const type = object.type;
248
+ const sha = object.sha;
249
+ if (type === "commit" && typeof sha === "string")
250
+ return sha;
251
+ if (type === "tag" && typeof sha === "string") {
252
+ const tag = await ghApi(`/repos/${repository}/git/tags/${sha}`);
253
+ const target = asRecord(asRecord(tag).object);
254
+ if (target.type === "commit" && typeof target.sha === "string")
255
+ return target.sha;
256
+ }
257
+ throw new Error(`Release tag ${tagName} points to an unsupported Git object.`);
258
+ };
259
+ const existingRef = await ghApi(`/repos/${repository}/git/ref/tags/${encodedTagName}`, {}, true);
260
+ if (existingRef) {
261
+ const existingSha = await resolveRefCommit(existingRef);
262
+ if (existingSha !== targetSha) {
263
+ throw new Error(`Release tag ${tagName} already points to ${existingSha}; refusing to move it to ${targetSha}.`);
264
+ }
265
+ options.io.stdout(`OK Git tag: ${tagName} -> ${targetSha}\n`);
266
+ }
267
+ else {
268
+ await ghApi(`/repos/${repository}/git/refs`, {
269
+ method: "POST",
270
+ body: JSON.stringify({ ref: `refs/tags/${tagName}`, sha: targetSha })
271
+ });
272
+ options.io.stdout(`Created Git tag ${tagName} -> ${targetSha}.\n`);
273
+ }
274
+ const existingRelease = await ghApi(`/repos/${repository}/releases/tags/${encodedTagName}`, {}, true);
275
+ if (existingRelease) {
276
+ options.io.stdout(`OK GitHub Release: ${repository}@${tagName}\n`);
277
+ }
278
+ else {
279
+ await ghApi(`/repos/${repository}/releases`, {
280
+ method: "POST",
281
+ body: JSON.stringify({
282
+ tag_name: tagName,
283
+ target_commitish: targetSha,
284
+ name: `${manifest.name} ${tagName}`,
285
+ body: `Release ${manifest.name}@${manifest.version}.`,
286
+ draft: false,
287
+ prerelease: manifest.version.includes("-")
288
+ })
289
+ });
290
+ options.io.stdout(`Created GitHub Release ${repository}@${tagName}.\n`);
291
+ }
292
+ }
293
+ export async function runReleaseDoctor(options) {
294
+ const { manifest } = await readPackageContext(options.cwd, options.packagePath);
295
+ assertPublicPackage(manifest);
296
+ if (!SEMVER_PATTERN.test(manifest.version)) {
297
+ throw new Error(`${manifest.name} version must be simple semver for release doctor. Found: ${manifest.version}`);
298
+ }
299
+ const repository = options.env.GITHUB_REPOSITORY ?? packageRepositoryName(manifest);
300
+ const owner = (options.env.GITHUB_REPOSITORY_OWNER ?? repository?.split("/")[0] ?? "").toLowerCase();
301
+ if (!repository || !owner) {
302
+ throw new Error("Set GITHUB_REPOSITORY or package.json repository so release doctor can resolve GitHub state.");
303
+ }
304
+ const npmPackage = `${manifest.name}@${manifest.version}`;
305
+ const githubPackage = `${githubMirrorPackageName(manifest.name, owner)}@${manifest.version}`;
306
+ assertReleaseTagMatches(manifest, options.env);
307
+ await assertRegistryVersion(npmPackage, NPM_REGISTRY, options, "npm");
308
+ await assertRegistryVersion(githubPackage, GITHUB_REGISTRY, options, "GitHub Packages");
309
+ await assertGitHubRelease(repository, manifest.version, options);
310
+ options.io.stdout(`Release doctor passed for ${manifest.name}@${manifest.version}.\n`);
311
+ }
312
+ async function resolveGitHubPublishContext(mode, options) {
313
+ if (mode === "release") {
314
+ if (!SEMVER_PATTERN.test(options.manifest.version)) {
315
+ throw new Error(`${options.manifest.name} version must be simple semver for a stable mirror. Found: ${options.manifest.version}`);
316
+ }
317
+ assertReleaseTagMatches(options.manifest, options.env);
318
+ return { version: options.manifest.version, distTag: "latest" };
319
+ }
320
+ if (mode === "main") {
321
+ const sha = options.env.GITHUB_SHA;
322
+ if (!sha || !SHA_PATTERN.test(sha)) {
323
+ throw new Error("main mode needs GITHUB_SHA (40-char lowercase hex). Run it from the generated workflow on a push to main.");
324
+ }
325
+ return { version: `0.0.0-main.sha.${sha}`, distTag: "main" };
326
+ }
327
+ const event = await readGitHubEvent(options.env, "pr mode needs GITHUB_EVENT_PATH with a pull_request payload. Run it from the generated workflow on a pull request.");
328
+ const pullRequest = asRecord(event).pull_request;
329
+ const number = Number(asRecord(pullRequest).number ?? asRecord(event).number);
330
+ const head = asRecord(asRecord(pullRequest).head);
331
+ const headSha = head.sha;
332
+ const headRepo = asRecord(head.repo).full_name;
333
+ if (!Number.isInteger(number) || number <= 0 || typeof headSha !== "string" || !SHA_PATTERN.test(headSha)) {
334
+ throw new Error("pr mode could not read a positive number and head.sha from the pull_request payload.");
335
+ }
336
+ if (headRepo !== options.repository) {
337
+ options.io.stdout(`Skipping preview publish: PR #${number} head is ${typeof headRepo === "string" ? headRepo : "a deleted repo"}, not ${options.repository}.\n`);
338
+ return Promise.reject(new LifecycleSkip());
339
+ }
340
+ return {
341
+ version: `0.0.0-pr.${number}.sha.${headSha}`,
342
+ distTag: `pr-${number}`,
343
+ prContext: { number, headSha }
344
+ };
345
+ }
346
+ export async function runLifecycleCli(action, io) {
347
+ try {
348
+ await action();
349
+ return 0;
350
+ }
351
+ catch (error) {
352
+ if (error instanceof LifecycleSkip)
353
+ return 0;
354
+ io.stderr(`::error::${error instanceof Error ? error.message : String(error)}\n`);
355
+ return 1;
356
+ }
357
+ }
358
+ async function readPackageContext(cwd, packagePath) {
359
+ const packageDir = resolve(cwd, packagePath);
360
+ const relativePackageDir = relative(cwd, packageDir);
361
+ if (relativePackageDir === ".." || relativePackageDir.startsWith("../") || relativePackageDir.startsWith("..\\") || isAbsolute(relativePackageDir)) {
362
+ throw new Error(`Package path "${packagePath}" must stay inside ${cwd}.`);
363
+ }
364
+ const manifest = JSON.parse(await readFile(join(packageDir, "package.json"), "utf8"));
365
+ if (typeof manifest.name !== "string" || typeof manifest.version !== "string") {
366
+ throw new Error(`${relativeLabel(cwd, packageDir)}/package.json must include name and version.`);
367
+ }
368
+ return { packageDir, manifest };
369
+ }
370
+ function assertPublicPackage(manifest) {
371
+ if (manifest.private) {
372
+ throw new Error(`${manifest.name} is marked private; refusing to publish.`);
373
+ }
374
+ }
375
+ function githubMirrorPackageName(packageName, owner) {
376
+ const leaf = packageName.startsWith("@") ? packageName.split("/")[1] : packageName;
377
+ const mirrorName = `@${owner}/${leaf}`;
378
+ if (!NAME_PATTERN.test(mirrorName)) {
379
+ throw new Error(`GitHub Packages package name must be a simple lowercase scoped npm name. Found: ${mirrorName}`);
380
+ }
381
+ return mirrorName;
382
+ }
383
+ function packageRepositoryName(manifest) {
384
+ const repository = manifest.repository;
385
+ const url = typeof repository === "string"
386
+ ? repository
387
+ : typeof repository === "object" && repository !== null && "url" in repository && typeof repository.url === "string"
388
+ ? repository.url
389
+ : undefined;
390
+ const match = url?.match(/github\.com[:/]([^/\s]+)\/([^/\s.]+)(?:\.git)?/i);
391
+ return match ? `${match[1]}/${match[2]}` : undefined;
392
+ }
393
+ async function readGitHubEvent(env, missingMessage) {
394
+ const eventPath = env.GITHUB_EVENT_PATH;
395
+ if (!eventPath || !existsSync(eventPath)) {
396
+ throw new Error(missingMessage);
397
+ }
398
+ return JSON.parse(await readFile(eventPath, "utf8"));
399
+ }
400
+ async function assertRegistryVersion(spec, registry, options, label) {
401
+ let cleanupDir;
402
+ let userconfig;
403
+ if (registry === GITHUB_REGISTRY) {
404
+ const token = options.env.GITHUB_TOKEN ?? options.env.NODE_AUTH_TOKEN;
405
+ if (!token) {
406
+ throw new Error("Set GITHUB_TOKEN or NODE_AUTH_TOKEN so release doctor can verify GitHub Packages.");
407
+ }
408
+ const scopePart = spec.startsWith("@") ? spec.split("/")[0] : undefined;
409
+ const scope = scopePart?.slice(1);
410
+ if (!scope) {
411
+ throw new Error(`Cannot infer GitHub Packages scope from ${spec}.`);
412
+ }
413
+ cleanupDir = await mkdtemp(join(tmpdir(), "async-pipeline-release-doctor-"));
414
+ const registryUrl = new URL(GITHUB_REGISTRY);
415
+ const registryAuthPath = `${registryUrl.host}${registryUrl.pathname.replace(/\/$/, "")}`;
416
+ userconfig = join(cleanupDir, ".npmrc");
417
+ await writeFile(userconfig, `@${scope}:registry=${GITHUB_REGISTRY}\n//${registryAuthPath}/:_authToken=${token}\n`, "utf8");
418
+ await chmod(userconfig, 0o600);
419
+ }
420
+ const view = spawnSync("npm", ["view", spec, "version", "--registry", registry], {
421
+ cwd: options.cwd,
422
+ encoding: "utf8",
423
+ stdio: ["ignore", "pipe", "pipe"],
424
+ env: {
425
+ ...options.env,
426
+ ...(userconfig ? { NPM_CONFIG_USERCONFIG: userconfig } : {}),
427
+ NPM_CONFIG_CACHE: options.env.NPM_CONFIG_CACHE ?? join(options.cwd, ".async", "npm-cache")
428
+ }
429
+ });
430
+ try {
431
+ if (view.status !== 0) {
432
+ options.io.stderr(npmOutput(view).slice(0, 2000));
433
+ throw new Error(`Release doctor could not find ${spec} on ${label}.`);
434
+ }
435
+ }
436
+ finally {
437
+ if (cleanupDir)
438
+ rmSync(cleanupDir, { force: true, recursive: true });
439
+ }
440
+ options.io.stdout(`OK ${label}: ${spec}\n`);
441
+ }
442
+ async function assertGitHubRelease(repository, version, options) {
443
+ const token = options.env.GITHUB_TOKEN;
444
+ if (!token) {
445
+ throw new Error("Set GITHUB_TOKEN so release doctor can verify the GitHub Release.");
446
+ }
447
+ const apiBase = (options.env.GITHUB_API_URL ?? "https://api.github.com").replace(/\/$/, "");
448
+ const response = await fetch(`${apiBase}/repos/${repository}/releases/tags/v${version}`, {
449
+ headers: {
450
+ authorization: `Bearer ${token}`,
451
+ accept: "application/vnd.github+json",
452
+ "x-github-api-version": "2022-11-28"
453
+ }
454
+ });
455
+ if (!response.ok) {
456
+ const text = await response.text();
457
+ throw new Error(`Release doctor could not verify GitHub Release v${version}: ${response.status} ${text.slice(0, 500)}`);
458
+ }
459
+ options.io.stdout(`OK GitHub Release: ${repository}@v${version}\n`);
460
+ }
461
+ function assertReleaseTagMatches(manifest, env) {
462
+ const refTag = env.GITHUB_REF?.startsWith("refs/tags/") ? env.GITHUB_REF.slice("refs/tags/".length) : undefined;
463
+ if (refTag && refTag.replace(/^v/, "") !== manifest.version) {
464
+ throw new Error(`Release tag ${refTag} does not match ${manifest.name} version ${manifest.version}. Publish from a matching tag such as v${manifest.version}.`);
465
+ }
466
+ if (env.GITHUB_EVENT_NAME === "release") {
467
+ const eventPath = env.GITHUB_EVENT_PATH;
468
+ if (!eventPath || !existsSync(eventPath)) {
469
+ throw new Error("release events need GITHUB_EVENT_PATH to verify the release tag matches package.json.");
470
+ }
471
+ const event = JSON.parse(readFileSync(eventPath, "utf8"));
472
+ const tagName = asRecord(asRecord(event).release).tag_name;
473
+ if (typeof tagName !== "string" || tagName.length === 0) {
474
+ throw new Error("Release event payload did not include release.tag_name.");
475
+ }
476
+ if (tagName.replace(/^v/, "") !== manifest.version) {
477
+ throw new Error(`Release tag ${tagName} does not match ${manifest.name} version ${manifest.version}. Publish from a matching tag such as v${manifest.version}.`);
478
+ }
479
+ }
480
+ }
481
+ async function guardedApi(operation, message) {
482
+ try {
483
+ return await operation();
484
+ }
485
+ catch (error) {
486
+ throw new Error(`${message}: ${error instanceof Error ? error.message : String(error)}`);
487
+ }
488
+ }
489
+ function isMissingVersion(result) {
490
+ return result.status !== 0 && /(^|[\s])(E404|404)([\s]|$)|not found/i.test(npmOutput(result));
491
+ }
492
+ function npmOutput(result) {
493
+ return `${result.stdout ?? ""}${result.stderr ?? ""}`;
494
+ }
495
+ function relativeLabel(cwd, target) {
496
+ const path = relative(cwd, target);
497
+ return path || ".";
498
+ }
499
+ function asRecord(value) {
500
+ return typeof value === "object" && value !== null ? value : {};
501
+ }
502
+ class LifecycleSkip extends Error {
503
+ }
504
+ //# sourceMappingURL=package-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-lifecycle.js","sourceRoot":"","sources":["../src/package-lifecycle.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@async/pipeline",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Local-first TypeScript pipelines with one task graph for laptops and CI.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -44,6 +44,8 @@
44
44
  "pack:check": "npm --cache ../../.async/npm-cache pack --dry-run"
45
45
  },
46
46
  "files": [
47
+ "API_SURFACE.md",
48
+ "api-contract.json",
47
49
  "dist"
48
50
  ],
49
51
  "sideEffects": false,