From 21aac9c95e093f7e9ab4de01ec5a1fbabdcfadcd Mon Sep 17 00:00:00 2001 From: Saravana Achu Mac Date: Sun, 15 Feb 2026 15:10:15 -0800 Subject: [PATCH] chore(deploy): add railway deploy script --- scripts/railway-deploy.sh | 103 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 scripts/railway-deploy.sh diff --git a/scripts/railway-deploy.sh b/scripts/railway-deploy.sh new file mode 100644 index 00000000..ad547599 --- /dev/null +++ b/scripts/railway-deploy.sh @@ -0,0 +1,103 @@ +#!/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 +