#!/bin/bash set -euo pipefail COMPOSE_FILE="docker-compose-deploy.yml" PACKAGE_JSON="package.json" STACK_NAME=${STACK_NAME:-utility-bills-tracker} if [ ! -f "$PACKAGE_JSON" ]; then echo "package.json not found" >&2 exit 1 fi # Extract version (prefer jq if available) if command -v jq >/dev/null 2>&1; then APP_VERSION=$(jq -r '.version' "$PACKAGE_JSON") else APP_VERSION=$(grep -E '"version"' "$PACKAGE_JSON" | head -1 | sed -E 's/.*"version"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/') fi if [ -z "${APP_VERSION:-}" ] || [ "$APP_VERSION" = "null" ]; then echo "Could not determine app version from package.json" >&2 exit 2 fi echo "Deploying $STACK_NAME with image version: $APP_VERSION" # Pass IMAGE_VERSION env var for compose variable substitution IMAGE_VERSION="$APP_VERSION" docker stack deploy \ -c "$COMPOSE_FILE" \ "$STACK_NAME"