Skip to content

train: slim selfplay runtime under max-lines policy #43

train: slim selfplay runtime under max-lines policy

train: slim selfplay runtime under max-lines policy #43

name: Deploy Railway App
on:
push:
branches:
- main
- master
paths:
- "src/**"
- "web/**"
- "alembic/**"
- "alembic.ini"
- "pyproject.toml"
- "uv.lock"
- "Dockerfile"
- ".railwayignore"
- ".github/workflows/deploy-railway-app.yml"
workflow_dispatch:
concurrency:
group: deploy-railway-app-${{ github.ref }}
cancel-in-progress: true
jobs:
deploy:
runs-on: ubuntu-latest
timeout-minutes: 30
env:
# Workspace-scoped tokens must be passed as RAILWAY_API_TOKEN.
RAILWAY_API_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
RAILWAY_PROJECT_ID: ${{ secrets.RAILWAY_PROJECT_ID }}
RAILWAY_ENVIRONMENT_ID: ${{ secrets.RAILWAY_ENVIRONMENT_ID }}
RAILWAY_SERVICE_ID: ${{ secrets.RAILWAY_SERVICE_ID }}
steps:
- name: Validate Railway secrets
run: |
test -n "${RAILWAY_API_TOKEN}" || (echo "Missing secret: RAILWAY_TOKEN" && exit 1)
test -n "${RAILWAY_PROJECT_ID}" || (echo "Missing secret: RAILWAY_PROJECT_ID" && exit 1)
test -n "${RAILWAY_ENVIRONMENT_ID}" || (echo "Missing secret: RAILWAY_ENVIRONMENT_ID" && exit 1)
test -n "${RAILWAY_SERVICE_ID}" || (echo "Missing secret: RAILWAY_SERVICE_ID" && exit 1)
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Install Railway CLI
run: npm install -g @railway/cli
- name: Force Watch-Path Match For Railway
run: |
# Railway skips deploys when changed files don't match watch patterns.
# We create a CI-only stamp under /src so /src/** always matches.
printf "ci-deploy:%s:%s\n" "${GITHUB_SHA}" "${GITHUB_RUN_ID}" > src/.railway_ci_deploy_stamp
- name: Deploy to Railway (CI mode)
run: |
# Some Railway CLI versions prefer RAILWAY_TOKEN when both are present.
# Unset it to force workspace-token auth via RAILWAY_API_TOKEN.
unset RAILWAY_TOKEN
# Railway builder failures can be transient (container bootstrap/network).
# Retry the deploy to reduce false-negative workflow failures.
for attempt in 1 2 3; do
echo "Railway deploy attempt ${attempt}/3"
if railway up \
--ci \
--project "${RAILWAY_PROJECT_ID}" \
--environment "${RAILWAY_ENVIRONMENT_ID}" \
--service "${RAILWAY_SERVICE_ID}"; then
echo "Railway deploy succeeded."
exit 0
fi
if [ "${attempt}" -lt 3 ]; then
echo "Deploy attempt ${attempt} failed. Retrying in 20s..."
sleep 20
fi
done
echo "Railway deploy failed after 3 attempts."
exit 1