@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
|
[](https://github.com/zackees/soldr/actions/workflows/build-windows-x64.yml)
|
|
19
19
|
[](https://github.com/zackees/soldr/actions/workflows/build-windows-arm64.yml)
|
|
20
20
|
|
|
21
|
+
## Performance
|
|
22
|
+
|
|
23
|
+
[](https://zackees.github.io/soldr/)
|
|
24
|
+
[](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",
|
package/package.json
CHANGED
package/scripts/install.js
CHANGED
|
@@ -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
|
};
|