@devrouter/cli 0.0.53 → 0.0.55

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/dist/devrouter.js CHANGED
@@ -2693,7 +2693,7 @@ function loadRepoConfig(repoPath) {
2693
2693
  const config = parseConfig(parsed ?? {}, configPath);
2694
2694
  const requiredVersion = config.devrouter?.version;
2695
2695
  if (requiredVersion && !hasWarnedVersionMismatch) {
2696
- const cliVersion = true ? "0.0.53" : "0.0.0-dev";
2696
+ const cliVersion = true ? "0.0.55" : "0.0.0-dev";
2697
2697
  if (cliVersion !== "0.0.0-dev" && compareSemver(requiredVersion, cliVersion) > 0) {
2698
2698
  hasWarnedVersionMismatch = true;
2699
2699
  process.stderr.write(
@@ -5746,25 +5746,40 @@ function assertManagedContainerConfigUnchanged(options) {
5746
5746
  const fileArgs = configFiles.flatMap((file) => ["-f", file]);
5747
5747
  const result = (() => {
5748
5748
  try {
5749
- return (0, import_node_child_process7.spawnSync)(
5749
+ const composeArgs = [
5750
+ "compose",
5751
+ "--project-name",
5752
+ composeProject,
5753
+ "--project-directory",
5754
+ workingDirectory
5755
+ ];
5756
+ const env = managedComposeEnvironment(options.workspace);
5757
+ const rendered = (0, import_node_child_process7.spawnSync)(
5750
5758
  "docker",
5751
- [
5752
- "compose",
5753
- "--project-name",
5754
- composeProject,
5755
- "--project-directory",
5756
- workingDirectory,
5757
- ...fileArgs,
5758
- "config",
5759
- "--hash",
5760
- service
5761
- ],
5759
+ [...composeArgs, ...fileArgs, "config", "--format", "json"],
5762
5760
  {
5763
5761
  cwd: workingDirectory,
5764
5762
  encoding: "utf-8",
5765
- env: managedComposeEnvironment(options.workspace),
5763
+ env,
5766
5764
  stdio: ["ignore", "pipe", "ignore"],
5767
- timeout: COMPOSE_HASH_TIMEOUT_MS
5765
+ timeout: COMPOSE_HASH_TIMEOUT_MS,
5766
+ maxBuffer: 1024 * 1024
5767
+ }
5768
+ );
5769
+ if (rendered.status !== 0 || rendered.error || !rendered.stdout?.trim()) {
5770
+ throw new Error("Compose configuration rendering failed.");
5771
+ }
5772
+ return (0, import_node_child_process7.spawnSync)(
5773
+ "docker",
5774
+ [...composeArgs, "-f", "-", "config", "--no-interpolate", "--hash", service],
5775
+ {
5776
+ cwd: workingDirectory,
5777
+ encoding: "utf-8",
5778
+ env,
5779
+ input: rendered.stdout,
5780
+ stdio: ["pipe", "pipe", "ignore"],
5781
+ timeout: COMPOSE_HASH_TIMEOUT_MS,
5782
+ maxBuffer: 1024 * 1024
5768
5783
  }
5769
5784
  );
5770
5785
  } catch {
@@ -8337,7 +8352,12 @@ function sameSet(left, right) {
8337
8352
  return JSON.stringify([...left].sort()) === JSON.stringify([...right].sort());
8338
8353
  }
8339
8354
  function containerIdentity(container) {
8340
- return JSON.stringify({ id: container.id, labels: container.labels, mounts: container.mounts });
8355
+ return JSON.stringify({
8356
+ id: container.id,
8357
+ labels: container.labels,
8358
+ // Docker does not preserve mount-array order between inspections.
8359
+ mounts: container.mounts.map((mount) => JSON.stringify(mount)).sort()
8360
+ });
8341
8361
  }
8342
8362
  function stopRetainedManagedDevsyWorkspace(options) {
8343
8363
  const { repoPath, devsyId } = options;
@@ -9585,7 +9605,7 @@ async function buildDoctorReport(options = {}) {
9585
9605
  const config = runtimeConfig.config;
9586
9606
  loadedConfig = config;
9587
9607
  loadedWorkspace = runtimeConfig.workspace;
9588
- const cliVersion = true ? "0.0.53" : "0.0.0-dev";
9608
+ const cliVersion = true ? "0.0.55" : "0.0.0-dev";
9589
9609
  const configVersion = config.devrouter?.version;
9590
9610
  if (configVersion && cliVersion !== "0.0.0-dev" && compareSemver(configVersion, cliVersion) > 0) {
9591
9611
  addCheck(checks, {
@@ -16858,7 +16878,7 @@ var init_version = __esm({
16858
16878
 
16859
16879
  // src/cli.ts
16860
16880
  var import_commander = require("commander");
16861
- var CLI_VERSION = true ? "0.0.53" : "0.0.0-dev";
16881
+ var CLI_VERSION = true ? "0.0.55" : "0.0.0-dev";
16862
16882
  var VERSION_FLAGS = /* @__PURE__ */ new Set(["-V", "--version"]);
16863
16883
  function withErrorHandling(action2) {
16864
16884
  return async (...args) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devrouter/cli",
3
- "version": "0.0.53",
3
+ "version": "0.0.55",
4
4
  "description": "Local dev routing CLI with shared Traefik reverse proxy",
5
5
  "author": "Roland Schlaefli",
6
6
  "homepage": "https://github.com/rschlaefli/devrouter#readme",
@@ -0,0 +1,26 @@
1
+ # Upgrade to devrouter 0.0.54
2
+
3
+ Retained configuration verification now resolves service `env_file` values before
4
+ computing Compose hashes. This corrects false drift with affected Compose
5
+ versions without relaxing ownership, file membership or container checks.
6
+
7
+ ## Task
8
+
9
+ Install the published `@devrouter/cli@0.0.54` package and update the consumer's
10
+ `devrouter.version` pin when adopting this release. No schema migration or
11
+ generated configuration rewrite is required.
12
+
13
+ ## Validation
14
+
15
+ For an approved exact runtime recovery, preserve the original Compose
16
+ interpolation settings and use canonical stop and guarded repair. Real
17
+ configuration changes and missing retained resources still block recovery.
18
+ Never persist or print a resolved Compose model: it may contain credentials.
19
+ Require complete retained-container shutdown, zero exact routes and separate
20
+ application readiness proof. Adapter side effects retain their own approval
21
+ boundaries; this release does not authorize cache deletion or data changes.
22
+
23
+ ## Report
24
+
25
+ Report installed/configured versions, exact checkout/profile, command outcome,
26
+ container and route state, application proof and remaining blockers.
@@ -0,0 +1,23 @@
1
+ # Upgrade to devrouter 0.0.55
2
+
3
+ Managed stop now compares retained mounts independently of the order returned
4
+ by Docker. Exact mount fields and all other retained-runtime guards remain
5
+ mandatory.
6
+
7
+ ## Task
8
+
9
+ Install the published patch and update the consumer devrouter.version pin when
10
+ adopting it. No schema migration or generated configuration rewrite is required.
11
+
12
+ ## Validation
13
+
14
+ With authorization for an exact runtime, run canonical stop and verify all
15
+ retained containers are stopped with zero exact routes. Preserve the original
16
+ Compose interpolation settings. Use guarded repair only for an eligible
17
+ retained degraded runtime and independently verify application readiness.
18
+ Do not bypass missing state, changed configuration or adapter side-effect gates.
19
+
20
+ ## Report
21
+
22
+ Report installed/configured versions, exact checkout/profile, producing command,
23
+ container/route state, application proof and remaining blockers.