chore(deploy): add railway deploy script
This commit is contained in:
parent
ff4cc14a46
commit
21aac9c95e
103
scripts/railway-deploy.sh
Normal file
103
scripts/railway-deploy.sh
Normal file
@ -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 <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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user