putitoutthere 0.2.29 → 0.2.31
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 +41 -0
- package/MIGRATIONS.md +1311 -0
- package/README.md +373 -41
- package/action.yml +9 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +28 -6
- package/dist/action.js.map +1 -1
- package/dist/cascade.js +14 -7
- package/dist/cascade.js.map +1 -1
- package/dist/check-crate-size.d.ts +26 -0
- package/dist/check-crate-size.d.ts.map +1 -0
- package/dist/check-crate-size.js +99 -0
- package/dist/check-crate-size.js.map +1 -0
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +116 -16
- package/dist/check.js.map +1 -1
- package/dist/cli.d.ts +17 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +173 -22
- package/dist/cli.js.map +1 -1
- package/dist/completeness.js +6 -3
- package/dist/completeness.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +20 -5
- package/dist/config.js.map +1 -1
- package/dist/ensure-tag.d.ts +17 -0
- package/dist/ensure-tag.d.ts.map +1 -0
- package/dist/ensure-tag.js +28 -0
- package/dist/ensure-tag.js.map +1 -0
- package/dist/env.js +6 -3
- package/dist/env.js.map +1 -1
- package/dist/error-codes.d.ts +89 -0
- package/dist/error-codes.d.ts.map +1 -1
- package/dist/error-codes.js +102 -0
- package/dist/error-codes.js.map +1 -1
- package/dist/git.d.ts +5 -0
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +19 -6
- package/dist/git.js.map +1 -1
- package/dist/glob.d.ts +9 -0
- package/dist/glob.d.ts.map +1 -1
- package/dist/glob.js +29 -1
- package/dist/glob.js.map +1 -1
- package/dist/handlers/crates.d.ts +15 -0
- package/dist/handlers/crates.d.ts.map +1 -1
- package/dist/handlers/crates.js +84 -9
- package/dist/handlers/crates.js.map +1 -1
- package/dist/handlers/npm-platform.d.ts +11 -0
- package/dist/handlers/npm-platform.d.ts.map +1 -1
- package/dist/handlers/npm-platform.js +91 -8
- package/dist/handlers/npm-platform.js.map +1 -1
- package/dist/handlers/npm.d.ts.map +1 -1
- package/dist/handlers/npm.js +59 -9
- package/dist/handlers/npm.js.map +1 -1
- package/dist/handlers/pypi.d.ts +0 -6
- package/dist/handlers/pypi.d.ts.map +1 -1
- package/dist/handlers/pypi.js +28 -10
- package/dist/handlers/pypi.js.map +1 -1
- package/dist/log.js +16 -8
- package/dist/log.js.map +1 -1
- package/dist/normalize-artifacts.js +8 -4
- package/dist/normalize-artifacts.js.map +1 -1
- package/dist/plan-skew.d.ts +14 -0
- package/dist/plan-skew.d.ts.map +1 -0
- package/dist/plan-skew.js +28 -0
- package/dist/plan-skew.js.map +1 -0
- package/dist/plan-status-types.d.ts +42 -0
- package/dist/plan-status-types.d.ts.map +1 -0
- package/dist/plan-status-types.js +10 -0
- package/dist/plan-status-types.js.map +1 -0
- package/dist/plan-status.d.ts +23 -0
- package/dist/plan-status.d.ts.map +1 -0
- package/dist/plan-status.js +66 -0
- package/dist/plan-status.js.map +1 -0
- package/dist/plan.d.ts +8 -0
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +125 -25
- package/dist/plan.js.map +1 -1
- package/dist/preflight.d.ts +79 -0
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +715 -33
- package/dist/preflight.js.map +1 -1
- package/dist/publish.d.ts +7 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +49 -18
- package/dist/publish.js.map +1 -1
- package/dist/python-versions.d.ts +40 -0
- package/dist/python-versions.d.ts.map +1 -0
- package/dist/python-versions.js +142 -0
- package/dist/python-versions.js.map +1 -0
- package/dist/reconcile-types.d.ts +36 -0
- package/dist/reconcile-types.d.ts.map +1 -0
- package/dist/reconcile-types.js +9 -0
- package/dist/reconcile-types.js.map +1 -0
- package/dist/reconcile.d.ts +21 -0
- package/dist/reconcile.d.ts.map +1 -0
- package/dist/reconcile.js +54 -0
- package/dist/reconcile.js.map +1 -0
- package/dist/release-packages.d.ts +33 -0
- package/dist/release-packages.d.ts.map +1 -0
- package/dist/release-packages.js +74 -0
- package/dist/release-packages.js.map +1 -0
- package/dist/resolve-tag-commit.d.ts +22 -0
- package/dist/resolve-tag-commit.d.ts.map +1 -0
- package/dist/resolve-tag-commit.js +26 -0
- package/dist/resolve-tag-commit.js.map +1 -0
- package/dist/retry.js +14 -7
- package/dist/retry.js.map +1 -1
- package/dist/status-classify.d.ts +17 -0
- package/dist/status-classify.d.ts.map +1 -0
- package/dist/status-classify.js +37 -0
- package/dist/status-classify.js.map +1 -0
- package/dist/status-format.d.ts +9 -0
- package/dist/status-format.d.ts.map +1 -0
- package/dist/status-format.js +19 -0
- package/dist/status-format.js.map +1 -0
- package/dist/status-types.d.ts +31 -0
- package/dist/status-types.d.ts.map +1 -0
- package/dist/status-types.js +8 -0
- package/dist/status-types.js.map +1 -0
- package/dist/status.d.ts +28 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +72 -0
- package/dist/status.js.map +1 -0
- package/dist/tag-template.js +2 -1
- package/dist/tag-template.js.map +1 -1
- package/dist/trailer.js +16 -9
- package/dist/trailer.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -2
- package/dist/types.js.map +1 -1
- package/dist/verbose.js +7 -4
- package/dist/verbose.js.map +1 -1
- package/dist/wheel-abi.d.ts +37 -0
- package/dist/wheel-abi.d.ts.map +1 -0
- package/dist/wheel-abi.js +118 -0
- package/dist/wheel-abi.js.map +1 -0
- package/dist/write-crate-version.d.ts +32 -0
- package/dist/write-crate-version.d.ts.map +1 -0
- package/dist/write-crate-version.js +52 -0
- package/dist/write-crate-version.js.map +1 -0
- package/dist/write-launcher.d.ts +82 -0
- package/dist/write-launcher.d.ts.map +1 -0
- package/dist/write-launcher.js +236 -0
- package/dist/write-launcher.js.map +1 -0
- package/dist/write-version.js +2 -1
- package/dist/write-version.js.map +1 -1
- package/package.json +4 -2
package/dist/handlers/pypi.d.ts
CHANGED
|
@@ -35,11 +35,5 @@
|
|
|
35
35
|
* Issue #17. Plan: §6.4, §12.2, §12.3, §13.1, §14.5, §16.1.
|
|
36
36
|
*/
|
|
37
37
|
import type { Handler } from '../types.js';
|
|
38
|
-
/**
|
|
39
|
-
* `SETUPTOOLS_SCM_PRETEND_VERSION_FOR_<SUFFIX>` name suffix derived from
|
|
40
|
-
* a package name per PEP 503's canonical normalisation. Uppercase,
|
|
41
|
-
* dashes + dots + underscores all collapse to a single underscore.
|
|
42
|
-
*/
|
|
43
|
-
export declare function scmEnvSuffix(pkgName: string): string;
|
|
44
38
|
export declare const pypi: Handler;
|
|
45
39
|
//# sourceMappingURL=pypi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pypi.d.ts","sourceRoot":"","sources":["../../src/handlers/pypi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAQH,OAAO,KAAK,EAAO,OAAO,EAAiB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"pypi.d.ts","sourceRoot":"","sources":["../../src/handlers/pypi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAQH,OAAO,KAAK,EAAO,OAAO,EAAiB,MAAM,aAAa,CAAC;AA8K/D,eAAO,MAAM,IAAI,EAAE,OAMlB,CAAC"}
|
package/dist/handlers/pypi.js
CHANGED
|
@@ -49,10 +49,12 @@ async function isPublishedImpl(pkg, version, _ctx) {
|
|
|
49
49
|
method: 'GET',
|
|
50
50
|
headers: { 'user-agent': USER_AGENT },
|
|
51
51
|
});
|
|
52
|
-
if (res.status === 200)
|
|
52
|
+
if (res.status === 200) {
|
|
53
53
|
return true;
|
|
54
|
-
|
|
54
|
+
}
|
|
55
|
+
if (res.status === 404) {
|
|
55
56
|
return false;
|
|
57
|
+
}
|
|
56
58
|
if (res.status >= 500) {
|
|
57
59
|
throw new TransientError(`pypi.org GET ${url} returned ${res.status}`);
|
|
58
60
|
}
|
|
@@ -93,12 +95,15 @@ function writeVersionImpl(pkg, version, ctx) {
|
|
|
93
95
|
// build` / `maturin build` runs. Per design-commitment #1 (no
|
|
94
96
|
// version computation), we surface guidance and exit.
|
|
95
97
|
const who = pkg.name ? `pypi: ${pkg.name}` : 'pypi';
|
|
96
|
-
const envSuffix = pkg.name ? scmEnvSuffix(pkg.name) : '<PKG>';
|
|
97
98
|
ctx.log.info([
|
|
98
99
|
`${who}: detected dynamic version; nothing to rewrite in pyproject.toml.`,
|
|
99
100
|
` Planned version: ${version}. Pass it to the build backend via one of:`,
|
|
100
|
-
` -
|
|
101
|
-
|
|
101
|
+
` - SETUPTOOLS_SCM_PRETEND_VERSION=${version} (hatch-vcs / setuptools-scm)`,
|
|
102
|
+
// Per-package `_FOR_<SUFFIX>` variants exist in setuptools-scm but
|
|
103
|
+
// are silently ignored by hatch-vcs; only the global env var works
|
|
104
|
+
// across both backends. Match what the reusable workflow actually
|
|
105
|
+
// sets in `_matrix.yml`. See README → "Python version source".
|
|
106
|
+
` - Update [package].version in Cargo.toml (maturin reading Cargo)`,
|
|
102
107
|
` Set the env var on the build job, before \`python -m build\` / \`maturin build\` runs.`,
|
|
103
108
|
` See ${DYNAMIC_VERSION_DOC_POINTER}`,
|
|
104
109
|
].join('\n'));
|
|
@@ -152,16 +157,29 @@ function projectDynamicIncludesVersion(project) {
|
|
|
152
157
|
return Array.isArray(dynamic) && dynamic.includes('version');
|
|
153
158
|
}
|
|
154
159
|
/**
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
160
|
+
* Latest published version of the project, or null when it has never
|
|
161
|
+
* been published (404). GET /pypi/{name}/json → `info.version`. Reuses
|
|
162
|
+
* `pypiNameFor` so this read resolves the PyPI name exactly as
|
|
163
|
+
* `isPublished` / `publish` do. Any non-200/404 is surfaced as a
|
|
164
|
+
* TransientError; the read-only caller renders that as "unreachable".
|
|
158
165
|
*/
|
|
159
|
-
|
|
160
|
-
|
|
166
|
+
async function latestVersionImpl(pkg, _ctx) {
|
|
167
|
+
const name = pypiNameFor(pkg);
|
|
168
|
+
const url = `${REGISTRY}/pypi/${encodeURIComponent(name)}/json`;
|
|
169
|
+
const res = await fetch(url, { method: 'GET', headers: { 'user-agent': USER_AGENT } });
|
|
170
|
+
if (res.status === 200) {
|
|
171
|
+
const body = (await res.json());
|
|
172
|
+
return body.info?.version ?? null;
|
|
173
|
+
}
|
|
174
|
+
if (res.status === 404) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
throw new TransientError(`pypi.org GET ${url} returned ${res.status}`);
|
|
161
178
|
}
|
|
162
179
|
export const pypi = {
|
|
163
180
|
kind: 'pypi',
|
|
164
181
|
isPublished: isPublishedImpl,
|
|
182
|
+
latestVersion: latestVersionImpl,
|
|
165
183
|
writeVersion: writeVersionImpl,
|
|
166
184
|
publish: publishImpl,
|
|
167
185
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pypi.js","sourceRoot":"","sources":["../../src/handlers/pypi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AACpC,MAAM,2BAA2B,GAC/B,sEAAsE,CAAC;AAEzE,KAAK,UAAU,eAAe,CAC5B,GAAoC,EACpC,OAAe,EACf,IAAS;IAET,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,GAAG,QAAQ,SAAS,kBAAkB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC;IAC/F,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE;KACtC,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;
|
|
1
|
+
{"version":3,"file":"pypi.js","sourceRoot":"","sources":["../../src/handlers/pypi.ts"],"names":[],"mappings":"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"}
|
package/dist/log.js
CHANGED
|
@@ -52,8 +52,9 @@ export function createLogger(opts = {}) {
|
|
|
52
52
|
...(opts.envSources ?? []),
|
|
53
53
|
];
|
|
54
54
|
const emit = (level, msg, fields) => {
|
|
55
|
-
if (LEVEL_ORDER[level] < minLevel)
|
|
55
|
+
if (LEVEL_ORDER[level] < minLevel) {
|
|
56
56
|
return;
|
|
57
|
+
}
|
|
57
58
|
const record = { level, time: new Date().toISOString(), msg, ...fields };
|
|
58
59
|
const raw = pretty ? formatPretty(record) : `${JSON.stringify(record)}\n`;
|
|
59
60
|
stream.write(redact(raw, sources));
|
|
@@ -77,11 +78,13 @@ function formatPretty(record) {
|
|
|
77
78
|
return pairs.length > 0 ? `${prefix} ${String(msg)} ${pairs}\n` : `${prefix} ${String(msg)}\n`;
|
|
78
79
|
}
|
|
79
80
|
function formatScalar(v) {
|
|
80
|
-
if (typeof v === 'string')
|
|
81
|
+
if (typeof v === 'string') {
|
|
81
82
|
return v;
|
|
83
|
+
}
|
|
82
84
|
/* v8 ignore next -- null/boolean primitive branches not all hit by current tests */
|
|
83
|
-
if (typeof v === 'number' || typeof v === 'boolean' || v === null)
|
|
85
|
+
if (typeof v === 'number' || typeof v === 'boolean' || v === null) {
|
|
84
86
|
return String(v);
|
|
87
|
+
}
|
|
85
88
|
return JSON.stringify(v);
|
|
86
89
|
}
|
|
87
90
|
/* ----------------------------- redaction ----------------------------- */
|
|
@@ -128,24 +131,28 @@ function scanSource(src) {
|
|
|
128
131
|
}
|
|
129
132
|
const sig = `${keys.length}:${acc}`;
|
|
130
133
|
const cached = SCAN_CACHE.get(src);
|
|
131
|
-
if (cached !== undefined && cached.sig === sig)
|
|
134
|
+
if (cached !== undefined && cached.sig === sig) {
|
|
132
135
|
return cached.values;
|
|
136
|
+
}
|
|
133
137
|
const values = [];
|
|
134
138
|
for (const k of keys) {
|
|
135
139
|
const v = src[k];
|
|
136
140
|
// `undefined` is rare (read-after-delete race in tests). Treat
|
|
137
141
|
// as absent; skip without a dedicated branch so coverage stays
|
|
138
142
|
// tight.
|
|
139
|
-
if (!v)
|
|
143
|
+
if (!v) {
|
|
140
144
|
continue;
|
|
141
|
-
|
|
145
|
+
}
|
|
146
|
+
if (!SECRET_KEY.test(k)) {
|
|
142
147
|
continue;
|
|
148
|
+
}
|
|
143
149
|
// #137 length floor. Short values mangle every matching character
|
|
144
150
|
// in unrelated log text. Real tokens clear 8 easily; short values
|
|
145
151
|
// that happen to share a name shape with a credential aren't worth
|
|
146
152
|
// defending.
|
|
147
|
-
if (v.length < MIN_OPAQUE_LEN)
|
|
153
|
+
if (v.length < MIN_OPAQUE_LEN) {
|
|
148
154
|
continue;
|
|
155
|
+
}
|
|
149
156
|
values.push(v);
|
|
150
157
|
}
|
|
151
158
|
// Longest-first: redacting a substring first would leave the
|
|
@@ -169,8 +176,9 @@ export function redact(s, sources = [process.env]) {
|
|
|
169
176
|
let out = s;
|
|
170
177
|
for (const src of sources) {
|
|
171
178
|
for (const v of scanSource(src)) {
|
|
172
|
-
if (!out.includes(v))
|
|
179
|
+
if (!out.includes(v)) {
|
|
173
180
|
continue;
|
|
181
|
+
}
|
|
174
182
|
// String.replaceAll expects a literal or a RegExp; use split/join to
|
|
175
183
|
// avoid regex escaping every secret value. Repeats across sources
|
|
176
184
|
// are a no-op (the value's already gone after the first pass).
|
package/dist/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC,MAAM,WAAW,GAA0B;IACzC,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;CACV,CAAC;AAiBF,MAAM,UAAU,YAAY,CAAC,OAAsB,EAAE;IACnD,+DAA+D;IAC/D,kDAAkD;IAClD,4DAA4D;IAC5D,MAAM,MAAM,GAAa,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;IACnD,MAAM,OAAO,GAAyB;QACpC,OAAO,CAAC,GAAG;QACX,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;KAC3B,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,KAAY,EAAE,GAAW,EAAE,MAA+B,EAAQ,EAAE;QAChF,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,QAAQ;
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,20 +35,24 @@ export function normalizeArtifactLayout(matrix, artifactsRoot) {
|
|
|
35
35
|
// vanilla npm packages the source on the publish runner. completeness
|
|
36
36
|
// already short-circuits both kinds — see `src/completeness.ts`.
|
|
37
37
|
const expected = matrix.filter((r) => r.kind !== 'crates' && !(r.kind === 'npm' && r.target === 'noarch'));
|
|
38
|
-
if (expected.length !== 1)
|
|
38
|
+
if (expected.length !== 1) {
|
|
39
39
|
return;
|
|
40
|
+
}
|
|
40
41
|
const row = expected[0];
|
|
41
42
|
const targetDir = join(artifactsRoot, row.artifact_name);
|
|
42
43
|
// Already in the documented layout — either a multi-artifact run
|
|
43
44
|
// earlier in the same job, or a developer running locally with the
|
|
44
45
|
// engine's contract honored. Either way, leave it alone.
|
|
45
|
-
if (existsSync(targetDir))
|
|
46
|
+
if (existsSync(targetDir)) {
|
|
46
47
|
return;
|
|
47
|
-
|
|
48
|
+
}
|
|
49
|
+
if (!existsSync(artifactsRoot)) {
|
|
48
50
|
return;
|
|
51
|
+
}
|
|
49
52
|
const dumped = readdirSync(artifactsRoot);
|
|
50
|
-
if (dumped.length === 0)
|
|
53
|
+
if (dumped.length === 0) {
|
|
51
54
|
return;
|
|
55
|
+
}
|
|
52
56
|
mkdirSync(targetDir, { recursive: true });
|
|
53
57
|
for (const entry of dumped) {
|
|
54
58
|
renameSync(join(artifactsRoot, entry), join(targetDir, entry));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-artifacts.js","sourceRoot":"","sources":["../src/normalize-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAA4B,EAC5B,aAAqB;IAErB,sEAAsE;IACtE,oEAAoE;IACpE,sEAAsE;IACtE,iEAAiE;IACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAC3E,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"normalize-artifacts.js","sourceRoot":"","sources":["../src/normalize-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAA4B,EAC5B,aAAqB;IAErB,sEAAsE;IACtE,oEAAoE;IACpE,sEAAsE;IACtE,iEAAiE;IACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAC3E,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAAA,OAAO;IAAA,CAAC;IAEpC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IACzD,iEAAiE;IACjE,mEAAmE;IACnE,yDAAyD;IACzD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAAA,OAAO;IAAA,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAAA,OAAO;IAAA,CAAC;IAEzC,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAAA,OAAO;IAAA,CAAC;IAElC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency-skew detection over a plan's per-package verdicts. A skew is
|
|
3
|
+
* the dangerous shape from the motivating incident (#403): a package
|
|
4
|
+
* would PUBLISH while a `depends_on` dependency it relies on SKIPs (is
|
|
5
|
+
* already published / stuck), so the dependent ships ahead of its
|
|
6
|
+
* dependency. Pure over {verdicts, packages} — the registry reads happen
|
|
7
|
+
* in `computePlanStatus`.
|
|
8
|
+
*
|
|
9
|
+
* Issue #412, #403 slice 4.
|
|
10
|
+
*/
|
|
11
|
+
import type { Package } from './config.js';
|
|
12
|
+
import type { PlanVerdict, SkewWarning } from './plan-status-types.js';
|
|
13
|
+
export declare function computeSkew(verdicts: readonly PlanVerdict[], byName: ReadonlyMap<string, Package>): SkewWarning[];
|
|
14
|
+
//# sourceMappingURL=plan-skew.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-skew.d.ts","sourceRoot":"","sources":["../src/plan-skew.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEvE,wBAAgB,WAAW,CACzB,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,WAAW,EAAE,CAcf"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency-skew detection over a plan's per-package verdicts. A skew is
|
|
3
|
+
* the dangerous shape from the motivating incident (#403): a package
|
|
4
|
+
* would PUBLISH while a `depends_on` dependency it relies on SKIPs (is
|
|
5
|
+
* already published / stuck), so the dependent ships ahead of its
|
|
6
|
+
* dependency. Pure over {verdicts, packages} — the registry reads happen
|
|
7
|
+
* in `computePlanStatus`.
|
|
8
|
+
*
|
|
9
|
+
* Issue #412, #403 slice 4.
|
|
10
|
+
*/
|
|
11
|
+
export function computeSkew(verdicts, byName) {
|
|
12
|
+
const verdictByName = new Map(verdicts.map((v) => [v.package, v.verdict]));
|
|
13
|
+
const out = [];
|
|
14
|
+
for (const v of verdicts) {
|
|
15
|
+
// Only a PUBLISHing dependent can skew; a skipped dependent is fine.
|
|
16
|
+
if (v.verdict !== 'publish') {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const deps = byName.get(v.package)?.depends_on ?? [];
|
|
20
|
+
for (const dep of deps) {
|
|
21
|
+
if (verdictByName.get(dep) === 'skip') {
|
|
22
|
+
out.push({ dependent: v.package, dependency: dep });
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=plan-skew.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-skew.js","sourceRoot":"","sources":["../src/plan-skew.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,UAAU,WAAW,CACzB,QAAgC,EAChC,MAAoC;IAEpC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,qEAAqE;QACrE,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAAA,SAAS;QAAA,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC;QACrD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE,CAAC;gBACtC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `plan` publish/skip + skew shared types. The verdict view layered over
|
|
3
|
+
* the build matrix: per package, would a release from this ref PUBLISH,
|
|
4
|
+
* SKIP (already on the registry), or is the registry UNKNOWN (unreachable
|
|
5
|
+
* — reported, never fatal); plus the dependency-skew pairs.
|
|
6
|
+
*
|
|
7
|
+
* Issue #412, #403 slice 4.
|
|
8
|
+
*/
|
|
9
|
+
import type { MatrixRow } from './plan.js';
|
|
10
|
+
import type { Kind } from './types.js';
|
|
11
|
+
export type Verdict = 'publish' | 'skip' | 'unknown';
|
|
12
|
+
export interface PlanVerdict {
|
|
13
|
+
/** piot package id. */
|
|
14
|
+
package: string;
|
|
15
|
+
kind: Kind;
|
|
16
|
+
/** The version this ref would release for the package. */
|
|
17
|
+
version: string;
|
|
18
|
+
/**
|
|
19
|
+
* `publish` — not yet on the registry; `skip` — already published;
|
|
20
|
+
* `unknown` — the registry couldn't be reached (the read degraded).
|
|
21
|
+
*/
|
|
22
|
+
verdict: Verdict;
|
|
23
|
+
}
|
|
24
|
+
/** A dependent would PUBLISH while a `depends_on` dependency SKIPs. */
|
|
25
|
+
export interface SkewWarning {
|
|
26
|
+
dependent: string;
|
|
27
|
+
dependency: string;
|
|
28
|
+
}
|
|
29
|
+
export interface PlanStatus {
|
|
30
|
+
/** The build matrix — byte-identical to bare `plan` output. */
|
|
31
|
+
matrix: MatrixRow[];
|
|
32
|
+
verdicts: PlanVerdict[];
|
|
33
|
+
skew: SkewWarning[];
|
|
34
|
+
}
|
|
35
|
+
export interface PlanStatusOptions {
|
|
36
|
+
cwd: string;
|
|
37
|
+
/** Defaults to `${cwd}/putitoutthere.toml`. */
|
|
38
|
+
configPath?: string;
|
|
39
|
+
/** Manual-release spec, forwarded to the real planner. */
|
|
40
|
+
releasePackages?: string | undefined;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=plan-status-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-status-types.d.ts","sourceRoot":"","sources":["../src/plan-status-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,+DAA+D;IAC/D,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `plan` publish/skip + skew shared types. The verdict view layered over
|
|
3
|
+
* the build matrix: per package, would a release from this ref PUBLISH,
|
|
4
|
+
* SKIP (already on the registry), or is the registry UNKNOWN (unreachable
|
|
5
|
+
* — reported, never fatal); plus the dependency-skew pairs.
|
|
6
|
+
*
|
|
7
|
+
* Issue #412, #403 slice 4.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=plan-status-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-status-types.js","sourceRoot":"","sources":["../src/plan-status-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `putitoutthere plan` publish/skip + skew view (#412, #403 slice 4).
|
|
3
|
+
*
|
|
4
|
+
* Layers a per-package verdict over the build matrix: for each planned
|
|
5
|
+
* package, would a release from this ref PUBLISH (version not yet on the
|
|
6
|
+
* registry), SKIP (already published), or is the registry UNKNOWN
|
|
7
|
+
* (unreachable). Plus dependency skew — a dependent that would PUBLISH
|
|
8
|
+
* while a `depends_on` dependency SKIPs.
|
|
9
|
+
*
|
|
10
|
+
* Thin reader, no parallel logic (design-commitments #7): the real
|
|
11
|
+
* planner (`plan` — cascade + version) gives the matrix, and the same
|
|
12
|
+
* `handler.isPublished` the publish path dispatches through gives the
|
|
13
|
+
* verdict. So the preview can't disagree with what a release would do.
|
|
14
|
+
* The read degrades, never aborts: an unreachable registry yields
|
|
15
|
+
* `unknown` and the matrix is still returned — same posture as `status`.
|
|
16
|
+
*
|
|
17
|
+
* The `matrix` field is byte-identical to bare `plan` output, so the
|
|
18
|
+
* reusable workflow's matrix contract is unchanged; verdicts are
|
|
19
|
+
* additive.
|
|
20
|
+
*/
|
|
21
|
+
import type { PlanStatus, PlanStatusOptions } from './plan-status-types.js';
|
|
22
|
+
export declare function computePlanStatus(opts: PlanStatusOptions): Promise<PlanStatus>;
|
|
23
|
+
//# sourceMappingURL=plan-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-status.d.ts","sourceRoot":"","sources":["../src/plan-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAUH,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAwB,MAAM,wBAAwB,CAAC;AAElG,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAsCpF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `putitoutthere plan` publish/skip + skew view (#412, #403 slice 4).
|
|
3
|
+
*
|
|
4
|
+
* Layers a per-package verdict over the build matrix: for each planned
|
|
5
|
+
* package, would a release from this ref PUBLISH (version not yet on the
|
|
6
|
+
* registry), SKIP (already published), or is the registry UNKNOWN
|
|
7
|
+
* (unreachable). Plus dependency skew — a dependent that would PUBLISH
|
|
8
|
+
* while a `depends_on` dependency SKIPs.
|
|
9
|
+
*
|
|
10
|
+
* Thin reader, no parallel logic (design-commitments #7): the real
|
|
11
|
+
* planner (`plan` — cascade + version) gives the matrix, and the same
|
|
12
|
+
* `handler.isPublished` the publish path dispatches through gives the
|
|
13
|
+
* verdict. So the preview can't disagree with what a release would do.
|
|
14
|
+
* The read degrades, never aborts: an unreachable registry yields
|
|
15
|
+
* `unknown` and the matrix is still returned — same posture as `status`.
|
|
16
|
+
*
|
|
17
|
+
* The `matrix` field is byte-identical to bare `plan` output, so the
|
|
18
|
+
* reusable workflow's matrix contract is unchanged; verdicts are
|
|
19
|
+
* additive.
|
|
20
|
+
*/
|
|
21
|
+
import { join } from 'node:path';
|
|
22
|
+
import { loadConfig } from './config.js';
|
|
23
|
+
import { handlerFor } from './handlers/index.js';
|
|
24
|
+
import { createLogger } from './log.js';
|
|
25
|
+
import { plan } from './plan.js';
|
|
26
|
+
import { computeSkew } from './plan-skew.js';
|
|
27
|
+
export async function computePlanStatus(opts) {
|
|
28
|
+
const cwd = opts.cwd;
|
|
29
|
+
const cfgPath = opts.configPath ?? join(cwd, 'putitoutthere.toml');
|
|
30
|
+
const config = loadConfig(cfgPath);
|
|
31
|
+
const ctx = {
|
|
32
|
+
cwd,
|
|
33
|
+
log: createLogger(),
|
|
34
|
+
env: process.env,
|
|
35
|
+
artifacts: { get: () => '', has: () => false },
|
|
36
|
+
};
|
|
37
|
+
const matrix = await plan({
|
|
38
|
+
cwd,
|
|
39
|
+
configPath: cfgPath,
|
|
40
|
+
releasePackages: opts.releasePackages,
|
|
41
|
+
});
|
|
42
|
+
// One verdict per planned package — rows share a single version. Keep
|
|
43
|
+
// first-seen matrix order so the output is stable.
|
|
44
|
+
const byName = new Map(config.packages.map((p) => [p.name, p]));
|
|
45
|
+
const verdicts = [];
|
|
46
|
+
const seen = new Set();
|
|
47
|
+
for (const row of matrix) {
|
|
48
|
+
if (seen.has(row.name)) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
seen.add(row.name);
|
|
52
|
+
const pkg = byName.get(row.name);
|
|
53
|
+
let verdict;
|
|
54
|
+
try {
|
|
55
|
+
verdict = (await handlerFor(pkg.kind).isPublished(pkg, row.version, ctx)) ? 'skip' : 'publish';
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// 5xx / network / timeout: a read-only preview reports `unknown`
|
|
59
|
+
// rather than aborting the plan.
|
|
60
|
+
verdict = 'unknown';
|
|
61
|
+
}
|
|
62
|
+
verdicts.push({ package: row.name, kind: row.kind, version: row.version, verdict });
|
|
63
|
+
}
|
|
64
|
+
return { matrix, verdicts, skew: computeSkew(verdicts, byName) };
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=plan-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-status.js","sourceRoot":"","sources":["../src/plan-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI7C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAuB;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,GAAG,GAAQ;QACf,GAAG;QACH,GAAG,EAAE,YAAY,EAAE;QACnB,GAAG,EAAE,OAAO,CAAC,GAA6B;QAC1C,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;KAC/C,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;QACxB,GAAG;QACH,UAAU,EAAE,OAAO;QACnB,eAAe,EAAE,IAAI,CAAC,eAAe;KACtC,CAAC,CAAC;IAEH,sEAAsE;IACtE,mDAAmD;IACnD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAkB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAA,SAAS;QAAA,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QAClC,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;YACjE,iCAAiC;YACjC,OAAO,GAAG,SAAS,CAAC;QACtB,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;AACnE,CAAC"}
|
package/dist/plan.d.ts
CHANGED
|
@@ -26,10 +26,18 @@ export interface MatrixRow {
|
|
|
26
26
|
features: string[];
|
|
27
27
|
no_default_features: boolean;
|
|
28
28
|
};
|
|
29
|
+
python_version?: string;
|
|
29
30
|
}
|
|
30
31
|
export interface PlanOptions {
|
|
31
32
|
cwd: string;
|
|
32
33
|
configPath?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Manual-release spec (the reusable workflow's `release_packages`
|
|
36
|
+
* input). When set, change detection is bypassed entirely and the
|
|
37
|
+
* matrix covers exactly the named packages — the re-release path for
|
|
38
|
+
* consumers with no new commits since their last tag.
|
|
39
|
+
*/
|
|
40
|
+
releasePackages?: string | undefined;
|
|
33
41
|
}
|
|
34
42
|
export declare function plan(opts: PlanOptions): Promise<MatrixRow[]>;
|
|
35
43
|
//# sourceMappingURL=plan.d.ts.map
|
package/dist/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,OAAO,EAA8B,KAAK,IAAI,EAAoB,MAAM,YAAY,CAAC;AAKrF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IAaf,UAAU,CAAC,EAAE;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,mBAAmB,EAAE,OAAO,CAAC;KAC9B,CAAC;IAQF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAgD5D"}
|