Skip to content

Commit

Permalink
feat: Color output in terminal if running in TTY
Browse files Browse the repository at this point in the history
  • Loading branch information
gmpinder committed Aug 31, 2024
1 parent 54c35a8 commit 74d99f2
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 3 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 26 additions & 0 deletions scripts/exports.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,32 @@ get_yaml_array() {
readarray -t arr < <(echo "$module_config" | yq -I=0 "$jq_query")
}

color_string() {
local string="$1"
local color_code="$2"
local reset_code="\033[0m"

# ANSI color codes: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
# Example color codes: 31=red, 32=green, 33=yellow, 34=blue, 35=magenta, 36=cyan, 37=white

# Check if color code is provided, otherwise default to white (37)
if [[ -z "$color_code" ]]; then
color_code="37"
fi

# Determine if we should force color
if [ -n "${FORCE_COLOR:-}" ] || [ -n "${CLICOLOR_FORCE:-}" ]; then
# Force color: Apply color codes regardless of whether output is a TTY
echo -e "\033[${color_code}m${string}${reset_code}"
elif [ -t 1 ]; then
# Output is a TTY and color is not forced: Apply color codes
echo -e "\033[${color_code}m${string}${reset_code}"
else
# Output is not a TTY: Do not apply color codes
echo "$string"
fi
}

# Parse OS version and export it
export OS_VERSION=$(grep -Po "(?<=VERSION_ID=)\d+" /usr/lib/os-release)

Expand Down
16 changes: 13 additions & 3 deletions scripts/run_module.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ source /tmp/scripts/exports.sh

# Function to print a centered text banner within a specified width
print_banner() {
local term_width=120
local term_width=80

local text=" ${1} " # Text to print
local padding="$(printf '%0.1s' '='{1..600})"
Expand All @@ -23,7 +23,17 @@ module="$1"
params="$2"
script_path="/tmp/modules/${module}/${module}.sh"

print_banner "Start '${module}' Module"
color_string "$(print_banner "Start '${module}' Module")" "33"
chmod +x ${script_path}

set +e
${script_path} "${params}"
print_banner "End '${module}' Module"
RETVAL=$?
set -e

if [ $RETVAL ]; then
color_string "$(print_banner "End '${module}' Module")" "32"
else
color_string "$(print_banner "Failed '${module}' Module")" "31"
exit 1
fi
1 change: 1 addition & 0 deletions template/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ blue-build-recipe = { version = "=0.8.14", path = "../recipe" }
blue-build-utils = { version = "=0.8.14", path = "../utils" }

log.workspace = true
colored.workspace = true
typed-builder.workspace = true
uuid.workspace = true

Expand Down
5 changes: 5 additions & 0 deletions template/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use blue_build_recipe::Recipe;
use blue_build_utils::constants::{
CONFIG_PATH, CONTAINERFILES_PATH, CONTAINER_FILE, COSIGN_PUB_PATH, FILES_PATH,
};
use colored::control::ShouldColorize;
use log::{debug, error, trace, warn};
use typed_builder::TypedBuilder;
use uuid::Uuid;
Expand Down Expand Up @@ -145,6 +146,10 @@ fn config_dir_exists() -> bool {
exists
}

fn should_color() -> bool {
ShouldColorize::from_env().should_colorize()
}

mod filters {
#[allow(clippy::unnecessary_wraps)]
pub fn replace<T: std::fmt::Display>(input: T, from: char, to: &str) -> rinja::Result<String> {
Expand Down
6 changes: 6 additions & 0 deletions template/templates/Containerfile.j2
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ ARG MODULE_DIRECTORY="/tmp/modules"
ARG IMAGE_NAME="{{ recipe.name }}"
ARG BASE_IMAGE="{{ recipe.base_image }}"

{%- if self::should_color() %}
ARG FORCE_COLOR=1
ARG CLICOLOR_FORCE=1
ARG RUST_LOG_STYLE=always
{%- endif %}

# Key RUN
RUN --mount=type=bind,from=stage-keys,src=/keys,dst=/tmp/keys \
mkdir -p /etc/pki/containers/ \
Expand Down
6 changes: 6 additions & 0 deletions template/templates/stages.j2
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ COPY cosign.pub /keys/{{ recipe.name|replace('/', "_") }}.pub
# {{ stage.name|capitalize }} stage
FROM {{ stage.from }} AS {{ stage.name }}

{%- if self::should_color() %}
ARG FORCE_COLOR=1
ARG CLICOLOR_FORCE=1
ARG RUST_LOG_STYLE=always
{%- endif %}

{%- if stage.from != "scratch" %}
# Add compatibility for modules
RUN --mount=type=bind,from=stage-bins,src=/bins/,dst=/tmp/bins/ \
Expand Down

0 comments on commit 74d99f2

Please sign in to comment.