# Gate every pull request into `main` on a fast, DB-free check suite so a broken # build or failing test can't reach the deployable branch. Complements # build-images.yml, which runs only AFTER merge (on push to main) to publish # images — this one runs BEFORE merge. # # Enforcement (one-time, in the Gitea UI): # Repository Settings → Branches → Branch Protection (rule for `main`) # • Enable Status Check # • Status check patterns: PR Checks / * # Note: Gitea only lists a context in its dropdown after it has reported once, # so let this workflow run on one PR first. The `PR Checks / *` glob matches # without needing the dropdown. # # Runner: reuses the existing self-hosted `ubuntu-latest` runner. These jobs need # only Node (no Docker socket), and the server tests stub their models + point the # DB pool at a dead port, so no MariaDB service is required. name: PR Checks on: pull_request: branches: [main] # A newer push to the same PR cancels the in-flight run. concurrency: group: pr-checks-${{ github.ref }} cancel-in-progress: true jobs: server-tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: npm cache-dependency-path: server/package-lock.json - name: Install server deps run: npm ci --prefix server - name: Run server tests run: npm test --prefix server client-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: npm cache-dependency-path: client/package-lock.json - name: Install client deps run: npm ci --prefix client - name: Build client run: npm run build --prefix client bot-install: # No tests/build to run; a clean install still catches a broken or # out-of-sync lockfile before it ships in the bot image. runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: npm cache-dependency-path: bot/package-lock.json - name: Install bot deps run: npm ci --prefix bot