Update install.sh (#30)

fix: resolve installation failures on Windows through Git Bash
This commit is contained in:
Marc Peters 2025-12-04 09:40:46 -06:00 committed by GitHub
parent 4103805270
commit e428f4ecfd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -65,6 +65,14 @@ CUSTOM_INSTALL_DIR="" # Set via --install-dir argument
# Utility Functions # Utility Functions
############################################################################# #############################################################################
jq_exec() {
local output
output=$(jq -r "$@")
local ret=$?
printf "%s\n" "$output" | tr -d '\r'
return $ret
}
print_header() { print_header() {
echo -e "${CYAN}${BOLD}" echo -e "${CYAN}${BOLD}"
echo "╔════════════════════════════════════════════════════════════════╗" echo "╔════════════════════════════════════════════════════════════════╗"
@ -258,14 +266,14 @@ fetch_registry() {
get_profile_components() { get_profile_components() {
local profile=$1 local profile=$1
jq -r ".profiles.${profile}.components[]" "$TEMP_DIR/registry.json" jq_exec ".profiles.${profile}.components[]" "$TEMP_DIR/registry.json"
} }
get_component_info() { get_component_info() {
local component_id=$1 local component_id=$1
local component_type=$2 local component_type=$2
jq -r ".components.${component_type}[] | select(.id == \"${component_id}\")" "$TEMP_DIR/registry.json" jq_exec ".components.${component_type}[] | select(.id == \"${component_id}\")" "$TEMP_DIR/registry.json"
} }
# Helper function to get the correct registry key for a component type # Helper function to get the correct registry key for a component type
@ -298,7 +306,7 @@ resolve_dependencies() {
local registry_key=$(get_registry_key "$type") local registry_key=$(get_registry_key "$type")
# Get dependencies for this component # Get dependencies for this component
local deps=$(jq -r ".components.${registry_key}[] | select(.id == \"${id}\") | .dependencies[]?" "$TEMP_DIR/registry.json" 2>/dev/null || echo "") local deps=$(jq_exec ".components.${registry_key}[] | select(.id == \"${id}\") | .dependencies[]?" "$TEMP_DIR/registry.json" 2>/dev/null || echo "")
if [ -n "$deps" ]; then if [ -n "$deps" ]; then
for dep in $deps; do for dep in $deps; do
@ -462,17 +470,17 @@ show_profile_menu() {
echo -e "${BOLD}Available Installation Profiles:${NC}\n" echo -e "${BOLD}Available Installation Profiles:${NC}\n"
# Essential profile # Essential profile
local essential_name=$(jq -r '.profiles.essential.name' "$TEMP_DIR/registry.json") local essential_name=$(jq_exec '.profiles.essential.name' "$TEMP_DIR/registry.json")
local essential_desc=$(jq -r '.profiles.essential.description' "$TEMP_DIR/registry.json") local essential_desc=$(jq_exec '.profiles.essential.description' "$TEMP_DIR/registry.json")
local essential_count=$(jq -r '.profiles.essential.components | length' "$TEMP_DIR/registry.json") local essential_count=$(jq_exec '.profiles.essential.components | length' "$TEMP_DIR/registry.json")
echo -e " ${GREEN}1) ${essential_name}${NC}" echo -e " ${GREEN}1) ${essential_name}${NC}"
echo -e " ${essential_desc}" echo -e " ${essential_desc}"
echo -e " Components: ${essential_count}\n" echo -e " Components: ${essential_count}\n"
# Developer profile # Developer profile
local dev_desc=$(jq -r '.profiles.developer.description' "$TEMP_DIR/registry.json") local dev_desc=$(jq_exec '.profiles.developer.description' "$TEMP_DIR/registry.json")
local dev_count=$(jq -r '.profiles.developer.components | length' "$TEMP_DIR/registry.json") local dev_count=$(jq_exec '.profiles.developer.components | length' "$TEMP_DIR/registry.json")
local dev_badge=$(jq -r '.profiles.developer.badge // ""' "$TEMP_DIR/registry.json") local dev_badge=$(jq_exec '.profiles.developer.badge // ""' "$TEMP_DIR/registry.json")
if [ -n "$dev_badge" ]; then if [ -n "$dev_badge" ]; then
echo -e " ${BLUE}2) Developer ${GREEN}[${dev_badge}]${NC}" echo -e " ${BLUE}2) Developer ${GREEN}[${dev_badge}]${NC}"
else else
@ -482,25 +490,25 @@ show_profile_menu() {
echo -e " Components: ${dev_count}\n" echo -e " Components: ${dev_count}\n"
# Business profile # Business profile
local business_name=$(jq -r '.profiles.business.name' "$TEMP_DIR/registry.json") local business_name=$(jq_exec '.profiles.business.name' "$TEMP_DIR/registry.json")
local business_desc=$(jq -r '.profiles.business.description' "$TEMP_DIR/registry.json") local business_desc=$(jq_exec '.profiles.business.description' "$TEMP_DIR/registry.json")
local business_count=$(jq -r '.profiles.business.components | length' "$TEMP_DIR/registry.json") local business_count=$(jq_exec '.profiles.business.components | length' "$TEMP_DIR/registry.json")
echo -e " ${CYAN}3) ${business_name}${NC}" echo -e " ${CYAN}3) ${business_name}${NC}"
echo -e " ${business_desc}" echo -e " ${business_desc}"
echo -e " Components: ${business_count}\n" echo -e " Components: ${business_count}\n"
# Full profile # Full profile
local full_name=$(jq -r '.profiles.full.name' "$TEMP_DIR/registry.json") local full_name=$(jq_exec '.profiles.full.name' "$TEMP_DIR/registry.json")
local full_desc=$(jq -r '.profiles.full.description' "$TEMP_DIR/registry.json") local full_desc=$(jq_exec '.profiles.full.description' "$TEMP_DIR/registry.json")
local full_count=$(jq -r '.profiles.full.components | length' "$TEMP_DIR/registry.json") local full_count=$(jq_exec '.profiles.full.components | length' "$TEMP_DIR/registry.json")
echo -e " ${MAGENTA}4) ${full_name}${NC}" echo -e " ${MAGENTA}4) ${full_name}${NC}"
echo -e " ${full_desc}" echo -e " ${full_desc}"
echo -e " Components: ${full_count}\n" echo -e " Components: ${full_count}\n"
# Advanced profile # Advanced profile
local adv_name=$(jq -r '.profiles.advanced.name' "$TEMP_DIR/registry.json") local adv_name=$(jq_exec '.profiles.advanced.name' "$TEMP_DIR/registry.json")
local adv_desc=$(jq -r '.profiles.advanced.description' "$TEMP_DIR/registry.json") local adv_desc=$(jq_exec '.profiles.advanced.description' "$TEMP_DIR/registry.json")
local adv_count=$(jq -r '.profiles.advanced.components | length' "$TEMP_DIR/registry.json") local adv_count=$(jq_exec '.profiles.advanced.components | length' "$TEMP_DIR/registry.json")
echo -e " ${YELLOW}5) ${adv_name}${NC}" echo -e " ${YELLOW}5) ${adv_name}${NC}"
echo -e " ${adv_desc}" echo -e " ${adv_desc}"
echo -e " Components: ${adv_count}\n" echo -e " Components: ${adv_count}\n"
@ -549,7 +557,7 @@ show_custom_menu() {
echo "Available categories:" echo "Available categories:"
for i in "${!categories[@]}"; do for i in "${!categories[@]}"; do
local cat="${categories[$i]}" local cat="${categories[$i]}"
local count=$(jq -r ".components.${cat} | length" "$TEMP_DIR/registry.json") local count=$(jq_exec ".components.${cat} | length" "$TEMP_DIR/registry.json")
local cat_display=$(echo "$cat" | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}') local cat_display=$(echo "$cat" | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}')
echo " $((i+1))) ${cat_display} (${count} available)" echo " $((i+1))) ${cat_display} (${count} available)"
done done
@ -598,12 +606,12 @@ show_component_selection() {
local cat_display=$(echo "$category" | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}') local cat_display=$(echo "$category" | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}')
echo -e "${CYAN}${BOLD}${cat_display}:${NC}" echo -e "${CYAN}${BOLD}${cat_display}:${NC}"
local components=$(jq -r ".components.${category}[] | .id" "$TEMP_DIR/registry.json") local components=$(jq_exec ".components.${category}[] | .id" "$TEMP_DIR/registry.json")
local idx=1 local idx=1
while IFS= read -r comp_id; do while IFS= read -r comp_id; do
local comp_name=$(jq -r ".components.${category}[] | select(.id == \"${comp_id}\") | .name" "$TEMP_DIR/registry.json") local comp_name=$(jq_exec ".components.${category}[] | select(.id == \"${comp_id}\") | .name" "$TEMP_DIR/registry.json")
local comp_desc=$(jq -r ".components.${category}[] | select(.id == \"${comp_id}\") | .description" "$TEMP_DIR/registry.json") local comp_desc=$(jq_exec ".components.${category}[] | select(.id == \"${comp_id}\") | .description" "$TEMP_DIR/registry.json")
echo " ${idx}) ${comp_name}" echo " ${idx}) ${comp_name}"
echo " ${comp_desc}" echo " ${comp_desc}"
@ -821,7 +829,7 @@ perform_installation() {
local type="${comp%%:*}" local type="${comp%%:*}"
local id="${comp##*:}" local id="${comp##*:}"
local registry_key=$(get_registry_key "$type") local registry_key=$(get_registry_key "$type")
local path=$(jq -r ".components.${registry_key}[] | select(.id == \"${id}\") | .path" "$TEMP_DIR/registry.json") local path=$(jq_exec ".components.${registry_key}[] | select(.id == \"${id}\") | .path" "$TEMP_DIR/registry.json")
if [ -n "$path" ] && [ "$path" != "null" ]; then if [ -n "$path" ] && [ "$path" != "null" ]; then
local install_path=$(get_install_path "$path") local install_path=$(get_install_path "$path")
@ -887,7 +895,7 @@ perform_installation() {
local registry_key=$(get_registry_key "$type") local registry_key=$(get_registry_key "$type")
# Get component path # Get component path
local path=$(jq -r ".components.${registry_key}[] | select(.id == \"${id}\") | .path" "$TEMP_DIR/registry.json") local path=$(jq_exec ".components.${registry_key}[] | select(.id == \"${id}\") | .path" "$TEMP_DIR/registry.json")
if [ -z "$path" ] || [ "$path" = "null" ]; then if [ -z "$path" ] || [ "$path" = "null" ]; then
print_warning "Could not find path for ${comp}" print_warning "Could not find path for ${comp}"
@ -944,7 +952,7 @@ perform_installation() {
# Handle additional paths for advanced profile # Handle additional paths for advanced profile
if [ "$PROFILE" = "advanced" ]; then if [ "$PROFILE" = "advanced" ]; then
local additional_paths=$(jq -r '.profiles.advanced.additionalPaths[]?' "$TEMP_DIR/registry.json") local additional_paths=$(jq_exec '.profiles.advanced.additionalPaths[]?' "$TEMP_DIR/registry.json")
if [ -n "$additional_paths" ]; then if [ -n "$additional_paths" ]; then
print_step "Installing additional paths..." print_step "Installing additional paths..."
while IFS= read -r path; do while IFS= read -r path; do
@ -1014,7 +1022,7 @@ list_components() {
local cat_display=$(echo "$category" | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}') local cat_display=$(echo "$category" | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}')
echo -e "${CYAN}${BOLD}${cat_display}:${NC}" echo -e "${CYAN}${BOLD}${cat_display}:${NC}"
local components=$(jq -r ".components.${category}[] | \"\(.id)|\(.name)|\(.description)\"" "$TEMP_DIR/registry.json") local components=$(jq_exec ".components.${category}[] | \"\(.id)|\(.name)|\(.description)\"" "$TEMP_DIR/registry.json")
while IFS='|' read -r id name desc; do while IFS='|' read -r id name desc; do
echo -e " ${GREEN}${name}${NC} (${id})" echo -e " ${GREEN}${name}${NC} (${id})"