putitoutthere 0.1.51 → 0.1.53
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 +35 -0
- package/MIGRATIONS.md +80 -0
- package/dist/error-codes.d.ts +8 -0
- package/dist/error-codes.d.ts.map +1 -1
- package/dist/error-codes.js +9 -0
- package/dist/error-codes.js.map +1 -1
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +12 -3
- package/dist/publish.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,28 @@ are prefixed `**BREAKING**` and link to the matching section in
|
|
|
12
12
|
|
|
13
13
|
### Added
|
|
14
14
|
|
|
15
|
+
- **`PIOT_PUBLISH_EMPTY_PLAN` error code.** Surfaced when `publish` is invoked with an empty matrix. Joins `PIOT_AUTH_NO_TOKEN` in the stable error-code vocabulary; foreign agents debugging a failed publish can fingerprint on the code without parsing prose.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- **BREAKING: `publish` throws on an empty matrix instead of exiting clean.** The reusable workflow's `publish` step now fails red when the plan is empty, with `PIOT_PUBLISH_EMPTY_PLAN` in the message. Previously, an empty plan logged `info: publish: plan is empty; nothing to release` and returned `ok: true` — leaving consumers with green release runs that hadn't published anything. Skips belong at the workflow gate (the `if:` on the publish job that reads the plan job's matrix output), not in the publish step. See [MIGRATIONS.md](./MIGRATIONS.md#publish-throws-on-empty-matrix).
|
|
20
|
+
|
|
21
|
+
### Deprecated
|
|
22
|
+
|
|
23
|
+
- _nothing yet_
|
|
24
|
+
|
|
25
|
+
### Removed
|
|
26
|
+
|
|
27
|
+
- _nothing yet_
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- _nothing yet_
|
|
32
|
+
|
|
33
|
+
## v0.1.51 → v0.2.0
|
|
34
|
+
|
|
35
|
+
### Added
|
|
36
|
+
|
|
15
37
|
- **`workflow_call` output `has_pypi`.** The reusable workflow now emits a string `'true'`/`'false'` indicating whether the planned matrix contains any `kind = "pypi"` rows. Consumers gate their caller-side `pypi-publish` job on this so non-PyPI repos paste the canonical template verbatim without paying any runtime cost. Computed in the `plan` job from the matrix output.
|
|
16
38
|
- **Reusable workflow `.github/workflows/release.yml` (`workflow_call`).** The single user-facing surface. Consumer integration is one `uses: thekevinscott/putitoutthere/.github/workflows/release.yml@v0` line in their own `release.yml`; pinned action versions, plan/build/publish orchestration, and GitHub Release creation all live inside. Three optional inputs: `environment` (default `release`), `node_version` (default `24`), `python_version` (default `3.12`). No `dry_run`, `working_directory`, or `config` inputs — the plan job is already side-effect-free, the config file is `putitoutthere.toml` at the repo root, period. The engine is invoked via `uses: thekevinscott/putitoutthere@v0` so the workflow file and the engine always agree on a single git ref.
|
|
17
39
|
|
|
@@ -49,6 +71,19 @@ are prefixed `**BREAKING**` and link to the matching section in
|
|
|
49
71
|
|
|
50
72
|
### Fixed
|
|
51
73
|
|
|
74
|
+
- **Reusable workflow's publish job now installs and builds npm packages before `npm publish` runs.** (#256)
|
|
75
|
+
For vanilla npm rows the plan emits `artifact_path: package.json`, so
|
|
76
|
+
the build job's `dist/` was never carried through to the publish job
|
|
77
|
+
— which then ran `npm publish` from a fresh checkout and shipped
|
|
78
|
+
tarballs missing the compiled output. Any consumer whose
|
|
79
|
+
`package.json` declared `"files": ["dist", ...]` would publish a
|
|
80
|
+
broken artifact (caught in the wild as `cachetta@0.3.1`/`0.3.2`).
|
|
81
|
+
The publish job now mirrors what a developer running `npm publish`
|
|
82
|
+
locally would do: detect the lockfile, install deps, run `npm run
|
|
83
|
+
build --if-present` per npm package path. napi / bundled-cli
|
|
84
|
+
platform packages stage from `artifacts/` and were unaffected; this
|
|
85
|
+
fix only changes the main-package path.
|
|
86
|
+
|
|
52
87
|
- **PyPI artifact discovery now matches the documented `{name}-sdist` and `{name}-wheel-{target}` shapes exactly.** (#244)
|
|
53
88
|
Previously the handler used a bare prefix match (`entry.startsWith("{name}-")`), which silently picked up sibling packages whose names extended the same prefix (e.g. `foo`'s discovery matched `foo-extras-sdist`). The handler now matches the sdist directory exactly and the wheel directories by `{name}-wheel-` prefix only. Affects multi-package repos where one pypi package's name is a prefix of another's.
|
|
54
89
|
|
package/MIGRATIONS.md
CHANGED
|
@@ -21,6 +21,86 @@ Each section covers five things, in order:
|
|
|
21
21
|
|
|
22
22
|
## Unreleased
|
|
23
23
|
|
|
24
|
+
### `publish` throws on empty matrix
|
|
25
|
+
|
|
26
|
+
**Summary.** `putitoutthere publish` previously logged
|
|
27
|
+
`publish: plan is empty; nothing to release` at info level and exited
|
|
28
|
+
0 when the matrix had no rows. The reusable workflow's `publish` step
|
|
29
|
+
went green on those runs even though nothing reached a registry —
|
|
30
|
+
visually indistinguishable from a successful release. The engine now
|
|
31
|
+
throws with code `PIOT_PUBLISH_EMPTY_PLAN`, the publish step exits
|
|
32
|
+
non-zero, and the run goes red. Skips remain a workflow-gate concern:
|
|
33
|
+
the canonical `release.yml` already has `if: …matrix output non-empty
|
|
34
|
+
…` on its publish job, so a `release: skip` trailer (or any other
|
|
35
|
+
empty-plan reason) skips the publish job rather than running it to a
|
|
36
|
+
no-op.
|
|
37
|
+
|
|
38
|
+
**Required changes.** None for consumers calling the reusable
|
|
39
|
+
workflow at `thekevinscott/putitoutthere/.github/workflows/release.yml@v0`.
|
|
40
|
+
The reusable workflow's existing `if:` on the publish job already
|
|
41
|
+
gates correctly. Hand-rolled workflows that invoked the CLI's
|
|
42
|
+
`publish` directly without a plan-output gate will now see a non-zero
|
|
43
|
+
exit on empty plans; add a gate or stop calling publish on commits
|
|
44
|
+
that don't produce work.
|
|
45
|
+
|
|
46
|
+
**Deprecations removed.** None.
|
|
47
|
+
|
|
48
|
+
**Behavior changes without code changes.** A release run that
|
|
49
|
+
reached the publish step with an empty plan used to log
|
|
50
|
+
`published: (nothing)` and exit 0; it now logs `[PIOT_PUBLISH_EMPTY_PLAN]
|
|
51
|
+
publish was invoked but the plan is empty…` to stderr and exits 1.
|
|
52
|
+
For repos whose release runs were silently no-op-ing (the dogfood
|
|
53
|
+
incident's failure mode), this surfaces the gap.
|
|
54
|
+
|
|
55
|
+
**Verification.** Trigger a release run that would produce an empty
|
|
56
|
+
plan (e.g. a commit that doesn't touch any package's `globs`) and
|
|
57
|
+
either bypass the workflow gate or invoke the CLI directly. Expect
|
|
58
|
+
exit 1, with `PIOT_PUBLISH_EMPTY_PLAN` in stderr. A healthy release
|
|
59
|
+
where the plan job's matrix is non-empty is unaffected.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## v0.1.51 → v0.2.0
|
|
64
|
+
|
|
65
|
+
### Publish job rebuilds npm packages from source
|
|
66
|
+
|
|
67
|
+
**Summary.** Vanilla npm packages were publishing with their compiled
|
|
68
|
+
output (`dist/`, `lib/`, etc.) missing from the tarball. The plan
|
|
69
|
+
emitted `artifact_path: package.json` for noarch npm rows, so the
|
|
70
|
+
build job's compile output was never uploaded — and the publish job's
|
|
71
|
+
fresh checkout had no compiled files. `npm publish` doesn't validate
|
|
72
|
+
`files` content, so the broken artifact reached the registry. Caught
|
|
73
|
+
in the wild as `cachetta@0.3.1`/`0.3.2`. The publish job now installs
|
|
74
|
+
deps and runs `npm run build --if-present` per npm package path
|
|
75
|
+
before invoking the engine — the same logic the build job already
|
|
76
|
+
runs, just at the point where it actually matters.
|
|
77
|
+
|
|
78
|
+
**Required changes.** None for consumers calling the reusable
|
|
79
|
+
workflow at `thekevinscott/putitoutthere/.github/workflows/release.yml@v0`.
|
|
80
|
+
The fix is internal to the reusable workflow.
|
|
81
|
+
|
|
82
|
+
**Deprecations removed.** None.
|
|
83
|
+
|
|
84
|
+
**Behavior changes without code changes.** The publish job now spends
|
|
85
|
+
additional time on `npm install` + `npm run build` for each npm
|
|
86
|
+
package in the plan. For repos whose package.json had no `build`
|
|
87
|
+
script, behavior is unchanged (`--if-present` skips). For repos that
|
|
88
|
+
did declare a build script, the published tarball now contains
|
|
89
|
+
whatever the build emits — which may be the first time the registry
|
|
90
|
+
artifact actually matches what the package author intended. If your
|
|
91
|
+
prior releases were unknowingly broken (compiled output missing), the
|
|
92
|
+
next release will fix them; verify by inspecting the next published
|
|
93
|
+
tarball with `npm view <pkg>@<ver>` + `npm pack <pkg>@<ver>`.
|
|
94
|
+
|
|
95
|
+
**Verification.** After upgrading, a release run logs an `npm
|
|
96
|
+
install + build at <path>` group per npm package in the plan. The
|
|
97
|
+
published tarball contains every directory listed in package.json
|
|
98
|
+
`files[]`:
|
|
99
|
+
|
|
100
|
+
```sh
|
|
101
|
+
npm pack <pkg>@<new-version> --dry-run 2>&1 | grep -E '(dist|lib|build)/'
|
|
102
|
+
```
|
|
103
|
+
|
|
24
104
|
### Reusable workflow + `action.yml` move to Node 24 actions
|
|
25
105
|
|
|
26
106
|
**Summary.** GitHub deprecated Node 20 actions in September 2025; the
|
package/dist/error-codes.d.ts
CHANGED
|
@@ -21,6 +21,14 @@ export declare const ErrorCodes: {
|
|
|
21
21
|
* upload moved to a caller-side job per the reusable-workflow
|
|
22
22
|
* TP constraint — see notes/audits/). */
|
|
23
23
|
readonly AUTH_NO_TOKEN: "PIOT_AUTH_NO_TOKEN";
|
|
24
|
+
/** `publish` was invoked but `plan` returned zero rows for a reason
|
|
25
|
+
* other than `release: skip`. Almost always indicates the cascade
|
|
26
|
+
* did not trigger (no committed file matched any package's globs
|
|
27
|
+
* since its last tag) or that the plan and publish jobs disagreed
|
|
28
|
+
* on what HEAD looked like. The reusable workflow's gate should
|
|
29
|
+
* prevent this from being reached; if it fires, the gate was
|
|
30
|
+
* bypassed or the engine is inconsistent. */
|
|
31
|
+
readonly PUBLISH_EMPTY_PLAN: "PIOT_PUBLISH_EMPTY_PLAN";
|
|
24
32
|
};
|
|
25
33
|
export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];
|
|
26
34
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../src/error-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,eAAO,MAAM,UAAU;IACrB;;;8CAG0C;;
|
|
1
|
+
{"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../src/error-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,eAAO,MAAM,UAAU;IACrB;;;8CAG0C;;IAE1C;;;;;;kDAM8C;;CAEtC,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,SAAS,EAG/C,CAAC"}
|
package/dist/error-codes.js
CHANGED
|
@@ -21,6 +21,14 @@ export const ErrorCodes = {
|
|
|
21
21
|
* upload moved to a caller-side job per the reusable-workflow
|
|
22
22
|
* TP constraint — see notes/audits/). */
|
|
23
23
|
AUTH_NO_TOKEN: 'PIOT_AUTH_NO_TOKEN',
|
|
24
|
+
/** `publish` was invoked but `plan` returned zero rows for a reason
|
|
25
|
+
* other than `release: skip`. Almost always indicates the cascade
|
|
26
|
+
* did not trigger (no committed file matched any package's globs
|
|
27
|
+
* since its last tag) or that the plan and publish jobs disagreed
|
|
28
|
+
* on what HEAD looked like. The reusable workflow's gate should
|
|
29
|
+
* prevent this from being reached; if it fires, the gate was
|
|
30
|
+
* bypassed or the engine is inconsistent. */
|
|
31
|
+
PUBLISH_EMPTY_PLAN: 'PIOT_PUBLISH_EMPTY_PLAN',
|
|
24
32
|
};
|
|
25
33
|
/**
|
|
26
34
|
* Iterable form of the codes. Walked by tests for uniqueness/format
|
|
@@ -28,5 +36,6 @@ export const ErrorCodes = {
|
|
|
28
36
|
*/
|
|
29
37
|
export const ALL_ERROR_CODES = [
|
|
30
38
|
ErrorCodes.AUTH_NO_TOKEN,
|
|
39
|
+
ErrorCodes.PUBLISH_EMPTY_PLAN,
|
|
31
40
|
];
|
|
32
41
|
//# sourceMappingURL=error-codes.js.map
|
package/dist/error-codes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../src/error-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB;;;8CAG0C;IAC1C,aAAa,EAAE,oBAAoB;
|
|
1
|
+
{"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../src/error-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB;;;8CAG0C;IAC1C,aAAa,EAAE,oBAAoB;IACnC;;;;;;kDAM8C;IAC9C,kBAAkB,EAAE,yBAAyB;CACrC,CAAC;AAIX;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAyB;IACnD,UAAU,CAAC,aAAa;IACxB,UAAU,CAAC,kBAAkB;CAC9B,CAAC"}
|
package/dist/publish.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAcH,OAAO,EAA6B,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAGzF,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;CACjD;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;CAC/E;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA6H1E"}
|
package/dist/publish.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
import { isAbsolute, join, resolve } from 'node:path';
|
|
19
19
|
import { loadConfig } from './config.js';
|
|
20
20
|
import { checkCompleteness } from './completeness.js';
|
|
21
|
+
import { ErrorCodes } from './error-codes.js';
|
|
21
22
|
import { createTag, headCommit, pushTag } from './git.js';
|
|
22
23
|
import { handlerFor as defaultHandlerFor } from './handlers/index.js';
|
|
23
24
|
import { createLogger } from './log.js';
|
|
@@ -44,11 +45,19 @@ export async function publish(opts) {
|
|
|
44
45
|
/* v8 ignore next -- tests always inject handlerFor */
|
|
45
46
|
const handlerFor = opts.handlerFor ?? defaultHandlerFor;
|
|
46
47
|
const log = createLogger();
|
|
47
|
-
// 1. Re-run plan.
|
|
48
|
+
// 1. Re-run plan. Invariant: if publish was invoked, something
|
|
49
|
+
// should publish. An empty matrix here means the workflow gate
|
|
50
|
+
// (which reads the plan job's matrix output) was bypassed or the
|
|
51
|
+
// plan and publish jobs disagreed on what HEAD looked like. Throw
|
|
52
|
+
// loudly with a fingerprintable code rather than exiting green-but-
|
|
53
|
+
// having-done-nothing.
|
|
48
54
|
const matrix = await plan({ cwd, configPath: cfgPath });
|
|
49
55
|
if (matrix.length === 0) {
|
|
50
|
-
|
|
51
|
-
|
|
56
|
+
throw new Error(`[${ErrorCodes.PUBLISH_EMPTY_PLAN}] publish was invoked but the plan is empty. ` +
|
|
57
|
+
`Skips belong at the workflow gate, not in the publish step. ` +
|
|
58
|
+
`Most likely cause: no committed file matched any package's globs since its ` +
|
|
59
|
+
`last tag. To opt out of releases for a commit, gate the workflow on the plan ` +
|
|
60
|
+
`job's matrix output and let it skip the publish job.`);
|
|
52
61
|
}
|
|
53
62
|
// Collapse matrix rows back into per-package entries. Multiple rows
|
|
54
63
|
// per package (one per target) share a single version.
|
package/dist/publish.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,IAAI,EAAkB,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,eAAe,EAA8C,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAc3C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAoB;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,uDAAuD;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,sEAAsE;IACtE,oEAAoE;IACpE,sEAAsE;IACtE,sEAAsE;IACtE,+DAA+D;IAC/D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,sDAAsD;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,iBAAiB,CAAC;IACxD,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAE3B,
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"}
|