feat: Color output in terminal if running in TTY
This commit is contained in:
parent
54c35a870f
commit
74d99f2b17
7 changed files with 58 additions and 3 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -401,6 +401,7 @@ version = "0.8.14"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"blue-build-recipe",
|
"blue-build-recipe",
|
||||||
"blue-build-utils",
|
"blue-build-utils",
|
||||||
|
"colored",
|
||||||
"log",
|
"log",
|
||||||
"rinja",
|
"rinja",
|
||||||
"typed-builder",
|
"typed-builder",
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,32 @@ get_yaml_array() {
|
||||||
readarray -t arr < <(echo "$module_config" | yq -I=0 "$jq_query")
|
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
|
# Parse OS version and export it
|
||||||
export OS_VERSION=$(grep -Po "(?<=VERSION_ID=)\d+" /usr/lib/os-release)
|
export OS_VERSION=$(grep -Po "(?<=VERSION_ID=)\d+" /usr/lib/os-release)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ source /tmp/scripts/exports.sh
|
||||||
|
|
||||||
# Function to print a centered text banner within a specified width
|
# Function to print a centered text banner within a specified width
|
||||||
print_banner() {
|
print_banner() {
|
||||||
local term_width=120
|
local term_width=80
|
||||||
|
|
||||||
local text=" ${1} " # Text to print
|
local text=" ${1} " # Text to print
|
||||||
local padding="$(printf '%0.1s' '='{1..600})"
|
local padding="$(printf '%0.1s' '='{1..600})"
|
||||||
|
|
@ -23,7 +23,17 @@ module="$1"
|
||||||
params="$2"
|
params="$2"
|
||||||
script_path="/tmp/modules/${module}/${module}.sh"
|
script_path="/tmp/modules/${module}/${module}.sh"
|
||||||
|
|
||||||
print_banner "Start '${module}' Module"
|
color_string "$(print_banner "Start '${module}' Module")" "33"
|
||||||
chmod +x ${script_path}
|
chmod +x ${script_path}
|
||||||
|
|
||||||
|
set +e
|
||||||
${script_path} "${params}"
|
${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
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ blue-build-recipe = { version = "=0.8.14", path = "../recipe" }
|
||||||
blue-build-utils = { version = "=0.8.14", path = "../utils" }
|
blue-build-utils = { version = "=0.8.14", path = "../utils" }
|
||||||
|
|
||||||
log.workspace = true
|
log.workspace = true
|
||||||
|
colored.workspace = true
|
||||||
typed-builder.workspace = true
|
typed-builder.workspace = true
|
||||||
uuid.workspace = true
|
uuid.workspace = true
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ use blue_build_recipe::Recipe;
|
||||||
use blue_build_utils::constants::{
|
use blue_build_utils::constants::{
|
||||||
CONFIG_PATH, CONTAINERFILES_PATH, CONTAINER_FILE, COSIGN_PUB_PATH, FILES_PATH,
|
CONFIG_PATH, CONTAINERFILES_PATH, CONTAINER_FILE, COSIGN_PUB_PATH, FILES_PATH,
|
||||||
};
|
};
|
||||||
|
use colored::control::ShouldColorize;
|
||||||
use log::{debug, error, trace, warn};
|
use log::{debug, error, trace, warn};
|
||||||
use typed_builder::TypedBuilder;
|
use typed_builder::TypedBuilder;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
@ -145,6 +146,10 @@ fn config_dir_exists() -> bool {
|
||||||
exists
|
exists
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn should_color() -> bool {
|
||||||
|
ShouldColorize::from_env().should_colorize()
|
||||||
|
}
|
||||||
|
|
||||||
mod filters {
|
mod filters {
|
||||||
#[allow(clippy::unnecessary_wraps)]
|
#[allow(clippy::unnecessary_wraps)]
|
||||||
pub fn replace<T: std::fmt::Display>(input: T, from: char, to: &str) -> rinja::Result<String> {
|
pub fn replace<T: std::fmt::Display>(input: T, from: char, to: &str) -> rinja::Result<String> {
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,12 @@ ARG MODULE_DIRECTORY="/tmp/modules"
|
||||||
ARG IMAGE_NAME="{{ recipe.name }}"
|
ARG IMAGE_NAME="{{ recipe.name }}"
|
||||||
ARG BASE_IMAGE="{{ recipe.base_image }}"
|
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
|
# Key RUN
|
||||||
RUN --mount=type=bind,from=stage-keys,src=/keys,dst=/tmp/keys \
|
RUN --mount=type=bind,from=stage-keys,src=/keys,dst=/tmp/keys \
|
||||||
mkdir -p /etc/pki/containers/ \
|
mkdir -p /etc/pki/containers/ \
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,12 @@ COPY cosign.pub /keys/{{ recipe.name|replace('/', "_") }}.pub
|
||||||
# {{ stage.name|capitalize }} stage
|
# {{ stage.name|capitalize }} stage
|
||||||
FROM {{ stage.from }} AS {{ stage.name }}
|
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" %}
|
{%- if stage.from != "scratch" %}
|
||||||
# Add compatibility for modules
|
# Add compatibility for modules
|
||||||
RUN --mount=type=bind,from=stage-bins,src=/bins/,dst=/tmp/bins/ \
|
RUN --mount=type=bind,from=stage-bins,src=/bins/,dst=/tmp/bins/ \
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue