risingwavelabs/risingwave · error
pnpm failed with status
Error message
pnpm {} failed with status: {} What it means
In src/meta/dashboard/build.rs, the build script wraps `pnpm` invocations (e.g. `pnpm install`, `pnpm build`) run in the dashboard directory. If the pnpm child process exits with a non-zero status, the script bails with this anyhow error containing the pnpm arguments and exit status. It reflects a failed frontend build step, not a Rust compile error.
Solutions
- Install pnpm (corepack enable pnpm or npm i -g pnpm) and ensure it is on PATH, then rebuild.
- Run the failing command manually (`cd src/meta/dashboard && pnpm install && pnpm build`) to see the underlying pnpm error output.
- Clear the dashboard state: delete node_modules and pnpm-lock drift, then `pnpm install` again.
- Check Node/npm registry connectivity; set a registry mirror or proxy if the network is restricted.
- Ensure the Node version meets the dashboard's engines requirement (use nvm to switch).
Example fix
// before: build fails with status 127 because pnpm is missing $ cargo build -p risingwave_meta // after: install pnpm via corepack first $ corepack enable && corepack prepare pnpm@latest --activate $ cargo build -p risingwave_meta
Defensive patterns
Strategy: try-catch
Validate before calling
// In build.rs style: check tooling before invoking
let ok = Command::new("pnpm").arg("--version").status().map(|s| s.success()).unwrap_or(false);
if !ok {
panic!("pnpm is not installed or not on PATH; run `corepack enable pnpm`");
} Try / catch
match Command::new("pnpm").args(args).current_dir(DASHBOARD_DIR).status() {
Ok(status) if status.success() => {}
Ok(status) => anyhow::bail!("pnpm {} failed with status: {}", args.join(" "), status),
Err(e) => anyhow::bail!("failed to spawn pnpm (is it installed?): {}", e),
} Prevention
- Install pnpm via corepack and pin the version in package.json's packageManager field.
- Ensure CI has npm registry access or a configured mirror/proxy.
- Run `pnpm install && pnpm build` manually in src/meta/dashboard when the build script fails to see the real error.
- Keep Node version compatible (use .nvmrc/engines) and commit a consistent pnpm-lock.yaml.
When it happens
Trigger: Running cargo build of the risingwave_meta crate (build.rs of src/meta/dashboard) when pnpm install/build fails — e.g. pnpm not on PATH (status 127/101), network failure fetching npm packages, or a JavaScript/TypeScript error in the dashboard code.
Common situations: Building on a machine without pnpm installed; offline/air-gapped CI without npm registry access; node_modules corruption; incompatible Node version; dashboard source checked out with uncommitted local changes that fail to compile.
Related errors
- Feature ` ` is not enabled at compile time. Please enable…
- RisingWave is not compiled with feature `sink
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/934d0d03be901edb.
Report an issue: GitHub.
Appendix: source
Thrown at src/meta/dashboard/build.rs:54
Path::new(&out_dir).join("assets")
}
fn build() -> anyhow::Result<()> {
// TODO(bugen): we should include all files and subdirectories under `DASHBOARD_DIR`
// while excluding the `out` directory. There's no elegant way to do this.
rerun_if_changed!(format!("{DASHBOARD_DIR}/components"));
for args in [
["install", "--frozen-lockfile"].as_slice(),
["run", "build"].as_slice(),
] {
let exit_status = Command::new("pnpm")
.args(args)
.current_dir(DASHBOARD_DIR)
.status()?;
if !exit_status.success() {
anyhow::bail!(
"pnpm {} failed with status: {}",
args.join(" "),
exit_status
);
}
}
let dest = dest_dir();
let src = Path::new(DASHBOARD_DIR).join("out");
dircpy::copy_dir(src, dest)?;
Ok(())
}
fn main() -> anyhow::Result<()> {
let should_build = env_var_is_true("ENABLE_BUILD_DASHBOARD");
if should_build {View on GitHub (pinned to 6469eb736d)