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