learning_ai_common_plat/scripts/railway-deploy.sh

104 lines
2.3 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"
PROJECT_ID="${RAILWAY_PROJECT_ID:-a6bc4ea7-e89c-42da-819a-8879fb022a0d}"
ENVIRONMENT="${RAILWAY_ENVIRONMENT:-production}"
usage() {
cat <<'EOF'
Deploy services to Railway from this monorepo (Dockerfile builds on Railway).
Usage:
scripts/railway-deploy.sh [all|platform|extraction] [--project <id>] [--env <name>] [--message <msg>]
Env vars:
RAILWAY_PROJECT_ID Defaults to this repo's Railway project ID
RAILWAY_ENVIRONMENT Defaults to "production"
Examples:
scripts/railway-deploy.sh all
scripts/railway-deploy.sh platform --message "hotfix"
RAILWAY_ENVIRONMENT=staging scripts/railway-deploy.sh extraction
EOF
}
SERVICE_ARG="${1:-all}"
shift || true
SERVICES=()
case "$SERVICE_ARG" in
all) SERVICES=("platform-service" "extraction-service") ;;
platform|platform-service) SERVICES=("platform-service") ;;
extraction|extraction-service) SERVICES=("extraction-service") ;;
-h|--help) usage; exit 0 ;;
*)
echo "Unknown service selector: $SERVICE_ARG" >&2
usage
exit 2
;;
esac
MESSAGE=""
while [[ $# -gt 0 ]]; do
case "$1" in
--project)
PROJECT_ID="${2:-}"
shift 2
;;
--env)
ENVIRONMENT="${2:-}"
shift 2
;;
--message)
MESSAGE="${2:-}"
shift 2
;;
-h|--help)
usage
exit 0
;;
*)
echo "Unknown arg: $1" >&2
usage
exit 2
;;
esac
done
if [[ -z "$PROJECT_ID" ]]; then
echo "Missing --project (or RAILWAY_PROJECT_ID)." >&2
exit 2
fi
if [[ -z "$ENVIRONMENT" ]]; then
echo "Missing --env (or RAILWAY_ENVIRONMENT)." >&2
exit 2
fi
if [[ -z "$MESSAGE" ]]; then
if command -v git >/dev/null 2>&1 && git rev-parse --git-dir >/dev/null 2>&1; then
sha="$(git rev-parse --short HEAD 2>/dev/null || true)"
dirty=""
if [[ -n "$(git status --porcelain 2>/dev/null || true)" ]]; then
dirty=" (dirty)"
fi
MESSAGE="deploy ${sha}${dirty}"
else
MESSAGE="deploy $(date -u +%Y-%m-%dT%H:%M:%SZ)"
fi
fi
if ! command -v railway >/dev/null 2>&1; then
echo "railway CLI not found. Install: npm i -g @railway/cli" >&2
exit 1
fi
for svc in "${SERVICES[@]}"; do
echo "Deploying $svc (project=$PROJECT_ID env=$ENVIRONMENT)…"
railway up -p "$PROJECT_ID" -e "$ENVIRONMENT" -s "$svc" -d -m "$MESSAGE"
done