name: Test on: push: branches-ignore: - 'dependabot/**' paths: - 'lib/**' - 'package.json' - 'pnpm-lock.yaml' - 'pnpm-workspace.yaml' - '.github/workflows/test.yml' pull_request: {} permissions: checks: write code-quality: write jobs: vitest: runs-on: ubuntu-latest timeout-minutes: 10 services: redis: image: redis ports: - 6379/tcp options: --entrypoint redis-server strategy: fail-fast: false matrix: node-version: [latest, lts/*] name: Vitest on Node ${{ matrix.node-version }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0 - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: ${{ matrix.node-version }} cache: 'pnpm' - name: Install dependencies (pnpm) run: pnpm i - name: Run postinstall script for dependencies run: pnpm rb && pnpm exec patchright install chromium - parallel: - name: Build routes run: pnpm build - name: Build worker run: pnpm worker-build - name: Test all and generate coverage run: pnpm run vitest:coverage --reporter=github-actions env: REDIS_URL: redis://localhost:${{ job.services.redis.ports['6379'] }}/ - name: Test worker runtime (workerd) run: pnpm run vitest:workerd - parallel: - name: Upload coverage to Codecov if: ${{ matrix.node-version == 'lts/*' }} uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1 with: token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos as documented, but seems broken - name: Upload coverage to GitHub if: ${{ matrix.node-version == 'lts/*' }} uses: actions/upload-code-coverage@2b21a77928be8d5168c2b9581a67f2adbebacc52 # v1.4.4 with: file: coverage/cobertura-coverage.xml language: TypeScript label: code-coverage/vitest fail-on-error: false playwright: runs-on: ubuntu-latest timeout-minutes: 10 strategy: fail-fast: false matrix: node-version: [latest, lts/*] chromium: - name: bundled Chromium dependency: '' environment: '{ "PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD": "0" }' - name: Chromium from Ubuntu dependency: chromium-browser environment: '{ "PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD": "1" }' - name: Chrome from Google dependency: google-chrome-stable environment: '{ "PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD": "1" }' name: Vitest Playwright on Node ${{ matrix.node-version }} with ${{ matrix.chromium.name }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0 - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: ${{ matrix.node-version }} cache: 'pnpm' - name: Install dependencies (pnpm) run: pnpm i env: ${{ fromJSON(matrix.chromium.environment) }} - name: Run postinstall script for dependencies run: pnpm rb - parallel: - name: Build routes run: pnpm build - name: Install bundled Chromium if: ${{ matrix.chromium.dependency == '' }} run: pnpm exec patchright install chromium - name: Install Chromium if: ${{ matrix.chromium.dependency != '' }} # 'chromium-browser' from Ubuntu APT repo is a dummy package. Its version (85.0.4183.83) means # nothing since it calls Snap (disgusting!) to install Chromium, which should be up-to-date. # That's not really a problem since the Chromium-bundled Docker image is based on Debian trixie, # which provides up-to-date native packages. run: | set -eux curl -s "https://dl.google.com/linux/linux_signing_key.pub" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/google-chrome.gpg > /dev/null echo "deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list > /dev/null sudo apt-get update sudo apt-get install -yq --no-install-recommends ${{ matrix.chromium.dependency }} - name: Test Playwright run: | set -eux if [ -n "${{ matrix.chromium.dependency }}" ]; then export CHROMIUM_EXECUTABLE_PATH="$(which ${{ matrix.chromium.dependency }})" fi pnpm run vitest playwright all: runs-on: ubuntu-latest timeout-minutes: 5 permissions: attestations: write strategy: fail-fast: false matrix: node-version: [latest, 26] name: Build radar and maintainer on Node ${{ matrix.node-version }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0 - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: ${{ matrix.node-version }} cache: 'pnpm' - run: pnpm i - name: Build radar and maintainer run: npm run build - name: Upload assets uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: generated-assets-${{ matrix.node-version }} path: assets/build/ automerge: if: github.triggering_actor == 'dependabot[bot]' && github.event_name == 'pull_request' needs: [vitest, playwright, all] runs-on: ubuntu-slim permissions: pull-requests: write contents: write steps: - uses: fastify/github-action-merge-dependabot@73ec4cbb5e56df5591eae286972d5b2201ffe90f # v3.15.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} target: patch