particle-os-cli/scripts/run_module.sh
2025-01-05 13:31:29 -05:00

72 lines
1.8 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
source /tmp/scripts/exports.sh
# Function to print a centered text banner within a specified width
print_banner() {
local term_width=80
local text=" ${1} " # Text to print
local padding="$(printf '%0.1s' '='{1..600})"
local padlen=0
if (( ${#text} < term_width )); then
padlen=$(( (term_width - ${#text}) / 2 ))
fi
printf '%*.*s%s%*.*s\n' 0 "$padlen" "$padding" "$text" 0 "$padlen" "$padding"
}
get_script_path() {
local script_name="$1"
local extensions=("nu" "sh" "bash")
local base_script_path="/tmp/modules/${script_name}/${script_name}"
local tried_scripts=()
# See if
if [[ -f "${base_script_path}" ]]; then
echo "${base_script_path}"
return 0
fi
tried_scripts+=("${script_name}")
# Iterate through each extension and check if the file exists
for ext in "${extensions[@]}"; do
local script_path="${base_script_path}.${ext}"
tried_scripts+=("${script_name}.${ext}")
if [[ -f "$script_path" ]]; then
# Output only the script path without extra information
echo "$script_path"
return 0 # Exit the function when the first matching file is found
fi
done
# If no matching file was found
echo "Failed to find scripts matching: ${tried_scripts[*]}" >&2
return 1
}
module="$1"
params="$2"
script_path="$(get_script_path "$module")"
nushell_version="$(echo "${params}" | jq '.["nushell-version"] // empty')"
export PATH="/usr/libexec/bluebuild/nu/:$PATH"
color_string "$(print_banner "Start '${module}' Module")" "33"
chmod +x "${script_path}"
if "${script_path}" "${params}"; then
color_string "$(print_banner "End '${module}' Module")" "32"
else
color_string "$(print_banner "Failed '${module}' Module")" "31"
exit 1
fi
if command -v ostree > /dev/null; then
ostree container commit
fi