# https://github.com/kentcdodds/kentcdodds.com/blob/main/.github/workflows/deployment.yml name: Tests on: push: branches: - "main" pull_request: branches: [main] permissions: contents: read jobs: # Every DB-touching package gets its own job, and therefore its own sqld # container. Sharing one database across turbo tasks let suites clobber each # other's rows (see docs/adr/0008-isolated-test-databases.md). test: name: ๐Ÿงช ${{ matrix.name }} runs-on: ubuntu-latest timeout-minutes: 15 strategy: fail-fast: false matrix: include: - name: services filter: "--filter=@openstatus/services" database: true - name: server filter: "--filter=@openstatus/server" database: true - name: api filter: "--filter=@openstatus/api" database: true - name: workflows filter: "--filter=@openstatus/workflows" database: true - name: subscriptions filter: "--filter=@openstatus/subscriptions" database: true - name: rest filter: >- --filter=!@openstatus/services --filter=!@openstatus/server --filter=!@openstatus/api --filter=!@openstatus/workflows --filter=!@openstatus/subscriptions database: false services: sqld: image: ghcr.io/tursodatabase/libsql-server:e4beaca ports: - 8080:8080 env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} DATABASE_URL: http://127.0.0.1:8080 DATABASE_AUTH_TOKEN: "basic:token" steps: - name: โฌ‡๏ธ Checkout repo uses: actions/checkout@v6 - name: Set up pnpm uses: pnpm/action-setup@v6 - name: โŽ” Setup node uses: actions/setup-node@v6 with: node-version: 24.12.0 cache: "pnpm" - name: ๐Ÿฆ• Setup Deno uses: denoland/setup-deno@v2 with: deno-version: 2.9.7 - name: ๐Ÿ“ฅ Download deps run: pnpm install - name: ๐Ÿ—ƒ๏ธ Run migrations if: matrix.database run: pnpm migrate working-directory: ./packages/db - name: ๐Ÿ’ฝ Seed database if: matrix.database run: pnpm seed working-directory: ./packages/db - name: ๐Ÿงช Tests run: pnpm turbo run test ${{ matrix.filter }} # Single required status check, so branch protection does not need to list # every matrix leg. tests: name: ๐Ÿงช Tests runs-on: ubuntu-latest needs: test if: always() steps: - name: Check matrix result run: | if [ "${{ needs.test.result }}" != "success" ]; then echo "One or more test jobs failed." exit 1 fi