70bf21e064
Deploy (to testing) and Test Playground Preview Worker / Deploy Playground Preview Worker (testing) (push) Has been skipped
Deploy Workers Shared Staging / Deploy Workers Shared Staging (push) Failing after 0s
Prerelease / build (push) Has been skipped
Handle Changesets / Handle Changesets (push) Has been cancelled
Semgrep OSS scan / semgrep-oss (push) Has been cancelled
203 lines
8.9 KiB
YAML
203 lines
8.9 KiB
YAML
name: CI
|
|
|
|
on:
|
|
merge_group:
|
|
pull_request:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
env:
|
|
# We run `playwright install` manually instead
|
|
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1"
|
|
|
|
jobs:
|
|
add-to-project:
|
|
if: github.head_ref != 'changeset-release/main'
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}-add-pr
|
|
cancel-in-progress: ${{ github.head_ref != 'changeset-release/main' }}
|
|
timeout-minutes: 30
|
|
name: Add PR to project
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- run: curl -X POST https://devprod-status-bot.devprod.workers.dev/pr-project/workers-sdk/${{ github.event.number }}
|
|
|
|
check:
|
|
timeout-minutes: 30
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}-checks
|
|
cancel-in-progress: ${{ github.head_ref != 'changeset-release/main' }}
|
|
|
|
name: "Checks"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout Repo
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
with:
|
|
fetch-depth: 0
|
|
persist-credentials: false
|
|
|
|
- name: Install Dependencies
|
|
uses: ./.github/actions/install-dependencies
|
|
with:
|
|
turbo-api: ${{ secrets.TURBO_API }}
|
|
turbo-team: ${{ secrets.TURBO_TEAM }}
|
|
turbo-token: ${{ secrets.TURBO_TOKEN }}
|
|
turbo-signature: ${{ secrets.TURBO_REMOTE_CACHE_SIGNATURE_KEY }}
|
|
|
|
- name: Check the changesets
|
|
run: node -r esbuild-register tools/deployments/validate-changesets.ts
|
|
|
|
- name: Check for errors
|
|
run: pnpm run check --summarize
|
|
env:
|
|
CI_OS: ${{ runner.os }}
|
|
NODE_OPTIONS: "--max_old_space_size=8192"
|
|
|
|
- name: Filter changed paths
|
|
uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
|
|
id: changes
|
|
with:
|
|
filters: |
|
|
miniflare_openapi:
|
|
- 'packages/miniflare/src/workers/local-explorer/openapi.local.json'
|
|
- 'packages/miniflare/src/workers/local-explorer/generated/**'
|
|
- 'packages/miniflare/scripts/openapi-filter-config.ts'
|
|
- 'packages/miniflare/scripts/filter-openapi.ts'
|
|
- 'packages/miniflare/scripts/check-generate-api.ts'
|
|
- 'packages/miniflare/openapi-ts.config.ts'
|
|
|
|
- name: Check generated OpenAPI types are up to date
|
|
if: steps.changes.outputs.miniflare_openapi == 'true'
|
|
run: pnpm -F miniflare check:generate-api
|
|
|
|
# Check for old Node.js version warnings and errors
|
|
- name: Use Node.js v20
|
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
with:
|
|
node-version: 20
|
|
|
|
- name: Check for error message on Node.js < v22
|
|
run: node packages/wrangler/src/__tests__/test-old-node-version.js error
|
|
|
|
test:
|
|
timeout-minutes: 30
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.os }}-${{ matrix.suite }}-test
|
|
cancel-in-progress: ${{ github.head_ref != 'changeset-release/main' }}
|
|
|
|
name: ${{ format('Tests ({0}, {1})', matrix.description, matrix.suite) }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- macos-latest
|
|
- ubuntu-latest
|
|
- windows-latest
|
|
suite:
|
|
- packages-and-tools
|
|
- fixtures
|
|
include:
|
|
- os: macos-latest
|
|
description: macOS
|
|
- os: ubuntu-latest
|
|
description: Linux
|
|
- os: windows-latest
|
|
description: Windows
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Checkout Repo
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
with:
|
|
fetch-depth: 0
|
|
persist-credentials: false
|
|
|
|
- name: Filter changed paths
|
|
uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
|
|
id: changes
|
|
with:
|
|
filters: |
|
|
everything_but_markdown:
|
|
- '!**/*.md'
|
|
|
|
- name: Install Dependencies
|
|
if: steps.changes.outputs.everything_but_markdown == 'true'
|
|
uses: ./.github/actions/install-dependencies
|
|
with:
|
|
turbo-api: ${{ secrets.TURBO_API }}
|
|
turbo-team: ${{ secrets.TURBO_TEAM }}
|
|
turbo-token: ${{ secrets.TURBO_TOKEN }}
|
|
turbo-signature: ${{ secrets.TURBO_REMOTE_CACHE_SIGNATURE_KEY }}
|
|
|
|
# Browser Run tests in `packages/miniflare/test/plugins/browser/index.spec.ts`
|
|
# and the `fixtures/browser-run` fixture use `@puppeteer/browsers` to
|
|
# download Chrome into the global Wrangler cache. Caching that binary
|
|
# across CI runs avoids ~150 MB of repeat downloads per run and reduces
|
|
# the surface area for the intermittent partial-extraction race that
|
|
# surfaces as `The browser folder (...) exists but the executable (...)
|
|
# is missing` (see #13971, #13980).
|
|
#
|
|
# The Browser Run fixture is skipped on Ubuntu (AppArmor), but the
|
|
# miniflare browser spec runs everywhere, so the cache is needed on all
|
|
# three OSes for `packages-and-tools` and on Windows + macOS for
|
|
# `fixtures`.
|
|
- name: Restore Chrome browser cache (Browser Run)
|
|
if: steps.changes.outputs.everything_but_markdown == 'true' && (matrix.suite == 'packages-and-tools' || (matrix.suite == 'fixtures' && matrix.os != 'ubuntu-latest'))
|
|
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
|
with:
|
|
# The Chrome version lives in
|
|
# `packages/miniflare/src/plugins/browser-rendering/browser-version.ts`.
|
|
# Bumping that constant invalidates this cache automatically via
|
|
# `hashFiles()` — a cache miss only triggers a fresh download, no
|
|
# functional impact.
|
|
key: chrome-${{ runner.os }}-${{ hashFiles('packages/miniflare/src/plugins/browser-rendering/browser-version.ts') }}
|
|
path: |
|
|
~/.cache/.wrangler/chrome
|
|
~/Library/Caches/.wrangler/chrome
|
|
~/AppData/Local/xdg.cache/.wrangler/chrome
|
|
|
|
- name: Run tests (tools only)
|
|
# tools _only_ needs to be tested on Linux because they're only intended to run in CI
|
|
if: steps.changes.outputs.everything_but_markdown == 'true' && matrix.suite == 'packages-and-tools' && matrix.os == 'ubuntu-latest'
|
|
run: pnpm run test:ci --log-order=stream --filter="@cloudflare/tools"
|
|
env:
|
|
NODE_OPTIONS: "--max_old_space_size=8192"
|
|
TEST_REPORT_PATH: ${{ runner.temp }}/test-report/tools/index.html
|
|
CI_OS: ${{ matrix.description }}
|
|
|
|
- name: Run tests (packages)
|
|
if: steps.changes.outputs.everything_but_markdown == 'true' && matrix.suite == 'packages-and-tools'
|
|
# We skip @cloudflare/vitest-pool-workers tests in CI on Windows because they're very flaky. We still run the vitest-pool-workers-examples fixture, which is a comprehensive set of example tests and gives us a lot of confidence.
|
|
# The @cloudflare/vitest-pool-workers tests skipped are things like watch mode, which constantly times out probably due to the github runners in use.
|
|
# Package tests are well-isolated (separate processes, temp dirs, random ports, MSW mocks) and can safely run in parallel.
|
|
# Concurrency is capped at 3 to avoid CPU starvation on 4-vCPU CI runners when heavyweight suites
|
|
# (wrangler/forks, miniflare/workerd, vitest-pool-workers/Verdaccio) overlap.
|
|
run: pnpm run test:ci --log-order=stream --concurrency=3 --filter="./packages/*" ${{ matrix.os == 'windows-latest' && '--filter="!./packages/vitest-pool-workers"' || '' }}
|
|
env:
|
|
NODE_OPTIONS: "--max_old_space_size=8192"
|
|
WRANGLER_LOG_PATH: ${{ runner.temp }}/wrangler-debug-logs/
|
|
TEST_REPORT_PATH: ${{ runner.temp }}/test-report/packages/index.html
|
|
CI_OS: ${{ matrix.description }}
|
|
|
|
- name: Run tests (fixtures)
|
|
if: steps.changes.outputs.everything_but_markdown == 'true' && matrix.suite == 'fixtures'
|
|
# Browser Run fixture is disabled on Ubuntu because of https://pptr.dev/troubleshooting#issues-with-apparmor-on-ubuntu
|
|
# Since the dev registry is now file-based (not network-based), fixture tests can safely run in parallel.
|
|
# Concurrency is capped at 2 to avoid CPU starvation on CI runners when multiple fixtures
|
|
# spawn workerd processes simultaneously (Windows runners are especially slow under load).
|
|
run: pnpm run test:ci --concurrency=2 --log-order=stream --filter="./fixtures/*" ${{ matrix.os == 'ubuntu-latest' && '--filter="!./fixtures/browser-run"' || '' }}
|
|
env:
|
|
NODE_OPTIONS: "--max_old_space_size=8192"
|
|
WRANGLER_LOG_PATH: ${{ runner.temp }}/wrangler-debug-logs/
|
|
TEST_REPORT_PATH: ${{ runner.temp }}/test-report/index.html
|
|
CI_OS: ${{ matrix.description }}
|
|
|
|
- name: Upload turbo logs
|
|
if: always()
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: turbo-runs-${{ matrix.os }}-${{ matrix.suite }}
|
|
path: .turbo/runs
|