@altf4llc/vorpal-sdk 0.1.0-alpha.0
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/api/agent/agent.d.ts +68 -0
- package/dist/api/agent/agent.d.ts.map +1 -0
- package/dist/api/agent/agent.js +246 -0
- package/dist/api/agent/agent.js.map +1 -0
- package/dist/api/archive/archive.d.ts +98 -0
- package/dist/api/archive/archive.d.ts.map +1 -0
- package/dist/api/archive/archive.js +288 -0
- package/dist/api/archive/archive.js.map +1 -0
- package/dist/api/artifact/artifact.d.ts +169 -0
- package/dist/api/artifact/artifact.d.ts.map +1 -0
- package/dist/api/artifact/artifact.js +1041 -0
- package/dist/api/artifact/artifact.js.map +1 -0
- package/dist/api/context/context.d.ts +42 -0
- package/dist/api/context/context.d.ts.map +1 -0
- package/dist/api/context/context.js +31 -0
- package/dist/api/context/context.js.map +1 -0
- package/dist/api/worker/worker.d.ts +65 -0
- package/dist/api/worker/worker.d.ts.map +1 -0
- package/dist/api/worker/worker.js +185 -0
- package/dist/api/worker/worker.js.map +1 -0
- package/dist/artifact/language/go.d.ts +165 -0
- package/dist/artifact/language/go.d.ts.map +1 -0
- package/dist/artifact/language/go.js +361 -0
- package/dist/artifact/language/go.js.map +1 -0
- package/dist/artifact/language/rust.d.ts +136 -0
- package/dist/artifact/language/rust.d.ts.map +1 -0
- package/dist/artifact/language/rust.js +576 -0
- package/dist/artifact/language/rust.js.map +1 -0
- package/dist/artifact/language/typescript.d.ts +112 -0
- package/dist/artifact/language/typescript.d.ts.map +1 -0
- package/dist/artifact/language/typescript.js +232 -0
- package/dist/artifact/language/typescript.js.map +1 -0
- package/dist/artifact/step.d.ts +28 -0
- package/dist/artifact/step.d.ts.map +1 -0
- package/dist/artifact/step.js +214 -0
- package/dist/artifact/step.js.map +1 -0
- package/dist/artifact.d.ts +392 -0
- package/dist/artifact.d.ts.map +1 -0
- package/dist/artifact.js +938 -0
- package/dist/artifact.js.map +1 -0
- package/dist/cli.d.ts +42 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +112 -0
- package/dist/cli.js.map +1 -0
- package/dist/context.d.ts +169 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +779 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/system.d.ts +20 -0
- package/dist/system.d.ts.map +1 -0
- package/dist/system.js +76 -0
- package/dist/system.js.map +1 -0
- package/dist/vorpal.d.ts +2 -0
- package/dist/vorpal.d.ts.map +1 -0
- package/dist/vorpal.js +148 -0
- package/dist/vorpal.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,576 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join, relative } from "node:path";
|
|
3
|
+
import { parse as parseToml } from "smol-toml";
|
|
4
|
+
import { ArtifactSystem } from "../../api/artifact/artifact.js";
|
|
5
|
+
import { Artifact, ArtifactSource, DevelopmentEnvironment, getEnvKey, secretsToProto, } from "../../artifact.js";
|
|
6
|
+
import { shell } from "../step.js";
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Constants
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
const RUST_TOOLCHAIN_VERSION = "1.93.1";
|
|
11
|
+
const PROTOC_ALIAS = "protoc:34.0";
|
|
12
|
+
/**
|
|
13
|
+
* Parses a Cargo.toml file using smol-toml.
|
|
14
|
+
*
|
|
15
|
+
* Extracts the fields the Rust builder needs:
|
|
16
|
+
* - `[package]` name
|
|
17
|
+
* - `[workspace]` members
|
|
18
|
+
* - `[[bin]]` name and path
|
|
19
|
+
*/
|
|
20
|
+
function parseCargo(path) {
|
|
21
|
+
const content = readFileSync(path, "utf-8");
|
|
22
|
+
const doc = parseToml(content);
|
|
23
|
+
const result = {
|
|
24
|
+
bin: [],
|
|
25
|
+
package: undefined,
|
|
26
|
+
workspace: undefined,
|
|
27
|
+
};
|
|
28
|
+
// Extract [package] name
|
|
29
|
+
if (doc.package !== undefined &&
|
|
30
|
+
typeof doc.package === "object" &&
|
|
31
|
+
doc.package !== null &&
|
|
32
|
+
"name" in doc.package &&
|
|
33
|
+
typeof doc.package.name === "string") {
|
|
34
|
+
result.package = {
|
|
35
|
+
name: doc.package.name,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Extract [workspace] members
|
|
39
|
+
if (doc.workspace !== undefined &&
|
|
40
|
+
typeof doc.workspace === "object" &&
|
|
41
|
+
doc.workspace !== null &&
|
|
42
|
+
"members" in doc.workspace) {
|
|
43
|
+
const ws = doc.workspace;
|
|
44
|
+
if (Array.isArray(ws.members)) {
|
|
45
|
+
result.workspace = {
|
|
46
|
+
members: ws.members.filter((m) => typeof m === "string"),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Extract [[bin]] entries
|
|
51
|
+
if (Array.isArray(doc.bin)) {
|
|
52
|
+
for (const entry of doc.bin) {
|
|
53
|
+
if (typeof entry === "object" &&
|
|
54
|
+
entry !== null &&
|
|
55
|
+
"name" in entry &&
|
|
56
|
+
"path" in entry &&
|
|
57
|
+
typeof entry.name === "string" &&
|
|
58
|
+
typeof entry.path === "string") {
|
|
59
|
+
result.bin.push({
|
|
60
|
+
name: entry.name,
|
|
61
|
+
path: entry.path,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Rust toolchain target mapping
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
/**
|
|
72
|
+
* Maps an ArtifactSystem enum to the Rust target triple.
|
|
73
|
+
* Matches `sdk/go/pkg/artifact/rust_toolchain.go` RustToolchainTarget().
|
|
74
|
+
*/
|
|
75
|
+
export function rustToolchainTarget(system) {
|
|
76
|
+
switch (system) {
|
|
77
|
+
case ArtifactSystem.AARCH64_DARWIN:
|
|
78
|
+
return "aarch64-apple-darwin";
|
|
79
|
+
case ArtifactSystem.AARCH64_LINUX:
|
|
80
|
+
return "aarch64-unknown-linux-gnu";
|
|
81
|
+
case ArtifactSystem.X8664_DARWIN:
|
|
82
|
+
return "x86_64-apple-darwin";
|
|
83
|
+
case ArtifactSystem.X8664_LINUX:
|
|
84
|
+
return "x86_64-unknown-linux-gnu";
|
|
85
|
+
default:
|
|
86
|
+
throw new Error(`unsupported 'rust-toolchain' system: ${system}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
// Shell script helpers
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
/** Builds the vendor step script for `cargo vendor`. */
|
|
93
|
+
function buildVendorScript(name, packages, packagesTargets) {
|
|
94
|
+
const lines = [];
|
|
95
|
+
lines.push(`mkdir -p $HOME`);
|
|
96
|
+
lines.push(``);
|
|
97
|
+
lines.push(`pushd ./source/${name}-vendor`);
|
|
98
|
+
if (packages.length > 0) {
|
|
99
|
+
const quotedPackages = packages.map((p) => `"${p}"`).join(",");
|
|
100
|
+
const quotedTargets = packagesTargets.map((t) => `"${t}"`).join(" ");
|
|
101
|
+
lines.push(``);
|
|
102
|
+
lines.push(`cat > Cargo.toml << "EOF"`);
|
|
103
|
+
lines.push(`[workspace]`);
|
|
104
|
+
lines.push(`members = [${quotedPackages}]`);
|
|
105
|
+
lines.push(`resolver = "2"`);
|
|
106
|
+
lines.push(`EOF`);
|
|
107
|
+
lines.push(``);
|
|
108
|
+
lines.push(`target_paths=(${quotedTargets})`);
|
|
109
|
+
lines.push(``);
|
|
110
|
+
lines.push(`for target_path in \${target_paths[@]}; do`);
|
|
111
|
+
lines.push(` mkdir -p $(dirname \${target_path})`);
|
|
112
|
+
lines.push(` touch \${target_path}`);
|
|
113
|
+
lines.push(`done`);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
lines.push(``);
|
|
117
|
+
lines.push(`mkdir -p src`);
|
|
118
|
+
lines.push(`touch src/main.rs`);
|
|
119
|
+
}
|
|
120
|
+
lines.push(``);
|
|
121
|
+
lines.push(`mkdir -p $VORPAL_OUTPUT/vendor`);
|
|
122
|
+
lines.push(``);
|
|
123
|
+
lines.push(`cargo_vendor=$(cargo vendor --versioned-dirs $VORPAL_OUTPUT/vendor)`);
|
|
124
|
+
lines.push(``);
|
|
125
|
+
lines.push(`echo "$cargo_vendor" > $VORPAL_OUTPUT/config.toml`);
|
|
126
|
+
return lines.join("\n");
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Builds the main build step script for `cargo build --release`.
|
|
130
|
+
*
|
|
131
|
+
* CRITICAL: The script structure must be IDENTICAL to the Rust and Go SDKs.
|
|
132
|
+
* Both Rust (formatdoc! in rust.rs) and Go (StepScriptTemplate in rust.go)
|
|
133
|
+
* always emit `if [ "false"/"true" = "true" ]` conditional blocks for every
|
|
134
|
+
* option (format, lint, check, build, tests), even when disabled. The
|
|
135
|
+
* TypeScript SDK must do the same to produce matching artifact digests.
|
|
136
|
+
*/
|
|
137
|
+
function buildMainScript(opts) {
|
|
138
|
+
const enableFormat = opts.format ? "true" : "false";
|
|
139
|
+
const enableLint = opts.lint ? "true" : "false";
|
|
140
|
+
const enableCheck = opts.check ? "true" : "false";
|
|
141
|
+
const enableBuild = opts.build ? "true" : "false";
|
|
142
|
+
const enableTests = opts.tests ? "true" : "false";
|
|
143
|
+
const lines = [];
|
|
144
|
+
lines.push(`mkdir -p $HOME`);
|
|
145
|
+
lines.push(``);
|
|
146
|
+
lines.push(`pushd ./source/${opts.name}`);
|
|
147
|
+
lines.push(``);
|
|
148
|
+
lines.push(`mkdir -p .cargo`);
|
|
149
|
+
lines.push(`mkdir -p $VORPAL_OUTPUT/bin`);
|
|
150
|
+
lines.push(``);
|
|
151
|
+
lines.push(`ln -s ${getEnvKey(opts.vendorDigest)}/config.toml .cargo/config.toml`);
|
|
152
|
+
if (opts.packages.length > 0) {
|
|
153
|
+
const quotedPackages = opts.packages.map((p) => `"${p}"`).join(",");
|
|
154
|
+
lines.push(``);
|
|
155
|
+
lines.push(`cat > Cargo.toml << "EOF"`);
|
|
156
|
+
lines.push(`[workspace]`);
|
|
157
|
+
lines.push(`members = [${quotedPackages}]`);
|
|
158
|
+
lines.push(`resolver = "2"`);
|
|
159
|
+
lines.push(`EOF`);
|
|
160
|
+
}
|
|
161
|
+
lines.push(``);
|
|
162
|
+
lines.push(`bin_names=(${opts.binNames.join(" ")})`);
|
|
163
|
+
lines.push(`manifest_paths=(${opts.manifests.join(" ")})`);
|
|
164
|
+
lines.push(``);
|
|
165
|
+
lines.push(`if [ "${enableFormat}" = "true" ]; then`);
|
|
166
|
+
lines.push(` echo "Running formatter..."`);
|
|
167
|
+
lines.push(` cargo --offline fmt --all --check`);
|
|
168
|
+
lines.push(`fi`);
|
|
169
|
+
lines.push(``);
|
|
170
|
+
lines.push(`for manifest_path in \${manifest_paths[@]}; do`);
|
|
171
|
+
lines.push(` if [ "${enableLint}" = "true" ]; then`);
|
|
172
|
+
lines.push(` echo "Running linter..."`);
|
|
173
|
+
lines.push(` cargo --offline clippy --manifest-path \${manifest_path} -- --deny warnings`);
|
|
174
|
+
lines.push(` fi`);
|
|
175
|
+
lines.push(`done`);
|
|
176
|
+
lines.push(``);
|
|
177
|
+
lines.push(`for bin_name in \${bin_names[@]}; do`);
|
|
178
|
+
lines.push(` if [ "${enableCheck}" = "true" ]; then`);
|
|
179
|
+
lines.push(` echo "Running check..."`);
|
|
180
|
+
lines.push(` cargo --offline check --bin \${bin_name} --release`);
|
|
181
|
+
lines.push(` fi`);
|
|
182
|
+
lines.push(``);
|
|
183
|
+
lines.push(` if [ "${enableBuild}" = "true" ]; then`);
|
|
184
|
+
lines.push(` echo "Running build..."`);
|
|
185
|
+
lines.push(` cargo --offline build --bin \${bin_name} --release`);
|
|
186
|
+
lines.push(` fi`);
|
|
187
|
+
lines.push(``);
|
|
188
|
+
lines.push(` if [ "${enableTests}" = "true" ]; then`);
|
|
189
|
+
lines.push(` echo "Running tests..."`);
|
|
190
|
+
lines.push(` cargo --offline test --bin \${bin_name} --release`);
|
|
191
|
+
lines.push(` fi`);
|
|
192
|
+
lines.push(``);
|
|
193
|
+
lines.push(` cp -p ./target/release/\${bin_name} $VORPAL_OUTPUT/bin/`);
|
|
194
|
+
lines.push(`done`);
|
|
195
|
+
return lines.join("\n");
|
|
196
|
+
}
|
|
197
|
+
// ---------------------------------------------------------------------------
|
|
198
|
+
// Rust
|
|
199
|
+
// ---------------------------------------------------------------------------
|
|
200
|
+
/**
|
|
201
|
+
* Builder for Rust/Cargo project artifacts.
|
|
202
|
+
*
|
|
203
|
+
* Analogous to:
|
|
204
|
+
* - Rust SDK: `sdk/rust/src/artifact/language/rust.rs` (`Rust` struct)
|
|
205
|
+
* - Go SDK: `sdk/go/pkg/artifact/language/rust.go` (`Rust` struct)
|
|
206
|
+
*
|
|
207
|
+
* The builder:
|
|
208
|
+
* 1. Fetches the rust-toolchain artifact from the registry
|
|
209
|
+
* 2. Fetches the protoc artifact from the registry
|
|
210
|
+
* 3. Parses the Cargo.toml workspace to identify packages, bins, and targets
|
|
211
|
+
* 4. Creates a vendor artifact that runs `cargo vendor`
|
|
212
|
+
* 5. Creates the main build artifact with `cargo build --release`
|
|
213
|
+
*
|
|
214
|
+
* Usage:
|
|
215
|
+
* ```typescript
|
|
216
|
+
* const digest = await new Rust("vorpal", SYSTEMS)
|
|
217
|
+
* .withPackages(["vorpal-cli"])
|
|
218
|
+
* .withBins(["vorpal"])
|
|
219
|
+
* .build(context);
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
export class Rust {
|
|
223
|
+
_aliases = [];
|
|
224
|
+
_artifacts = [];
|
|
225
|
+
_bins = [];
|
|
226
|
+
_build = true;
|
|
227
|
+
_check = false;
|
|
228
|
+
_environments = [];
|
|
229
|
+
_excludes = [];
|
|
230
|
+
_format = false;
|
|
231
|
+
_includes = [];
|
|
232
|
+
_lint = false;
|
|
233
|
+
_name;
|
|
234
|
+
_packages = [];
|
|
235
|
+
_secrets = new Map();
|
|
236
|
+
_source = undefined;
|
|
237
|
+
_systems;
|
|
238
|
+
_tests = false;
|
|
239
|
+
constructor(name, systems) {
|
|
240
|
+
this._name = name;
|
|
241
|
+
this._systems = systems;
|
|
242
|
+
}
|
|
243
|
+
/** Sets aliases for the artifact. */
|
|
244
|
+
withAliases(aliases) {
|
|
245
|
+
this._aliases = aliases;
|
|
246
|
+
return this;
|
|
247
|
+
}
|
|
248
|
+
/** Adds artifact dependencies available during the build step. */
|
|
249
|
+
withArtifacts(artifacts) {
|
|
250
|
+
this._artifacts = artifacts;
|
|
251
|
+
return this;
|
|
252
|
+
}
|
|
253
|
+
/** Sets the binary targets to build. If empty, defaults to the builder name. */
|
|
254
|
+
withBins(bins) {
|
|
255
|
+
this._bins = bins;
|
|
256
|
+
return this;
|
|
257
|
+
}
|
|
258
|
+
/** Enables or disables `cargo check` during the build step. */
|
|
259
|
+
withCheck(check) {
|
|
260
|
+
this._check = check;
|
|
261
|
+
return this;
|
|
262
|
+
}
|
|
263
|
+
/** Sets additional environment variables for the build step. Format: "KEY=VALUE". */
|
|
264
|
+
withEnvironments(environments) {
|
|
265
|
+
this._environments = environments;
|
|
266
|
+
return this;
|
|
267
|
+
}
|
|
268
|
+
/** Sets file patterns to exclude from the source. */
|
|
269
|
+
withExcludes(excludes) {
|
|
270
|
+
this._excludes = excludes;
|
|
271
|
+
return this;
|
|
272
|
+
}
|
|
273
|
+
/** Enables or disables `cargo fmt --check` during the build step. */
|
|
274
|
+
withFormat(format) {
|
|
275
|
+
this._format = format;
|
|
276
|
+
return this;
|
|
277
|
+
}
|
|
278
|
+
/** Sets file patterns to include in the source. */
|
|
279
|
+
withIncludes(includes) {
|
|
280
|
+
this._includes = includes;
|
|
281
|
+
return this;
|
|
282
|
+
}
|
|
283
|
+
/** Enables or disables `cargo clippy` during the build step. */
|
|
284
|
+
withLint(lint) {
|
|
285
|
+
this._lint = lint;
|
|
286
|
+
return this;
|
|
287
|
+
}
|
|
288
|
+
/** Filters which workspace packages to include in the build. */
|
|
289
|
+
withPackages(packages) {
|
|
290
|
+
this._packages = packages;
|
|
291
|
+
return this;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Adds secrets available during the build step.
|
|
295
|
+
*
|
|
296
|
+
* @param secrets - Map of secret name to value
|
|
297
|
+
*/
|
|
298
|
+
withSecrets(secrets) {
|
|
299
|
+
for (const [k, v] of secrets) {
|
|
300
|
+
if (!this._secrets.has(k)) {
|
|
301
|
+
this._secrets.set(k, v);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return this;
|
|
305
|
+
}
|
|
306
|
+
/** Sets the source path relative to the artifact context directory. */
|
|
307
|
+
withSource(source) {
|
|
308
|
+
this._source = source;
|
|
309
|
+
return this;
|
|
310
|
+
}
|
|
311
|
+
/** Enables or disables `cargo test` during the build step. */
|
|
312
|
+
withTests(tests) {
|
|
313
|
+
this._tests = tests;
|
|
314
|
+
return this;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Builds the Rust project artifact.
|
|
318
|
+
*
|
|
319
|
+
* @returns The artifact digest string
|
|
320
|
+
*/
|
|
321
|
+
async build(context) {
|
|
322
|
+
// Fetch protoc artifact
|
|
323
|
+
const protoc = await context.fetchArtifactAlias(PROTOC_ALIAS);
|
|
324
|
+
// Parse source path
|
|
325
|
+
//
|
|
326
|
+
// CRITICAL: Use string concatenation (`${a}/${b}`) instead of
|
|
327
|
+
// `path.join()` for paths that end up in the build script. The Rust
|
|
328
|
+
// SDK uses `PathBuf::join` which preserves a leading `"."` segment
|
|
329
|
+
// (e.g. `/ctx/./cli/Cargo.toml`), and the Go SDK uses
|
|
330
|
+
// `fmt.Sprintf("%s/%s", ...)` which does the same. Node's
|
|
331
|
+
// `path.join` normalises the dot away, producing a different path
|
|
332
|
+
// string and therefore a different artifact digest.
|
|
333
|
+
const contextPath = context.getArtifactContextPath();
|
|
334
|
+
const sourcePath = this._source ?? ".";
|
|
335
|
+
// Raw path preserves "./", matching Rust PathBuf::join and Go Sprintf
|
|
336
|
+
const contextPathSourceRaw = `${contextPath}/${sourcePath}`;
|
|
337
|
+
// Normalised path for filesystem operations (existsSync, readFileSync)
|
|
338
|
+
const contextPathSource = join(contextPath, sourcePath);
|
|
339
|
+
if (!existsSync(contextPathSource)) {
|
|
340
|
+
throw new Error(`\`source.${this._name}.path\` not found: ${sourcePath}`);
|
|
341
|
+
}
|
|
342
|
+
// Parse Cargo.toml
|
|
343
|
+
const sourceCargoPath = join(contextPathSource, "Cargo.toml");
|
|
344
|
+
// Raw path for embedding in build scripts
|
|
345
|
+
const sourceCargoPathRaw = `${contextPathSourceRaw}/Cargo.toml`;
|
|
346
|
+
if (!existsSync(sourceCargoPath)) {
|
|
347
|
+
throw new Error(`Cargo.toml not found: ${sourceCargoPath}`);
|
|
348
|
+
}
|
|
349
|
+
const sourceCargo = parseCargo(sourceCargoPath);
|
|
350
|
+
// Get list of bin targets
|
|
351
|
+
const packages = [];
|
|
352
|
+
const packagesBinNames = [];
|
|
353
|
+
const packagesManifests = [];
|
|
354
|
+
const packagesTargets = [];
|
|
355
|
+
if (sourceCargo.workspace !== undefined &&
|
|
356
|
+
sourceCargo.workspace.members.length > 0) {
|
|
357
|
+
for (const member of sourceCargo.workspace.members) {
|
|
358
|
+
const packagePath = join(contextPathSource, member);
|
|
359
|
+
const packagePathRaw = `${contextPathSourceRaw}/${member}`;
|
|
360
|
+
const packageCargoPath = join(packagePath, "Cargo.toml");
|
|
361
|
+
const packageCargoPathRaw = `${packagePathRaw}/Cargo.toml`;
|
|
362
|
+
if (!existsSync(packageCargoPath)) {
|
|
363
|
+
throw new Error(`Cargo.toml not found: ${packageCargoPath}`);
|
|
364
|
+
}
|
|
365
|
+
const packageCargo = parseCargo(packageCargoPath);
|
|
366
|
+
if (this._packages.length > 0 &&
|
|
367
|
+
packageCargo.package !== undefined &&
|
|
368
|
+
!this._packages.includes(packageCargo.package.name)) {
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
371
|
+
const packageTargetPaths = [];
|
|
372
|
+
if (packageCargo.bin.length > 0) {
|
|
373
|
+
for (const bin of packageCargo.bin) {
|
|
374
|
+
const packageTargetPath = join(packagePath, bin.path);
|
|
375
|
+
if (!existsSync(packageTargetPath)) {
|
|
376
|
+
throw new Error(`bin target not found: ${packageTargetPath}`);
|
|
377
|
+
}
|
|
378
|
+
packageTargetPaths.push(packageTargetPath);
|
|
379
|
+
if (this._bins.length === 0 ||
|
|
380
|
+
this._bins.includes(bin.name)) {
|
|
381
|
+
if (!packagesManifests.includes(packageCargoPathRaw)) {
|
|
382
|
+
packagesManifests.push(packageCargoPathRaw);
|
|
383
|
+
}
|
|
384
|
+
packagesBinNames.push(bin.name);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (packageTargetPaths.length === 0) {
|
|
389
|
+
const packageTargetPath = join(packagePath, "src/lib.rs");
|
|
390
|
+
if (!existsSync(packageTargetPath)) {
|
|
391
|
+
throw new Error(`lib.rs not found: ${packageTargetPath}`);
|
|
392
|
+
}
|
|
393
|
+
packageTargetPaths.push(packageTargetPath);
|
|
394
|
+
}
|
|
395
|
+
for (const memberTargetPath of packageTargetPaths) {
|
|
396
|
+
const memberTargetPathRelative = relative(contextPathSource, memberTargetPath);
|
|
397
|
+
packagesTargets.push(memberTargetPathRelative);
|
|
398
|
+
}
|
|
399
|
+
packages.push(member);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
// 2. CREATE ARTIFACTS
|
|
403
|
+
// Get rust toolchain artifact
|
|
404
|
+
const rustToolchain = await context.fetchArtifactAlias(`rust-toolchain:${RUST_TOOLCHAIN_VERSION}`);
|
|
405
|
+
const rustToolchainTargetStr = rustToolchainTarget(context.getSystem());
|
|
406
|
+
const rustToolchainName = `${RUST_TOOLCHAIN_VERSION}-${rustToolchainTargetStr}`;
|
|
407
|
+
const stepEnvironments = [
|
|
408
|
+
"HOME=$VORPAL_WORKSPACE/home",
|
|
409
|
+
`PATH=${getEnvKey(rustToolchain)}/toolchains/${rustToolchainName}/bin`,
|
|
410
|
+
`RUSTUP_HOME=${getEnvKey(rustToolchain)}`,
|
|
411
|
+
`RUSTUP_TOOLCHAIN=${rustToolchainName}`,
|
|
412
|
+
];
|
|
413
|
+
for (const env of this._environments) {
|
|
414
|
+
stepEnvironments.push(env);
|
|
415
|
+
}
|
|
416
|
+
// Create vendor artifact
|
|
417
|
+
const vendorCargoPaths = ["Cargo.toml", "Cargo.lock"];
|
|
418
|
+
for (const pkg of packages) {
|
|
419
|
+
vendorCargoPaths.push(`${pkg}/Cargo.toml`);
|
|
420
|
+
}
|
|
421
|
+
const vendorStepScript = buildVendorScript(this._name, packages, packagesTargets);
|
|
422
|
+
let stepArtifacts = [rustToolchain];
|
|
423
|
+
const protoSecrets = secretsToProto(this._secrets);
|
|
424
|
+
const vendorStep = await shell(context, stepArtifacts, stepEnvironments, vendorStepScript, protoSecrets);
|
|
425
|
+
const vendorName = `${this._name}-vendor`;
|
|
426
|
+
const vendorSource = new ArtifactSource(vendorName, sourcePath)
|
|
427
|
+
.withIncludes(vendorCargoPaths)
|
|
428
|
+
.build();
|
|
429
|
+
const vendor = await new Artifact(vendorName, [vendorStep], this._systems)
|
|
430
|
+
.withSources([vendorSource])
|
|
431
|
+
.build(context);
|
|
432
|
+
stepArtifacts = [...stepArtifacts, vendor, protoc];
|
|
433
|
+
// Create source
|
|
434
|
+
const sourceIncludes = [];
|
|
435
|
+
const sourceExcludes = ["target"];
|
|
436
|
+
for (const exclude of this._excludes) {
|
|
437
|
+
sourceExcludes.push(exclude);
|
|
438
|
+
}
|
|
439
|
+
for (const include of this._includes) {
|
|
440
|
+
sourceIncludes.push(include);
|
|
441
|
+
}
|
|
442
|
+
const sourceBuilder = new ArtifactSource(this._name, sourcePath)
|
|
443
|
+
.withIncludes(sourceIncludes)
|
|
444
|
+
.withExcludes(sourceExcludes);
|
|
445
|
+
const source = sourceBuilder.build();
|
|
446
|
+
for (const artifact of this._artifacts) {
|
|
447
|
+
stepArtifacts.push(artifact);
|
|
448
|
+
}
|
|
449
|
+
// Create step
|
|
450
|
+
if (packagesBinNames.length === 0) {
|
|
451
|
+
packagesBinNames.push(this._name);
|
|
452
|
+
}
|
|
453
|
+
if (packagesManifests.length === 0) {
|
|
454
|
+
packagesManifests.push(sourceCargoPathRaw);
|
|
455
|
+
}
|
|
456
|
+
const stepScript = buildMainScript({
|
|
457
|
+
name: this._name,
|
|
458
|
+
vendorDigest: vendor,
|
|
459
|
+
packages,
|
|
460
|
+
binNames: packagesBinNames,
|
|
461
|
+
manifests: packagesManifests,
|
|
462
|
+
format: this._format,
|
|
463
|
+
lint: this._lint,
|
|
464
|
+
check: this._check,
|
|
465
|
+
build: this._build,
|
|
466
|
+
tests: this._tests,
|
|
467
|
+
});
|
|
468
|
+
const step = await shell(context, stepArtifacts, stepEnvironments, stepScript, protoSecrets);
|
|
469
|
+
// Create artifact
|
|
470
|
+
return new Artifact(this._name, [step], this._systems)
|
|
471
|
+
.withAliases(this._aliases)
|
|
472
|
+
.withSources([source])
|
|
473
|
+
.build(context);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
// ---------------------------------------------------------------------------
|
|
477
|
+
// Rust Development Environment
|
|
478
|
+
// ---------------------------------------------------------------------------
|
|
479
|
+
/**
|
|
480
|
+
* Builder for Rust development environment artifacts.
|
|
481
|
+
*
|
|
482
|
+
* Provides a pre-configured Rust development environment with the Rust
|
|
483
|
+
* toolchain (cargo, rustc, clippy, rustfmt, rust-analyzer, etc.) and
|
|
484
|
+
* optionally protoc. Computes platform-specific environment variables
|
|
485
|
+
* (PATH, RUSTUP_HOME, RUSTUP_TOOLCHAIN) automatically.
|
|
486
|
+
*
|
|
487
|
+
* Usage:
|
|
488
|
+
* ```typescript
|
|
489
|
+
* const digest = await new RustDevelopmentEnvironment("my-shell", SYSTEMS)
|
|
490
|
+
* .build(context);
|
|
491
|
+
* ```
|
|
492
|
+
*/
|
|
493
|
+
export class RustDevelopmentEnvironment {
|
|
494
|
+
_artifacts = [];
|
|
495
|
+
_environments = [];
|
|
496
|
+
_name;
|
|
497
|
+
_secrets = new Map();
|
|
498
|
+
_systems;
|
|
499
|
+
_includeProtoc = true;
|
|
500
|
+
constructor(name, systems) {
|
|
501
|
+
this._name = name;
|
|
502
|
+
this._systems = systems;
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Adds extra artifact dependencies beyond the default Rust tooling.
|
|
506
|
+
* These are appended to the default artifacts, not replacing them.
|
|
507
|
+
*/
|
|
508
|
+
withArtifacts(artifacts) {
|
|
509
|
+
this._artifacts.push(...artifacts);
|
|
510
|
+
return this;
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Adds extra environment variables beyond the default Rust environment.
|
|
514
|
+
* Format: "KEY=VALUE".
|
|
515
|
+
* These are appended to the defaults (PATH, RUSTUP_HOME, RUSTUP_TOOLCHAIN).
|
|
516
|
+
*/
|
|
517
|
+
withEnvironments(environments) {
|
|
518
|
+
this._environments.push(...environments);
|
|
519
|
+
return this;
|
|
520
|
+
}
|
|
521
|
+
/** Exclude protoc from the default tooling. */
|
|
522
|
+
withoutProtoc() {
|
|
523
|
+
this._includeProtoc = false;
|
|
524
|
+
return this;
|
|
525
|
+
}
|
|
526
|
+
/** Adds secrets available during the environment build step. */
|
|
527
|
+
withSecrets(secrets) {
|
|
528
|
+
for (const [k, v] of secrets) {
|
|
529
|
+
if (!this._secrets.has(k)) {
|
|
530
|
+
this._secrets.set(k, v);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
return this;
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Builds the Rust development environment artifact.
|
|
537
|
+
*
|
|
538
|
+
* Default artifacts fetched:
|
|
539
|
+
* - rust-toolchain (includes cargo, rustc, clippy, rustfmt, rust-analyzer, etc.)
|
|
540
|
+
* - protoc (if not excluded)
|
|
541
|
+
*
|
|
542
|
+
* Default environment variables:
|
|
543
|
+
* - PATH={rust-toolchain}/toolchains/{version}-{target}/bin
|
|
544
|
+
* - RUSTUP_HOME={rust-toolchain}
|
|
545
|
+
* - RUSTUP_TOOLCHAIN={version}-{target}
|
|
546
|
+
*/
|
|
547
|
+
async build(context) {
|
|
548
|
+
const rustToolchain = await context.fetchArtifactAlias(`rust-toolchain:${RUST_TOOLCHAIN_VERSION}`);
|
|
549
|
+
const artifacts = [];
|
|
550
|
+
if (this._includeProtoc) {
|
|
551
|
+
const protoc = await context.fetchArtifactAlias(PROTOC_ALIAS);
|
|
552
|
+
artifacts.push(protoc);
|
|
553
|
+
}
|
|
554
|
+
artifacts.push(rustToolchain);
|
|
555
|
+
artifacts.push(...this._artifacts);
|
|
556
|
+
// Compute Rust toolchain paths
|
|
557
|
+
const toolchainTarget = rustToolchainTarget(context.getSystem());
|
|
558
|
+
const toolchainName = `${RUST_TOOLCHAIN_VERSION}-${toolchainTarget}`;
|
|
559
|
+
const toolchainBin = `${getEnvKey(rustToolchain)}/toolchains/${toolchainName}/bin`;
|
|
560
|
+
const environments = [
|
|
561
|
+
`PATH=${toolchainBin}`,
|
|
562
|
+
`RUSTUP_HOME=${getEnvKey(rustToolchain)}`,
|
|
563
|
+
`RUSTUP_TOOLCHAIN=${toolchainName}`,
|
|
564
|
+
...this._environments,
|
|
565
|
+
];
|
|
566
|
+
// Delegate to DevelopmentEnvironment
|
|
567
|
+
let devenv = new DevelopmentEnvironment(this._name, this._systems)
|
|
568
|
+
.withArtifacts(artifacts)
|
|
569
|
+
.withEnvironments(environments);
|
|
570
|
+
if (this._secrets.size > 0) {
|
|
571
|
+
devenv = devenv.withSecrets(this._secrets);
|
|
572
|
+
}
|
|
573
|
+
return devenv.build(context);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
//# sourceMappingURL=rust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../src/artifact/language/rust.ts"],"names":[],"mappings":"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"}
|