rust-lang / cargo

The Rust package manager
https://doc.rust-lang.org/cargo
Apache License 2.0
12.46k stars 2.36k forks source link

Build script warnings don't respect `--message-format=json`. #14246

Closed JarredAllen closed 1 month ago

JarredAllen commented 1 month ago

Problem

When a build script prints cargo::warning=msg to stdout when running, cargo displays it as warning: <crate>: msg. This is great for human output, but causes problems when run with --message-format=json and passed to tooling that expects JSON data.

Steps

  1. Make a crate with a build.rs containing the line: println!("cargo::warning=msg");
  2. Run cargo check --message-fmt=json
  3. Observe the line of non-JSON in the middle of your JSON

Possible Solution(s)

It'd be cool if cargo could convert it into a JSON object of a similar format to warnings that cargo/rustc directly emit.

Notes

No response

Version

cargo 1.79.0 (ffa9cf99a 2024-06-03)
release: 1.79.0
commit-hash: ffa9cf99a594e59032757403d4c780b46dc2c43a
commit-date: 2024-06-03
host: x86_64-unknown-linux-gnu
libgit2: 1.7.2 (sys:0.18.3 vendored)
libcurl: 8.6.0-DEV (sys:0.4.72+curl-8.6.0 vendored ssl:OpenSSL/1.1.1w)
ssl: OpenSSL 1.1.1w  11 Sep 2023
os: Ubuntu 22.4.0 (jammy) [64-bit]
epage commented 1 month ago

This applies to much more than build scripts but to all cargo warnings and errors. We have #8283 tracking that and I would be inclined to close this in favor of #8283.

weihanglo commented 1 month ago

What about verbose (-vv) build script outputs? They are usually from an external build system and not possible to make it respect --message-format=json?

We have #8283 tracking that and I would be inclined to close this in favor of #8283.

Agree.