train: slim selfplay runtime under max-lines policy #43
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |