name: E2E Tests on: push: branches: [main] pull_request: branches: [main] jobs: build: timeout-minutes: 20 runs-on: ubuntu-latest steps: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and export uses: docker/build-push-action@v6 with: tags: stonith404/pocket-id:test outputs: type=docker,dest=/tmp/docker-image.tar - name: Upload Docker image artifact uses: actions/upload-artifact@v4 with: name: docker-image path: /tmp/docker-image.tar test-sqlite: runs-on: ubuntu-latest needs: build steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: lts/* cache: "npm" cache-dependency-path: frontend/package-lock.json - 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 frontend dependencies working-directory: ./frontend run: npm ci - name: Install Playwright Browsers working-directory: ./frontend run: npx playwright install --with-deps chromium - name: Run Docker Container with Sqlite DB run: | docker run -d --name pocket-id-sqlite \ -p 80:80 \ -e APP_ENV=test \ stonith404/pocket-id:test - name: Run Playwright tests working-directory: ./frontend run: npx playwright test - uses: actions/upload-artifact@v4 if: always() with: name: playwright-report-sqlite path: frontend/tests/.report include-hidden-files: true retention-days: 15 test-postgres: runs-on: ubuntu-latest needs: build steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: lts/* cache: "npm" cache-dependency-path: frontend/package-lock.json - 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 frontend dependencies working-directory: ./frontend run: npm ci - name: Install Playwright Browsers working-directory: ./frontend run: npx playwright install --with-deps chromium - name: Create Docker network run: docker network create pocket-id-network - name: Start Postgres DB run: | docker run -d --name pocket-id-db \ --network pocket-id-network \ -e POSTGRES_USER=postgres \ -e POSTGRES_PASSWORD=postgres \ -e POSTGRES_DB=pocket-id \ -p 5432:5432 \ postgres:17 - name: Wait for Postgres to start run: | for i in {1..10}; do if docker exec pocket-id-db pg_isready -U postgres; then echo "Postgres is ready" break fi echo "Waiting for Postgres..." sleep 2 done - name: Run Docker Container with Postgres DB run: | docker run -d --name pocket-id-postgres \ --network pocket-id-network \ -p 80:80 \ -e APP_ENV=test \ -e DB_PROVIDER=postgres \ -e POSTGRES_CONNECTION_STRING=postgresql://postgres:postgres@pocket-id-db:5432/pocket-id \ stonith404/pocket-id:test - name: Run Playwright tests working-directory: ./frontend run: npx playwright test - uses: actions/upload-artifact@v4 if: always() with: name: playwright-report-postgres path: frontend/tests/.report include-hidden-files: true retention-days: 15