name: Quality on: pull_request jobs: quality: env: ZITADEL_IMAGE: ghcr.io/zitadel/zitadel:v2.65.0 POSTGRES_IMAGE: postgres:17.0-alpine3.19 name: Ensure Quality runs-on: ubuntu-latest timeout-minutes: 30 permissions: contents: "read" strategy: fail-fast: false matrix: command: - format --check - lint - test:unit - test:integration - test:acceptance steps: - name: Checkout Repo uses: actions/checkout@v4.1.6 - name: Setup Buf uses: bufbuild/buf-setup-action@v1.45.0 - name: Setup pnpm uses: pnpm/action-setup@v4.0.0 - name: Setup Node.js 20.x uses: actions/setup-node@v4.0.2 with: node-version: 20.x cache: 'pnpm' - uses: actions/cache@v4.0.2 name: Setup Cypress binary cache with: path: ~/.cache/Cypress key: ${{ runner.os }}-cypress-binary-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-cypress-binary- # The Cypress binary cache needs to be updated together with the pnpm dependencies cache. # That's why we don't conditionally cache it using if: ${{ matrix.command == 'test:integration' }} - name: Install Dependencies run: pnpm install --frozen-lockfile # We can cache the Playwright binary independently from the pnpm cache, because we install it separately. # After pnpm install --frozen-lockfile, we can get the version so we only have to download the binary once per version. - run: echo "PLAYWRIGHT_VERSION=$(npx playwright --version | cut -d ' ' -f 2)" >> $GITHUB_ENV if: ${{ matrix.command == 'test:acceptance' }} - uses: actions/cache@v4.0.2 name: Setup Playwright binary cache id: playwright-cache with: path: ~/.cache/ms-playwright key: ${{ runner.os }}-playwright-binary-${{ env.PLAYWRIGHT_VERSION }} restore-keys: | ${{ runner.os }}-playwright-binary- if: ${{ matrix.command == 'test:acceptance' }} - name: Install Playwright Browsers run: pnpm exec playwright install --with-deps if: ${{ matrix.command == 'test:acceptance' && steps.playwright-cache.outputs.cache-hit != 'true' }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 if: ${{ matrix.command == 'test:acceptance' }} - name: Run ZITADEL run: ZITADEL_DEV_UID=root pnpm run-zitadel if: ${{ matrix.command == 'test:acceptance' }} - name: Create Production Build run: pnpm build if: ${{ matrix.command == 'test:acceptance' }} - name: Check id: check run: pnpm ${{ matrix.command }}