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