@williamthorsen/nmr 0.50.0 → 0.50.1

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.
@@ -1,4 +1,26 @@
1
1
  [
2
+ {
3
+ "version": "0.50.1",
4
+ "date": "2026-10-22",
5
+ "sections": [
6
+ {
7
+ "title": "🐛 Bug fixes",
8
+ "audience": "all",
9
+ "items": [
10
+ {
11
+ "description": "Fixes the issue that the `self-hosted runner` checklist in the `nmr` readyup kit joined every readiness failure into one semicolon-separated line, which hid that a public repo rules out the runner whatever else holds; a public repo now reports its visibility alone, and a private repo lists each failure on its own line. (#1091)",
12
+ "hash": "615f6f30ff56d0ea777d47752013de0bc479368f",
13
+ "entry": 1
14
+ },
15
+ {
16
+ "description": "Fixes the issue that the checklist's missing-runner message stated a recent `williamthorsen/hq` allocation as the cause, when it is only a possible one. (#1091)",
17
+ "hash": "615f6f30ff56d0ea777d47752013de0bc479368f",
18
+ "entry": 2
19
+ }
20
+ ]
21
+ }
22
+ ]
23
+ },
2
24
  {
3
25
  "version": "0.50.0",
4
26
  "date": "2026-10-21",
@@ -8871,7 +8871,11 @@ async function describeRecommendationSkip(cwd = process.cwd(), readFacts) {
8871
8871
  if ("skip" in status) return status.skip;
8872
8872
  if (status.selection !== "unset") return `CI_RUNS_ON is already set to ${status.facts.ciRunsOn ?? ""}`;
8873
8873
  if (status.exempt !== void 0) return `the repo is exempt: ${status.exempt}`;
8874
- if (status.failures.length > 0) return `not ready: ${status.failures.join("; ")}`;
8874
+ if (!status.facts.isPrivate) return status.failures.join("\n");
8875
+ if (status.failures.length > 0) {
8876
+ return `not ready:
8877
+ ${status.failures.map((failure) => ` ${failure}`).join("\n")}`;
8878
+ }
8875
8879
  return false;
8876
8880
  }
8877
8881
  async function describeSelfHostedRunnerSkip(cwd = process.cwd(), readFacts) {
@@ -8879,15 +8883,15 @@ async function describeSelfHostedRunnerSkip(cwd = process.cwd(), readFacts) {
8879
8883
  return "skip" in status && status.skip;
8880
8884
  }
8881
8885
  function findSelfHostedRunnerFailures(facts, cwd) {
8882
- const failures = [];
8883
8886
  if (!facts.isPrivate) {
8884
- failures.push(
8885
- `${facts.nameWithOwner} is public: A self-hosted runner must never run code from a fork's pull request`
8886
- );
8887
+ return [
8888
+ `${facts.nameWithOwner} is public, so a self-hosted runner must not run its CI: A fork's pull request would run code on the runner`
8889
+ ];
8887
8890
  }
8891
+ const failures = [];
8888
8892
  if (facts.onlineSelfHostedRunners === 0) {
8889
8893
  failures.push(
8890
- `${facts.nameWithOwner} does not have an online runner labelled self-hosted. When williamthorsen/hq allocates the repo slots in apps/runners/config/repos.yaml, the runners have not registered yet`
8894
+ `${facts.nameWithOwner} does not have an online runner labelled self-hosted. If williamthorsen/hq has just allocated the repo's slots in apps/runners/config/repos.yaml, the runners may not have registered yet`
8891
8895
  );
8892
8896
  }
8893
8897
  const workflows = readWorkflows(cwd);
@@ -8962,7 +8966,7 @@ async function gatherSelfHostedRunnerStatus(cwd, readFacts) {
8962
8966
  try {
8963
8967
  exempt = (await loadRootConfig(cwd)).selfHostedRunner?.exempt;
8964
8968
  } catch (error) {
8965
- failures.push(`the nmr config cannot be loaded: ${describeError(error)}`);
8969
+ if (facts.isPrivate) failures.push(`the nmr config cannot be loaded: ${describeError(error)}`);
8966
8970
  }
8967
8971
  return {
8968
8972
  facts,
@@ -9184,7 +9188,7 @@ function hasSupportedStrictLintVersion() {
9184
9188
  });
9185
9189
  }
9186
9190
  function getMinVersion() {
9187
- const pickedFields = { "version": "0.50.0" };
9191
+ const pickedFields = { "version": "0.50.1" };
9188
9192
  if (typeof pickedFields["version"] !== "string") {
9189
9193
  throw new TypeError("nmr/package.json: 'version' must be a string");
9190
9194
  }
@@ -24,7 +24,7 @@
24
24
  "checklist": "nmr",
25
25
  "checks": [
26
26
  "@williamthorsen/nmr in devDependencies",
27
- "@williamthorsen/nmr >= 0.50.0",
27
+ "@williamthorsen/nmr >= 0.50.1",
28
28
  "pnpm-workspace.yaml exists",
29
29
  "catalogued dependencies use catalog:",
30
30
  "package.json has packageManager field",
@@ -176,7 +176,7 @@
176
176
  "path": "lib/root-scripts.ts"
177
177
  },
178
178
  {
179
- "hash": "3d661ab8",
179
+ "hash": "97f29052",
180
180
  "kind": "module",
181
181
  "path": "lib/self-hosted-runner.ts"
182
182
  },
@@ -201,7 +201,7 @@
201
201
  "path": "lib/workspace-build.ts"
202
202
  },
203
203
  {
204
- "hash": "4f47ba73",
204
+ "hash": "9dc20288",
205
205
  "kind": "inline",
206
206
  "path": "../package.json",
207
207
  "paths": [
@@ -319,7 +319,7 @@
319
319
  "readyupVersion": "0.42.0",
320
320
  "source": "kits/default.ts",
321
321
  "sourceHash": "9fd61bf4",
322
- "targetHash": "81b3206d"
322
+ "targetHash": "8ee3ff93"
323
323
  }
324
324
  ]
325
325
  }
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## 0.50.1 — 2026-10-22
6
+
7
+ ### 🐛 Bug fixes
8
+
9
+ - Fixes the issue that the `self-hosted runner` checklist in the `nmr` readyup kit joined every readiness failure into one semicolon-separated line, which hid that a public repo rules out the runner whatever else holds; a public repo now reports its visibility alone, and a private repo lists each failure on its own line. (#1091)
10
+ - Fixes the issue that the checklist's missing-runner message stated a recent `williamthorsen/hq` allocation as the cause, when it is only a possible one. (#1091)
11
+
5
12
  ## 0.50.0 — 2026-10-21
6
13
 
7
14
  ### 🎉 Features
package/README.md CHANGED
@@ -5,16 +5,12 @@
5
5
  Context-aware script runner for pnpm monorepos. Includes an `nmr` (node-monorepo run) binary that provides centralized, consistent script execution across workspace packages and the monorepo root.
6
6
 
7
7
  <!-- section:release-notes -->
8
- ## Release notes — v0.50.0 (2026-10-21)
9
-
10
- ### 🎉 Features
11
-
12
- - Makes `nmr` run a command on this machine, after printing `nmr: running <command> here rather than on <hosts>` and what `ssh` reported, when the user config's `when` sends the command to other hosts and `ssh` cannot connect to any of them; until now, the delegation failed with exit 255 and a line that named `~/.config/nmr/config.ts`. (#1090)
13
- - Makes `nmr` delegate to a host that `ssh` connected to, rather than to the first listed host, when several delegation hosts are configured and the lock probe finds every one of them neither free nor busy. (#1090)
8
+ ## Release notes — v0.50.1 (2026-10-22)
14
9
 
15
10
  ### 🐛 Bug fixes
16
11
 
17
- - Fixes the issue that delegation ignored the environment's `GIT_SSH_COMMAND`: `nmr` replaced it with plain `ssh` for the push and ran plain `ssh` for every other call to the host, which kept a machine that reaches its hosts through an ssh wrapper or proxy, such as the Claude Code sandbox, from delegating. (#1088)
12
+ - Fixes the issue that the `self-hosted runner` checklist in the `nmr` readyup kit joined every readiness failure into one semicolon-separated line, which hid that a public repo rules out the runner whatever else holds; a public repo now reports its visibility alone, and a private repo lists each failure on its own line. (#1091)
13
+ - Fixes the issue that the checklist's missing-runner message stated a recent `williamthorsen/hq` allocation as the cause, when it is only a possible one. (#1091)
18
14
  <!-- /section:release-notes -->
19
15
 
20
16
  ## Installation
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@williamthorsen/nmr",
3
- "version": "0.50.0",
3
+ "version": "0.50.1",
4
4
  "private": false,
5
5
  "description": "Context-aware script runner for pnpm monorepos",
6
6
  "keywords": [