diff --git a/deploy.sh b/deploy.sh index 18aad1d9..1841a036 100755 --- a/deploy.sh +++ b/deploy.sh @@ -2,50 +2,98 @@ # deploy.sh – Bygg och starta om recipe-app # Kör från: /opt/containers/recipe-app/ # Kräver: .env-fil i samma mapp +# +# Användning: +# ./deploy.sh – bygg allt (backend + flutter + importer) +# ./deploy.sh --backend – bygg bara backend +# ./deploy.sh --flutter – bygg bara flutter +# ./deploy.sh --importer – bygg bara importer +# ./deploy.sh --seed – kör seed (körs ej per default) +# ./deploy.sh --backend --seed – kombinera flaggor fritt set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" +# ── Flaggor ────────────────────────────────────────────────────────────────── +BUILD_BACKEND=false +BUILD_FLUTTER=false +BUILD_IMPORTER=false +RUN_SEED=false +BUILD_ALL=true # om inga specifika tjänster anges, bygg allt + +for arg in "$@"; do + case "$arg" in + --backend) BUILD_BACKEND=true; BUILD_ALL=false ;; + --flutter) BUILD_FLUTTER=true; BUILD_ALL=false ;; + --importer) BUILD_IMPORTER=true; BUILD_ALL=false ;; + --seed) RUN_SEED=true ;; + --help|-h) + sed -n '/^# Användning:/,/^[^#]/p' "$0" | grep '^#' | sed 's/^# \?//' + exit 0 + ;; + *) echo "Okänd flagga: $arg (--help för hjälp)"; exit 1 ;; + esac +done + +if [ "$BUILD_ALL" = true ]; then + BUILD_BACKEND=true + BUILD_FLUTTER=true + BUILD_IMPORTER=true +fi + +# ── Validering ──────────────────────────────────────────────────────────────── if [ ! -f ".env" ]; then echo "Fel: .env saknas. Kopiera .env.example och fyll i värdena:" echo " cp .env.example .env && nano .env" exit 1 fi +# ── Git pull ────────────────────────────────────────────────────────────────── echo "Hämtar senaste kod (recipe-app)..." git pull origin main echo "Hämtar senaste kod (microservice-importer)..." (cd "$SCRIPT_DIR/../microservice-importer" && git pull origin main) -echo "Bygger images..." -docker compose -f compose.yml -f compose.flutter.yml build +# ── Bygger valda tjänster ───────────────────────────────────────────────────── +COMPOSE="docker compose -f compose.yml -f compose.flutter.yml" +SERVICES="" + +[ "$BUILD_BACKEND" = true ] && SERVICES="$SERVICES recipe-api" +[ "$BUILD_FLUTTER" = true ] && SERVICES="$SERVICES recipe-flutter" +[ "$BUILD_IMPORTER" = true ] && SERVICES="$SERVICES importer-api" + +echo "Bygger: ${SERVICES:-alla tjänster}..." +# --pull=false hindrar Docker från att kontrollera nya versioner av basimages +$COMPOSE build --pull=false $SERVICES echo "Startar tjänster..." -docker compose -f compose.yml -f compose.flutter.yml up -d +$COMPOSE up -d -echo "Kör full seed (seed_all.sql)..." -MARIADB_ROOT_PASSWORD=$(grep MARIADB_ROOT_PASSWORD .env | cut -d '=' -f2 | tr -d '"' | tr -d "'") -MARIADB_DATABASE=$(grep MARIADB_DATABASE .env | cut -d '=' -f2 | tr -d '"' | tr -d "'") +# ── Seed (opt-in) ───────────────────────────────────────────────────────────── +if [ "$RUN_SEED" = true ]; then + MARIADB_ROOT_PASSWORD=$(grep MARIADB_ROOT_PASSWORD .env | cut -d '=' -f2 | tr -d '"' | tr -d "'") + MARIADB_DATABASE=$(grep MARIADB_DATABASE .env | cut -d '=' -f2 | tr -d '"' | tr -d "'") -echo "Väntar på att databasen är redo..." -for i in $(seq 1 30); do - if docker exec recipe-db mariadb-admin ping -h 127.0.0.1 -uroot -p"$MARIADB_ROOT_PASSWORD" --silent 2>/dev/null; then - break + echo "Väntar på att databasen är redo..." + for i in $(seq 1 30); do + if docker exec recipe-db mariadb-admin ping -h 127.0.0.1 -uroot -p"$MARIADB_ROOT_PASSWORD" --silent 2>/dev/null; then + break + fi + echo " ...försök $i/30" + sleep 2 + done + + if [ -f "db/seeds/seed_all.sql" ]; then + docker exec -i recipe-db mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" "$MARIADB_DATABASE" \ + < db/seeds/seed_all.sql + echo "Full seed klar." + else + echo "Ingen db/seeds/seed_all.sql hittades — hoppar över seed." fi - echo " ...försök $i/30" - sleep 2 -done - -if [ -f "db/seeds/seed_all.sql" ]; then - docker exec -i recipe-db mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" "$MARIADB_DATABASE" \ - < db/seeds/seed_all.sql - echo "Full seed klar." -else - echo "Ingen db/seeds/seed_all.sql hittades — hoppar över seed." fi echo "Status:" -docker compose ps +$COMPOSE ps