name: 'Test: E2E Coverage Weekly' on: schedule: - cron: '0 2 * * 1' # Every Monday at 2 AM workflow_dispatch: # Allow manual triggering env: NODE_OPTIONS: --max-old-space-size=16384 PLAYWRIGHT_WORKERS: 4 PLAYWRIGHT_BROWSERS_PATH: packages/testing/playwright/.playwright-browsers jobs: coverage: runs-on: blacksmith-8vcpu-ubuntu-2204 name: Coverage Tests steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Environment uses: ./.github/actions/setup-nodejs env: INCLUDE_TEST_CONTROLLER: 'true' - name: Build Docker Image with Coverage run: pnpm build:docker:coverage env: INCLUDE_TEST_CONTROLLER: 'true' - name: Install Browsers run: pnpm turbo run install-browsers --filter=n8n-playwright - name: Run Container Coverage Tests id: coverage-tests run: | pnpm --filter n8n-playwright test:container:sqlite \ --workers=${{ env.PLAYWRIGHT_WORKERS }} env: BUILD_WITH_COVERAGE: 'true' CURRENTS_RECORD_KEY: ${{ secrets.CURRENTS_RECORD_KEY }} CURRENTS_PROJECT_ID: 'LRxcNt' QA_METRICS_WEBHOOK_URL: ${{ secrets.QA_METRICS_WEBHOOK_URL }} QA_METRICS_WEBHOOK_USER: ${{ secrets.QA_METRICS_WEBHOOK_USER }} QA_METRICS_WEBHOOK_PASSWORD: ${{ secrets.QA_METRICS_WEBHOOK_PASSWORD }} - name: Generate Coverage Report if: always() && steps.coverage-tests.outcome != 'skipped' run: pnpm --filter n8n-playwright coverage:report - name: Upload Coverage Report Artifact if: always() uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: coverage-report path: packages/testing/playwright/coverage/ retention-days: 14 - name: Upload E2E Coverage to Codecov if: always() uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 with: token: ${{ secrets.CODECOV_TOKEN }} files: packages/testing/playwright/coverage/lcov.info flags: frontend-e2e name: playwright-e2e fail_ci_if_error: false - name: Analyse Coverage Gaps if: always() && steps.coverage-tests.outcome != 'skipped' env: CODECOV_API_TOKEN: ${{ secrets.CODECOV_API_TOKEN }} run: | node packages/testing/playwright/scripts/coverage-analysis.mjs \ --md --top=15 --out-json=coverage-gaps.json >> "$GITHUB_STEP_SUMMARY" - name: Upload Coverage Gap Report if: always() && steps.coverage-tests.outcome != 'skipped' uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: coverage-gap-report path: coverage-gaps.json retention-days: 21