@git.zone/cli 4.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.smartconfig.json +0 -1
- package/assets/templates/ci_default/.gitea/workflows/default_tags.yaml +0 -21
- package/assets/templates/ci_default_gitlab/.gitlab-ci.yml +0 -13
- package/assets/templates/ci_default_private/.gitea/workflows/default_tags.yaml +0 -21
- package/assets/templates/ci_default_private_gitlab/.gitlab-ci.yml +0 -13
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/helpers.climode.js +31 -2
- package/dist_ts/helpers.workflow.d.ts +10 -2
- package/dist_ts/helpers.workflow.js +102 -19
- package/dist_ts/mod_commit/mod.helpers.d.ts +3 -3
- package/dist_ts/mod_commit/mod.helpers.js +10 -10
- package/dist_ts/mod_config/index.js +22 -23
- package/dist_ts/mod_release/classes.releasejournal.d.ts +78 -0
- package/dist_ts/mod_release/classes.releasejournal.js +511 -0
- package/dist_ts/mod_release/helpers.npmartifact.d.ts +32 -0
- package/dist_ts/mod_release/helpers.npmartifact.js +358 -0
- package/dist_ts/mod_release/helpers.releasebranch.d.ts +47 -0
- package/dist_ts/mod_release/helpers.releasebranch.js +627 -0
- package/dist_ts/mod_release/helpers.releasepublication.d.ts +24 -0
- package/dist_ts/mod_release/helpers.releasepublication.js +293 -0
- package/dist_ts/mod_release/index.d.ts +1 -1
- package/dist_ts/mod_release/index.js +539 -209
- package/package.json +1 -1
- package/readme.hints.md +47 -1
- package/readme.md +81 -38
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/helpers.climode.ts +34 -1
- package/ts/helpers.workflow.ts +155 -19
- package/ts/mod_commit/mod.helpers.ts +12 -8
- package/ts/mod_config/index.ts +21 -22
- package/ts/mod_release/classes.releasejournal.ts +740 -0
- package/ts/mod_release/helpers.npmartifact.ts +553 -0
- package/ts/mod_release/helpers.releasebranch.ts +1344 -0
- package/ts/mod_release/helpers.releasepublication.ts +641 -0
- package/ts/mod_release/index.ts +906 -262
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as plugins from "./mod.plugins.js";
|
|
2
|
+
import { type IReleaseArtifact } from "./classes.releasejournal.js";
|
|
3
|
+
declare const supportedPnpmVersion = "11.21.0";
|
|
4
|
+
export interface IPnpmReleaseCapability {
|
|
5
|
+
version: typeof supportedPnpmVersion;
|
|
6
|
+
}
|
|
7
|
+
export type TNpmArtifactProbeStatus = "absent" | "exact" | "conflict" | "inconclusive";
|
|
8
|
+
export interface INpmArtifactProbeResult {
|
|
9
|
+
status: TNpmArtifactProbeStatus;
|
|
10
|
+
code: "absent" | "exact" | "metadata-conflict" | "tarball-conflict" | "tag-conflict" | "registry-response" | "network-error";
|
|
11
|
+
}
|
|
12
|
+
export interface INpmArtifactProbeOptions {
|
|
13
|
+
fetchImplementation?: typeof fetch;
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
attempts?: number;
|
|
16
|
+
delayMs?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare const assertPnpmReleaseCapability: (smartshellArg: plugins.smartshell.Smartshell, cwdArg: string) => Promise<IPnpmReleaseCapability>;
|
|
19
|
+
export declare const assertNoLegacyNpmPublisher: (cwdArg: string) => Promise<void>;
|
|
20
|
+
export declare const normalizeNpmRegistryUrl: (valueArg: string) => string;
|
|
21
|
+
export declare const hashReleaseDestination: (valueArg: string) => string;
|
|
22
|
+
export declare const calculateNpmArtifact: (artifactPathArg: string, packageNameArg: string, versionArg: string) => Promise<IReleaseArtifact>;
|
|
23
|
+
export declare const packNpmArtifact: (smartshellArg: plugins.smartshell.Smartshell, cwdArg: string, destinationDirectoryArg: string, expectedVersionArg: string) => Promise<IReleaseArtifact>;
|
|
24
|
+
export declare const verifyStoredNpmArtifact: (artifactPathArg: string, expectedArtifactArg: IReleaseArtifact) => Promise<void>;
|
|
25
|
+
export declare const buildPnpmPublishArgs: (artifactPathArg: string, registryArg: string) => string[];
|
|
26
|
+
export declare const publishNpmArtifact: (smartshellArg: plugins.smartshell.Smartshell, cwdArg: string, artifactPathArg: string, registryArg: string) => Promise<{
|
|
27
|
+
exitCode: number;
|
|
28
|
+
output: string;
|
|
29
|
+
}>;
|
|
30
|
+
export declare const probeAnonymousNpmArtifact: (registryArg: string, artifactArg: IReleaseArtifact, tagArg?: string, optionsArg?: INpmArtifactProbeOptions) => Promise<INpmArtifactProbeResult>;
|
|
31
|
+
export declare const waitForAnonymousNpmArtifact: (registryArg: string, artifactArg: IReleaseArtifact, tagArg?: string, optionsArg?: INpmArtifactProbeOptions) => Promise<INpmArtifactProbeResult>;
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
import * as plugins from "./mod.plugins.js";
|
|
2
|
+
import { releaseArtifactFileName, } from "./classes.releasejournal.js";
|
|
3
|
+
import { assertCredentialFreeGitPushDestination } from "./helpers.releasebranch.js";
|
|
4
|
+
const supportedPnpmVersion = "11.21.0";
|
|
5
|
+
const maximumMetadataResponseBytes = 8 * 1024 * 1024;
|
|
6
|
+
const capabilityCommandTimeoutMs = 30_000;
|
|
7
|
+
const packCommandTimeoutMs = 10 * 60_000;
|
|
8
|
+
const publishCommandTimeoutMs = 5 * 60_000;
|
|
9
|
+
const packageNameRegex = /^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/;
|
|
10
|
+
const readPackageIdentity = async (cwdArg) => {
|
|
11
|
+
let packageJson;
|
|
12
|
+
try {
|
|
13
|
+
packageJson = JSON.parse(await plugins.fs.readFile(plugins.path.join(cwdArg, "package.json"), "utf8"));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
throw new Error("Unable to read package.json for npm release packaging.", {
|
|
17
|
+
cause: error,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
if (typeof packageJson !== "object" ||
|
|
21
|
+
packageJson === null ||
|
|
22
|
+
Array.isArray(packageJson) ||
|
|
23
|
+
typeof packageJson.name !== "string" ||
|
|
24
|
+
!packageNameRegex.test(packageJson.name) ||
|
|
25
|
+
typeof packageJson.version !== "string") {
|
|
26
|
+
throw new Error("package.json requires a canonical npm name and version.");
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
packageName: packageJson.name,
|
|
30
|
+
version: packageJson.version,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
const requireHelpFragments = (outputArg, fragmentsArg, commandArg) => {
|
|
34
|
+
const missing = fragmentsArg.filter((fragmentArg) => !outputArg.includes(fragmentArg));
|
|
35
|
+
if (missing.length > 0) {
|
|
36
|
+
throw new Error(`pnpm ${commandArg} is missing required exact-release capabilities: ${missing.join(", ")}.`);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
export const assertPnpmReleaseCapability = async (smartshellArg, cwdArg) => {
|
|
40
|
+
const versionResult = await smartshellArg.execSpawn("pnpm", ["--version"], {
|
|
41
|
+
cwd: cwdArg,
|
|
42
|
+
silent: true,
|
|
43
|
+
timeout: capabilityCommandTimeoutMs,
|
|
44
|
+
timeoutKillGraceMs: 5_000,
|
|
45
|
+
});
|
|
46
|
+
const version = versionResult.stdout.trim();
|
|
47
|
+
if (versionResult.exitCode !== 0 || version !== supportedPnpmVersion) {
|
|
48
|
+
throw new Error(`Exact release packaging requires the verified pnpm ${supportedPnpmVersion}; resolved ${version || "unknown"}.`);
|
|
49
|
+
}
|
|
50
|
+
const packHelp = await smartshellArg.execSpawn("pnpm", ["pack", "--help"], {
|
|
51
|
+
cwd: cwdArg,
|
|
52
|
+
silent: true,
|
|
53
|
+
timeout: capabilityCommandTimeoutMs,
|
|
54
|
+
timeoutKillGraceMs: 5_000,
|
|
55
|
+
});
|
|
56
|
+
if (packHelp.exitCode !== 0) {
|
|
57
|
+
throw new Error("Unable to inspect pnpm pack capabilities.");
|
|
58
|
+
}
|
|
59
|
+
requireHelpFragments(packHelp.combinedOutput, ["--out <path>", "--json"], "pack");
|
|
60
|
+
const publishHelp = await smartshellArg.execSpawn("pnpm", ["publish", "--help"], {
|
|
61
|
+
cwd: cwdArg,
|
|
62
|
+
silent: true,
|
|
63
|
+
timeout: capabilityCommandTimeoutMs,
|
|
64
|
+
timeoutKillGraceMs: 5_000,
|
|
65
|
+
});
|
|
66
|
+
if (publishHelp.exitCode !== 0) {
|
|
67
|
+
throw new Error("Unable to inspect pnpm publish capabilities.");
|
|
68
|
+
}
|
|
69
|
+
requireHelpFragments(publishHelp.combinedOutput, [
|
|
70
|
+
"publish [<tarball>|<dir>]",
|
|
71
|
+
"--no-git-checks",
|
|
72
|
+
"--ignore-scripts",
|
|
73
|
+
"--json",
|
|
74
|
+
"--tag <tag>",
|
|
75
|
+
"--access <public|restricted>",
|
|
76
|
+
], "publish");
|
|
77
|
+
return { version: supportedPnpmVersion };
|
|
78
|
+
};
|
|
79
|
+
const legacyPublishWorkflowPaths = [
|
|
80
|
+
".gitea/workflows/default_tags.yaml",
|
|
81
|
+
".gitlab-ci.yml",
|
|
82
|
+
];
|
|
83
|
+
export const assertNoLegacyNpmPublisher = async (cwdArg) => {
|
|
84
|
+
for (const relativePath of legacyPublishWorkflowPaths) {
|
|
85
|
+
const filePath = plugins.path.join(cwdArg, relativePath);
|
|
86
|
+
let content;
|
|
87
|
+
try {
|
|
88
|
+
content = await plugins.fs.readFile(filePath, "utf8");
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (error.code === "ENOENT") {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
throw new Error(`Unable to inspect ${relativePath} for legacy npm publication.`, {
|
|
95
|
+
cause: error,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
const activeContent = content
|
|
99
|
+
.split("\n")
|
|
100
|
+
.filter((lineArg) => !/^\s*#/.test(lineArg))
|
|
101
|
+
.join("\n");
|
|
102
|
+
if (/\bnpmci\s+npm\s+publish\b/.test(activeContent)) {
|
|
103
|
+
throw new Error(`${relativePath} still contains the legacy independent npm publisher. ` +
|
|
104
|
+
"Remove it or apply the Gitzone v6 Gitea workflow template, then commit the workflow change before releasing.");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
export const normalizeNpmRegistryUrl = (valueArg) => {
|
|
109
|
+
if (typeof valueArg !== "string" || !valueArg.trim()) {
|
|
110
|
+
throw new Error("npm registry URLs must be non-empty strings.");
|
|
111
|
+
}
|
|
112
|
+
let url;
|
|
113
|
+
try {
|
|
114
|
+
url = new URL(valueArg.trim());
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
throw new Error("Invalid npm registry URL.", { cause: error });
|
|
118
|
+
}
|
|
119
|
+
if ((url.protocol !== "https:" && url.protocol !== "http:") ||
|
|
120
|
+
url.username ||
|
|
121
|
+
url.password ||
|
|
122
|
+
url.search ||
|
|
123
|
+
url.hash) {
|
|
124
|
+
throw new Error("npm registry URLs must use credential-free http(s) without query strings or fragments.");
|
|
125
|
+
}
|
|
126
|
+
const pathname = url.pathname.replace(/\/+$/, "");
|
|
127
|
+
return `${url.origin}${pathname}`;
|
|
128
|
+
};
|
|
129
|
+
export const hashReleaseDestination = (valueArg) => {
|
|
130
|
+
assertCredentialFreeGitPushDestination(valueArg);
|
|
131
|
+
return plugins.crypto.createHash("sha256").update(valueArg).digest("hex");
|
|
132
|
+
};
|
|
133
|
+
export const calculateNpmArtifact = async (artifactPathArg, packageNameArg, versionArg) => {
|
|
134
|
+
const stat = await plugins.fs.lstat(artifactPathArg);
|
|
135
|
+
if (!stat.isFile() || stat.isSymbolicLink() || stat.size <= 0) {
|
|
136
|
+
throw new Error("Release npm artifact must be a non-empty regular file.");
|
|
137
|
+
}
|
|
138
|
+
const bytes = await plugins.fs.readFile(artifactPathArg);
|
|
139
|
+
return {
|
|
140
|
+
kind: "npm-tarball",
|
|
141
|
+
file: releaseArtifactFileName,
|
|
142
|
+
packageName: packageNameArg,
|
|
143
|
+
version: versionArg,
|
|
144
|
+
size: bytes.byteLength,
|
|
145
|
+
sha1: plugins.crypto.createHash("sha1").update(bytes).digest("hex"),
|
|
146
|
+
sha256: plugins.crypto.createHash("sha256").update(bytes).digest("hex"),
|
|
147
|
+
integrity: `sha512-${plugins.crypto.createHash("sha512").update(bytes).digest("base64")}`,
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
const syncFile = async (filePathArg) => {
|
|
151
|
+
const handle = await plugins.fs.open(filePathArg, "r");
|
|
152
|
+
try {
|
|
153
|
+
await handle.sync();
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
await handle.close();
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
export const packNpmArtifact = async (smartshellArg, cwdArg, destinationDirectoryArg, expectedVersionArg) => {
|
|
160
|
+
const identity = await readPackageIdentity(cwdArg);
|
|
161
|
+
if (identity.version !== expectedVersionArg) {
|
|
162
|
+
throw new Error(`package.json version ${identity.version} does not match release ${expectedVersionArg}.`);
|
|
163
|
+
}
|
|
164
|
+
const artifactPath = plugins.path.join(destinationDirectoryArg, releaseArtifactFileName);
|
|
165
|
+
const result = await smartshellArg.execSpawn("pnpm", ["pack", "--out", artifactPath, "--json"], {
|
|
166
|
+
cwd: cwdArg,
|
|
167
|
+
timeout: packCommandTimeoutMs,
|
|
168
|
+
timeoutKillGraceMs: 5_000,
|
|
169
|
+
});
|
|
170
|
+
if (result.exitCode !== 0) {
|
|
171
|
+
throw new Error("pnpm pack failed while creating the exact release artifact.");
|
|
172
|
+
}
|
|
173
|
+
let report;
|
|
174
|
+
try {
|
|
175
|
+
report = JSON.parse(result.stdout.trim());
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
throw new Error("pnpm pack did not return its required JSON report.", {
|
|
179
|
+
cause: error,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
if (typeof report !== "object" ||
|
|
183
|
+
report === null ||
|
|
184
|
+
Array.isArray(report) ||
|
|
185
|
+
report.name !== identity.packageName ||
|
|
186
|
+
report.version !== identity.version) {
|
|
187
|
+
throw new Error("pnpm pack reported a different package identity.");
|
|
188
|
+
}
|
|
189
|
+
await syncFile(artifactPath);
|
|
190
|
+
return calculateNpmArtifact(artifactPath, identity.packageName, identity.version);
|
|
191
|
+
};
|
|
192
|
+
export const verifyStoredNpmArtifact = async (artifactPathArg, expectedArtifactArg) => {
|
|
193
|
+
const actual = await calculateNpmArtifact(artifactPathArg, expectedArtifactArg.packageName, expectedArtifactArg.version);
|
|
194
|
+
if (actual.size !== expectedArtifactArg.size ||
|
|
195
|
+
actual.sha1 !== expectedArtifactArg.sha1 ||
|
|
196
|
+
actual.sha256 !== expectedArtifactArg.sha256 ||
|
|
197
|
+
actual.integrity !== expectedArtifactArg.integrity) {
|
|
198
|
+
throw new Error("Stored npm artifact no longer matches its release journal identity.");
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
export const buildPnpmPublishArgs = (artifactPathArg, registryArg) => [
|
|
202
|
+
"publish",
|
|
203
|
+
artifactPathArg,
|
|
204
|
+
`--registry=${normalizeNpmRegistryUrl(registryArg)}`,
|
|
205
|
+
"--access=public",
|
|
206
|
+
"--tag=latest",
|
|
207
|
+
"--no-git-checks",
|
|
208
|
+
"--ignore-scripts",
|
|
209
|
+
"--json",
|
|
210
|
+
];
|
|
211
|
+
export const publishNpmArtifact = async (smartshellArg, cwdArg, artifactPathArg, registryArg) => {
|
|
212
|
+
const result = await smartshellArg.execSpawn("pnpm", buildPnpmPublishArgs(artifactPathArg, registryArg), {
|
|
213
|
+
cwd: cwdArg,
|
|
214
|
+
timeout: publishCommandTimeoutMs,
|
|
215
|
+
timeoutKillGraceMs: 5_000,
|
|
216
|
+
});
|
|
217
|
+
return { exitCode: result.exitCode, output: result.combinedOutput };
|
|
218
|
+
};
|
|
219
|
+
const getFetch = (optionsArg) => optionsArg.fetchImplementation || globalThis.fetch;
|
|
220
|
+
const fetchWithoutRedirects = async (urlArg, acceptArg, optionsArg) => {
|
|
221
|
+
const timeoutMs = optionsArg.timeoutMs ?? 10_000;
|
|
222
|
+
return getFetch(optionsArg)(urlArg, {
|
|
223
|
+
method: "GET",
|
|
224
|
+
headers: { accept: acceptArg },
|
|
225
|
+
redirect: "manual",
|
|
226
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
const cancelResponseBody = (responseArg) => {
|
|
230
|
+
if (responseArg.body && !responseArg.body.locked) {
|
|
231
|
+
void responseArg.body.cancel().catch(() => { });
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
const readBoundedResponse = async (responseArg, maximumSizeArg, contextArg) => {
|
|
235
|
+
const contentLength = responseArg.headers.get("content-length");
|
|
236
|
+
if (contentLength &&
|
|
237
|
+
(!/^\d+$/.test(contentLength) || Number(contentLength) > maximumSizeArg)) {
|
|
238
|
+
cancelResponseBody(responseArg);
|
|
239
|
+
throw new Error(`${contextArg} exceeds its maximum response size.`);
|
|
240
|
+
}
|
|
241
|
+
if (!responseArg.body) {
|
|
242
|
+
throw new Error(`${contextArg} response has no body.`);
|
|
243
|
+
}
|
|
244
|
+
const chunks = [];
|
|
245
|
+
let size = 0;
|
|
246
|
+
const reader = responseArg.body.getReader();
|
|
247
|
+
let complete = false;
|
|
248
|
+
try {
|
|
249
|
+
while (true) {
|
|
250
|
+
const item = await reader.read();
|
|
251
|
+
if (item.done) {
|
|
252
|
+
complete = true;
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
size += item.value.byteLength;
|
|
256
|
+
if (size > maximumSizeArg) {
|
|
257
|
+
throw new Error(`${contextArg} exceeds its maximum response size.`);
|
|
258
|
+
}
|
|
259
|
+
chunks.push(item.value);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
finally {
|
|
263
|
+
if (!complete) {
|
|
264
|
+
void reader.cancel().catch(() => { });
|
|
265
|
+
}
|
|
266
|
+
reader.releaseLock();
|
|
267
|
+
}
|
|
268
|
+
return Buffer.concat(chunks.map((chunkArg) => Buffer.from(chunkArg)), size);
|
|
269
|
+
};
|
|
270
|
+
const readBoundedJsonResponse = async (responseArg) => JSON.parse((await readBoundedResponse(responseArg, maximumMetadataResponseBytes, "Registry metadata")).toString("utf8"));
|
|
271
|
+
const getMetadataUrl = (registryArg, packageNameArg, versionArg) => {
|
|
272
|
+
const encodedPackage = encodeURIComponent(packageNameArg);
|
|
273
|
+
return new URL(versionArg
|
|
274
|
+
? `${normalizeNpmRegistryUrl(registryArg)}/${encodedPackage}/${encodeURIComponent(versionArg)}`
|
|
275
|
+
: `${normalizeNpmRegistryUrl(registryArg)}/${encodedPackage}`);
|
|
276
|
+
};
|
|
277
|
+
export const probeAnonymousNpmArtifact = async (registryArg, artifactArg, tagArg = "latest", optionsArg = {}) => {
|
|
278
|
+
const registry = normalizeNpmRegistryUrl(registryArg);
|
|
279
|
+
try {
|
|
280
|
+
const versionResponse = await fetchWithoutRedirects(getMetadataUrl(registry, artifactArg.packageName, artifactArg.version), "application/json", optionsArg);
|
|
281
|
+
if (versionResponse.status === 404) {
|
|
282
|
+
cancelResponseBody(versionResponse);
|
|
283
|
+
return { status: "absent", code: "absent" };
|
|
284
|
+
}
|
|
285
|
+
if (versionResponse.status !== 200) {
|
|
286
|
+
cancelResponseBody(versionResponse);
|
|
287
|
+
return { status: "inconclusive", code: "registry-response" };
|
|
288
|
+
}
|
|
289
|
+
const metadata = (await readBoundedJsonResponse(versionResponse));
|
|
290
|
+
if (metadata.name !== artifactArg.packageName ||
|
|
291
|
+
metadata.version !== artifactArg.version ||
|
|
292
|
+
metadata.dist?.integrity !== artifactArg.integrity ||
|
|
293
|
+
metadata.dist?.shasum !== artifactArg.sha1 ||
|
|
294
|
+
typeof metadata.dist?.tarball !== "string") {
|
|
295
|
+
return { status: "conflict", code: "metadata-conflict" };
|
|
296
|
+
}
|
|
297
|
+
const tarballUrl = new URL(metadata.dist.tarball);
|
|
298
|
+
const registryUrl = new URL(registry);
|
|
299
|
+
if (tarballUrl.origin !== registryUrl.origin ||
|
|
300
|
+
(tarballUrl.protocol !== "https:" && tarballUrl.protocol !== "http:") ||
|
|
301
|
+
tarballUrl.username ||
|
|
302
|
+
tarballUrl.password ||
|
|
303
|
+
tarballUrl.search ||
|
|
304
|
+
tarballUrl.hash) {
|
|
305
|
+
return { status: "conflict", code: "metadata-conflict" };
|
|
306
|
+
}
|
|
307
|
+
const tarballResponse = await fetchWithoutRedirects(tarballUrl, "application/octet-stream", optionsArg);
|
|
308
|
+
if (tarballResponse.status !== 200) {
|
|
309
|
+
cancelResponseBody(tarballResponse);
|
|
310
|
+
return { status: "inconclusive", code: "registry-response" };
|
|
311
|
+
}
|
|
312
|
+
const bytes = await readBoundedResponse(tarballResponse, artifactArg.size, "Registry tarball");
|
|
313
|
+
if (bytes.byteLength !== artifactArg.size ||
|
|
314
|
+
plugins.crypto.createHash("sha1").update(bytes).digest("hex") !==
|
|
315
|
+
artifactArg.sha1 ||
|
|
316
|
+
plugins.crypto.createHash("sha256").update(bytes).digest("hex") !==
|
|
317
|
+
artifactArg.sha256 ||
|
|
318
|
+
`sha512-${plugins.crypto.createHash("sha512").update(bytes).digest("base64")}` !==
|
|
319
|
+
artifactArg.integrity) {
|
|
320
|
+
return { status: "conflict", code: "tarball-conflict" };
|
|
321
|
+
}
|
|
322
|
+
const packageResponse = await fetchWithoutRedirects(getMetadataUrl(registry, artifactArg.packageName), "application/json", optionsArg);
|
|
323
|
+
if (packageResponse.status !== 200) {
|
|
324
|
+
cancelResponseBody(packageResponse);
|
|
325
|
+
return { status: "inconclusive", code: "registry-response" };
|
|
326
|
+
}
|
|
327
|
+
const packageMetadata = (await readBoundedJsonResponse(packageResponse));
|
|
328
|
+
if (packageMetadata["dist-tags"]?.[tagArg] !== artifactArg.version) {
|
|
329
|
+
return { status: "inconclusive", code: "tag-conflict" };
|
|
330
|
+
}
|
|
331
|
+
return { status: "exact", code: "exact" };
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
return { status: "inconclusive", code: "network-error" };
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
export const waitForAnonymousNpmArtifact = async (registryArg, artifactArg, tagArg = "latest", optionsArg = {}) => {
|
|
338
|
+
const attempts = optionsArg.attempts ?? 10;
|
|
339
|
+
const delayMs = optionsArg.delayMs ?? 1_000;
|
|
340
|
+
if (!Number.isSafeInteger(attempts) || attempts < 1) {
|
|
341
|
+
throw new Error("npm verification attempts must be a positive safe integer.");
|
|
342
|
+
}
|
|
343
|
+
let lastResult = {
|
|
344
|
+
status: "inconclusive",
|
|
345
|
+
code: "network-error",
|
|
346
|
+
};
|
|
347
|
+
for (let attempt = 0; attempt < attempts; attempt += 1) {
|
|
348
|
+
lastResult = await probeAnonymousNpmArtifact(registryArg, artifactArg, tagArg, optionsArg);
|
|
349
|
+
if (lastResult.status === "exact" || lastResult.status === "conflict") {
|
|
350
|
+
return lastResult;
|
|
351
|
+
}
|
|
352
|
+
if (attempt + 1 < attempts) {
|
|
353
|
+
await plugins.smartdelay.delayFor(delayMs);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
return lastResult;
|
|
357
|
+
};
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5ucG1hcnRpZmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL21vZF9yZWxlYXNlL2hlbHBlcnMubnBtYXJ0aWZhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsdUJBQXVCLEdBRXhCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEYsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUM7QUFDdkMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDekMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLE1BQU0sZ0JBQWdCLEdBQUcsd0VBQXdFLENBQUM7QUErQmxHLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUMvQixNQUFjLEVBQ3FDLEVBQUU7SUFDckQsSUFBSSxXQUFvQixDQUFDO0lBQ3pCLElBQUksQ0FBQztRQUNILFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN0QixNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FDN0UsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsRUFBRTtZQUN4RSxLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUNFLE9BQU8sV0FBVyxLQUFLLFFBQVE7UUFD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
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as plugins from "./mod.plugins.js";
|
|
2
|
+
interface IGitWorktree {
|
|
3
|
+
path: string;
|
|
4
|
+
head?: string;
|
|
5
|
+
branch?: string;
|
|
6
|
+
prunable: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface IReleaseBranchContext {
|
|
9
|
+
sourceCwd: string;
|
|
10
|
+
sourceBranch: string;
|
|
11
|
+
sourceRef: string;
|
|
12
|
+
sourceOid: string;
|
|
13
|
+
gitRemote: string;
|
|
14
|
+
localMainOid?: string;
|
|
15
|
+
remoteMainOid?: string;
|
|
16
|
+
mainWorktreePath?: string;
|
|
17
|
+
mainWorktreeGitDir?: string;
|
|
18
|
+
pushUrl?: string;
|
|
19
|
+
mergeRequested: boolean;
|
|
20
|
+
planAncestryVerified: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface IIntegratedReleaseBranch {
|
|
23
|
+
releaseCwd: string;
|
|
24
|
+
pushUrl: string;
|
|
25
|
+
expectedRemoteMainOid: string;
|
|
26
|
+
}
|
|
27
|
+
export interface IInspectReleaseBranchOptions {
|
|
28
|
+
smartshell: TSmartshell;
|
|
29
|
+
cwd: string;
|
|
30
|
+
gitRemote: string;
|
|
31
|
+
gitTargetActive: boolean;
|
|
32
|
+
pushBranch: boolean;
|
|
33
|
+
pushTags?: boolean;
|
|
34
|
+
mergeRequested: boolean;
|
|
35
|
+
planMode: boolean;
|
|
36
|
+
}
|
|
37
|
+
type TSmartshell = plugins.smartshell.Smartshell;
|
|
38
|
+
export declare const releaseGitEnv: NodeJS.ProcessEnv;
|
|
39
|
+
export declare const assertCredentialFreeGitPushDestination: (valueArg: string) => void;
|
|
40
|
+
export declare function resolveReleaseMergeFlag(argvArg: Record<string, unknown>): boolean;
|
|
41
|
+
export declare function parseGitWorktreePorcelain(outputArg: string): IGitWorktree[];
|
|
42
|
+
export declare function inspectReleaseBranch(optionsArg: IInspectReleaseBranchOptions): Promise<IReleaseBranchContext>;
|
|
43
|
+
export declare function prepareReleaseIntegration(smartshellArg: TSmartshell, contextArg: IReleaseBranchContext): Promise<IReleaseBranchContext>;
|
|
44
|
+
export declare function revalidatePreparedReleaseBranch(smartshellArg: TSmartshell, contextArg: IReleaseBranchContext): Promise<void>;
|
|
45
|
+
export declare function revalidateReleasePublicationState(smartshellArg: TSmartshell, contextArg: IReleaseBranchContext, expectedMainOidArg: string, expectedRemoteMainOidArg?: string): Promise<void>;
|
|
46
|
+
export declare function integrateReleaseBranch(smartshellArg: TSmartshell, contextArg: IReleaseBranchContext): Promise<IIntegratedReleaseBranch>;
|
|
47
|
+
export {};
|