@zackees/soldr 0.7.55 → 0.7.57

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/README.md CHANGED
@@ -18,6 +18,15 @@ Third-party comparison (soldr vs Swatinem/rust-cache vs ...): published from `za
18
18
  [![Windows x64](https://github.com/zackees/soldr/actions/workflows/build-windows-x64.yml/badge.svg?branch=main)](https://github.com/zackees/soldr/actions/workflows/build-windows-x64.yml)
19
19
  [![Windows ARM64](https://github.com/zackees/soldr/actions/workflows/build-windows-arm64.yml/badge.svg?branch=main)](https://github.com/zackees/soldr/actions/workflows/build-windows-arm64.yml)
20
20
 
21
+ ## Performance
22
+
23
+ [![soldr vs sccache vs bare cargo - Rust workload](https://raw.githubusercontent.com/zackees/soldr/benchmark-stats/benchmark-rust-only.jpg)](https://zackees.github.io/soldr/)
24
+ [![soldr vs sccache vs bare cargo - Rust+C workload](https://raw.githubusercontent.com/zackees/soldr/benchmark-stats/benchmark-rust-c.jpg)](https://zackees.github.io/soldr/)
25
+
26
+ *[performance details](https://zackees.github.io/soldr/)*
27
+
28
+ Cold builds are a wash; warm and cross-worktree share are where soldr's wrapper architecture pays off. Full historical trend + interactive view: [zackees.github.io/soldr](https://zackees.github.io/soldr/). For the swatinem/rust-cache comparison (GHA target-dir caching, a different layer) see [PERF.md](PERF.md#readme-comparison-bars-issue-785).
29
+
21
30
  **Instant tools. Instant builds. One command.**
22
31
 
23
32
  soldr = [crgx](https://crgx.dev/) + [zccache](https://github.com/zackees/zccache) in a single tool.
@@ -290,6 +290,22 @@
290
290
  "perf-matrix-worktree-touch"
291
291
  ]
292
292
  },
293
+ {
294
+ "id": "perf-build-then-check",
295
+ "axis": "performance",
296
+ "gate": "report-only",
297
+ "covers": [
298
+ "cross-verb cache reuse (build -> check)",
299
+ "rustc --emit canonicalization canary"
300
+ ],
301
+ "test_files": [
302
+ ".github/workflows/perf-matrix.yml",
303
+ "perf/scenarios/build-then-check/run.sh"
304
+ ],
305
+ "validation_command_ids": [
306
+ "perf-matrix-worktree-touch"
307
+ ]
308
+ },
293
309
  {
294
310
  "id": "native-cc-cache",
295
311
  "axis": "native C/C++ cache",
@@ -18,7 +18,7 @@
18
18
  "linux_zccache_target_libc": "musl"
19
19
  },
20
20
  "zccache": {
21
- "managed_version": "1.12.7",
21
+ "managed_version": "1.12.8",
22
22
  "local_dir_env": "SOLDR_ZCCACHE_LOCAL_DIR",
23
23
  "cache_dir_env": "ZCCACHE_CACHE_DIR",
24
24
  "required_binaries": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zackees/soldr",
3
- "version": "0.7.55",
3
+ "version": "0.7.57",
4
4
  "description": "Instant Rust tools and builds from one command.",
5
5
  "license": "BSD-3-Clause",
6
6
  "homepage": "https://github.com/zackees/soldr",
@@ -284,6 +284,13 @@ async function install() {
284
284
  fs.chmodSync(dst, 0o755);
285
285
  }
286
286
  }
287
+ for (const entry of zccacheContract.soldrDebugInfoEntries(manifest)) {
288
+ const src = findExtractedBinary(extractDir, entry.name);
289
+ if (!src) {
290
+ throw new Error(`release archive ${filename} did not contain ${entry.name}`);
291
+ }
292
+ fs.copyFileSync(src, path.join(nativeDir, entry.name));
293
+ }
287
294
 
288
295
  // Drop manifest.json alongside the binaries so downstream tooling
289
296
  // (and humans reading `bin/native/`) can introspect provenance —
@@ -135,6 +135,14 @@ assert.deepStrictEqual(zccacheContract.ZCCACHE_BUNDLED_BINARIES, [
135
135
  ]);
136
136
  assert.strictEqual(zccacheContract.CRGX_BUNDLED_BINARY, "crgx");
137
137
  assert.strictEqual(zccacheContract.CARGO_CHEF_BUNDLED_BINARY, "cargo-chef");
138
+ assert.deepStrictEqual(
139
+ zccacheContract.soldrDebugInfoEntries({
140
+ soldr: {
141
+ debug_info: [{ name: "soldr.pdb", sha256: "0".repeat(64), format: "pdb" }],
142
+ },
143
+ }),
144
+ [{ name: "soldr.pdb", sha256: "0".repeat(64), format: "pdb" }],
145
+ );
138
146
  assert.ok(
139
147
  fs.existsSync(path.join(root, "contracts", "zccache-integration-guardrails.v1.json")),
140
148
  "npm package must include the zccache integration guardrail contract",
@@ -57,6 +57,13 @@ function collectManifestBinaries(manifest) {
57
57
  return binaries;
58
58
  }
59
59
 
60
+ function soldrDebugInfoEntries(manifest) {
61
+ const entries = manifest.soldr && Array.isArray(manifest.soldr.debug_info)
62
+ ? manifest.soldr.debug_info
63
+ : [];
64
+ return entries.filter((entry) => entry && entry.name && entry.sha256);
65
+ }
66
+
60
67
  function validateReleaseManifest(manifest, options) {
61
68
  const { soldrTarget, platform = process.platform, findFile } = options;
62
69
  if (!Number.isInteger(manifest.schema_version) || manifest.schema_version < MANIFEST_MIN_SCHEMA_VERSION) {
@@ -95,6 +102,28 @@ function validateReleaseManifest(manifest, options) {
95
102
  throw new Error(`release manifest sha256 mismatch for ${name}: expected ${expectedSha}, got ${actualSha}`);
96
103
  }
97
104
  }
105
+
106
+ const debugInfo = soldrDebugInfoEntries(manifest);
107
+ if (platform === "win32" && debugInfo.length === 0) {
108
+ throw new Error("release manifest is missing soldr debug_info PDB entry");
109
+ }
110
+ for (const entry of debugInfo) {
111
+ if (entry.format !== "pdb") {
112
+ throw new Error(`unsupported soldr debug_info format for ${entry.name}: ${entry.format}`);
113
+ }
114
+ if (!/\.pdb$/i.test(entry.name)) {
115
+ throw new Error(`soldr debug_info entry must name a .pdb file: ${entry.name}`);
116
+ }
117
+ const expectedSha = String(entry.sha256).toLowerCase();
118
+ if (!/^[0-9a-f]{64}$/.test(expectedSha)) {
119
+ throw new Error(`release manifest sha256 for ${entry.name} is not lowercase hex`);
120
+ }
121
+ const filePath = findFile(entry.name);
122
+ const actualSha = sha256File(filePath);
123
+ if (actualSha !== expectedSha) {
124
+ throw new Error(`release manifest sha256 mismatch for ${entry.name}: expected ${expectedSha}, got ${actualSha}`);
125
+ }
126
+ }
98
127
  }
99
128
 
100
129
  module.exports = {
@@ -108,6 +137,7 @@ module.exports = {
108
137
  ZCCACHE_BUNDLED_BINARIES,
109
138
  binaryName,
110
139
  releaseBinaryNames,
140
+ soldrDebugInfoEntries,
111
141
  validateReleaseManifest,
112
142
  zccacheTargetForSoldrTarget,
113
143
  };