diff --git a/dev.sh b/dev.sh index fe11a0c1..f37f7c88 100755 --- a/dev.sh +++ b/dev.sh @@ -1,5 +1,60 @@ #!/bin/bash +REQUIRED_NODE_VERSION=22.0.0 +REQUIRED_YARN_VERSION=1.22.22 +REQUIRED_DOCKER_VERSION=24.0.0 + +version_at_least() { + [ "$(printf '%s\n' "$@" | sort -V | head -n 1)" == "$1" ] +} + +check_versions() { + local node_version yarn_version docker_version + local errors=() + + # Check Node.js version + if ! command -v node &> /dev/null; then + errors+=("Node.js is not installed. Please install Node.js v$REQUIRED_NODE_VERSION or higher.") + else + node_version=$(node -v | sed 's/v//') + if ! version_at_least "$node_version" "$REQUIRED_NODE_VERSION"; then + errors+=("Current Node.js version ($node_version) is incompatible. Please install v$REQUIRED_NODE_VERSION or higher.") + fi + fi + + # Check Yarn version + if ! command -v yarn &> /dev/null; then + errors+=("Yarn is not installed. Please install Yarn v$REQUIRED_YARN_VERSION or higher.") + else + yarn_version=$(yarn -v) + if ! version_at_least "$yarn_version" "$REQUIRED_YARN_VERSION"; then + errors+=("Current Yarn version ($yarn_version) is incompatible. Please install v$REQUIRED_YARN_VERSION or higher.") + fi + fi + + # Check Docker version + if ! command -v docker &> /dev/null; then + errors+=("Docker is not installed. Please install Docker v$REQUIRED_DOCKER_VERSION or higher.") + else + docker_version=$(docker --version | awk '{print $3}' | sed 's/,//') + if ! version_at_least "$docker_version" "$REQUIRED_DOCKER_VERSION"; then + errors+=("Current Docker version ($docker_version) is incompatible. Please install v$REQUIRED_DOCKER_VERSION or higher.") + fi + fi + + # Display errors, if any + if [ ${#errors[@]} -ne 0 ]; then + for error in "${errors[@]}"; do + echo "$error" + done + exit 1 + fi + + echo "Node.js, Yarn, and Docker versions are compatible. Proceeding..." +} + +check_versions + [ ! -f .env ] && cp env.example .env check_internet_connection() {