#!/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 ] [--env ] [--message ] 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