microsoft / just

The task library that just works
https://microsoft.github.io/just
MIT License
1.96k stars 94 forks source link

just prints stderr to screen even if the command executes successfully #534

Open kaiyoma opened 3 years ago

kaiyoma commented 3 years ago

typedoc has a known issue that it prints one byte (a single newline) to stderr even when successful (https://github.com/TypeStrong/typedoc/issues/1566). If I run typedoc as part of my tasks with just, I can see that output:

[5:00:23 PM] ■ started 'build:types'
[5:00:30 PM] ■ finished 'build:types' in 6.77s
[5:00:30 PM] ■ started 'build:docs'

[5:00:39 PM] ■ finished 'build:docs' in 9.39s
[5:00:39 PM] ■ finished 'build' in 42.61s

I understand that just is probably printing stderr since something was written to it, which is reasonable. Unfortunately, several popular tools (Jest, typedoc, Storybook, etc) do this even when everything is successful. Maybe just should avoid printing stderr to the screen if the exit code of the task was 0?

wbreza commented 3 years ago

@kaiyoma Were you able to find any work around for this issue? I think I'm running into the same

kaiyoma commented 3 years ago

@wbreza The issue specifically with typedoc has been fixed: https://github.com/TypeStrong/typedoc/issues/1566

You can fix the Jest issue by using the standard reporter. I think Storybook still has the buggy behavior: https://github.com/storybookjs/storybook/issues/14621

In general, I've added some custom code to our repo to run all our Just tasks like this:

try {
  execSync(task, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] });
} catch (error) {
  execSync(task, { encoding: 'utf-8' });
}

Basically, run the task while sending stderr to a black hole. If the task fails, run it again while preserving stderr, so that it bubbles up. Not ideal, since we have to run the task twice, but it works around the issue.