putitoutthere 0.2.42 → 0.2.44

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 (47) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/MIGRATIONS.md +65 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +44 -0
  6. package/dist/cli.js.map +1 -1
  7. package/dist/verify/crate/extract-crate.d.ts +6 -0
  8. package/dist/verify/crate/extract-crate.d.ts.map +1 -0
  9. package/dist/verify/crate/extract-crate.js +14 -0
  10. package/dist/verify/crate/extract-crate.js.map +1 -0
  11. package/dist/verify/crate/find-crate-file.d.ts +12 -0
  12. package/dist/verify/crate/find-crate-file.d.ts.map +1 -0
  13. package/dist/verify/crate/find-crate-file.js +23 -0
  14. package/dist/verify/crate/find-crate-file.js.map +1 -0
  15. package/dist/verify/crate/has-crate-source.d.ts +10 -0
  16. package/dist/verify/crate/has-crate-source.d.ts.map +1 -0
  17. package/dist/verify/crate/has-crate-source.js +21 -0
  18. package/dist/verify/crate/has-crate-source.js.map +1 -0
  19. package/dist/verify/crate/index.d.ts +21 -0
  20. package/dist/verify/crate/index.d.ts.map +1 -0
  21. package/dist/verify/crate/index.js +51 -0
  22. package/dist/verify/crate/index.js.map +1 -0
  23. package/dist/verify/crate/types.d.ts +18 -0
  24. package/dist/verify/crate/types.d.ts.map +1 -0
  25. package/dist/verify/crate/types.js +5 -0
  26. package/dist/verify/crate/types.js.map +1 -0
  27. package/dist/verify/wheel/find-dist-file.d.ts +8 -0
  28. package/dist/verify/wheel/find-dist-file.d.ts.map +1 -0
  29. package/dist/verify/wheel/find-dist-file.js +23 -0
  30. package/dist/verify/wheel/find-dist-file.js.map +1 -0
  31. package/dist/verify/wheel/index.d.ts +22 -0
  32. package/dist/verify/wheel/index.d.ts.map +1 -0
  33. package/dist/verify/wheel/index.js +58 -0
  34. package/dist/verify/wheel/index.js.map +1 -0
  35. package/dist/verify/wheel/read-wheel-version.d.ts +12 -0
  36. package/dist/verify/wheel/read-wheel-version.d.ts.map +1 -0
  37. package/dist/verify/wheel/read-wheel-version.js +26 -0
  38. package/dist/verify/wheel/read-wheel-version.js.map +1 -0
  39. package/dist/verify/wheel/read-zip-entry.d.ts +13 -0
  40. package/dist/verify/wheel/read-zip-entry.d.ts.map +1 -0
  41. package/dist/verify/wheel/read-zip-entry.js +50 -0
  42. package/dist/verify/wheel/read-zip-entry.js.map +1 -0
  43. package/dist/verify/wheel/types.d.ts +17 -0
  44. package/dist/verify/wheel/types.d.ts.map +1 -0
  45. package/dist/verify/wheel/types.js +5 -0
  46. package/dist/verify/wheel/types.js.map +1 -0
  47. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -13,6 +13,8 @@ are prefixed `**BREAKING**` and link to the matching section in
13
13
  ### Added
14
14
 
15
15
  - Added: `putitoutthere verify npm-tarball` — a new `verify` subcommand that downloads a published npm tarball back from the registry and asserts it honors the shape it declared: main/noarch rows must contain every directory entry their `package.json` `files[]` declares (present and non-empty), and `--per-triple` asserts each synthesized platform package ships a non-`package.json` file (its `.node` / executable). Absorbs the two inline verification blocks the reusable e2e workflow (`e2e-fixture-job.yml`) previously carried as untested bash — same row selection, same `npm view` packument-lag retry, same `::error::` messages — into one colocated-tested engine command invoked from both former sites (part of epic #442). `verify` is now a command family: bare `verify` (and the new explicit spelling `verify posture`) is the unchanged #414 OIDC-vs-token publish/trust posture check; `verify npm-tarball` is this new artifact-content check. #443. (verified by: integration, e2e/CLI)
16
+ - Added: `putitoutthere verify crate` — the crates-side sibling of `verify npm-tarball` (#443). Reads a published `.crate` back off the `cargo-http-registry` disk root the engine published to, extracts it, and asserts the crate ships its source tree (`src/lib.rs` or `src/main.rs` surfaces) — proof the publish shipped real contents, not an empty or silently no-op'd tarball. Absorbs the inline `.crate` verification block the reusable e2e workflow (`e2e-fixture-job.yml`, #334) carried as untested bash — same crates-row selection, same present-and-non-empty `.crate` guard, same `::error::`/`ok:` messages — into one colocated-tested engine command invoked from its former site (part of epic #442). Takes `--matrix <plan-json>` and `--registry-root <dir>`; unlike the npm sibling it reads local disk (same host, same job), so there is no HTTP download or retry. #449. (verified by: integration, e2e/CLI)
17
+ - Added: `putitoutthere verify wheel` — the pypi-side sibling of the verify family (#443, #449). Asserts a built maturin artifact under `<path>/dist` carries the planned version: a wheel row's first `*.whl` must have a `*.dist-info/METADATA` `Version:` equal to `--version`, and an sdist row (`--target sdist`) must produce a `*.tar.gz` whose filename contains it. Absorbs the inline "Verify wheel/sdist version matches matrix.version" bash block the reusable e2e workflow (`e2e-fixture-job.yml`, #276) carried as untested bash — same file selection, same `::error::`/`ok wheel:`/`ok sdist:` messages, same exit code — into one colocated-tested engine command. The wheel's METADATA is read with a dependency-free pure-Node zip reader (no `unzip`), so the command runs on every platform the maturin matrix builds on, Windows included. Takes `--path <pkg-dir>`, `--version <planned>`, and `--target <sdist|triple>`. #450. (verified by: integration, e2e/CLI)
16
18
 
17
19
  ### Changed
18
20
 
package/MIGRATIONS.md CHANGED
@@ -21,6 +21,71 @@ Each section covers five things, in order:
21
21
 
22
22
  ## Unreleased
23
23
 
24
+ ### New `verify wheel` subcommand
25
+
26
+ **Summary.** `putitoutthere verify wheel` joins the `verify` command family
27
+ (alongside `verify posture`, `verify npm-tarball`, and `verify crate`). It
28
+ asserts a built maturin artifact under `<path>/dist` carries the planned
29
+ version: a wheel row's first `*.whl` must have a `*.dist-info/METADATA`
30
+ `Version:` equal to `--version`, and an sdist row (`--target sdist`) must
31
+ produce a `*.tar.gz` whose filename contains it. This extracts the inline
32
+ "Verify wheel/sdist version matches matrix.version" bash block the reusable
33
+ e2e workflow carried (`e2e-fixture-job.yml`, #276) into one colocated-tested
34
+ engine command (epic #442, sub-issue #450); the behavior is unchanged — same
35
+ file selection, same error/ok messages, same exit code. The wheel's METADATA
36
+ is read with a dependency-free pure-Node zip reader (no `unzip`), so the
37
+ command runs on every platform the maturin matrix builds on.
38
+
39
+ **Required changes.** None. Additive. Consumers compose with the reusable
40
+ workflow, not the CLI directly (design-commitment #10); this subcommand is
41
+ an internal seam the workflow invokes.
42
+
43
+ **Deprecations removed.** None.
44
+
45
+ **Behavior changes without code changes.** None.
46
+
47
+ **Verification.** With a maturin build under `<path>/dist`,
48
+ `putitoutthere verify wheel --path <path> --version <v> --target <triple>`
49
+ prints `ok wheel: <name>.whl METADATA Version=<v>` and exits 0 when the
50
+ wheel carries `<v>`; a mismatch exits 1 with
51
+ `wheel METADATA Version='<actual>' but plan='<v>'`. `--target sdist` checks
52
+ the sdist filename instead (`ok sdist:` / `does not contain planned
53
+ version`).
54
+
55
+ ---
56
+
57
+ ### New `verify crate` subcommand
58
+
59
+ **Summary.** `putitoutthere verify crate` joins the `verify` command family
60
+ (alongside `verify posture` and `verify npm-tarball`). It reads a published
61
+ `.crate` back off the `cargo-http-registry` disk root the engine published
62
+ to, extracts it, and asserts the crate's source tree (`src/lib.rs` or
63
+ `src/main.rs`) is present — proof the publish shipped real contents, not an
64
+ empty or silently no-op'd tarball. This extracts the inline `.crate`
65
+ verification bash block the reusable e2e workflow carried
66
+ (`e2e-fixture-job.yml`, #334) into one colocated-tested engine command
67
+ (epic #442, sub-issue #449); the behavior is unchanged — same crates-row
68
+ selection, same present-and-non-empty guard, same error messages. Unlike
69
+ the npm sibling, it reads a local disk root (same host, same job), so it
70
+ takes `--registry-root <dir>` and performs no HTTP download or retry.
71
+
72
+ **Required changes.** None. Additive. Consumers compose with the reusable
73
+ workflow, not the CLI directly (design-commitment #10); this subcommand is
74
+ an internal seam the workflow invokes.
75
+
76
+ **Deprecations removed.** None.
77
+
78
+ **Behavior changes without code changes.** None.
79
+
80
+ **Verification.** With a published `.crate` under `<root>`,
81
+ `putitoutthere verify crate --matrix '[{"name":"c","kind":"crates","version":"1.0.0"}]' --registry-root <root>`
82
+ prints `ok: <path> contains src/lib.rs or src/main.rs` and exits 0; a
83
+ missing/empty `.crate` exits 1 with `no .crate file found (or empty)`, and
84
+ a source-less `.crate` exits 1 with
85
+ `.crate tarball missing src/lib.rs and src/main.rs`.
86
+
87
+ ---
88
+
24
89
  ### New `verify npm-tarball` subcommand; `verify` becomes a command family
25
90
 
26
91
  **Summary.** `putitoutthere verify` is now a command family. Bare `verify`
package/dist/cli.d.ts CHANGED
@@ -50,6 +50,8 @@ interface ParsedFlags {
50
50
  releasePackages?: string | undefined;
51
51
  matrix?: string | undefined;
52
52
  registry?: string | undefined;
53
+ registryRoot?: string | undefined;
54
+ target?: string | undefined;
53
55
  perTriple: boolean;
54
56
  }
55
57
  export declare function parseFlags(argv: readonly string[]): ParsedFlags;
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AA4EH,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IAGd,KAAK,EAAE,OAAO,CAAC;IAIf,MAAM,EAAE,OAAO,CAAC;IAIhB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAG7B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAIrC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CA+B/D;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgSlE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAkFH,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IAGd,KAAK,EAAE,OAAO,CAAC;IAIf,MAAM,EAAE,OAAO,CAAC;IAIhB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAG7B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAIrC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAG9B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAGlC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CAiC/D;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA0TlE"}
package/dist/cli.js CHANGED
@@ -48,7 +48,9 @@ import { releaseGithub } from './release-github/index.js';
48
48
  import { formatStatusRow } from './status-format.js';
49
49
  import { computeStatus } from './status.js';
50
50
  import { formatVerifyRow } from './verify/posture-format.js';
51
+ import { verifyCrate } from './verify/crate/index.js';
51
52
  import { verifyNpmTarball } from './verify/npm-tarball/index.js';
53
+ import { verifyWheel } from './verify/wheel/index.js';
52
54
  import { computeVerify } from './verify/posture.js';
53
55
  import { writeCrateVersionForBuild } from './write-crate-version.js';
54
56
  import { writeLauncherFromConfig } from './write-launcher.js';
@@ -82,6 +84,8 @@ function printUsage() {
82
84
  ' reconcile Backfill missing tags for published-but-untagged packages (#403)',
83
85
  ' verify Report publish/trust posture — OIDC vs token, per registry (#403)',
84
86
  ' verify npm-tarball Assert a published npm tarball honors package.json files[] (#443)',
87
+ ' verify crate Assert a published .crate ships its source tree (#449)',
88
+ ' verify wheel Assert a built wheel/sdist carries the planned version (#450)',
85
89
  ' release-github Cut a GitHub Release for each new tag on HEAD (#444)',
86
90
  ' write-version Bump a package manifest to the planned version (pre-build; #276)',
87
91
  ' write-crate-version Bump a crate Cargo.toml to the planned version (pre-build; #366)',
@@ -96,6 +100,8 @@ function printUsage() {
96
100
  ' --release-packages <spec> manual-release spec (plan / publish)',
97
101
  ' --matrix <json> plan matrix (verify npm-tarball)',
98
102
  ' --registry <url> registry to read from (verify npm-tarball); default real npm',
103
+ ' --registry-root <dir> cargo-http-registry disk root to read .crate files from (verify crate)',
104
+ ' --target <t> matrix target: `sdist` or a wheel triple (verify wheel)',
99
105
  ' --per-triple verify synthesized per-triple tarballs (verify npm-tarball)',
100
106
  ' --check exit non-zero when status finds drift',
101
107
  ' --dry-run report what reconcile would do without writing tags',
@@ -143,6 +149,12 @@ export function parseFlags(argv) {
143
149
  else if (a === '--registry') {
144
150
  out.registry = argv[++i];
145
151
  }
152
+ else if (a === '--registry-root') {
153
+ out.registryRoot = argv[++i];
154
+ }
155
+ else if (a === '--target') {
156
+ out.target = argv[++i];
157
+ }
146
158
  else if (a === '--per-triple') {
147
159
  out.perTriple = true;
148
160
  }
@@ -322,6 +334,38 @@ export async function run(argv) {
322
334
  perTriple: flags.perTriple,
323
335
  });
324
336
  }
337
+ if (sub === 'crate') {
338
+ // #449: crates-side of the verify family. Reads `.crate` files
339
+ // off the cargo-http-registry disk root the engine published to
340
+ // (no fetch) and asserts each ships its source tree.
341
+ if (flags.matrix === undefined) {
342
+ throw new Error('verify crate requires --matrix <plan-matrix-json>');
343
+ }
344
+ if (flags.registryRoot === undefined) {
345
+ throw new Error('verify crate requires --registry-root <dir>');
346
+ }
347
+ return verifyCrate({ matrix: flags.matrix, registryRoot: flags.registryRoot });
348
+ }
349
+ if (sub === 'wheel') {
350
+ // #450: assert the built wheel/sdist under <path>/dist carries
351
+ // the planned version. Reads the wheel zip with a pure-Node
352
+ // reader (no unzip), so it runs on the Windows maturin rows too.
353
+ if (!flags.path) {
354
+ throw new Error('verify wheel requires --path <pkg-dir>');
355
+ }
356
+ if (!flags.version) {
357
+ throw new Error('verify wheel requires --version <planned>');
358
+ }
359
+ if (flags.target === undefined) {
360
+ throw new Error('verify wheel requires --target <sdist|triple>');
361
+ }
362
+ return verifyWheel({
363
+ cwd: flags.cwd,
364
+ path: flags.path,
365
+ version: flags.version,
366
+ target: flags.target,
367
+ });
368
+ }
325
369
  if (sub !== 'posture') {
326
370
  throw new Error(`unknown verify subcommand: ${sub}`);
327
371
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Extract a `.crate` (a gzipped tar) into a fresh temp dir and return it
3
+ * (#449). Caller owns cleanup. The real `tar -xzf` mirrors the bash.
4
+ */
5
+ export declare function extractCrate(crateFile: string): string;
6
+ //# sourceMappingURL=extract-crate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-crate.d.ts","sourceRoot":"","sources":["../../../src/verify/crate/extract-crate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAItD"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Extract a `.crate` (a gzipped tar) into a fresh temp dir and return it
3
+ * (#449). Caller owns cleanup. The real `tar -xzf` mirrors the bash.
4
+ */
5
+ import { execFileSync } from 'node:child_process';
6
+ import { mkdtempSync } from 'node:fs';
7
+ import { tmpdir } from 'node:os';
8
+ import { join } from 'node:path';
9
+ export function extractCrate(crateFile) {
10
+ const dir = mkdtempSync(join(tmpdir(), 'piot-crate-'));
11
+ execFileSync('tar', ['-xzf', crateFile, '-C', dir]);
12
+ return dir;
13
+ }
14
+ //# sourceMappingURL=extract-crate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-crate.js","sourceRoot":"","sources":["../../../src/verify/crate/extract-crate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IACvD,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The path to a non-empty `<name>-<version>.crate` under `registryRoot`, or
3
+ * null when none exists (or the only match is empty) (#449).
4
+ *
5
+ * The synchronous analogue of the bash
6
+ * `find "$REG_ROOT" -name "${name}-${version}.crate" -type f -print -quit`
7
+ * followed by the `[ -z … ] || [ ! -s … ]` non-empty guard. `cargo-http-
8
+ * registry` stores `.crate` files nested under the root, so the search
9
+ * recurses.
10
+ */
11
+ export declare function findCrateFile(registryRoot: string, name: string, version: string): string | null;
12
+ //# sourceMappingURL=find-crate-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-crate-file.d.ts","sourceRoot":"","sources":["../../../src/verify/crate/find-crate-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAQf"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The path to a non-empty `<name>-<version>.crate` under `registryRoot`, or
3
+ * null when none exists (or the only match is empty) (#449).
4
+ *
5
+ * The synchronous analogue of the bash
6
+ * `find "$REG_ROOT" -name "${name}-${version}.crate" -type f -print -quit`
7
+ * followed by the `[ -z … ] || [ ! -s … ]` non-empty guard. `cargo-http-
8
+ * registry` stores `.crate` files nested under the root, so the search
9
+ * recurses.
10
+ */
11
+ import { statSync } from 'node:fs';
12
+ import { basename } from 'node:path';
13
+ import { listFilesRecursive } from '../../utils/list-files-recursive.js';
14
+ export function findCrateFile(registryRoot, name, version) {
15
+ const target = `${name}-${version}.crate`;
16
+ for (const file of listFilesRecursive(registryRoot)) {
17
+ if (basename(file) === target && statSync(file).size > 0) {
18
+ return file;
19
+ }
20
+ }
21
+ return null;
22
+ }
23
+ //# sourceMappingURL=find-crate-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-crate-file.js","sourceRoot":"","sources":["../../../src/verify/crate/find-crate-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,MAAM,UAAU,aAAa,CAC3B,YAAoB,EACpB,IAAY,EACZ,OAAe;IAEf,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,QAAQ,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC;QACpD,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Whether the extracted crate tree surfaces `src/lib.rs` or `src/main.rs`
3
+ * (#449). cargo packs into `<name>-<version>/{Cargo.toml,src/…}`, so any
4
+ * file path ending in `/src/lib.rs` or `/src/main.rs` counts — the
5
+ * analogue of the bash `find … -path` check on those two source entries.
6
+ * This is the crates-side of the npm verify's "files[] dir is populated"
7
+ * check: proof the publish shipped the source tree, not an empty tarball.
8
+ */
9
+ export declare function hasCrateSource(dir: string): boolean;
10
+ //# sourceMappingURL=has-crate-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-crate-source.d.ts","sourceRoot":"","sources":["../../../src/verify/crate/has-crate-source.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CASnD"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Whether the extracted crate tree surfaces `src/lib.rs` or `src/main.rs`
3
+ * (#449). cargo packs into `<name>-<version>/{Cargo.toml,src/…}`, so any
4
+ * file path ending in `/src/lib.rs` or `/src/main.rs` counts — the
5
+ * analogue of the bash `find … -path` check on those two source entries.
6
+ * This is the crates-side of the npm verify's "files[] dir is populated"
7
+ * check: proof the publish shipped the source tree, not an empty tarball.
8
+ */
9
+ import { basename, dirname } from 'node:path';
10
+ import { listFilesRecursive } from '../../utils/list-files-recursive.js';
11
+ export function hasCrateSource(dir) {
12
+ // Match a `lib.rs` / `main.rs` whose parent dir is `src`, via
13
+ // basename/dirname rather than a `/src/…` string suffix — the extracted
14
+ // paths use the platform separator, so a literal `/` check silently
15
+ // misses on Windows (`…\src\lib.rs`) and the unit matrix goes red.
16
+ return listFilesRecursive(dir).some((f) => {
17
+ const name = basename(f);
18
+ return (name === 'lib.rs' || name === 'main.rs') && basename(dirname(f)) === 'src';
19
+ });
20
+ }
21
+ //# sourceMappingURL=has-crate-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-crate-source.js","sourceRoot":"","sources":["../../../src/verify/crate/has-crate-source.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,8DAA8D;IAC9D,wEAAwE;IACxE,oEAAoE;IACpE,mEAAmE;IACnE,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;IACrF,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `putitoutthere verify crate` — assert each published `.crate` ships its
3
+ * source tree (#449, epic #442).
4
+ *
5
+ * Extraction of the inline "Verify published .crate tarballs honor expected
6
+ * files" bash block (#334) in `.github/workflows/e2e-fixture-job.yml`. The
7
+ * crates-side sibling of `verify npm-tarball` (#443): where npm downloads
8
+ * the tarball over HTTP, crates reads the `.crate` straight off the
9
+ * `cargo-http-registry` disk root the engine just published to — same host,
10
+ * same job, no fetch. For each crates row it finds `<name>-<version>.crate`
11
+ * under the registry root, asserts it is present and non-empty, extracts it
12
+ * with the real `tar`, and asserts `src/lib.rs` or `src/main.rs` surfaces.
13
+ *
14
+ * The diagnostic this gate gives (the rust-vanilla-first-publish fixture):
15
+ * without it, a publish that silently no-op'd or produced an empty `.crate`
16
+ * would still go green. Synchronous throughout, per the engine convention.
17
+ * Returns the process exit code (0 ok, 1 on any miss).
18
+ */
19
+ import type { VerifyCrateOptions } from './types.js';
20
+ export declare function verifyCrate(opts: VerifyCrateOptions): number;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/verify/crate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,OAAO,KAAK,EAAY,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE/D,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CA+B5D"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * `putitoutthere verify crate` — assert each published `.crate` ships its
3
+ * source tree (#449, epic #442).
4
+ *
5
+ * Extraction of the inline "Verify published .crate tarballs honor expected
6
+ * files" bash block (#334) in `.github/workflows/e2e-fixture-job.yml`. The
7
+ * crates-side sibling of `verify npm-tarball` (#443): where npm downloads
8
+ * the tarball over HTTP, crates reads the `.crate` straight off the
9
+ * `cargo-http-registry` disk root the engine just published to — same host,
10
+ * same job, no fetch. For each crates row it finds `<name>-<version>.crate`
11
+ * under the registry root, asserts it is present and non-empty, extracts it
12
+ * with the real `tar`, and asserts `src/lib.rs` or `src/main.rs` surfaces.
13
+ *
14
+ * The diagnostic this gate gives (the rust-vanilla-first-publish fixture):
15
+ * without it, a publish that silently no-op'd or produced an empty `.crate`
16
+ * would still go green. Synchronous throughout, per the engine convention.
17
+ * Returns the process exit code (0 ok, 1 on any miss).
18
+ */
19
+ import { rmSync } from 'node:fs';
20
+ import { extractCrate } from './extract-crate.js';
21
+ import { findCrateFile } from './find-crate-file.js';
22
+ import { hasCrateSource } from './has-crate-source.js';
23
+ import { listFilesRecursive } from '../../utils/list-files-recursive.js';
24
+ export function verifyCrate(opts) {
25
+ const rows = JSON.parse(opts.matrix).filter((r) => r.kind === 'crates');
26
+ if (rows.length === 0) {
27
+ process.stdout.write('No crates rows; nothing to verify.\n');
28
+ return 0;
29
+ }
30
+ let fail = 0;
31
+ for (const row of rows) {
32
+ const crateFile = findCrateFile(opts.registryRoot, row.name, row.version);
33
+ if (crateFile === null) {
34
+ process.stdout.write(`::error::[${row.name}@${row.version}] no .crate file found (or empty) under ${opts.registryRoot}\n`);
35
+ fail = 1;
36
+ continue;
37
+ }
38
+ const extracted = extractCrate(crateFile);
39
+ if (hasCrateSource(extracted)) {
40
+ process.stdout.write(`ok: ${crateFile} contains src/lib.rs or src/main.rs\n`);
41
+ }
42
+ else {
43
+ const listing = listFilesRecursive(extracted).join(' ');
44
+ process.stdout.write(`::error::[${row.name}@${row.version}] .crate tarball missing src/lib.rs and src/main.rs. Tarball contents: ${listing}\n`);
45
+ fail = 1;
46
+ }
47
+ rmSync(extracted, { recursive: true, force: true });
48
+ }
49
+ return fail;
50
+ }
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/verify/crate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAGzE,MAAM,UAAU,WAAW,CAAC,IAAwB;IAClD,MAAM,IAAI,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACxF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC7D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,aAAa,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,2CAA2C,IAAI,CAAC,YAAY,IAAI,CACrG,CAAC;YACF,IAAI,GAAG,CAAC,CAAC;YACT,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,uCAAuC,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,aAAa,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,0EAA0E,OAAO,IAAI,CAC1H,CAAC;YACF,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;QACD,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Option + row shapes for `verify crate` (#449).
3
+ */
4
+ export interface VerifyCrateOptions {
5
+ /** The plan matrix JSON the workflow already carries. */
6
+ matrix: string;
7
+ /**
8
+ * The `cargo-http-registry` disk root the engine published to. `.crate`
9
+ * files are read straight off this path — same host, same job, no fetch.
10
+ */
11
+ registryRoot: string;
12
+ }
13
+ export interface CrateRow {
14
+ name: string;
15
+ kind: string;
16
+ version: string;
17
+ }
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/verify/crate/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Option + row shapes for `verify crate` (#449).
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/verify/crate/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The first regular file directly under `dir` whose name ends with `ext`, or
3
+ * null when none exists (#450). Non-recursive — the analogue of the bash
4
+ * `find "$dist_dir" -maxdepth 1 -name '*<ext>' -print -quit`. Sorted for a
5
+ * deterministic pick when a dist dir holds more than one match.
6
+ */
7
+ export declare function findDistFile(dir: string, ext: string): string | null;
8
+ //# sourceMappingURL=find-dist-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-dist-file.d.ts","sourceRoot":"","sources":["../../../src/verify/wheel/find-dist-file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAapE"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The first regular file directly under `dir` whose name ends with `ext`, or
3
+ * null when none exists (#450). Non-recursive — the analogue of the bash
4
+ * `find "$dist_dir" -maxdepth 1 -name '*<ext>' -print -quit`. Sorted for a
5
+ * deterministic pick when a dist dir holds more than one match.
6
+ */
7
+ import { existsSync, readdirSync, statSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ export function findDistFile(dir, ext) {
10
+ if (!existsSync(dir)) {
11
+ return null;
12
+ }
13
+ for (const name of readdirSync(dir).sort()) {
14
+ if (name.endsWith(ext)) {
15
+ const full = join(dir, name);
16
+ if (statSync(full).isFile()) {
17
+ return full;
18
+ }
19
+ }
20
+ }
21
+ return null;
22
+ }
23
+ //# sourceMappingURL=find-dist-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-dist-file.js","sourceRoot":"","sources":["../../../src/verify/wheel/find-dist-file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW;IACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `putitoutthere verify wheel` — assert the built wheel/sdist carries the
3
+ * planned version (#450, epic #442).
4
+ *
5
+ * Extraction of the inline "Verify wheel/sdist version matches
6
+ * matrix.version" bash block (#276) in `.github/workflows/e2e-fixture-job.yml`.
7
+ * The contract, per that step: "the build artifact carries matrix.version",
8
+ * verified directly against the produced files — independent of which
9
+ * mechanism (write-version, SETUPTOOLS_SCM_PRETEND_VERSION, …) set the
10
+ * manifest, so it catches a divergence regardless of which build path
11
+ * silently regressed.
12
+ *
13
+ * For an sdist row (`--target sdist`) the sdist filename must end
14
+ * `-<version>.tar.gz`; for a wheel row the first `*.whl`'s
15
+ * `*.dist-info/METADATA` `Version:` must equal `--version`. The wheel is
16
+ * read with a pure-Node zip reader (no `unzip`), so this runs on every
17
+ * platform the maturin matrix builds on. Synchronous throughout. Returns the
18
+ * process exit code (0 ok, 1 on any miss).
19
+ */
20
+ import type { VerifyWheelOptions } from './types.js';
21
+ export declare function verifyWheel(opts: VerifyWheelOptions): number;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/verify/wheel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAuC5D"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * `putitoutthere verify wheel` — assert the built wheel/sdist carries the
3
+ * planned version (#450, epic #442).
4
+ *
5
+ * Extraction of the inline "Verify wheel/sdist version matches
6
+ * matrix.version" bash block (#276) in `.github/workflows/e2e-fixture-job.yml`.
7
+ * The contract, per that step: "the build artifact carries matrix.version",
8
+ * verified directly against the produced files — independent of which
9
+ * mechanism (write-version, SETUPTOOLS_SCM_PRETEND_VERSION, …) set the
10
+ * manifest, so it catches a divergence regardless of which build path
11
+ * silently regressed.
12
+ *
13
+ * For an sdist row (`--target sdist`) the sdist filename must end
14
+ * `-<version>.tar.gz`; for a wheel row the first `*.whl`'s
15
+ * `*.dist-info/METADATA` `Version:` must equal `--version`. The wheel is
16
+ * read with a pure-Node zip reader (no `unzip`), so this runs on every
17
+ * platform the maturin matrix builds on. Synchronous throughout. Returns the
18
+ * process exit code (0 ok, 1 on any miss).
19
+ */
20
+ import { existsSync, statSync } from 'node:fs';
21
+ import { basename, isAbsolute, join, resolve } from 'node:path';
22
+ import { findDistFile } from './find-dist-file.js';
23
+ import { readWheelVersion } from './read-wheel-version.js';
24
+ export function verifyWheel(opts) {
25
+ const pkgDir = isAbsolute(opts.path) ? opts.path : resolve(opts.cwd, opts.path);
26
+ const distDir = join(pkgDir, 'dist');
27
+ if (!existsSync(distDir) || !statSync(distDir).isDirectory()) {
28
+ process.stdout.write(`::error::no dist/ produced under ${distDir}\n`);
29
+ return 1;
30
+ }
31
+ if (opts.target === 'sdist') {
32
+ const sdist = findDistFile(distDir, '.tar.gz');
33
+ if (sdist === null) {
34
+ process.stdout.write(`::error::no sdist produced in ${distDir}\n`);
35
+ return 1;
36
+ }
37
+ const name = basename(sdist);
38
+ if (name.endsWith(`-${opts.version}.tar.gz`)) {
39
+ process.stdout.write(`ok sdist: ${name}\n`);
40
+ return 0;
41
+ }
42
+ process.stdout.write(`::error::sdist filename '${name}' does not contain planned version '${opts.version}'\n`);
43
+ return 1;
44
+ }
45
+ const wheel = findDistFile(distDir, '.whl');
46
+ if (wheel === null) {
47
+ process.stdout.write(`::error::no wheel produced in ${distDir}\n`);
48
+ return 1;
49
+ }
50
+ const actual = readWheelVersion(wheel);
51
+ if (actual !== opts.version) {
52
+ process.stdout.write(`::error::wheel METADATA Version='${actual ?? ''}' but plan='${opts.version}' (wheel: ${basename(wheel)})\n`);
53
+ return 1;
54
+ }
55
+ process.stdout.write(`ok wheel: ${basename(wheel)} METADATA Version=${actual}\n`);
56
+ return 0;
57
+ }
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/verify/wheel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,MAAM,UAAU,WAAW,CAAC,IAAwB;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,OAAO,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,OAAO,IAAI,CAAC,CAAC;YACnE,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,SAAS,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;YAC5C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4BAA4B,IAAI,uCAAuC,IAAI,CAAC,OAAO,KAAK,CACzF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,OAAO,IAAI,CAAC,CAAC;QACnE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oCAAoC,MAAM,IAAI,EAAE,eAAe,IAAI,CAAC,OAAO,aAAa,QAAQ,CAAC,KAAK,CAAC,KAAK,CAC7G,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,CAAC,KAAK,CAAC,qBAAqB,MAAM,IAAI,CAAC,CAAC;IAClF,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Read the `Version:` field from a wheel's `*.dist-info/METADATA` (#450).
3
+ *
4
+ * The engine analogue of the bash
5
+ * `unzip -p "$wheel" '*.dist-info/METADATA' | awk '/^Version:/ { print $2 }'`,
6
+ * but via the pure-Node zip reader so it needs no `unzip`. Returns the
7
+ * version string, or null when the wheel carries no METADATA or no
8
+ * `Version:` line. `Metadata-Version:` is deliberately not matched — only a
9
+ * line that begins exactly `Version:`, mirroring the bash `^Version:`.
10
+ */
11
+ export declare function readWheelVersion(wheelPath: string): string | null;
12
+ //# sourceMappingURL=read-wheel-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-wheel-version.d.ts","sourceRoot":"","sources":["../../../src/verify/wheel/read-wheel-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYjE"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Read the `Version:` field from a wheel's `*.dist-info/METADATA` (#450).
3
+ *
4
+ * The engine analogue of the bash
5
+ * `unzip -p "$wheel" '*.dist-info/METADATA' | awk '/^Version:/ { print $2 }'`,
6
+ * but via the pure-Node zip reader so it needs no `unzip`. Returns the
7
+ * version string, or null when the wheel carries no METADATA or no
8
+ * `Version:` line. `Metadata-Version:` is deliberately not matched — only a
9
+ * line that begins exactly `Version:`, mirroring the bash `^Version:`.
10
+ */
11
+ import { readFileSync } from 'node:fs';
12
+ import { readZipEntry } from './read-zip-entry.js';
13
+ export function readWheelVersion(wheelPath) {
14
+ const meta = readZipEntry(readFileSync(wheelPath), (name) => name.endsWith('.dist-info/METADATA'));
15
+ if (meta === null) {
16
+ return null;
17
+ }
18
+ for (const line of meta.toString('utf8').split(/\r?\n/)) {
19
+ const m = /^Version:[ \t]*(\S+)/.exec(line);
20
+ if (m) {
21
+ return m[1];
22
+ }
23
+ }
24
+ return null;
25
+ }
26
+ //# sourceMappingURL=read-wheel-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-wheel-version.js","sourceRoot":"","sources":["../../../src/verify/wheel/read-wheel-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACnG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC;YACN,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Extract the first zip entry whose name satisfies `matches`, returning its
3
+ * decompressed bytes (or null if none matches) (#450).
4
+ *
5
+ * A minimal pure-Node zip reader for the stored (method 0) and deflate
6
+ * (method 8) entries a wheel uses — enough to read `dist-info/METADATA`
7
+ * without an `unzip` / `tar` subprocess, so `verify wheel` runs on every
8
+ * platform the maturin matrix builds on (Windows included). Wheels are not
9
+ * ZIP64 and carry no archive comment, so the common-case layout is all that
10
+ * is handled.
11
+ */
12
+ export declare function readZipEntry(buf: Buffer, matches: (name: string) => boolean): Buffer | null;
13
+ //# sourceMappingURL=read-zip-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-zip-entry.d.ts","sourceRoot":"","sources":["../../../src/verify/wheel/read-zip-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,GAAG,IAAI,CAqC3F"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Extract the first zip entry whose name satisfies `matches`, returning its
3
+ * decompressed bytes (or null if none matches) (#450).
4
+ *
5
+ * A minimal pure-Node zip reader for the stored (method 0) and deflate
6
+ * (method 8) entries a wheel uses — enough to read `dist-info/METADATA`
7
+ * without an `unzip` / `tar` subprocess, so `verify wheel` runs on every
8
+ * platform the maturin matrix builds on (Windows included). Wheels are not
9
+ * ZIP64 and carry no archive comment, so the common-case layout is all that
10
+ * is handled.
11
+ */
12
+ import { inflateRawSync } from 'node:zlib';
13
+ export function readZipEntry(buf, matches) {
14
+ // End Of Central Directory record: scan back for its signature.
15
+ let eocd = -1;
16
+ for (let i = buf.length - 22; i >= 0; i--) {
17
+ if (buf.readUInt32LE(i) === 0x06054b50) {
18
+ eocd = i;
19
+ break;
20
+ }
21
+ }
22
+ if (eocd < 0) {
23
+ return null;
24
+ }
25
+ const count = buf.readUInt16LE(eocd + 10);
26
+ let p = buf.readUInt32LE(eocd + 16); // central-directory offset
27
+ // The EOCD gives the exact entry count, and central-directory headers are
28
+ // contiguous, so read exactly `count` of them.
29
+ for (let n = 0; n < count; n++) {
30
+ const method = buf.readUInt16LE(p + 10);
31
+ const compSize = buf.readUInt32LE(p + 20);
32
+ const fnLen = buf.readUInt16LE(p + 28);
33
+ const extraLen = buf.readUInt16LE(p + 30);
34
+ const commentLen = buf.readUInt16LE(p + 32);
35
+ const localOffset = buf.readUInt32LE(p + 42);
36
+ const name = buf.toString('utf8', p + 46, p + 46 + fnLen);
37
+ if (matches(name)) {
38
+ // Data starts after the LOCAL header's own name + extra fields
39
+ // (its extra length can differ from the central directory's).
40
+ const lFnLen = buf.readUInt16LE(localOffset + 26);
41
+ const lExtraLen = buf.readUInt16LE(localOffset + 28);
42
+ const dataStart = localOffset + 30 + lFnLen + lExtraLen;
43
+ const raw = buf.subarray(dataStart, dataStart + compSize);
44
+ return method === 0 ? Buffer.from(raw) : inflateRawSync(raw);
45
+ }
46
+ p += 46 + fnLen + extraLen + commentLen;
47
+ }
48
+ return null;
49
+ }
50
+ //# sourceMappingURL=read-zip-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-zip-entry.js","sourceRoot":"","sources":["../../../src/verify/wheel/read-zip-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,OAAkC;IAC1E,gEAAgE;IAChE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;YACvC,IAAI,GAAG,CAAC,CAAC;YACT,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,2BAA2B;IAChE,0EAA0E;IAC1E,+CAA+C;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,+DAA+D;YAC/D,8DAA8D;YAC9D,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,WAAW,GAAG,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;YACxD,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC;YAC1D,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Option shape for `verify wheel` (#450).
3
+ */
4
+ export interface VerifyWheelOptions {
5
+ /** Working dir `--path` resolves against (default process.cwd()). */
6
+ cwd: string;
7
+ /** Package dir; the build artifact lives under `<path>/dist`. */
8
+ path: string;
9
+ /** The planned version the artifact must carry. */
10
+ version: string;
11
+ /**
12
+ * The matrix row's target. `sdist` selects the sdist-filename check; any
13
+ * other value (a wheel triple) selects the wheel-METADATA check.
14
+ */
15
+ target: string;
16
+ }
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/verify/wheel/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Option shape for `verify wheel` (#450).
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/verify/wheel/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "putitoutthere",
3
- "version": "0.2.42",
3
+ "version": "0.2.44",
4
4
  "description": "Polyglot release orchestrator for crates.io, PyPI, and npm",
5
5
  "license": "MIT",
6
6
  "repository": {