104 lines
2.3 KiB
Bash
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
|
|
|