Add a global `--format` option for machine-readable output
- Dominant language
- Python
- Stars
- 140
- Forks
- 45
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 6
Description
As discussed in the [matrix channel](https://matrix.to/#/!NHkwyjdxGqpzRNYJZF:matrix.org/$178462649612760lRCWd:matrix.org?via=gnome.org&via=matrix.org&via=kde.org)
Right now there is only one format of logging which is very nice and human-readable, but, unfortunately, machine unreadable. This issue is set up to make it possible to set up an output format using a `--format` flag.
In the matrix channel several formats were proposed:
### `--format=pretty`
This would be the default format and it would map to the current style of output that buildstream does
### `--format=minimal`
This output format would output only the text, no formatting, no padding, no fancy unicode symbols. This format would be useful in making short pipes into bash utilities. Like
```
bst --format=minimal artifact list-contents my-component.bst | as-tree
```
### `--format=json`
This output format would be useful in more complex tooling, such as `nushell` or even scripts that wrap `bst`, so that building tooling around bst becomes possible, like so:
```rust
#[derive(Deserialize)]
struct Message {
// potential message fields
}
fn main() {
let mut child = Command::new("bst")
.arg("--format=json")
.arg("build")
.stdout(Stdio::piped())
.stderr(Stdio::inherit())
.spawn()
.expect("failed to spawn bst");
let stdout = child.stdout.take().unwrap();
for line in BufReader::new(stdout).lines().map_while(Result::ok) {
// handling messages from bst
}
let status = child.wait().expect("bst process lost");
std::process::exit(status.code().unwrap_or(1));
}
```
Contributor guide
Research direction
Start at the global `bst` command entry point and trace how the current human-readable logging is selected. The work is complete when `--format` supports the described `pretty`, `minimal`, and `json` behaviors globally while preserving the current output as the default.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- cli
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100