#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" fail() { echo "ERROR: $*" >&2 exit 1 } assert_contains() { local file="$1" local pattern="$2" grep -Fq -- "$pattern" "$file" || fail "$file must contain: $pattern" } assert_not_contains() { local file="$1" local pattern="$2" if grep -Fq -- "$pattern" "$file"; then fail "$file must not contain stale devfront port pattern: $pattern" fi } assert_root_service_contains() { local service="$1" local pattern="$2" awk -v service=" $service:" ' $0 == service { in_service = 1; next } in_service && /^ [[:alnum:]_-]+:/ { in_service = 0 } in_service { print } ' "$ROOT_DIR/docker-compose.yaml" | grep -Fq -- "$pattern" || fail "docker-compose.yaml $service service must contain: $pattern" } DEVFRONT_DOCKERFILE="$ROOT_DIR/devfront/Dockerfile" DEVFRONT_VITE_CONFIG="$ROOT_DIR/devfront/vite.config.ts" DEVFRONT_RUNTIME="$ROOT_DIR/devfront/scripts/runtime-mode.sh" DEVFRONT_DEPLOY_VITE_CONFIG="$ROOT_DIR/deploy/templates/devfront/vite.config.ts" assert_contains "$DEVFRONT_DOCKERFILE" "EXPOSE 5174" assert_contains "$DEVFRONT_DOCKERFILE" 'CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0", "--port", "5174"]' assert_contains "$DEVFRONT_DOCKERFILE" "ENV PORT=5174" assert_not_contains "$DEVFRONT_DOCKERFILE" "EXPOSE 5173" assert_not_contains "$DEVFRONT_DOCKERFILE" '"--port", "5173"' assert_not_contains "$DEVFRONT_DOCKERFILE" "ENV PORT=5173" assert_contains "$DEVFRONT_VITE_CONFIG" "port: 5174" assert_contains "$DEVFRONT_RUNTIME" "npm run preview -- --host 0.0.0.0 --port 5174" assert_contains "$DEVFRONT_RUNTIME" "npm run dev -- --host 0.0.0.0 --port 5174" assert_contains "$DEVFRONT_DEPLOY_VITE_CONFIG" "port: 5174" assert_root_service_contains "devfront" 'command: ["npm", "run", "dev", "--", "--host", "0.0.0.0", "--port", "5174"]' assert_root_service_contains "devfront" '- "${DEVFRONT_PORT:-5174}:5174"' assert_root_service_contains "orgfront" '- "${ORGFRONT_PORT:-5175}:5175"' for file in \ "$ROOT_DIR/docker/docker-compose.template.yaml" \ "$ROOT_DIR/docker/docker-compose.staging.template.yaml" \ "$ROOT_DIR/docker/staging_pull_compose.template.yaml" \ "$ROOT_DIR/deploy/templates/docker-compose.yaml" do assert_contains "$file" "devfront:" assert_not_contains "$file" '${DEVFRONT_PORT:-5174}:5173' assert_not_contains "$file" '${DEVFRONT_PORT}:5173' done assert_contains "$ROOT_DIR/docker/docker-compose.template.yaml" '${DEVFRONT_PORT:-5174}:5174' assert_contains "$ROOT_DIR/docker/docker-compose.staging.template.yaml" '${DEVFRONT_PORT:-5174}:5174' assert_contains "$ROOT_DIR/docker/staging_pull_compose.template.yaml" '${DEVFRONT_PORT:-5174}:5174' assert_contains "$ROOT_DIR/deploy/templates/docker-compose.yaml" '${DEVFRONT_PORT}:5174' assert_contains "$ROOT_DIR/docker/staging_pull_compose.template.yaml" "fetch('http://127.0.0.1:5174/')" assert_contains "$ROOT_DIR/deploy/templates/docker-compose.yaml" "traefik.http.services.\${COMPOSE_PROJECT_NAME}-devfront.loadbalancer.server.port=5174" echo "OK: DevFront Docker internal port is aligned to 5174"