1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-06 16:48:01 +00:00

Add Preserve Color Output For Task Command as a Mise TIL

This commit is contained in:
jbranchaud
2025-03-08 16:07:39 -06:00
parent ef9f88f3c8
commit 60020d6e0e
2 changed files with 47 additions and 1 deletions

View File

@@ -0,0 +1,45 @@
# Preserve Color Output For Task Command
I decided to wrap a couple test running commands for a project into a single
`test:all` mise task. It looked something like this:
```toml
[tasks."test:all"]
run = """
bundle exec rspec
yarn test run
"""
description = "Run all tests (RSpec and Vitest)"
depends = ["bundle-install", "node-install"]
```
I can run this with `mise run test:all` and it works. However, there is a
glaring issue that immediately juts out. All of the test runner output is
uncolored text. I'm used to and strongly prefer greens (passes), reds (fails),
and yellows (skips) of test runner output.
The test runners lose the text coloring when run through `mise` because they
believe they are not running in _interactive_ mode.
The [`expect`](https://linux.die.net/man/1/expect) tools (`brew install
expect`) install with another binary called
[`unbuffer`](https://linux.die.net/man/1/unbuffer). `unbuffer` can coerce a
command to run in interactive mode. Prepending these test runner commands with
`unbuffer` will preserve the colors as the results are output to the terminal.
Here is the update `test:all` task:
```toml
[tasks."test:all"]
run = """
unbuffer bundle exec rspec
unbuffer yarn test run
"""
description = "Run all tests (RSpec and Vitest)"
depends = ["bundle-install", "node-install"]
```
For some commands, it seems able to stream out (rather than _buffer_) the
results (e.g. with `vitest`). Whereas with `rspec`, the test suite runs to
completion and is then output to the terminal. I'm still investigating
streaming the `rspec` results.