putitoutthere 0.2.25 → 0.2.26
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/CHANGELOG.md +2 -0
- package/MIGRATIONS.md +71 -0
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +79 -4
- package/dist/preflight.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -38,6 +38,8 @@ are prefixed `**BREAKING**` and link to the matching section in
|
|
|
38
38
|
|
|
39
39
|
### Fixed
|
|
40
40
|
|
|
41
|
+
- **`check` no longer false-positives `PIOT_CRATES_MISSING_METADATA` on crates whose `Cargo.toml` inherits `description` / `license` / `license-file` from `[workspace.package]`.** Cargo's recommended pattern for shared crate metadata is `[workspace.package]` in the workspace root plus `<field>.workspace = true` in each member; `cargo publish` resolves the inheritance and embeds the literal value into `Cargo.toml.orig` before upload, so crates.io receives the resolved field. The check previously parsed the member `Cargo.toml` in isolation and treated `{ workspace: true }` as a missing string, flagging well-formed workspaces as if they would fail publish. `checkCratesMetadata` now walks up from each crate's `path` to find the nearest parent `Cargo.toml` with a `[workspace]` table and, when a field is declared as `<field>.workspace = true`, resolves it from `[workspace.package]` before deciding it's missing. Genuinely-missing fields (workspace root has no value for the inherited key, or no `[workspace.package]` block at all) still report through `PIOT_CRATES_MISSING_METADATA`. Hit in the wild in `thekevinscott/dirsql#177`. See [MIGRATIONS.md](./MIGRATIONS.md#crates-metadata-check-resolves-workspace-package-inheritance). #328.
|
|
42
|
+
|
|
41
43
|
- **`kind = "pypi"` + `build = "hatch"` now publishes a wheel alongside the sdist.** A pure-Python hatch package previously planned only a `target = "sdist"` row, so PyPI ended up with sdist-only and downstream `pip install` / `uvx ...` had to provision hatchling and run `python -m build` on a cold cache (several seconds per invocation) instead of doing a sub-second download-and-extract. `pypa/build`'s default on a pure-Python tree is to produce both an sdist and an any-platform wheel; the planner just wasn't asking for the wheel. The matrix now emits a second row per hatch package — `target = "any"`, `artifact_name = <name>-wheel-any` — and the reusable workflow's build step runs `python -m build --wheel --outdir dist` (with `SETUPTOOLS_SCM_PRETEND_VERSION` set, mirroring the sdist row's contract). Scoped to hatch per the issue: `build = "setuptools"` stays sdist-only (consumers who want a wheel there can switch to hatch or supply their own wheel), and `build = "maturin"` keeps its per-target wheel rows. Consumers' existing `pypi-publish` job picks up the new wheel automatically: the recommended `actions/download-artifact@v8` step in the README already uses `pattern: '*-wheel-*'`. Hit in the wild on `repo-name-checker` 0.1.0. See [MIGRATIONS.md](./MIGRATIONS.md#hatch-wheel-any-row). #324.
|
|
42
44
|
|
|
43
45
|
- **Single-artifact publish jobs no longer fail completeness with `missing artifact directory <name>/`.** `actions/download-artifact@v8` is count-sensitive: with `path: artifacts` and no `name`/`pattern` filter, multiple artifacts each get their own `artifacts/<name>/` subdir (the documented multi-case the engine relies on), but a single artifact extracts directly into `artifacts/` with no per-artifact subdir. Consumers whose plan emits exactly one expected artifact — canonical case: pure-Python `[[package]]` with `build = "hatch"`, which emits an sdist row only — therefore aborted at the engine's completeness check before any side effect ran. The reusable workflow's publish job now normalizes the layout in-process before completeness: when the plan expects a single staged artifact and the documented subdir is absent, files in `artifacts/` are moved into `artifacts/<artifact_name>/` so the rest of the engine sees the contract it was written against. No-op in the multi-artifact case, when the subdir already exists, or when nothing was downloaded (crates-only / vanilla-npm plans). No consumer-side change required. Hit in the wild on a pypi-only consumer with a single sdist row; multi-artifact consumers (pypi + npm, or sdist + wheels) were unaffected. See [MIGRATIONS.md](./MIGRATIONS.md#single-artifact-publish-layout-normalization). #311.
|
package/MIGRATIONS.md
CHANGED
|
@@ -21,6 +21,77 @@ Each section covers five things, in order:
|
|
|
21
21
|
|
|
22
22
|
## Unreleased
|
|
23
23
|
|
|
24
|
+
### Crates metadata check resolves `[workspace.package]` inheritance
|
|
25
|
+
|
|
26
|
+
**Summary.** Cargo's recommended pattern for shared crate metadata in a
|
|
27
|
+
workspace is `[workspace.package]` in the workspace root combined with
|
|
28
|
+
`<field>.workspace = true` on each member. `cargo publish` resolves the
|
|
29
|
+
inheritance and embeds the literal value into `Cargo.toml.orig` before
|
|
30
|
+
upload, so crates.io receives the resolved field. The pre-merge
|
|
31
|
+
`check` and the pre-publish `requireCratesMetadata` previously parsed
|
|
32
|
+
each member `Cargo.toml` in isolation and treated the
|
|
33
|
+
`{ workspace: true }` placeholder as a missing string, flagging
|
|
34
|
+
well-formed workspaces with `PIOT_CRATES_MISSING_METADATA` even though
|
|
35
|
+
the eventual `cargo publish` would succeed. The check now walks up from
|
|
36
|
+
each crate's `path` to find the nearest parent `Cargo.toml` carrying a
|
|
37
|
+
`[workspace]` table and, when a member field is declared as
|
|
38
|
+
`<field>.workspace = true`, resolves the value from `[workspace.package]`
|
|
39
|
+
before deciding it's missing. Genuinely-missing inherited fields — the
|
|
40
|
+
workspace root has no value for the key, or no `[workspace.package]`
|
|
41
|
+
block at all — still report through `PIOT_CRATES_MISSING_METADATA`. Hit
|
|
42
|
+
in the wild in `thekevinscott/dirsql#177`. Tracked at #328.
|
|
43
|
+
|
|
44
|
+
**Required changes.** None.
|
|
45
|
+
|
|
46
|
+
**Deprecations removed.** None.
|
|
47
|
+
|
|
48
|
+
**Behavior changes without code changes.**
|
|
49
|
+
|
|
50
|
+
- Crates packages whose `Cargo.toml` reads
|
|
51
|
+
```toml
|
|
52
|
+
[package]
|
|
53
|
+
name = "foo"
|
|
54
|
+
description.workspace = true
|
|
55
|
+
license.workspace = true
|
|
56
|
+
```
|
|
57
|
+
with the workspace root supplying
|
|
58
|
+
```toml
|
|
59
|
+
[workspace.package]
|
|
60
|
+
description = "..."
|
|
61
|
+
license = "MIT"
|
|
62
|
+
```
|
|
63
|
+
no longer surface as `PIOT_CRATES_MISSING_METADATA` findings from
|
|
64
|
+
`putitoutthere check` or as `requireCratesMetadata` errors from the
|
|
65
|
+
publish path. `license-file.workspace = true` resolves the same way.
|
|
66
|
+
- Crates that inherit a field whose workspace root omits it (or has no
|
|
67
|
+
`[workspace.package]` block) continue to surface as
|
|
68
|
+
`PIOT_CRATES_MISSING_METADATA` — the publish would still fail at
|
|
69
|
+
crates.io's metadata gate, so the preflight keeps flagging it.
|
|
70
|
+
- Inline (non-inherited) `description` / `license` / `license-file`
|
|
71
|
+
fields are unchanged.
|
|
72
|
+
|
|
73
|
+
**Verification.** Inside a workspace that centralizes metadata:
|
|
74
|
+
|
|
75
|
+
```toml
|
|
76
|
+
# Cargo.toml
|
|
77
|
+
[workspace]
|
|
78
|
+
members = ["packages/rust"]
|
|
79
|
+
|
|
80
|
+
[workspace.package]
|
|
81
|
+
license = "MIT"
|
|
82
|
+
description = "Shared description."
|
|
83
|
+
|
|
84
|
+
# packages/rust/Cargo.toml
|
|
85
|
+
[package]
|
|
86
|
+
name = "foo"
|
|
87
|
+
description.workspace = true
|
|
88
|
+
license.workspace = true
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`putitoutthere check` should report `0 findings` for `foo`'s metadata,
|
|
92
|
+
and `cargo metadata --no-deps --format-version=1 --manifest-path packages/rust/Cargo.toml`
|
|
93
|
+
should show the resolved `"license":"MIT"` / `"description":"..."`.
|
|
94
|
+
|
|
24
95
|
### Hatch wheel-any row
|
|
25
96
|
|
|
26
97
|
**Summary.** `kind = "pypi"` + `build = "hatch"` now publishes a wheel
|
package/dist/preflight.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAqBvC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAClC,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,UAAU,CAgBlE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CAiB9D;AAcD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC3B,iBAAiB,EAAE,CA0BrB;AAWD;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CA8B5E;AAYD,uEAAuE;AACvE,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACzC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC3B,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAqBvC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAClC,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,UAAU,CAgBlE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CAiB9D;AAcD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC3B,iBAAiB,EAAE,CA0BrB;AAWD;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CA8B5E;AAYD,uEAAuE;AACvE,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACzC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC3B,qBAAqB,EAAE,CA8CzB;AA8ED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CA6BxE"}
|
package/dist/preflight.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* Issue #14, #280.
|
|
22
22
|
*/
|
|
23
23
|
import { readFileSync } from 'node:fs';
|
|
24
|
-
import { join } from 'node:path';
|
|
24
|
+
import { dirname, join, parse as parsePath } from 'node:path';
|
|
25
25
|
import { parse as parseToml } from 'smol-toml';
|
|
26
26
|
import { ErrorCodes } from './error-codes.js';
|
|
27
27
|
// Per-kind accepted env var names, primary first. `checkAuth` scans left
|
|
@@ -209,11 +209,19 @@ export function checkCratesMetadata(packages) {
|
|
|
209
209
|
continue;
|
|
210
210
|
}
|
|
211
211
|
const pkgTable = (parsed.package ?? {});
|
|
212
|
+
// `[workspace.package]` inheritance (#328): cargo resolves
|
|
213
|
+
// `license.workspace = true` against the workspace root before
|
|
214
|
+
// upload, so the literal value lands on crates.io. The check has
|
|
215
|
+
// to do the same — otherwise crates following Cargo's recommended
|
|
216
|
+
// centralized-metadata pattern false-positive.
|
|
217
|
+
const wsPkgTable = readWorkspacePackageTable(p.path);
|
|
218
|
+
const description = resolveInherited(pkgTable.description, wsPkgTable, 'description');
|
|
219
|
+
const license = resolveInherited(pkgTable.license, wsPkgTable, 'license');
|
|
220
|
+
const licenseFile = resolveInherited(pkgTable['license-file'], wsPkgTable, 'license-file');
|
|
212
221
|
const missing = [];
|
|
213
|
-
if (!nonEmptyString(
|
|
222
|
+
if (!nonEmptyString(description))
|
|
214
223
|
missing.push('description');
|
|
215
|
-
if (!nonEmptyString(
|
|
216
|
-
!nonEmptyString(pkgTable['license-file'])) {
|
|
224
|
+
if (!nonEmptyString(license) && !nonEmptyString(licenseFile)) {
|
|
217
225
|
missing.push('license');
|
|
218
226
|
}
|
|
219
227
|
if (missing.length > 0) {
|
|
@@ -225,6 +233,73 @@ export function checkCratesMetadata(packages) {
|
|
|
225
233
|
function nonEmptyString(v) {
|
|
226
234
|
return typeof v === 'string' && v.trim().length > 0;
|
|
227
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* Return the inherited workspace value when the field is declared as
|
|
238
|
+
* `<field>.workspace = true`; otherwise pass the raw value through.
|
|
239
|
+
* `wsPkgTable` is `undefined` when no parent `Cargo.toml` declares a
|
|
240
|
+
* `[workspace.package]` block — inheritance simply yields `undefined`
|
|
241
|
+
* there, which `nonEmptyString` correctly treats as missing.
|
|
242
|
+
*/
|
|
243
|
+
function resolveInherited(value, wsPkgTable, key) {
|
|
244
|
+
if (value !== null &&
|
|
245
|
+
typeof value === 'object' &&
|
|
246
|
+
value.workspace === true) {
|
|
247
|
+
return wsPkgTable?.[key];
|
|
248
|
+
}
|
|
249
|
+
return value;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Find the nearest parent `Cargo.toml` whose `[workspace]` table makes
|
|
253
|
+
* it a workspace root and return its `[workspace.package]` table (if
|
|
254
|
+
* any). Walks up from `crateDir` to the filesystem root. Returns
|
|
255
|
+
* `undefined` when no workspace root is found or when the workspace
|
|
256
|
+
* defines no shared `[workspace.package]` metadata.
|
|
257
|
+
*/
|
|
258
|
+
function readWorkspacePackageTable(crateDir) {
|
|
259
|
+
const rootMarker = parsePath(crateDir).root;
|
|
260
|
+
let dir = dirname(crateDir);
|
|
261
|
+
while (dir && dir !== rootMarker) {
|
|
262
|
+
const manifest = join(dir, 'Cargo.toml');
|
|
263
|
+
let raw;
|
|
264
|
+
try {
|
|
265
|
+
raw = readFileSync(manifest, 'utf8');
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
const parent = dirname(dir);
|
|
269
|
+
if (parent === dir)
|
|
270
|
+
break;
|
|
271
|
+
dir = parent;
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
let parsed;
|
|
275
|
+
try {
|
|
276
|
+
parsed = parseToml(raw);
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
// Cargo will surface the parser error; just skip this manifest
|
|
280
|
+
// for workspace lookup so we don't crash on a malformed parent.
|
|
281
|
+
const parent = dirname(dir);
|
|
282
|
+
if (parent === dir)
|
|
283
|
+
break;
|
|
284
|
+
dir = parent;
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
if (parsed.workspace !== undefined) {
|
|
288
|
+
const ws = parsed.workspace;
|
|
289
|
+
const wsPkg = ws.package;
|
|
290
|
+
if (wsPkg !== undefined && typeof wsPkg === 'object') {
|
|
291
|
+
return wsPkg;
|
|
292
|
+
}
|
|
293
|
+
// Workspace root found, but no shared metadata — stop walking.
|
|
294
|
+
return undefined;
|
|
295
|
+
}
|
|
296
|
+
const parent = dirname(dir);
|
|
297
|
+
if (parent === dir)
|
|
298
|
+
break;
|
|
299
|
+
dir = parent;
|
|
300
|
+
}
|
|
301
|
+
return undefined;
|
|
302
|
+
}
|
|
228
303
|
/**
|
|
229
304
|
* Throw with an actionable error when any crates package's Cargo.toml
|
|
230
305
|
* lacks a required `[package]` metadata field. Reports every failing
|
package/dist/preflight.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
|