putitoutthere 0.3.18 → 0.3.20

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 (110) hide show
  1. package/dist/action.d.ts.map +1 -1
  2. package/dist/action.js +4 -0
  3. package/dist/action.js.map +1 -1
  4. package/dist/check/check-cargo-shape-findings.d.ts +4 -0
  5. package/dist/check/check-cargo-shape-findings.d.ts.map +1 -0
  6. package/dist/check/check-cargo-shape-findings.js +10 -0
  7. package/dist/check/check-cargo-shape-findings.js.map +1 -0
  8. package/dist/check/check-crates-package-metadata.d.ts +4 -0
  9. package/dist/check/check-crates-package-metadata.d.ts.map +1 -0
  10. package/dist/check/check-crates-package-metadata.js +11 -0
  11. package/dist/check/check-crates-package-metadata.js.map +1 -0
  12. package/dist/check/check-depends-on.d.ts +4 -0
  13. package/dist/check/check-depends-on.d.ts.map +1 -0
  14. package/dist/check/check-depends-on.js +13 -0
  15. package/dist/check/check-depends-on.js.map +1 -0
  16. package/dist/check/check-globs-match-tracked-files.d.ts +4 -0
  17. package/dist/check/check-globs-match-tracked-files.d.ts.map +1 -0
  18. package/dist/check/check-globs-match-tracked-files.js +18 -0
  19. package/dist/check/check-globs-match-tracked-files.js.map +1 -0
  20. package/dist/check/check-npm-repository.d.ts +4 -0
  21. package/dist/check/check-npm-repository.d.ts.map +1 -0
  22. package/dist/check/check-npm-repository.js +14 -0
  23. package/dist/check/check-npm-repository.js.map +1 -0
  24. package/dist/check/check-npm-target-triples.d.ts +4 -0
  25. package/dist/check/check-npm-target-triples.d.ts.map +1 -0
  26. package/dist/check/check-npm-target-triples.js +27 -0
  27. package/dist/check/check-npm-target-triples.js.map +1 -0
  28. package/dist/check/check-package-json-shape-findings.d.ts +4 -0
  29. package/dist/check/check-package-json-shape-findings.d.ts.map +1 -0
  30. package/dist/check/check-package-json-shape-findings.js +10 -0
  31. package/dist/check/check-package-json-shape-findings.js.map +1 -0
  32. package/dist/check/check-paths.d.ts +4 -0
  33. package/dist/check/check-paths.d.ts.map +1 -0
  34. package/dist/check/check-paths.js +13 -0
  35. package/dist/check/check-paths.js.map +1 -0
  36. package/dist/check/check-pypi-version.d.ts +4 -0
  37. package/dist/check/check-pypi-version.d.ts.map +1 -0
  38. package/dist/check/check-pypi-version.js +11 -0
  39. package/dist/check/check-pypi-version.js.map +1 -0
  40. package/dist/check/check-pyproject-and-bundle-cli.d.ts +4 -0
  41. package/dist/check/check-pyproject-and-bundle-cli.d.ts.map +1 -0
  42. package/dist/check/check-pyproject-and-bundle-cli.js +52 -0
  43. package/dist/check/check-pyproject-and-bundle-cli.js.map +1 -0
  44. package/dist/check/check-pyproject-shape-findings.d.ts +4 -0
  45. package/dist/check/check-pyproject-shape-findings.d.ts.map +1 -0
  46. package/dist/check/check-pyproject-shape-findings.js +10 -0
  47. package/dist/check/check-pyproject-shape-findings.js.map +1 -0
  48. package/dist/check/check-repo-url-match-findings.d.ts +4 -0
  49. package/dist/check/check-repo-url-match-findings.d.ts.map +1 -0
  50. package/dist/check/check-repo-url-match-findings.js +17 -0
  51. package/dist/check/check-repo-url-match-findings.js.map +1 -0
  52. package/dist/check/check-tag-template-collisions.d.ts +4 -0
  53. package/dist/check/check-tag-template-collisions.d.ts.map +1 -0
  54. package/dist/check/check-tag-template-collisions.js +22 -0
  55. package/dist/check/check-tag-template-collisions.js.map +1 -0
  56. package/dist/check/collect-bins-from-manifest.d.ts +2 -0
  57. package/dist/check/collect-bins-from-manifest.d.ts.map +1 -0
  58. package/dist/check/collect-bins-from-manifest.js +27 -0
  59. package/dist/check/collect-bins-from-manifest.js.map +1 -0
  60. package/dist/check/list-tracked-files.d.ts +2 -0
  61. package/dist/check/list-tracked-files.d.ts.map +1 -0
  62. package/dist/check/list-tracked-files.js +11 -0
  63. package/dist/check/list-tracked-files.js.map +1 -0
  64. package/dist/check/parse-cargo-toml.d.ts +2 -0
  65. package/dist/check/parse-cargo-toml.d.ts.map +1 -0
  66. package/dist/check/parse-cargo-toml.js +11 -0
  67. package/dist/check/parse-cargo-toml.js.map +1 -0
  68. package/dist/check/read-declared-bins.d.ts +2 -0
  69. package/dist/check/read-declared-bins.d.ts.map +1 -0
  70. package/dist/check/read-declared-bins.js +33 -0
  71. package/dist/check/read-declared-bins.js.map +1 -0
  72. package/dist/check/workspace-member-manifests.d.ts +2 -0
  73. package/dist/check/workspace-member-manifests.d.ts.map +1 -0
  74. package/dist/check/workspace-member-manifests.js +23 -0
  75. package/dist/check/workspace-member-manifests.js.map +1 -0
  76. package/dist/check.d.ts +6 -5
  77. package/dist/check.d.ts.map +1 -1
  78. package/dist/check.js +21 -307
  79. package/dist/check.js.map +1 -1
  80. package/dist/cli-bin.js +5 -2
  81. package/dist/cli-bin.js.map +1 -1
  82. package/dist/handlers/crates.d.ts +3 -16
  83. package/dist/handlers/crates.d.ts.map +1 -1
  84. package/dist/handlers/crates.js +16 -108
  85. package/dist/handlers/crates.js.map +1 -1
  86. package/dist/handlers/scan-dirty-outside-manifest.d.ts +21 -0
  87. package/dist/handlers/scan-dirty-outside-manifest.d.ts.map +1 -0
  88. package/dist/handlers/scan-dirty-outside-manifest.js +104 -0
  89. package/dist/handlers/scan-dirty-outside-manifest.js.map +1 -0
  90. package/dist/is-within-dir.d.ts +11 -0
  91. package/dist/is-within-dir.d.ts.map +1 -0
  92. package/dist/is-within-dir.js +13 -0
  93. package/dist/is-within-dir.js.map +1 -0
  94. package/dist/utils/bound-capture.d.ts +12 -0
  95. package/dist/utils/bound-capture.d.ts.map +1 -0
  96. package/dist/utils/bound-capture.js +22 -0
  97. package/dist/utils/bound-capture.js.map +1 -0
  98. package/dist/utils/exec-capture.d.ts +1 -0
  99. package/dist/utils/exec-capture.d.ts.map +1 -1
  100. package/dist/utils/exec-capture.js +18 -3
  101. package/dist/utils/exec-capture.js.map +1 -1
  102. package/dist/utils/flush-stdio.d.ts +16 -0
  103. package/dist/utils/flush-stdio.d.ts.map +1 -0
  104. package/dist/utils/flush-stdio.js +24 -0
  105. package/dist/utils/flush-stdio.js.map +1 -0
  106. package/dist/write-dependent-version-reqs.d.ts +50 -0
  107. package/dist/write-dependent-version-reqs.d.ts.map +1 -0
  108. package/dist/write-dependent-version-reqs.js +158 -0
  109. package/dist/write-dependent-version-reqs.js.map +1 -0
  110. package/package.json +1 -1
@@ -26,15 +26,9 @@
26
26
  * reads it off the ExecError and writes to a file with no line cut.
27
27
  *
28
28
  * --allow-dirty is required for our writeVersion-then-publish model
29
- * (#135), but cargo's default dirty-check is exactly the safety net
30
- * that catches shipping uncommitted stray edits. We restore a
31
- * narrower version of that check: before invoking cargo, scan the
32
- * working tree via `git status --porcelain` and refuse to publish
33
- * if anything is dirty outside the manifests writeVersion just wrote.
34
- * "Manifests", plural: an inheriting crate's version lives at the
35
- * workspace root, so the file the bump lands in can sit outside the
36
- * package directory entirely (#639). If we can't scan (e.g. no git
37
- * repo), we fall back to cargo's own --allow-dirty behavior.
29
+ * (#135), so `scanDirtyOutsideManifest` restores a narrowed version of
30
+ * cargo's own dirty-check before we invoke it. A null scan (e.g. no git
31
+ * repo) means we can't verify, and we fall back to cargo's --allow-dirty.
38
32
  *
39
33
  * OIDC: the crates-io-auth-action GHA step exchanges the OIDC JWT for
40
34
  * a short-lived CARGO_REGISTRY_TOKEN in the env. The handler doesn't
@@ -50,7 +44,8 @@ import { toError } from '../to-error.js';
50
44
  import { USER_AGENT } from '../version.js';
51
45
  import { execCapture } from '../utils/exec-capture.js';
52
46
  import { elideMiddle } from '../utils/elide-middle.js';
53
- import { repoRelativePaths } from '../repo-relative-paths.js';
47
+ import { scanDirtyOutsideManifest } from './scan-dirty-outside-manifest.js';
48
+ import { writeDependentVersionReqs } from '../write-dependent-version-reqs.js';
54
49
  import { writeResolvedCargoVersion } from '../write-resolved-cargo-version.js';
55
50
  import { ExecError } from '../utils/exec-error.js';
56
51
  import { matchFirstPublishTpRejection } from './match-first-publish-tp-rejection.js';
@@ -79,7 +74,7 @@ async function isPublishedImpl(pkg, version, _ctx) {
79
74
  // returns 200/404 for this endpoint, so anything else is a genuine fault.
80
75
  throw new Error(`crates.io GET ${url} returned ${res.status}`);
81
76
  }
82
- async function writeVersionImpl(pkg, version, _ctx) {
77
+ async function writeVersionImpl(pkg, version, ctx) {
83
78
  const cargoPath = join(pkg.path, 'Cargo.toml');
84
79
  let original;
85
80
  try {
@@ -102,12 +97,21 @@ async function writeVersionImpl(pkg, version, _ctx) {
102
97
  // Returns the manifests this write MANAGES, which is what the pre-publish
103
98
  // dirty-tree guard needs: for an inheriting crate that is a file outside
104
99
  // the package directory, and the guard would otherwise refuse on it.
100
+ let written;
105
101
  try {
106
- return await writeResolvedCargoVersion(pkg.path, original, version);
102
+ written = [...(await writeResolvedCargoVersion(pkg.path, original, version))];
107
103
  }
108
104
  catch (err) {
109
105
  throw toError(err);
110
106
  }
107
+ // #640: bumping this crate moves it out of range of every in-repo
108
+ // requirement that pointed at the old version, and cargo then refuses to
109
+ // resolve the workspace at all — a hard failure before anything compiles,
110
+ // hit by the next crates.io package in the cascade rather than by this
111
+ // one. The build-time writers learned this in #621; the publish path is
112
+ // the other half.
113
+ written.push(...(await writeDependentVersionReqs(pkg.path, version, ctx.siblingPackagePaths)));
114
+ return written;
111
115
  }
112
116
  async function publishImpl(pkg, version, ctx) {
113
117
  if (await isPublishedImpl(pkg, version, ctx)) {
@@ -259,102 +263,6 @@ function isRateLimited(stderr) {
259
263
  function crateNameFor(pkg) {
260
264
  return pkg.crate ?? pkg.name;
261
265
  }
262
- /**
263
- * Return paths of dirty working-tree files that are NOT the package's
264
- * managed Cargo.toml. Returns null if we can't determine (not inside
265
- * a git work tree, git command missing, etc) — callers treat null as
266
- * "can't verify, fall through to cargo's own --allow-dirty behavior."
267
- */
268
- export async function scanDirtyOutsideManifest(cwd, pkgPath, artifactsRoot, siblingPackagePaths, managedManifestPaths) {
269
- // Confirm we're inside a git work tree. If not, bail and let cargo's
270
- // own --allow-dirty handling take over.
271
- try {
272
- const topOut = (await execCapture('git', ['rev-parse', '--show-toplevel'], {
273
- cwd,
274
- })).stdout;
275
- if (!topOut.trim()) {
276
- return null;
277
- }
278
- }
279
- catch {
280
- return null;
281
- }
282
- // Ask git for the managed file's path relative to the repo root, so
283
- // we can string-compare against porcelain output directly without
284
- // fighting platform path conventions (macOS /private/ symlinks,
285
- // Windows 8.3 short names + case-insensitive FS).
286
- const managedRels = new Set();
287
- try {
288
- const rel = (await execCapture('git', ['ls-files', '--full-name', '--', 'Cargo.toml'], {
289
- cwd: pkgPath,
290
- })).stdout.trim();
291
- managedRels.add(rel);
292
- }
293
- catch {
294
- // Cargo.toml not tracked (e.g. first release on a fresh tree).
295
- // Fall through; an empty set means nothing is allowed dirty. (An
296
- // untracked manifest yields an empty `rel`, which porcelain can never
297
- // name either, so it is harmless in the set.)
298
- }
299
- // #639: whatever writeVersion actually wrote. For a crate that inherits
300
- // its version the bump lands in the workspace root's Cargo.toml, which is
301
- // outside the package directory and would otherwise read as a stray edit
302
- // and refuse the publish.
303
- for (const rel of repoRelativePaths(cwd, managedManifestPaths)) {
304
- managedRels.add(rel);
305
- }
306
- let porcelain;
307
- try {
308
- porcelain = (await execCapture('git', ['status', '--porcelain'], {
309
- cwd,
310
- })).stdout;
311
- }
312
- catch {
313
- return null;
314
- }
315
- // Reusable workflow's `actions/download-artifact@v4` step creates
316
- // `artifacts/` under cwd unconditionally — even for fixtures whose
317
- // packages don't upload anything (crates-only). That entry is engine-
318
- // managed scratch space, not a stray edit; skip it.
319
- let artifactsRel = '';
320
- if (artifactsRoot !== undefined && artifactsRoot !== '') {
321
- const r = relative(cwd, artifactsRoot);
322
- artifactsRel = r === '' ? '' : r.replace(/\\/g, '/');
323
- }
324
- // Sibling package directories — anything inside them is workflow
325
- // state from another handler (e.g. node_modules/ + package-lock.json
326
- // + dist/ from the npm `Build npm packages` step). cargo only packs
327
- // files inside its own package dir, so these can't end up in the
328
- // crate tarball regardless of whether they're "dirty" by git's view.
329
- const siblingRels = repoRelativePaths(cwd, siblingPackagePaths);
330
- const unexpected = [];
331
- for (const raw of porcelain.split('\n')) {
332
- if (raw.length < 4) {
333
- continue;
334
- }
335
- // Porcelain v1: "XY path" or "XY old -> new" for renames. Index 3+
336
- // is the path; strip quoting if git applied any.
337
- const rest = raw.slice(3);
338
- const path = rest.includes(' -> ') ? rest.split(' -> ').pop() : rest;
339
- const normalized = path.startsWith('"') && path.endsWith('"') ? path.slice(1, -1) : path;
340
- if (managedRels.has(normalized)) {
341
- continue;
342
- }
343
- if (artifactsRel !== '' &&
344
- (normalized === artifactsRel ||
345
- normalized === `${artifactsRel}/` ||
346
- normalized.startsWith(`${artifactsRel}/`))) {
347
- continue;
348
- }
349
- if (siblingRels.some((s) => normalized === s ||
350
- normalized === `${s}/` ||
351
- normalized.startsWith(`${s}/`))) {
352
- continue;
353
- }
354
- unexpected.push(normalized);
355
- }
356
- return unexpected;
357
- }
358
266
  export function relativeOrSelf(base, target) {
359
267
  const r = relative(base, target);
360
268
  // Normalise to forward slashes: `node:path`'s relative() yields backslashes
@@ -1 +1 @@
1
- {"version":3,"file":"crates.js","sourceRoot":"","sources":["../../src/handlers/crates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crates.js","sourceRoot":"","sources":["../../src/handlers/crates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The narrowed dirty-tree check the crates handler runs before cargo (#135).
3
+ *
4
+ * `--allow-dirty` is required for our writeVersion-then-publish model, but
5
+ * cargo's default dirty-check is exactly the safety net that catches shipping
6
+ * uncommitted stray edits. This restores a narrower version of it: scan the
7
+ * working tree via `git status --porcelain` and refuse to publish if anything
8
+ * is dirty outside the manifests writeVersion just wrote. "Manifests", plural,
9
+ * for two reasons: an inheriting crate's version lives at the workspace root
10
+ * (#639), and bumping a crate also moves the in-repo requirements that point at
11
+ * it (#640), which live in other crates' files. Either way the write can land
12
+ * outside the package directory entirely.
13
+ */
14
+ /**
15
+ * Return paths of dirty working-tree files that are NOT the package's
16
+ * managed Cargo.toml. Returns null if we can't determine (not inside
17
+ * a git work tree, git command missing, etc) — callers treat null as
18
+ * "can't verify, fall through to cargo's own --allow-dirty behavior."
19
+ */
20
+ export declare function scanDirtyOutsideManifest(cwd: string, pkgPath: string, artifactsRoot?: string, siblingPackagePaths?: readonly string[], managedManifestPaths?: readonly string[]): Promise<string[] | null>;
21
+ //# sourceMappingURL=scan-dirty-outside-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-dirty-outside-manifest.d.ts","sourceRoot":"","sources":["../../src/handlers/scan-dirty-outside-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,EACvC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,GACvC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAmE1B"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * The narrowed dirty-tree check the crates handler runs before cargo (#135).
3
+ *
4
+ * `--allow-dirty` is required for our writeVersion-then-publish model, but
5
+ * cargo's default dirty-check is exactly the safety net that catches shipping
6
+ * uncommitted stray edits. This restores a narrower version of it: scan the
7
+ * working tree via `git status --porcelain` and refuse to publish if anything
8
+ * is dirty outside the manifests writeVersion just wrote. "Manifests", plural,
9
+ * for two reasons: an inheriting crate's version lives at the workspace root
10
+ * (#639), and bumping a crate also moves the in-repo requirements that point at
11
+ * it (#640), which live in other crates' files. Either way the write can land
12
+ * outside the package directory entirely.
13
+ */
14
+ import { execCapture } from '../utils/exec-capture.js';
15
+ import { isWithinDir } from '../is-within-dir.js';
16
+ import { repoRelativePaths } from '../repo-relative-paths.js';
17
+ /**
18
+ * Return paths of dirty working-tree files that are NOT the package's
19
+ * managed Cargo.toml. Returns null if we can't determine (not inside
20
+ * a git work tree, git command missing, etc) — callers treat null as
21
+ * "can't verify, fall through to cargo's own --allow-dirty behavior."
22
+ */
23
+ export async function scanDirtyOutsideManifest(cwd, pkgPath, artifactsRoot, siblingPackagePaths, managedManifestPaths) {
24
+ // Confirm we're inside a git work tree. If not, bail and let cargo's
25
+ // own --allow-dirty handling take over.
26
+ try {
27
+ const topOut = (await execCapture('git', ['rev-parse', '--show-toplevel'], {
28
+ cwd,
29
+ })).stdout;
30
+ if (!topOut.trim()) {
31
+ return null;
32
+ }
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ // Ask git for the managed file's path relative to the repo root, so
38
+ // we can string-compare against porcelain output directly without
39
+ // fighting platform path conventions (macOS /private/ symlinks,
40
+ // Windows 8.3 short names + case-insensitive FS).
41
+ const managedRels = new Set();
42
+ try {
43
+ const rel = (await execCapture('git', ['ls-files', '--full-name', '--', 'Cargo.toml'], {
44
+ cwd: pkgPath,
45
+ })).stdout.trim();
46
+ managedRels.add(rel);
47
+ }
48
+ catch {
49
+ // Cargo.toml not tracked (e.g. first release on a fresh tree).
50
+ // Fall through; an empty set means nothing is allowed dirty. (An
51
+ // untracked manifest yields an empty `rel`, which porcelain can never
52
+ // name either, so it is harmless in the set.)
53
+ }
54
+ // #639: whatever writeVersion actually wrote. For a crate that inherits
55
+ // its version the bump lands in the workspace root's Cargo.toml, which is
56
+ // outside the package directory and would otherwise read as a stray edit
57
+ // and refuse the publish.
58
+ for (const rel of repoRelativePaths(cwd, managedManifestPaths)) {
59
+ managedRels.add(rel);
60
+ }
61
+ let porcelain;
62
+ try {
63
+ porcelain = (await execCapture('git', ['status', '--porcelain'], {
64
+ cwd,
65
+ })).stdout;
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ // Directories whose whole contents are workflow state rather than stray
71
+ // edits. `artifacts/` is engine-managed scratch the reusable workflow's
72
+ // download-artifact step creates under cwd unconditionally, even for
73
+ // crates-only fixtures that upload nothing (#244). A sibling package
74
+ // directory holds another handler's install output (node_modules/,
75
+ // package-lock.json, dist/ from the npm build step); cargo only packs
76
+ // files inside its own package dir, so neither can reach the tarball.
77
+ // Anything at or outside cwd drops out here, which is what retires the
78
+ // "artifacts root is the repo root" and "sibling is elsewhere" cases.
79
+ const skipRoots = [
80
+ ...repoRelativePaths(cwd, artifactsRoot === undefined ? undefined : [artifactsRoot]),
81
+ ...repoRelativePaths(cwd, siblingPackagePaths),
82
+ ];
83
+ const unexpected = [];
84
+ for (const raw of porcelain.split('\n')) {
85
+ if (raw.length < 4) {
86
+ continue;
87
+ }
88
+ // Porcelain v1: "XY path" or "XY old -> new" for renames. Index 3+ is
89
+ // the path, and splitting on the rename arrow leaves a non-rename row
90
+ // untouched. Strip quoting if git applied any.
91
+ const rest = raw.slice(3);
92
+ const path = rest.split(' -> ').pop();
93
+ const normalized = path.startsWith('"') && path.endsWith('"') ? path.slice(1, -1) : path;
94
+ if (managedRels.has(normalized)) {
95
+ continue;
96
+ }
97
+ if (skipRoots.some((root) => isWithinDir(normalized, root))) {
98
+ continue;
99
+ }
100
+ unexpected.push(normalized);
101
+ }
102
+ return unexpected;
103
+ }
104
+ //# sourceMappingURL=scan-dirty-outside-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-dirty-outside-manifest.js","sourceRoot":"","sources":["../../src/handlers/scan-dirty-outside-manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Directory containment over repo-relative, forward-slashed paths — the form
3
+ * `git status --porcelain` and `repoRelativePaths` both speak.
4
+ *
5
+ * Callers pass directories that came out of `repoRelativePaths`, which never
6
+ * yields an empty string, so there is no "empty means the whole tree" case to
7
+ * defend against here.
8
+ */
9
+ /** Whether `path` names `dir` itself or anything inside it. */
10
+ export declare function isWithinDir(path: string, dir: string): boolean;
11
+ //# sourceMappingURL=is-within-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-within-dir.d.ts","sourceRoot":"","sources":["../src/is-within-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9D"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Directory containment over repo-relative, forward-slashed paths — the form
3
+ * `git status --porcelain` and `repoRelativePaths` both speak.
4
+ *
5
+ * Callers pass directories that came out of `repoRelativePaths`, which never
6
+ * yields an empty string, so there is no "empty means the whole tree" case to
7
+ * defend against here.
8
+ */
9
+ /** Whether `path` names `dir` itself or anything inside it. */
10
+ export function isWithinDir(path, dir) {
11
+ return path === dir || path.startsWith(`${dir}/`);
12
+ }
13
+ //# sourceMappingURL=is-within-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-within-dir.js","sourceRoot":"","sources":["../src/is-within-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+DAA+D;AAC/D,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,GAAW;IACnD,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Bound a captured stream to `ceiling` characters, keeping both ends and
3
+ * saying how much went. A stream that just stops is indistinguishable from a
4
+ * tool that fell silent; diagnosis lives at the tail, and the failing phase is
5
+ * named at the head.
6
+ *
7
+ * The banner leads the result rather than sitting at the cut, so it survives
8
+ * the job-summary render's head-only truncation (`verbose.ts`): a reader who
9
+ * gets only the first slice still learns the stream was elided.
10
+ */
11
+ export declare function boundCapture(text: string, ceiling: number): string;
12
+ //# sourceMappingURL=bound-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bound-capture.d.ts","sourceRoot":"","sources":["../../src/utils/bound-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUlE"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Bound a captured stream to `ceiling` characters, keeping both ends and
3
+ * saying how much went. A stream that just stops is indistinguishable from a
4
+ * tool that fell silent; diagnosis lives at the tail, and the failing phase is
5
+ * named at the head.
6
+ *
7
+ * The banner leads the result rather than sitting at the cut, so it survives
8
+ * the job-summary render's head-only truncation (`verbose.ts`): a reader who
9
+ * gets only the first slice still learns the stream was elided.
10
+ */
11
+ export function boundCapture(text, ceiling) {
12
+ if (text.length <= ceiling) {
13
+ return text;
14
+ }
15
+ const head = Math.floor(ceiling / 2);
16
+ const tail = ceiling - head;
17
+ return [
18
+ `[putitoutthere] capture ceiling reached: dropped ${text.length - ceiling} bytes`,
19
+ `${text.slice(0, head)}${text.slice(text.length - tail)}`,
20
+ ].join('\n');
21
+ }
22
+ //# sourceMappingURL=bound-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bound-capture.js","sourceRoot":"","sources":["../../src/utils/bound-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAe;IACxD,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;IAC5B,OAAO;QACL,oDAAoD,IAAI,CAAC,MAAM,GAAG,OAAO,QAAQ;QACjF,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;KAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export interface ExecCaptureOptions {
2
2
  cwd?: string | undefined;
3
3
  env?: NodeJS.ProcessEnv | undefined;
4
+ /** Retained output per stream, in characters. Defaults to 8 MiB. */
4
5
  maxBuffer?: number | undefined;
5
6
  }
6
7
  export interface ExecResult {
@@ -1 +1 @@
1
- {"version":3,"file":"exec-capture.d.ts","sourceRoot":"","sources":["../../src/utils/exec-capture.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IAGjC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,UAAU,CAAC,CAiBrB"}
1
+ {"version":3,"file":"exec-capture.d.ts","sourceRoot":"","sources":["../../src/utils/exec-capture.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IAGjC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IACpC,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,UAAU,CAAC,CAgCrB"}
@@ -1,4 +1,5 @@
1
1
  import { execFile } from 'node:child_process';
2
+ import { boundCapture } from './bound-capture.js';
2
3
  import { ExecError } from './exec-error.js';
3
4
  /**
4
5
  * Async replacement for
@@ -10,15 +11,29 @@ import { ExecError } from './exec-error.js';
10
11
  * explicit and tests are simple.
11
12
  */
12
13
  export function execCapture(cmd, args, opts = {}) {
14
+ // Default of 8 MiB: a cold `cargo publish --verbose` of a mid-sized crate
15
+ // was measured at ~380KB of stderr (#651), so an ordinary build stays whole
16
+ // and the elision path stays theoretical.
17
+ const ceiling = opts.maxBuffer ?? 8 * 1024 * 1024;
13
18
  return new Promise((resolve, reject) => {
14
- execFile(cmd, [...args], { encoding: 'utf8', cwd: opts.cwd, env: opts.env, maxBuffer: opts.maxBuffer }, (err, stdout, stderr) => {
19
+ execFile(cmd, [...args],
20
+ // Infinity, not `ceiling`: execFile's overflow policy is to raise
21
+ // ERR_CHILD_PROCESS_STDIO_MAXBUFFER and SIGTERM the child, so a real
22
+ // number here kills a publish for being verbose and reports a failure
23
+ // the tool never produced (#664). Bound what we keep instead.
24
+ { encoding: 'utf8', cwd: opts.cwd, env: opts.env, maxBuffer: Infinity }, (err, stdout, stderr) => {
25
+ const out = boundCapture(stdout, ceiling);
26
+ const errOut = boundCapture(stderr, ceiling);
15
27
  if (err) {
16
28
  const code = err.code;
17
29
  const status = typeof code === 'number' ? code : null;
18
- reject(new ExecError(err.message, stdout, stderr, status, { cause: err, command: [cmd, ...args] }));
30
+ reject(new ExecError(boundCapture(err.message, ceiling), out, errOut, status, {
31
+ cause: err,
32
+ command: [cmd, ...args],
33
+ }));
19
34
  return;
20
35
  }
21
- resolve({ stdout, stderr });
36
+ resolve({ stdout: out, stderr: errOut });
22
37
  });
23
38
  });
24
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"exec-capture.js","sourceRoot":"","sources":["../../src/utils/exec-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAe5C;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,GAAW,EACX,IAAuB,EACvB,OAA2B,EAAE;IAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CACN,GAAG,EACH,CAAC,GAAG,IAAI,CAAC,EACT,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAC7E,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACtB,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,IAAI,GAAa,GAA0B,CAAC,IAAI,CAAC;gBACvD,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtD,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpG,OAAO;YACT,CAAC;YACD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9B,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"exec-capture.js","sourceRoot":"","sources":["../../src/utils/exec-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAgB5C;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,GAAW,EACX,IAAuB,EACvB,OAA2B,EAAE;IAE7B,0EAA0E;IAC1E,4EAA4E;IAC5E,0CAA0C;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IAClD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CACN,GAAG,EACH,CAAC,GAAG,IAAI,CAAC;QACT,kEAAkE;QAClE,qEAAqE;QACrE,sEAAsE;QACtE,8DAA8D;QAC9D,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,EACvE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACtB,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,IAAI,GAAa,GAA0B,CAAC,IAAI,CAAC;gBACvD,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtD,MAAM,CACJ,IAAI,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;oBACrE,KAAK,EAAE,GAAG;oBACV,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;iBACxB,CAAC,CACH,CAAC;gBACF,OAAO;YACT,CAAC;YACD,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3C,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Drain stdout and stderr so a following `process.exit` cannot truncate them.
3
+ *
4
+ * Writes to a pipe are asynchronous and `process.exit` drops whatever is still
5
+ * queued, so a multi-megabyte failure dump reaches the runner cut off around
6
+ * 146KB — losing the tail, which is exactly where the failing tool prints its
7
+ * error (#664). Assigning `process.exitCode` would also flush, but then exit
8
+ * waits on every lingering handle (undici keeps sockets pooled after `fetch`),
9
+ * so drain explicitly and keep the hard exit.
10
+ *
11
+ * The zero-length write is a position marker, not output: stream writes
12
+ * complete in order, so its callback fires only once everything queued ahead
13
+ * of it has reached the fd.
14
+ */
15
+ export declare function flushStdio(): Promise<void>;
16
+ //# sourceMappingURL=flush-stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flush-stdio.d.ts","sourceRoot":"","sources":["../../src/utils/flush-stdio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAQhD"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Drain stdout and stderr so a following `process.exit` cannot truncate them.
3
+ *
4
+ * Writes to a pipe are asynchronous and `process.exit` drops whatever is still
5
+ * queued, so a multi-megabyte failure dump reaches the runner cut off around
6
+ * 146KB — losing the tail, which is exactly where the failing tool prints its
7
+ * error (#664). Assigning `process.exitCode` would also flush, but then exit
8
+ * waits on every lingering handle (undici keeps sockets pooled after `fetch`),
9
+ * so drain explicitly and keep the hard exit.
10
+ *
11
+ * The zero-length write is a position marker, not output: stream writes
12
+ * complete in order, so its callback fires only once everything queued ahead
13
+ * of it has reached the fd.
14
+ */
15
+ export async function flushStdio() {
16
+ for (const stream of [process.stdout, process.stderr]) {
17
+ await new Promise((resolve) => {
18
+ stream.write('', () => {
19
+ resolve();
20
+ });
21
+ });
22
+ }
23
+ }
24
+ //# sourceMappingURL=flush-stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flush-stdio.js","sourceRoot":"","sources":["../../src/utils/flush-stdio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,KAAK,MAAM,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE;gBACpB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Move the in-repo version requirements that point at a crate whose version
3
+ * just changed. #640.
4
+ *
5
+ * #621 taught the *build*-time writers this, for the crates an artifact
6
+ * embeds. The *publish* path never learned it: the crates handler bumps
7
+ * exactly one manifest, the crate's own. For two crates.io packages in one
8
+ * repo where A path-deps B, releasing B moves it past A's requirement and
9
+ * nothing updates A:
10
+ *
11
+ * error: failed to select a version for the requirement `expcore = "^0.2"`
12
+ * candidate versions found which didn't match: 0.4.2
13
+ * location searched: …/packages/core
14
+ *
15
+ * A hard failure (exit 101) before anything compiles or packages, and an
16
+ * intermittent one — a repo on a patch cadence stays green until the first
17
+ * bump that leaves the declared range. `location searched` naming the local
18
+ * path is also why registry state cannot rescue it: for a `path` + `version`
19
+ * dependency cargo checks the requirement against the path crate's on-disk
20
+ * manifest.
21
+ *
22
+ * A `version` key alongside `path` is *mandatory* for any crate that also
23
+ * publishes to crates.io, so the shape that breaks is the shape such a repo
24
+ * is required to have.
25
+ *
26
+ * This is the inverse walk of `write-embedded-crate-versions.ts`: that one
27
+ * walks *out* from a crate to what it embeds, this one looks *in* at what
28
+ * points back. It rewrites requirements only; no crate's version is bumped
29
+ * here, because at publish time each package owns its own planned version
30
+ * and stamping a neighbour's would publish a version nobody planned.
31
+ *
32
+ * Like #621's rewrites these are ephemeral — the publish job runs off a
33
+ * fresh checkout and nothing is committed — but unlike #621's they happen in
34
+ * the same job as `cargo publish`, so the pre-publish dirty-tree check has
35
+ * to be told which manifests they touched.
36
+ */
37
+ /**
38
+ * Rewrite every in-repo `version = "…"` requirement that points at the crate
39
+ * at `crateDir` to `version`. Returns the absolute paths modified.
40
+ *
41
+ * `siblingDirs` are the other declared packages' directories — they may sit
42
+ * outside any shared cargo workspace, so they are scanned in addition to the
43
+ * workspace's own members rather than instead of them.
44
+ *
45
+ * Only entries that resolve to `crateDir` move. A registry dependency, or a
46
+ * path dependency pointing anywhere else, keeps its requirement: pinning
47
+ * pyo3 to this release's version would name a pyo3 that does not exist.
48
+ */
49
+ export declare function writeDependentVersionReqs(crateDir: string, version: string, siblingDirs?: readonly string[]): Promise<string[]>;
50
+ //# sourceMappingURL=write-dependent-version-reqs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-dependent-version-reqs.d.ts","sourceRoot":"","sources":["../src/write-dependent-version-reqs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAYH;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC,CAoCnB"}