name: E2E Tests permissions: contents: read on: workflow_dispatch: workflow_call: jobs: playwright: name: Playwright timeout-minutes: 20 runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Install dependencies uses: "./.github/actions/install-dependencies" - name: Get Playwright version id: playwright-version shell: bash run: | playwright_version=$(bun -e "console.log((await Bun.file('./package.json').json()).devDependencies['@playwright/test'])") echo "version=$playwright_version" >> $GITHUB_OUTPUT - name: Cache Playwright Browsers id: playwright-cache uses: actions/cache@v5 with: path: ~/.cache/ms-playwright key: ${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.version }} restore-keys: | ${{ runner.os }}-playwright- - name: Install Playwright Browsers if: steps.playwright-cache.outputs.cache-hit != 'true' run: bunx playwright install --with-deps - name: Install Playwright System Dependencies if: steps.playwright-cache.outputs.cache-hit == 'true' run: bunx playwright install-deps - name: Prepare environment run: | mkdir -p data mkdir -p playwright/temp mkdir -p playwright/data chmod -R 777 playwright/temp touch .env.local echo "SERVER_IP=localhost" >> .env.local echo "DATABASE_URL=./data/zerobyte.db" >> .env.local echo "BASE_URL=http://localhost:4096" >> .env.local - name: Start zerobyte-e2e service run: bun run start:e2e -- -d - name: Wait for zerobyte to be ready run: | timeout 30s bash -c 'until curl -f http://localhost:4096/healthcheck; do echo "Waiting for server..." && sleep 2; done' - name: Print docker logs if failed to start if: failure() run: docker logs zerobyte || true - name: Make playwright directory writable run: sudo chmod 777 playwright/data/zerobyte.db - name: Run Playwright tests run: bun run test:e2e - name: Dump container logs in playwright-report folder if: always() run: | tree playwright docker logs zerobyte > playwright-report/container-logs.txt || true - name: Debug - print content of /test-data in container if: failure() run: | docker exec zerobyte /bin/ash -c "ls -la /test-data" || true - uses: actions/upload-artifact@v6 if: always() with: name: playwright-report path: playwright-report/ retention-days: 5 - name: Stop Docker Compose if: always() run: docker compose down