name: E2E Tests on: push: branches: [main] paths-ignore: - "docs/**" - "**.md" - ".github/**" pull_request: branches: [main] paths-ignore: - "docs/**" - "**.md" - ".github/**" jobs: build: if: github.event.pull_request.head.ref != 'i18n_crowdin' timeout-minutes: 20 permissions: contents: read actions: write runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and export uses: docker/build-push-action@v6 with: context: . file: docker/Dockerfile push: false load: false tags: pocket-id:test outputs: type=docker,dest=/tmp/docker-image.tar build-args: BUILD_TAGS=e2etest cache-from: type=gha cache-to: type=gha,mode=max - name: Upload Docker image artifact uses: actions/upload-artifact@v4 with: name: docker-image path: /tmp/docker-image.tar retention-days: 1 test: if: github.event.pull_request.head.ref != 'i18n_crowdin' permissions: contents: read actions: write runs-on: ubuntu-latest needs: build strategy: fail-fast: false matrix: db: [sqlite, postgres] steps: - uses: actions/checkout@v5 - name: Setup pnpm uses: pnpm/action-setup@v4 - name: Setup Node.js uses: actions/setup-node@v5 with: node-version: 22 - name: Cache Playwright Browsers uses: actions/cache@v3 id: playwright-cache with: path: ~/.cache/ms-playwright key: ${{ runner.os }}-playwright-${{ hashFiles('pnpm-lock.yaml') }} - name: Cache PostgreSQL Docker image if: matrix.db == 'postgres' uses: actions/cache@v3 id: postgres-cache with: path: /tmp/postgres-image.tar key: postgres-17-${{ runner.os }} - name: Pull and save PostgreSQL image if: matrix.db == 'postgres' && steps.postgres-cache.outputs.cache-hit != 'true' run: | docker pull postgres:17 docker save postgres:17 > /tmp/postgres-image.tar - name: Load PostgreSQL image from cache if: matrix.db == 'postgres' && steps.postgres-cache.outputs.cache-hit == 'true' run: docker load < /tmp/postgres-image.tar - name: Cache LLDAP Docker image uses: actions/cache@v3 id: lldap-cache with: path: /tmp/lldap-image.tar key: lldap-stable-${{ runner.os }} - name: Pull and save LLDAP image if: steps.lldap-cache.outputs.cache-hit != 'true' run: | docker pull nitnelave/lldap:stable docker save nitnelave/lldap:stable > /tmp/lldap-image.tar - name: Load LLDAP image from cache if: steps.lldap-cache.outputs.cache-hit == 'true' run: docker load < /tmp/lldap-image.tar - name: Download Docker image artifact uses: actions/download-artifact@v4 with: name: docker-image path: /tmp - name: Load Docker image run: docker load -i /tmp/docker-image.tar - name: Install test dependencies run: pnpm --filter pocket-id-tests install --frozen-lockfile - name: Install Playwright Browsers working-directory: ./tests if: steps.playwright-cache.outputs.cache-hit != 'true' run: pnpm exec playwright install --with-deps chromium - name: Run Docker Container (sqlite) with LDAP if: matrix.db == 'sqlite' working-directory: ./tests/setup run: | docker compose up -d docker compose logs -f pocket-id &> /tmp/backend.log & - name: Run Docker Container (postgres) with LDAP if: matrix.db == 'postgres' working-directory: ./tests/setup run: | docker compose -f docker-compose-postgres.yml up -d docker compose -f docker-compose-postgres.yml logs -f pocket-id &> /tmp/backend.log & - name: Run Playwright tests working-directory: ./tests run: pnpm exec playwright test - name: Upload Test Report uses: actions/upload-artifact@v4 if: always() && github.event.pull_request.head.ref != 'i18n_crowdin' with: name: playwright-report-${{ matrix.db }} path: tests/.report include-hidden-files: true retention-days: 15 - name: Upload Backend Test Report uses: actions/upload-artifact@v4 if: always() && github.event.pull_request.head.ref != 'i18n_crowdin' with: name: backend-${{ matrix.db }} path: /tmp/backend.log include-hidden-files: true retention-days: 15