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

  1. Install pnpm (corepack enable pnpm or npm i -g pnpm) and ensure it is on PATH, then rebuild.
  2. Run the failing command manually (`cd src/meta/dashboard && pnpm install && pnpm build`) to see the underlying pnpm error output.
  3. Clear the dashboard state: delete node_modules and pnpm-lock drift, then `pnpm install` again.
  4. Check Node/npm registry connectivity; set a registry mirror or proxy if the network is restricted.
  5. 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

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


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)