schon/scripts/Unix/install.sh

63 lines
1.9 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
if [ ! -d "./evibes" ]; then
printf "\e[31m❌ Please run this script from the project's root (where the 'evibes' directory lives).\e[0m\n"
exit 1
fi
PURPLE="\e[38;2;121;101;209m"
RESET="\e[0m"
GRAY="\e[90m"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ART_PATH="$SCRIPT_DIR/../ASCII_ART_EVIBES"
if [ ! -f "$ART_PATH" ]; then
printf "\e[31m❌ Could not find ASCII art at %s\e[0m\n" "$ART_PATH"
exit 1
fi
while IFS= read -r line; do
printf "%b%s%b\n" "$PURPLE" "$line" "$RESET"
done < "$ART_PATH"
printf "\n%b by WISELESS TEAM%b\n\n" "$GRAY" "$RESET"
if [ ! -f .env ]; then
printf "\e[33m.env file not found. Exiting without running Docker steps.\e[0m\n"
exit 0
fi
CPU_COUNT=$(nproc 2>/dev/null || sysctl -n hw.ncpu)
if [ "$CPU_COUNT" -lt 4 ]; then
printf "\e[31mInsufficient CPU cores: %d detected. Minimum 4 required.\e[0m\n" "$CPU_COUNT"
exit 1
fi
if [ -f /proc/meminfo ]; then
MEM_KB=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
MEM_GB=$(awk "BEGIN {printf \"%.2f\", ${MEM_KB}/1024/1024}")
else
MEM_BYTES=$(vm_stat | awk '/Pages free/ {print $3 * 4096}')
MEM_GB=$(awk "BEGIN {printf \"%.2f\", ${MEM_BYTES}/1024/1024/1024}")
fi
if (( $(echo "$MEM_GB < 6" | bc -l) )); then
printf "\e[31mInsufficient RAM: %.2fGB detected. Minimum 6 GB required.\e[0m\n" "$MEM_GB"
exit 1
fi
FREE_GB=$(df -BG . | awk 'NR==2 {gsub("G","",$4); print $4}')
if [ "$FREE_GB" -lt 20 ]; then
printf "\e[31mInsufficient free disk space: %dGB available. Minimum 20 GB required.\e[0m\n" "$FREE_GB"
exit 1
fi
printf "\e[32mSystem requirements met: CPU cores=%d, RAM=%.2fGB, FreeDisk=%dGB\e[0m\n" "$CPU_COUNT" "$MEM_GB" "$FREE_GB"
printf "\e[36mPulling related images…\e[0m\n"
docker compose pull --ansi never
printf "\e[36mBuilding the project's images…\e[0m\n"
docker compose build --ansi never