apache / apache/buildstream

Add a global `--format` option for machine-readable output

Open
#2,158 0 comments 1 reaction 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.