name: GitHub Flow on: pull_request: branches: - main push: branches: - main workflow_dispatch: permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: CI: true DOCKER_BUILDKIT: "1" jobs: quality: name: Quality gates runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 - name: Setup pnpm uses: pnpm/action-setup@v6 - name: Setup Node uses: actions/setup-node@v6 with: node-version: 22 cache: pnpm cache-dependency-path: pnpm-lock.yaml - name: Install dependencies run: pnpm install --frozen-lockfile - name: Check run: pnpm check - name: Build run: pnpm build - name: Lint run: pnpm lint - name: Test app compose contract run: pnpm compose:apps:test - name: Validate compose config run: pnpm compose:config - name: Validate app compose config run: docker compose --env-file infra/local/.env.example -f infra/local/compose.yaml --profile apps config docker-image: name: Production API image runs-on: ubuntu-latest needs: [quality] steps: - name: Checkout uses: actions/checkout@v6 - name: Setup pnpm uses: pnpm/action-setup@v6 - name: Setup Node uses: actions/setup-node@v6 with: node-version: 22 cache: pnpm cache-dependency-path: pnpm-lock.yaml - name: Build API Docker image run: pnpm docker:api:build - name: Build Admin Docker image run: pnpm docker:admin:build - name: Smoke isolated API bundle run: pnpm docker:api:bundle-smoke - name: Smoke Admin Docker HTTP homepage run: pnpm docker:admin:http-smoke