question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Color output from CI jobs

See original GitHub issue

GitLab supports color escape sequences when viewing a job’s output. Perhaps the same is true of GitHub, Jenkins, or other CI tools.

I’m guessing that the server running these commands is piping stdout and stderr to other processes or files which later get shipped over the wire. Because of this it is likely failing some isatty() call in _compat.py.

While it isn’t a tty, it will eventually be displayed by something capable of handling colors. My current workaround is to detect if it’s being ran as a GitLab CI job by the presence of an environment variable and explicitly setting ctx.color = True

I think this is something that could/should be handled internally by click so that I don’t have to add this workaround to every utility I write which may end up being used within some CI. Does anyone else agree?

workaround

#!/usr/bin/env python

import os

import click


@click.command()
@click.option('--name', '-n', default='Anonymous', envvar='LOGNAME')
@click.pass_context
def cli_main(ctx, name):
    if 'GITLAB_USER_LOGIN' in os.environ:
        ctx.color = True
    click.secho(f'Hello {name}', fg='magenta', bold=True)


if __name__ == '__main__':
    import sys
    cli_main(sys.argv[1:])

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Comments:10 (9 by maintainers)

github_iconTop GitHub Comments

1reaction
flying-sheepcommented, May 8, 2019

Transcluding my comments from #558:

the chalk JS package has those 13 000 depending packages. this (transitively) includes nearly all node.js command line applications.

there’s no real standard for this. just check this mess

i think we have FORCE_COLOR, CLICOLOR, CLICOLOR_FORCE, LS_COLORS, GREP_COLORS, and various --color options, e.g. --color=always|auto|off in GNU tools. CLICOLOR[_FORCE] seems to be in cmake and OSX tools, as well as the most clear and intuitive way, but none of the bug reports for other libs had any impact. i’m sad for @jhasse for putting in so much work in PRs being interested, despite it being the best idea and already integrated in some tools.

convenient and expected would IMHO be to have a method that automatically adds a GNU-like --color option, as well as support for the whole env variable mess like supports-color does.

0reactions
eplodncommented, Feb 20, 2020

I’m running aws-sam-cli that happens to use click to format its output, in Jenkins.

My Jenkins is perfectly capable of displaying colors, but click (correctly) discovers it’s not running with tty, so no colors would be printed.

My options are: a) forking aws-sam-cli and implementing the fix as above, while maintaining my fork, or b) respectfully ask the click maintainers to reconsider respecting an environment variable e.g. as per @flying-sheep 's proposal. It would still be up to me to run e.g. CLICOLOR_FORCE=1 aws-sam-cli ... in Jenkins.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Format scripts and job logs - GitLab Docs
Use color codes to make job logs easier to review. ... Script output can be colored using ANSI escape codes, or by running...
Read more >
Check your GitLab CI Job's Raw Output in style | by Karuppiah N
Our GitLab CI Job output is colorful and so BIG that once the job succeeds ... brings the color and beauty when shown...
Read more >
How to Add Colors to Continuous Integration Output
A small tip that made my everyday work with CI more colorful. Do you use Travis, Github Actions, or Gitlab CI? Do you...
Read more >
Colored logging messages from Python script within GitLab CI
I am using a docker container for my GitLab CI and would like to have any output/logging messages in color inside the CI....
Read more >
AnsiColor | Jenkins plugin
Create a job in Jenkins that executes the following shell script. Don't forget to check the "Color the ANSI Console Output" option.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found