name: CI on: push: branches: [main] pull_request: branches: [main] permissions: contents: read # Self-hosted runner — see docs/runbooks/ci.md for the runner setup. # `uses:` are absolute, tag-pinned URLs (CLAUDE.md §8.7 / §15). jobs: lint: runs-on: respellion-linux steps: - uses: https://github.com/actions/checkout@v4 - uses: https://github.com/actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - name: dotnet format (verify, no changes) run: dotnet format services/bff/Bff.slnx --verify-no-changes build: runs-on: respellion-linux steps: - uses: https://github.com/actions/checkout@v4 - uses: https://github.com/actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - run: dotnet build services/bff/Bff.slnx -c Release unit: runs-on: respellion-linux steps: - uses: https://github.com/actions/checkout@v4 - uses: https://github.com/actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - run: dotnet test services/bff/Bff.slnx -c Release compose-smoke: runs-on: respellion-linux steps: - uses: https://github.com/actions/checkout@v4 - name: compose up (wait for healthy) run: docker compose -f infra/docker-compose.yml up -d --build --wait - name: smoke test /health run: curl -fsS http://localhost:8080/health - name: compose down if: always() run: docker compose -f infra/docker-compose.yml down --volumes