From: Tobias Brunner Date: Thu, 10 Apr 2025 07:06:18 +0000 (+0200) Subject: tty: Produce colored output in CI environments X-Git-Tag: 6.0.2dr1~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=defbabd724a57313202e20d4a81b1e1426dcd2b4;p=thirdparty%2Fstrongswan.git tty: Produce colored output in CI environments --- diff --git a/src/libstrongswan/utils/utils/tty.c b/src/libstrongswan/utils/utils/tty.c index 753e624224..556726400f 100644 --- a/src/libstrongswan/utils/utils/tty.c +++ b/src/libstrongswan/utils/utils/tty.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2014 Tobias Brunner + * Copyright (C) 2008-2025 Tobias Brunner * Copyright (C) 2005-2008 Martin Willi * * Copyright (C) secunet Security Networks AG @@ -18,6 +18,7 @@ #include #include +#include ENUM(tty_color_names, TTY_RESET, TTY_BG_DEF, "\e[0m", @@ -44,12 +45,30 @@ ENUM(tty_color_names, TTY_RESET, TTY_BG_DEF, "\e[49m", ); +/** + * Check if the output goes to stdout/stderr in a CI environment, where colored + * output is usually supported. + */ +static bool is_ci(int fd) +{ + static bool ci_checked = FALSE, ci_found = FALSE; + + if (!ci_checked) + { + ci_checked = TRUE; + ci_found = getenv("CI") && (getenv("GITHUB_ACTIONS") || + getenv("CIRRUS_CI") || + getenv("APPVEYOR")); + } + return ci_found && (fd == fileno(stdout) || fd == fileno(stderr)); +} + /** * Get the escape string for a given TTY color, empty string on non-tty FILE */ char* tty_escape_get(int fd, tty_escape_t escape) { - if (!isatty(fd)) + if (!isatty(fd) && !is_ci(fd)) { return ""; }