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.
Files changed (150) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/MIGRATIONS.md +1311 -0
  3. package/README.md +373 -41
  4. package/action.yml +9 -0
  5. package/dist/action.d.ts.map +1 -1
  6. package/dist/action.js +28 -6
  7. package/dist/action.js.map +1 -1
  8. package/dist/cascade.js +14 -7
  9. package/dist/cascade.js.map +1 -1
  10. package/dist/check-crate-size.d.ts +26 -0
  11. package/dist/check-crate-size.d.ts.map +1 -0
  12. package/dist/check-crate-size.js +99 -0
  13. package/dist/check-crate-size.js.map +1 -0
  14. package/dist/check.d.ts.map +1 -1
  15. package/dist/check.js +116 -16
  16. package/dist/check.js.map +1 -1
  17. package/dist/cli.d.ts +17 -4
  18. package/dist/cli.d.ts.map +1 -1
  19. package/dist/cli.js +173 -22
  20. package/dist/cli.js.map +1 -1
  21. package/dist/completeness.js +6 -3
  22. package/dist/completeness.js.map +1 -1
  23. package/dist/config.d.ts +2 -0
  24. package/dist/config.d.ts.map +1 -1
  25. package/dist/config.js +20 -5
  26. package/dist/config.js.map +1 -1
  27. package/dist/ensure-tag.d.ts +17 -0
  28. package/dist/ensure-tag.d.ts.map +1 -0
  29. package/dist/ensure-tag.js +28 -0
  30. package/dist/ensure-tag.js.map +1 -0
  31. package/dist/env.js +6 -3
  32. package/dist/env.js.map +1 -1
  33. package/dist/error-codes.d.ts +89 -0
  34. package/dist/error-codes.d.ts.map +1 -1
  35. package/dist/error-codes.js +102 -0
  36. package/dist/error-codes.js.map +1 -1
  37. package/dist/git.d.ts +5 -0
  38. package/dist/git.d.ts.map +1 -1
  39. package/dist/git.js +19 -6
  40. package/dist/git.js.map +1 -1
  41. package/dist/glob.d.ts +9 -0
  42. package/dist/glob.d.ts.map +1 -1
  43. package/dist/glob.js +29 -1
  44. package/dist/glob.js.map +1 -1
  45. package/dist/handlers/crates.d.ts +15 -0
  46. package/dist/handlers/crates.d.ts.map +1 -1
  47. package/dist/handlers/crates.js +84 -9
  48. package/dist/handlers/crates.js.map +1 -1
  49. package/dist/handlers/npm-platform.d.ts +11 -0
  50. package/dist/handlers/npm-platform.d.ts.map +1 -1
  51. package/dist/handlers/npm-platform.js +91 -8
  52. package/dist/handlers/npm-platform.js.map +1 -1
  53. package/dist/handlers/npm.d.ts.map +1 -1
  54. package/dist/handlers/npm.js +59 -9
  55. package/dist/handlers/npm.js.map +1 -1
  56. package/dist/handlers/pypi.d.ts +0 -6
  57. package/dist/handlers/pypi.d.ts.map +1 -1
  58. package/dist/handlers/pypi.js +28 -10
  59. package/dist/handlers/pypi.js.map +1 -1
  60. package/dist/log.js +16 -8
  61. package/dist/log.js.map +1 -1
  62. package/dist/normalize-artifacts.js +8 -4
  63. package/dist/normalize-artifacts.js.map +1 -1
  64. package/dist/plan-skew.d.ts +14 -0
  65. package/dist/plan-skew.d.ts.map +1 -0
  66. package/dist/plan-skew.js +28 -0
  67. package/dist/plan-skew.js.map +1 -0
  68. package/dist/plan-status-types.d.ts +42 -0
  69. package/dist/plan-status-types.d.ts.map +1 -0
  70. package/dist/plan-status-types.js +10 -0
  71. package/dist/plan-status-types.js.map +1 -0
  72. package/dist/plan-status.d.ts +23 -0
  73. package/dist/plan-status.d.ts.map +1 -0
  74. package/dist/plan-status.js +66 -0
  75. package/dist/plan-status.js.map +1 -0
  76. package/dist/plan.d.ts +8 -0
  77. package/dist/plan.d.ts.map +1 -1
  78. package/dist/plan.js +125 -25
  79. package/dist/plan.js.map +1 -1
  80. package/dist/preflight.d.ts +79 -0
  81. package/dist/preflight.d.ts.map +1 -1
  82. package/dist/preflight.js +715 -33
  83. package/dist/preflight.js.map +1 -1
  84. package/dist/publish.d.ts +7 -0
  85. package/dist/publish.d.ts.map +1 -1
  86. package/dist/publish.js +49 -18
  87. package/dist/publish.js.map +1 -1
  88. package/dist/python-versions.d.ts +40 -0
  89. package/dist/python-versions.d.ts.map +1 -0
  90. package/dist/python-versions.js +142 -0
  91. package/dist/python-versions.js.map +1 -0
  92. package/dist/reconcile-types.d.ts +36 -0
  93. package/dist/reconcile-types.d.ts.map +1 -0
  94. package/dist/reconcile-types.js +9 -0
  95. package/dist/reconcile-types.js.map +1 -0
  96. package/dist/reconcile.d.ts +21 -0
  97. package/dist/reconcile.d.ts.map +1 -0
  98. package/dist/reconcile.js +54 -0
  99. package/dist/reconcile.js.map +1 -0
  100. package/dist/release-packages.d.ts +33 -0
  101. package/dist/release-packages.d.ts.map +1 -0
  102. package/dist/release-packages.js +74 -0
  103. package/dist/release-packages.js.map +1 -0
  104. package/dist/resolve-tag-commit.d.ts +22 -0
  105. package/dist/resolve-tag-commit.d.ts.map +1 -0
  106. package/dist/resolve-tag-commit.js +26 -0
  107. package/dist/resolve-tag-commit.js.map +1 -0
  108. package/dist/retry.js +14 -7
  109. package/dist/retry.js.map +1 -1
  110. package/dist/status-classify.d.ts +17 -0
  111. package/dist/status-classify.d.ts.map +1 -0
  112. package/dist/status-classify.js +37 -0
  113. package/dist/status-classify.js.map +1 -0
  114. package/dist/status-format.d.ts +9 -0
  115. package/dist/status-format.d.ts.map +1 -0
  116. package/dist/status-format.js +19 -0
  117. package/dist/status-format.js.map +1 -0
  118. package/dist/status-types.d.ts +31 -0
  119. package/dist/status-types.d.ts.map +1 -0
  120. package/dist/status-types.js +8 -0
  121. package/dist/status-types.js.map +1 -0
  122. package/dist/status.d.ts +28 -0
  123. package/dist/status.d.ts.map +1 -0
  124. package/dist/status.js +72 -0
  125. package/dist/status.js.map +1 -0
  126. package/dist/tag-template.js +2 -1
  127. package/dist/tag-template.js.map +1 -1
  128. package/dist/trailer.js +16 -9
  129. package/dist/trailer.js.map +1 -1
  130. package/dist/types.d.ts +11 -0
  131. package/dist/types.d.ts.map +1 -1
  132. package/dist/types.js +4 -2
  133. package/dist/types.js.map +1 -1
  134. package/dist/verbose.js +7 -4
  135. package/dist/verbose.js.map +1 -1
  136. package/dist/wheel-abi.d.ts +37 -0
  137. package/dist/wheel-abi.d.ts.map +1 -0
  138. package/dist/wheel-abi.js +118 -0
  139. package/dist/wheel-abi.js.map +1 -0
  140. package/dist/write-crate-version.d.ts +32 -0
  141. package/dist/write-crate-version.d.ts.map +1 -0
  142. package/dist/write-crate-version.js +52 -0
  143. package/dist/write-crate-version.js.map +1 -0
  144. package/dist/write-launcher.d.ts +82 -0
  145. package/dist/write-launcher.d.ts.map +1 -0
  146. package/dist/write-launcher.js +236 -0
  147. package/dist/write-launcher.js.map +1 -0
  148. package/dist/write-version.js +2 -1
  149. package/dist/write-version.js.map +1 -1
  150. package/package.json +4 -2
@@ -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;AAqJ/D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,eAAO,MAAM,IAAI,EAAE,OAKlB,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"}
@@ -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
- if (res.status === 404)
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
- ` - SETUPTOOLS_SCM_PRETEND_VERSION_FOR_${envSuffix}=${version} (hatch-vcs / setuptools-scm)`,
101
- ` - Update [package].version in Cargo.toml ${' '.repeat(Math.max(0, envSuffix.length - 12))} (maturin reading Cargo)`,
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
- * `SETUPTOOLS_SCM_PRETEND_VERSION_FOR_<SUFFIX>` name suffix derived from
156
- * a package name per PEP 503's canonical normalisation. Uppercase,
157
- * dashes + dots + underscores all collapse to a single underscore.
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
- export function scmEnvSuffix(pkgName) {
160
- return pkgName.replace(/[-._]+/g, '_').toUpperCase();
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":"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"}
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
- if (!SECRET_KEY.test(k))
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;YAAE,OAAO;QAC1C,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QACzE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;QAC1E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC;QACvD,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;QACrD,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;QACrD,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,MAAgB;IAC7B,OAAO,OAAO,CAAE,MAA8B,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,YAAY,CAAC,MAA+B;IACnD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACjC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC;IAClD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAClG,CAAC;AAED,SAAS,YAAY,CAAC,CAAU;IAC9B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,oFAAoF;IACpF,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACpF,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,2EAA2E;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,GAAG,mEAAmE,CAAC;AACvF,MAAM,cAAc,GAAG,CAAC,CAAC;AAmBzB,MAAM,UAAU,GAAG,IAAI,OAAO,EAAsB,CAAC;AAErD,SAAS,UAAU,CAAC,GAAc;IAChC,oEAAoE;IACpE,sEAAsE;IACtE,kEAAkE;IAClE,qEAAqE;IACrE,+CAA+C;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvB,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;IAEpC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IAErE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,+DAA+D;QAC/D,+DAA+D;QAC/D,SAAS;QACT,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,SAAS;QAClC,kEAAkE;QAClE,kEAAkE;QAClE,mEAAmE;QACnE,aAAa;QACb,IAAI,CAAC,CAAC,MAAM,GAAG,cAAc;YAAE,SAAS;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,6DAA6D;IAC7D,yDAAyD;IACzD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAY,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACvC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,MAAM,CACpB,CAAS,EACT,UAAgC,CAAC,OAAO,CAAC,GAAG,CAAC;IAE7C,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC/B,qEAAqE;YACrE,kEAAkE;YAClE,+DAA+D;YAC/D,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;yDAGyD;AACzD,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC"}
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
- if (!existsSync(artifactsRoot))
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;QAAE,OAAO;IAElC,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;QAAE,OAAO;IAClC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO;IAEvC,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,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"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,OAAO,EAA8B,KAAK,IAAI,EAAoB,MAAM,YAAY,CAAC;AAIrF,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;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAuC5D"}
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"}