radroots_sdk_artifact.mjs (2049B)
1 #!/usr/bin/env node 2 3 import { readFileSync } from "node:fs"; 4 import { dirname, resolve } from "node:path"; 5 import { fileURLToPath } from "node:url"; 6 7 import { 8 artifactRoute, 9 resolveCanonicalSourceRoot, 10 run, 11 sourceDateEpoch, 12 validateConsumerRoot, 13 } from "./radroots_sdk_artifact_lib.mjs"; 14 15 const consumerRoot = resolve(dirname(fileURLToPath(import.meta.url)), ".."); 16 const [mode, routeName] = process.argv.slice(2); 17 if (mode !== "source-check" && !["check", "write"].includes(mode)) { 18 throw new Error("usage: radroots_sdk_artifact.mjs source-check | <check|write> <typescript|wasm|swift|kotlin>"); 19 } 20 21 validateConsumerRoot(consumerRoot); 22 const sourceRoot = resolveCanonicalSourceRoot(process.env.RADROOTS_LIB_SOURCE_ROOT); 23 const sourceLock = readFileSync(resolve(consumerRoot, "radroots.lib.source-lock.v1.toml"), "utf8"); 24 const revision = sourceLock.match(/^revision = "([0-9a-f]{40})"$/m)?.[1]; 25 if (!revision) { 26 throw new Error("source lock must contain one full lowercase revision"); 27 } 28 29 const commandEnv = { ...process.env }; 30 if (process.env.RADROOTS_OFFLINE === "1") { 31 commandEnv.CARGO_NET_OFFLINE = "true"; 32 } 33 34 run("cargo", ["extbuild", "doctor"], { cwd: sourceRoot, env: commandEnv }); 35 run( 36 "cargo", 37 [ 38 "extbuild", 39 "run", 40 "--", 41 "cargo", 42 "xtask", 43 "source-lock", 44 "--consumer-root", 45 consumerRoot, 46 ], 47 { cwd: sourceRoot, env: commandEnv }, 48 ); 49 50 if (mode !== "source-check") { 51 const route = artifactRoute(routeName); 52 run( 53 "cargo", 54 [ 55 "extbuild", 56 "run", 57 "--", 58 "cargo", 59 "xtask", 60 "artifact", 61 "--product", 62 "sdk", 63 "--target", 64 route.target, 65 "--language", 66 route.language, 67 "--mode", 68 mode, 69 "--consumer-root", 70 consumerRoot, 71 "--source-root", 72 sourceRoot, 73 "--output", 74 route.output, 75 "--source-date-epoch", 76 sourceDateEpoch(sourceRoot, revision, commandEnv), 77 "--builder-id", 78 "radroots_sdk_artifact_v1", 79 ], 80 { cwd: sourceRoot, env: commandEnv }, 81 ); 82 }