diff --git a/.cspell.json b/.cspell.json index d59793545f9..d14e95fc3c6 100644 --- a/.cspell.json +++ b/.cspell.json @@ -610,7 +610,9 @@ "whatsappbusiness", "xkeysib", "zulip", - "zwnj" + "zwnj", + "prepush", + "xcodebuild" ], "flagWords": [], "patterns": [ diff --git a/scripts/dev-environment-setup.sh b/scripts/dev-environment-setup.sh index 63fa2d3702b..9664ff763ea 100755 --- a/scripts/dev-environment-setup.sh +++ b/scripts/dev-environment-setup.sh @@ -28,6 +28,12 @@ success_message () { echo " " } +start_success_message () { + echo " " + echo "✅ $1 has been started" + echo " " +} + already_installed_message () { echo " " echo "✅ $1 is already installed" @@ -99,36 +105,36 @@ install_apple_chip_dependencies () { } install_xcode () { - echo "" - echo "❓ Do you want to install Xcode? ($POSITIVE_RESPONSE / $NEGATIVE_RESPONSE)" + echo "" + echo "❓ Do you want to install Xcode? ($POSITIVE_RESPONSE / $NEGATIVE_RESPONSE)" + read -p " > " RESPONSE + echo "" + + if [[ "$RESPONSE" == "$POSITIVE_RESPONSE" ]]; then + installing_dependency "Xcode" + xcode-select --install & + PID=$! + wait $PID + sudo xcode-select --switch /Library/Developer/CommandLineTools + sudo xcodebuild -license accept + xcodebuild -runFirstLaunch + success_message "Xcode" + fi + + if [[ "$RESPONSE" == "$NEGATIVE_RESPONSE" ]]; then + echo "" + echo "❓ Do you want to update Xcode? ($POSITIVE_RESPONSE / $NEGATIVE_RESPONSE)" read -p " > " RESPONSE - echo "" + echo "" if [[ "$RESPONSE" == "$POSITIVE_RESPONSE" ]]; then - installing_dependency "Xcode" - xcode-select --install & - PID=$! - wait $PID - sudo xcode-select --switch /Library/Developer/CommandLineTools - sudo xcodebuild -license accept - xcodebuild -runFirstLaunch - success_message "Xcode" - fi - - if [[ "$RESPONSE" == "$NEGATIVE_RESPONSE" ]]; then - echo "" - echo "❓ Do you want to update Xcode? ($POSITIVE_RESPONSE / $NEGATIVE_RESPONSE)" - read -p " > " RESPONSE - echo "" - - if [[ "$RESPONSE" == "$POSITIVE_RESPONSE" ]]; then updating_dependency "Xcode" - softwareupdate --install --verbose Xcode & + softwareupdate --install --verbose Xcode & PID=$! wait $PID success_message "Xcode" - fi fi + fi } set_macosx_generics () { @@ -147,7 +153,7 @@ install_os_dependencies () { if [[ "$OSTYPE" == "linux-gnu"* ]]; then installing_dependency "Linux dependencies" echo "//TODO" - install_novu_tools + install_novu_tools elif [[ "$OSTYPE" == "darwin"* ]]; then installing_dependency "MacOsx dependencies" install_macosx_dependencies @@ -208,8 +214,7 @@ install_homebrew_recipes () { if [[ -z "$SKIP" ]]; then # Update Homebrew recipes - echo "Tap, update and upgrade Homebrew" - brew tap homebrew/cask + echo "Update and Upgrade Homebrew" brew update brew upgrade else @@ -383,61 +388,55 @@ install_aws_cli () { fi } -install_databases () { - SKIP="$(check_homebrew)" - - if [[ -z "$SKIP" ]]; then - installing_dependency "Databases" - - brew tap mongodb/brew - - DATABASES=( - mongodb-community@5.0 - redis - ) - brew install "${DATABASES[@]}" - - echo "Run the services in the background" - - TEST_REDIS_CMD=$(execute_command_without_error_print "redis-cli --version") - if [[ -z "$TEST_REDIS_CMD" ]] || [[ "$TEST_REDIS_CMD" == "zsh: command not found: redis-cli" ]]; then - error_message "Redis" - else - echo "Run Redis service in the background" - brew services restart redis - success_message "MongoDB" - fi - - TEST_MONGO_CMD=$(execute_command_without_error_print "mongosh --version") - if [[ -z "$TEST_MONGO_CMD" ]] || [[ "$TEST_MONGO_CMD" == "zsh: command not found: mongosh" ]]; then - error_message "MongoDB" - else - echo "Run MongoDB service in the background" - brew services start mongodb/brew/mongodb-community@5.0 - success_message "MongoDB" - fi - else - skip_message "Databases" - echo "$SKIP" - fi -} - -create_local_dev_domain () { - FILENAME="/etc/hosts" - HOST="local.novu.co" - IP="127.0.0.1" - ENTRY="$IP\t$HOST" - - CMD=$(execute_command_without_error_print "grep -R $HOST $FILENAME") - - if [[ -z $CMD ]]; then - echo "$ENTRY" | sudo tee -a $FILENAME - success_message "Local DEV domain" - elif [[ $CMD == *"$HOST"* ]]; then - already_installed_message "Local DEV domain" - else - error_message "Local DEV domain" - fi +start_database() { + # Check if brew is installed + command -v brew > /dev/null 2>&1 + + # Initialize flag + already_installed=0 + + if [ $? -eq 0 ]; then + + + # Check if mongodb is installed + brew ls --versions mongodb > /dev/null + if [ $? -eq 0 ]; then + echo "Warning: MongoDB is already installed via brew. Please uninstall it first." + already_installed=1 + fi + + # Check if redis is installed + brew ls --versions redis > /dev/null + if [ $? -eq 0 ]; then + echo "Warning: Redis is already installed via brew. Please uninstall it first." + already_installed=1 + fi + else + echo "brew is not installed, checking default ports for MongoDB and Redis" + # Check MongoDB (port 27017) and Redis (port 6379) + if lsof -Pi :27017 -sTCP:LISTEN -t >/dev/null ; then + echo "Warning: MongoDB is running on port 27017. Please stop it first." + already_installed=1 + fi + if lsof -Pi :6379 -sTCP:LISTEN -t >/dev/null ; then + echo "Warning: Redis is running on port 6379. Please stop it first." + already_installed=1 + fi + fi + + # Only copy the example env file and start Docker Compose if both MongoDB and Redis are not already installed + if [ $already_installed -ne 1 ]; then + # Copy the example env file + cp ./docker/.env.example ./docker/local/development/.env + + # Start Docker Compose detached + docker-compose -f ./docker/local/development/docker-compose.yml up -d + + start_success_message "Docker Infrastructure" + else + echo "We recommend removing mongodb and redis databases from brew with 'brew remove '." + echo "To manually start the containerized databases by going to /docker in the novu project" + fi } check_git () { @@ -448,6 +447,9 @@ check_git () { echo "⛔️ Git is a hard dependency to clone the monorepo" exit 1 fi + + already_installed_message "git" + } clone_monorepo () { @@ -489,9 +491,8 @@ install_novu_tools () { install_node install_pnpm install_docker - install_databases install_aws_cli - create_local_dev_domain + start_database } install_os_dependencies () {