Skip to content

Commit 16cabef

Browse files
committed
check prerequisites in cli
1 parent a041415 commit 16cabef

File tree

3 files changed

+66
-1
lines changed

3 files changed

+66
-1
lines changed

packages/thirdweb/src/cli/commands/stylus/builder.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,22 @@ import prompts from "prompts";
77
import { parse } from "toml";
88
import { createThirdwebClient } from "../../../client/client.js";
99
import { upload } from "../../../storage/upload.js";
10+
import { checkPrerequisites } from "./check-prerequisites.js";
1011

1112
const THIRDWEB_URL = "https://thirdweb.com";
1213

1314
export async function publishStylus(secretKey?: string) {
1415
const spinner = ora("Checking if this is a Stylus project...").start();
16+
17+
checkPrerequisites(spinner, "cargo", ["--version"], "Rust (cargo)");
18+
checkPrerequisites(spinner, "rustc", ["--version"], "Rust compiler (rustc)");
19+
checkPrerequisites(
20+
spinner,
21+
"solc",
22+
["--version"],
23+
"Solidity compiler (solc)",
24+
);
25+
1526
const uri = await buildStylus(spinner, secretKey);
1627

1728
const url = getUrl(uri, "publish").toString();
@@ -21,6 +32,16 @@ export async function publishStylus(secretKey?: string) {
2132

2233
export async function deployStylus(secretKey?: string) {
2334
const spinner = ora("Checking if this is a Stylus project...").start();
35+
36+
checkPrerequisites(spinner, "cargo", ["--version"], "Rust (cargo)");
37+
checkPrerequisites(spinner, "rustc", ["--version"], "Rust compiler (rustc)");
38+
checkPrerequisites(
39+
spinner,
40+
"solc",
41+
["--version"],
42+
"Solidity compiler (solc)",
43+
);
44+
2445
const uri = await buildStylus(spinner, secretKey);
2546

2647
const url = getUrl(uri, "deploy").toString();
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { spawnSync } from "node:child_process";
2+
import type { Ora } from "ora";
3+
4+
export function checkPrerequisites(
5+
spinner: Ora,
6+
cmd: string,
7+
args: string[] = ["--version"],
8+
name = cmd,
9+
) {
10+
try {
11+
const res = spawnSync(cmd, args, { encoding: "utf-8" });
12+
13+
if (res.error && (res.error as NodeJS.ErrnoException).code === "ENOENT") {
14+
spinner.fail(
15+
`Error: ${name} is not installed or not in PATH.\n` +
16+
`Install it and try again.`,
17+
);
18+
process.exit(1);
19+
}
20+
21+
if (res.status !== 0) {
22+
spinner.fail(
23+
`Error: ${name} returned a non-zero exit code (${res.status}).`,
24+
);
25+
process.exit(1);
26+
}
27+
28+
const ver = res.stdout.trim().split("\n")[0];
29+
spinner.succeed(`${name} detected (${ver}).`);
30+
} catch (err) {
31+
spinner.fail(`Error while checking ${name}: ${err}`);
32+
process.exit(1);
33+
}
34+
}

packages/thirdweb/src/cli/commands/stylus/create.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
11
import { spawnSync } from "node:child_process";
22
import ora from "ora";
33
import prompts from "prompts";
4+
import { checkPrerequisites } from "./check-prerequisites.js";
45

56
export async function createStylusProject() {
67
const spinner = ora();
78

9+
checkPrerequisites(spinner, "cargo", ["--version"], "Rust (cargo)");
10+
checkPrerequisites(spinner, "rustc", ["--version"], "Rust compiler (rustc)");
11+
checkPrerequisites(
12+
spinner,
13+
"solc",
14+
["--version"],
15+
"Solidity compiler (solc)",
16+
);
17+
818
// Step 1: Ensure cargo is installed
919
const cargoCheck = spawnSync("cargo", ["--version"]);
1020
if (cargoCheck.status !== 0) {
@@ -23,7 +33,7 @@ export async function createStylusProject() {
2333
}
2434
spinner.succeed("Stylus installed.");
2535

26-
spawnSync("rustup", ["default", "1.83"], {
36+
spawnSync("rustup", ["default", "1.87"], {
2737
stdio: "inherit",
2838
});
2939
spawnSync("rustup", ["target", "add", "wasm32-unknown-unknown"], {

0 commit comments

Comments
 (0)