maris-ai-master / .github /workflows /deploy-platform.yml
MarisUK's picture
Maris AI model sync
f440f03 verified
name: 🚀 Deploy Platform
on:
workflow_dispatch:
inputs:
target:
description: "Ko izvietot"
required: true
type: choice
default: all
options:
- all
- core-python
- backend
- voice
- frontend
github_environment:
description: "GitHub environment ar Railway secrets"
required: false
type: environment
permissions:
contents: read
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
concurrency:
group: railway-platform-deploy
cancel-in-progress: true
jobs:
deploy:
name: Deploy selected Railway services
if: ${{ !(inputs.github_environment || vars.RAILWAY_GITHUB_ENVIRONMENT) }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install Railway CLI
run: npm install -g @railway/cli
- name: Deploy selected services
env:
TARGET: ${{ inputs.target }}
RAILWAY_BACKEND_SERVICE: ${{ vars.RAILWAY_BACKEND_SERVICE }}
RAILWAY_CORE_PYTHON_SERVICE: ${{ vars.RAILWAY_CORE_PYTHON_SERVICE }}
RAILWAY_FRONTEND_SERVICE: ${{ vars.RAILWAY_FRONTEND_SERVICE }}
RAILWAY_PROJECT_ID: ${{ vars.RAILWAY_PROJECT_ID }}
RAILWAY_VOICE_SERVICE: ${{ vars.RAILWAY_VOICE_SERVICE }}
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
RAILWAY_ENVIRONMENT: ${{ secrets.RAILWAY_ENVIRONMENT }}
run: |
if [ -z "$RAILWAY_TOKEN" ]; then
echo "Missing required GitHub secret: RAILWAY_TOKEN"
exit 1
fi
railway_up() {
local directory="$1"
local service="$2"
local args=(up . --detach --path-as-root --service "$service")
if [ -n "$RAILWAY_PROJECT_ID" ]; then
args+=(--project "$RAILWAY_PROJECT_ID")
fi
if [ -n "$RAILWAY_ENVIRONMENT" ]; then
args+=(--environment "$RAILWAY_ENVIRONMENT")
fi
echo "Deploying $service from $directory"
(
cd "$directory"
railway "${args[@]}"
)
}
case "$TARGET" in
all)
railway_up core-python "${RAILWAY_CORE_PYTHON_SERVICE:-maris-core-python}"
railway_up backend-rust "${RAILWAY_BACKEND_SERVICE:-maris-backend}"
railway_up voice-rust "${RAILWAY_VOICE_SERVICE:-maris-voice}"
railway_up frontend "${RAILWAY_FRONTEND_SERVICE:-maris-frontend}"
;;
core-python)
railway_up core-python "${RAILWAY_CORE_PYTHON_SERVICE:-maris-core-python}"
;;
backend)
railway_up backend-rust "${RAILWAY_BACKEND_SERVICE:-maris-backend}"
;;
voice)
railway_up voice-rust "${RAILWAY_VOICE_SERVICE:-maris-voice}"
;;
frontend)
railway_up frontend "${RAILWAY_FRONTEND_SERVICE:-maris-frontend}"
;;
*)
echo "Unsupported target: $TARGET"
exit 1
;;
esac
deploy-with-environment:
name: Deploy selected Railway services
if: ${{ inputs.github_environment || vars.RAILWAY_GITHUB_ENVIRONMENT }}
runs-on: ubuntu-latest
environment:
name: ${{ inputs.github_environment || vars.RAILWAY_GITHUB_ENVIRONMENT }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install Railway CLI
run: npm install -g @railway/cli
- name: Deploy selected services
env:
TARGET: ${{ inputs.target }}
RAILWAY_BACKEND_SERVICE: ${{ vars.RAILWAY_BACKEND_SERVICE }}
RAILWAY_CORE_PYTHON_SERVICE: ${{ vars.RAILWAY_CORE_PYTHON_SERVICE }}
RAILWAY_FRONTEND_SERVICE: ${{ vars.RAILWAY_FRONTEND_SERVICE }}
RAILWAY_PROJECT_ID: ${{ vars.RAILWAY_PROJECT_ID }}
RAILWAY_VOICE_SERVICE: ${{ vars.RAILWAY_VOICE_SERVICE }}
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
RAILWAY_ENVIRONMENT: ${{ secrets.RAILWAY_ENVIRONMENT }}
run: |
if [ -z "$RAILWAY_TOKEN" ]; then
echo "Missing required GitHub secret: RAILWAY_TOKEN"
exit 1
fi
railway_up() {
local directory="$1"
local service="$2"
local args=(up . --detach --path-as-root --service "$service")
if [ -n "$RAILWAY_PROJECT_ID" ]; then
args+=(--project "$RAILWAY_PROJECT_ID")
fi
if [ -n "$RAILWAY_ENVIRONMENT" ]; then
args+=(--environment "$RAILWAY_ENVIRONMENT")
fi
echo "Deploying $service from $directory"
(
cd "$directory"
railway "${args[@]}"
)
}
case "$TARGET" in
all)
railway_up core-python "${RAILWAY_CORE_PYTHON_SERVICE:-maris-core-python}"
railway_up backend-rust "${RAILWAY_BACKEND_SERVICE:-maris-backend}"
railway_up voice-rust "${RAILWAY_VOICE_SERVICE:-maris-voice}"
railway_up frontend "${RAILWAY_FRONTEND_SERVICE:-maris-frontend}"
;;
core-python)
railway_up core-python "${RAILWAY_CORE_PYTHON_SERVICE:-maris-core-python}"
;;
backend)
railway_up backend-rust "${RAILWAY_BACKEND_SERVICE:-maris-backend}"
;;
voice)
railway_up voice-rust "${RAILWAY_VOICE_SERVICE:-maris-voice}"
;;
frontend)
railway_up frontend "${RAILWAY_FRONTEND_SERVICE:-maris-frontend}"
;;
*)
echo "Unsupported target: $TARGET"
exit 1
;;
esac