| 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 | |