@secretgenerator/cli 2.0.0 → 2.1.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/README.md +5 -5
- package/dist/archive.js +78 -0
- package/dist/archive.js.map +1 -0
- package/dist/install.js +47 -18
- package/dist/install.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -72,11 +72,11 @@ the certificate identity against
|
|
|
72
72
|
|
|
73
73
|
## Supported platforms
|
|
74
74
|
|
|
75
|
-
| OS | Architectures
|
|
76
|
-
| ------- |
|
|
77
|
-
| Linux | x64, arm64
|
|
78
|
-
| macOS | x64, arm64
|
|
79
|
-
| Windows | x64
|
|
75
|
+
| OS | Architectures |
|
|
76
|
+
| ------- | ------------- |
|
|
77
|
+
| Linux | x64, arm64 |
|
|
78
|
+
| macOS | x64, arm64 |
|
|
79
|
+
| Windows | x64 |
|
|
80
80
|
|
|
81
81
|
For other platforms, install from source:
|
|
82
82
|
|
package/dist/archive.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Release-archive checks used by the postinstall downloader.
|
|
2
|
+
//
|
|
3
|
+
// The version string is interpolated into a GitHub download URL and, on
|
|
4
|
+
// the Windows fallback that used to exist, into a shell command. It has
|
|
5
|
+
// to be a semver tag and nothing else. Archive members are checked
|
|
6
|
+
// before extraction so a release tarball cannot write outside the
|
|
7
|
+
// destination via `..` or an absolute path.
|
|
8
|
+
const RELEASE_TAG = /^v(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?$/;
|
|
9
|
+
const PATH_SEGMENT = /^[A-Za-z0-9._-]+$/;
|
|
10
|
+
/** Returns a `vX.Y.Z` tag, or throws if `raw` is not a semver release tag. */
|
|
11
|
+
export function releaseTag(raw) {
|
|
12
|
+
const tag = raw.startsWith("v") ? raw : `v${raw}`;
|
|
13
|
+
if (!RELEASE_TAG.test(tag)) {
|
|
14
|
+
throw new Error(`refusing release version ${JSON.stringify(raw)}: expected a semver tag such as v2.0.0 or v2.0.0-alpha.11`);
|
|
15
|
+
}
|
|
16
|
+
return tag;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Returns null when `name` is safe to extract next to the package, or a
|
|
20
|
+
* short reason when it is not. `binary` is the expected executable name
|
|
21
|
+
* (`secretgenerator` or `secretgenerator.exe`). Goreleaser also packs
|
|
22
|
+
* LICENSE, README.md, schemas/, and docs/.
|
|
23
|
+
*/
|
|
24
|
+
export function unsafeArchiveMember(name, binary) {
|
|
25
|
+
let normalized = name.replace(/\\/g, "/");
|
|
26
|
+
if (normalized.startsWith("./")) {
|
|
27
|
+
normalized = normalized.slice(2);
|
|
28
|
+
}
|
|
29
|
+
if (normalized.endsWith("/")) {
|
|
30
|
+
normalized = normalized.slice(0, -1);
|
|
31
|
+
}
|
|
32
|
+
if (normalized === "") {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
if (normalized.startsWith("/") || /^[A-Za-z]:/.test(normalized)) {
|
|
36
|
+
return `absolute path ${JSON.stringify(name)}`;
|
|
37
|
+
}
|
|
38
|
+
const parts = normalized.split("/");
|
|
39
|
+
for (const part of parts) {
|
|
40
|
+
if (part === "" || part === "." || part === ".." || !PATH_SEGMENT.test(part)) {
|
|
41
|
+
return `unsafe path ${JSON.stringify(name)}`;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const rel = parts.join("/");
|
|
45
|
+
if (rel === binary ||
|
|
46
|
+
rel === "LICENSE" ||
|
|
47
|
+
rel === "README.md" ||
|
|
48
|
+
rel.startsWith("schemas/") ||
|
|
49
|
+
rel.startsWith("docs/")) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return `unexpected member ${JSON.stringify(name)}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Windows CI puts Git's GNU tar first on PATH. That tar rejects zip
|
|
56
|
+
* archives and treats `C:` as a remote host. The system bsdtar reads zip
|
|
57
|
+
* and keeps drive letters local, so prefer it when it is installed.
|
|
58
|
+
*/
|
|
59
|
+
export function tarBinary(platform, systemTar, systemTarExists) {
|
|
60
|
+
if (platform === "win32" && systemTarExists)
|
|
61
|
+
return systemTar;
|
|
62
|
+
return "tar";
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* tar argv for extraction. A Windows drive prefix makes GNU tar treat the
|
|
66
|
+
* path as a remote host (`Cannot connect to C`). Pass `gnuForceLocal` only
|
|
67
|
+
* for that tar. The system bsdtar rejects `--force-local` and accepts the
|
|
68
|
+
* drive letter. Same-drive callers should pass a path relative to the dest.
|
|
69
|
+
*/
|
|
70
|
+
export function tarExtractArgs(archiveArg, format, opts = {}) {
|
|
71
|
+
const flag = format === "tar.gz" ? "-xzf" : "-xf";
|
|
72
|
+
const args = [flag, archiveArg, "-C", "."];
|
|
73
|
+
if (opts.gnuForceLocal && /^[A-Za-z]:/.test(archiveArg)) {
|
|
74
|
+
return ["--force-local", ...args];
|
|
75
|
+
}
|
|
76
|
+
return args;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../src/archive.ts"],"names":[],"mappings":"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"}
|
package/dist/install.js
CHANGED
|
@@ -22,6 +22,7 @@ import { spawnSync } from "node:child_process";
|
|
|
22
22
|
import { Readable } from "node:stream";
|
|
23
23
|
import { pipeline } from "node:stream/promises";
|
|
24
24
|
import { detectAsset, UnsupportedPlatformError } from "./platform.js";
|
|
25
|
+
import { releaseTag, tarBinary, tarExtractArgs, unsafeArchiveMember } from "./archive.js";
|
|
25
26
|
import { cosignAvailable, verifyChecksum, verifyCosign, IntegrityError, } from "./verify.js";
|
|
26
27
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
27
28
|
// dist/install.js is in `cli/dist/`, packageRoot is `cli/`.
|
|
@@ -54,7 +55,7 @@ async function main() {
|
|
|
54
55
|
}
|
|
55
56
|
throw err;
|
|
56
57
|
}
|
|
57
|
-
const version = readVersion();
|
|
58
|
+
const version = releaseTag(readVersion());
|
|
58
59
|
const archiveName = `secretgenerator_${stripV(version)}_${asset.suffix}`;
|
|
59
60
|
const baseUrl = `https://github.com/${REPO}/releases/download/${version}`;
|
|
60
61
|
const archiveUrl = `${baseUrl}/${archiveName}`;
|
|
@@ -77,6 +78,7 @@ async function main() {
|
|
|
77
78
|
const checksumsText = readFileSync(checksumsPath, "utf8");
|
|
78
79
|
verifyChecksum(archivePath, archiveName, checksumsText);
|
|
79
80
|
console.log(`[secretgenerator] SHA-256 verified for ${archiveName}`);
|
|
81
|
+
assertSafeArchive(archivePath, asset.binary);
|
|
80
82
|
if (existsSync(sigPath) && existsSync(pemPath) && cosignAvailable()) {
|
|
81
83
|
if (verifyCosign(checksumsPath, pemPath, sigPath)) {
|
|
82
84
|
console.log("[secretgenerator] cosign keyless signature verified (Sigstore/Fulcio)");
|
|
@@ -110,6 +112,8 @@ async function main() {
|
|
|
110
112
|
}
|
|
111
113
|
function readVersion() {
|
|
112
114
|
// Allow override (used by smoke tests pinning a specific tag).
|
|
115
|
+
// releaseTag() rejects anything that is not a semver tag, so the value
|
|
116
|
+
// cannot rewrite the download path or escape into a shell command.
|
|
113
117
|
if (process.env.SECRETGENERATOR_VERSION) {
|
|
114
118
|
return process.env.SECRETGENERATOR_VERSION;
|
|
115
119
|
}
|
|
@@ -130,28 +134,53 @@ async function download(url, out, opts = {}) {
|
|
|
130
134
|
const nodeStream = Readable.fromWeb(res.body);
|
|
131
135
|
await pipeline(nodeStream, createWriteStream(out));
|
|
132
136
|
}
|
|
133
|
-
function
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
137
|
+
function tarBin() {
|
|
138
|
+
const system = path.join(process.env.SystemRoot || "C:\\Windows", "System32", "tar.exe");
|
|
139
|
+
return tarBinary(process.platform, system, existsSync(system));
|
|
140
|
+
}
|
|
141
|
+
function assertSafeArchive(archive, binary) {
|
|
142
|
+
// Basename plus cwd: GNU tar on Windows reads `C:` in an absolute path
|
|
143
|
+
// as a remote host and fails with "Cannot connect to C".
|
|
144
|
+
const listed = spawnSync(tarBin(), ["-tf", path.basename(archive)], {
|
|
145
|
+
cwd: path.dirname(archive),
|
|
146
|
+
encoding: "utf8",
|
|
147
|
+
});
|
|
148
|
+
if (listed.status !== 0) {
|
|
149
|
+
throw new IntegrityError(`could not list archive members: ${(listed.stderr || "").trim()}`);
|
|
141
150
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
stdio: "inherit",
|
|
151
|
+
const names = listed.stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
|
|
152
|
+
const hasBinary = names.some((name) => {
|
|
153
|
+
const normalized = name.replace(/\\/g, "/").replace(/^\.\//, "").replace(/\/$/, "");
|
|
154
|
+
return normalized === binary;
|
|
147
155
|
});
|
|
148
|
-
if (
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
156
|
+
if (!hasBinary) {
|
|
157
|
+
throw new IntegrityError(`archive does not contain ${binary}`);
|
|
158
|
+
}
|
|
159
|
+
for (const name of names) {
|
|
160
|
+
const why = unsafeArchiveMember(name, binary);
|
|
161
|
+
if (why) {
|
|
162
|
+
throw new IntegrityError(`refusing to extract archive: ${why}`);
|
|
152
163
|
}
|
|
153
164
|
}
|
|
154
165
|
}
|
|
166
|
+
function extract(archive, dest, format) {
|
|
167
|
+
// tar on Windows 10+ reads zip archives. Arguments stay in argv; the
|
|
168
|
+
// archive path is never interpolated into a shell command. cwd is the
|
|
169
|
+
// destination so a same-drive archive is a relative path. A cross-drive
|
|
170
|
+
// path still has a drive letter; tarExtractArgs adds --force-local.
|
|
171
|
+
const rel = path.relative(dest, archive);
|
|
172
|
+
const bin = tarBin();
|
|
173
|
+
// GitHub's Windows temp dir and the repo are often on different drives,
|
|
174
|
+
// so `rel` is an absolute `C:\...` path. System bsdtar accepts that.
|
|
175
|
+
// GNU tar needs --force-local or it parses the drive letter as a host.
|
|
176
|
+
const gnuForceLocal = process.platform === "win32" && bin === "tar";
|
|
177
|
+
const r = spawnSync(bin, tarExtractArgs(rel, format, { gnuForceLocal }), {
|
|
178
|
+
cwd: dest,
|
|
179
|
+
stdio: "inherit",
|
|
180
|
+
});
|
|
181
|
+
if (r.status !== 0)
|
|
182
|
+
throw new Error(`tar exit ${r.status}`);
|
|
183
|
+
}
|
|
155
184
|
// Reading the archive is delegated to `tar` / `Expand-Archive`; the
|
|
156
185
|
// pipeline-and-stream imports above are kept because download() uses them.
|
|
157
186
|
void createReadStream;
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":";AACA,wEAAwE;AACxE,wEAAwE;AACxE,oCAAoC;AACpC,EAAE;AACF,yDAAyD;AACzD,2EAA2E;AAC3E,mCAAmC;AACnC,+EAA+E;AAC/E,2DAA2D;AAC3D,oEAAoE;AACpE,kEAAkE;AAClE,wEAAwE;AACxE,8DAA8D;AAE9D,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EACL,eAAe,EACf,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,4DAA4D;AAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAClD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAExD,MAAM,IAAI,GAAG,8BAA8B,CAAC;AAE5C,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,sEAAsE;IACtE,sEAAsE;IACtE,iEAAiE;IACjE,OAAO,CAAC,KAAK,CAAC,qCAAqC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,KAAK,CACX,gFAAgF;QAC9E,4BAA4B,sBAAsB,IAAI,kBAAkB,GAAG,CAC9E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,IAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,GAAG,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,wBAAwB,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@secretgenerator/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Zero-config installer for the secretgenerator CLI. Downloads the right binary for your OS/arch from a verified GitHub release, checks the SHA-256, and (when cosign is available) verifies the keyless Sigstore signature.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
],
|
|
32
32
|
"scripts": {
|
|
33
33
|
"build": "tsc -p tsconfig.json && chmod +x dist/run.js",
|
|
34
|
+
"test": "npm run build && node --test test/archive.test.mjs",
|
|
34
35
|
"prepack": "npm run build",
|
|
35
36
|
"postinstall": "node dist/install.js || echo 'secretgenerator: postinstall skipped (likely a tarball-only environment); run `npx secretgenerator --help` to retry'"
|
|
36
37
|
},
|
|
@@ -47,7 +48,7 @@
|
|
|
47
48
|
"arm64"
|
|
48
49
|
],
|
|
49
50
|
"devDependencies": {
|
|
50
|
-
"@types/node": "^
|
|
51
|
-
"typescript": "^5.
|
|
51
|
+
"@types/node": "^26.6.5",
|
|
52
|
+
"typescript": "^5.9.3"
|
|
52
53
|
}
|
|
53
54
|
}
|