name: Tests on: pull_request: merge_group: push: branches: - main concurrency: # Cancel existing builds for the same PR. # Otherwise, all other builds will be allowed to run through. group: test.yml-${{ github.event.pull_request.number || github.run_id }} cancel-in-progress: true permissions: # Read repo contents: read # Read/write artifacts actions: write # Required for adding comments to PR. # Specifically for sticky-pull-request-comment workflow action. pull-requests: write jobs: fixup: if: github.event_name == 'pull_request' uses: ./.github/workflows/fixup.yml labels: if: github.event_name == 'pull_request' uses: ./.github/workflows/labels.yml test: strategy: matrix: os: [ { name: linux, arch: X64, image: ubuntu-22.04-16core }, { name: linux-arm, arch: ARM64, image: ubuntu-22.04-arm-16core }, { name: macOS, arch: ARM64, image: macos-15-xlarge, use_lld: true }, { name: windows, arch: X64, image: windows-2025-16core }, ] config: [ # Default build: no suffix or additional bazel arguments { suffix: '' }, # Debug build { suffix: -debug }, ] include: # Add an Address Sanitizer (ASAN) build on Linux for additional checking. - os: { name: linux, arch: X64, image: ubuntu-22.04-16core } config: { suffix: -asan } # TODO (later): The custom Windows-debug configuration consistently runs out of disk # space on CI, disable it for now. Once https://github.com/bazelbuild/bazel/issues/21615 # has been resolved we can likely re-enable it and possibly fold up the custom # configurations, as we can more easily disable PDB file generation. # - os: { name : windows, image : windows-2025 } # config: { suffix: -debug, bazel-args: --config=windows_dbg } exclude: - os: { name: windows, arch: X64, image: windows-2025-16core } config: { suffix: -debug } # due to resource constraints, exclude the macOS and x64 Linux debug runners for now. # linux-asan and arm64 linux-debug should provide sufficient coverage for building in the # debug configuration. - os: { name: macOS, arch: ARM64, image: macos-15-xlarge } config: { suffix: -debug } - os: { name: linux, arch: X64, image: ubuntu-22.04-16core } config: { suffix: -debug } # linux release is handled by separate test-linux job - os: { name: linux, arch: X64, image: ubuntu-22.04-16core } config: { suffix: '' } fail-fast: false name: test (${{ matrix.os.name }}, ${{ matrix.os.image}}${{matrix.config.suffix != '' && format(', {0}', matrix.config.suffix) || ''}}) uses: ./.github/workflows/_bazel.yml with: image: ${{ matrix.os.image }} os_name: ${{ matrix.os.name }} arch_name: ${{ matrix.os.arch }} suffix: ${{ matrix.config.suffix }} extra_bazel_args: '--config=ci-test --config=ci-${{matrix.os.name}}${{matrix.config.suffix}}' macos_use_lld: ${{ matrix.os.use_lld || false }} secrets: BAZEL_CACHE_KEY: ${{ secrets.BAZEL_CACHE_KEY }} WORKERS_MIRROR_URL: ${{ secrets.WORKERS_MIRROR_URL }} GOOGLESOURCE_COOKIE: ${{ secrets.GOOGLESOURCE_COOKIE }} # Handled separately from `test` to speed up execution of workers-sdk-test which depends on it. test-linux: uses: ./.github/workflows/_bazel.yml with: image: ubuntu-22.04-16core os_name: linux arch_name: 'X64' suffix: '' extra_bazel_args: '--config=ci-test --config=ci-linux --config=wpt-report' upload_test_logs: true upload_binary: true build_container_images: true secrets: BAZEL_CACHE_KEY: ${{ secrets.BAZEL_CACHE_KEY }} WORKERS_MIRROR_URL: ${{ secrets.WORKERS_MIRROR_URL }} GOOGLESOURCE_COOKIE: ${{ secrets.GOOGLESOURCE_COOKIE }} lint: uses: ./.github/workflows/_bazel.yml with: extra_bazel_args: '--config=lint --config=clang-tidy --config=ci-test --config=ci-linux-common' run_tests: false parse_headers: true secrets: BAZEL_CACHE_KEY: ${{ secrets.BAZEL_CACHE_KEY }} WORKERS_MIRROR_URL: ${{ secrets.WORKERS_MIRROR_URL }} GOOGLESOURCE_COOKIE: ${{ secrets.GOOGLESOURCE_COOKIE }} check-snapshot: runs-on: ubuntu-22.04-16core steps: - uses: actions/checkout@v6 with: show-progress: false - name: Cache id: cache uses: actions/cache@v5 # Use same cache and build configuration as release build, this allows us to keep download # sizes small and generate types with optimization enabled, should be slightly faster. with: path: ~/bazel-disk-cache key: bazel-disk-cache-release-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.bazelversion', '.bazelrc', 'MODULE.bazel') }} - name: Setup Runner uses: ./.github/actions/setup-runner with: GOOGLESOURCE_COOKIE: ${{ secrets.GOOGLESOURCE_COOKIE }} - name: build types run: | bazel build --strip=always --remote_cache=https://bazel:${{ secrets.BAZEL_CACHE_KEY }}@bazel-remote-cache.devprod.cloudflare.dev --config=ci --config=release_linux //types - name: Check snapshot diff run: | diff -r types/generated-snapshot/latest bazel-bin/types/definitions/latest > types.diff diff -r types/generated-snapshot/experimental bazel-bin/types/definitions/experimental >> types.diff - name: 'Put diff on the environment' if: failure() id: types_diff run: | { echo 'TYPES_DIFF<> "$GITHUB_ENV" - uses: actions/upload-artifact@v7 id: artifact-upload-step with: name: generated-snapshot path: bazel-bin/types/definitions/ - name: 'Comment on PR with error details' if: failure() uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 with: message: | The generated output of `@cloudflare/workers-types` has been changed by this PR. If this is intentional, run `just generate-types` to update the snapshot. Alternatively, you can download the full generated types: ${{ steps.artifact-upload-step.outputs.artifact-url }}
Full Type Diff ```diff ${{ env.TYPES_DIFF }} ```
- name: 'Comment on PR with error details' if: success() uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 with: only_update: true message: | The generated output of `@cloudflare/workers-types` matches the snapshot in `types/generated-snapshot` :tada: workers-sdk-test: needs: [test-linux, check-snapshot] name: Run workers-sdk tests runs-on: ubuntu-22.04-16core steps: - name: Checkout workers-sdk uses: actions/checkout@v6 with: repository: cloudflare/workers-sdk - name: Install pnpm uses: pnpm/action-setup@v5 - name: Use Node.js uses: actions/setup-node@v6 with: # Match workers-sdk node version node-version: 22 cache: 'pnpm' - name: Install workers-sdk dependencies run: pnpm install - name: Download workerd binary uses: actions/download-artifact@v8 with: name: linux-X64-binary path: /tmp - name: Make workerd binary executable run: chmod +x /tmp/workerd - name: Download generated types uses: actions/download-artifact@v8 with: name: generated-snapshot path: /tmp/test-types - name: Create and install workers-types package run: | cp /tmp/test-types/oldest/* /tmp/test-types cat > /tmp/test-types/package.json << EOF { "name": "@cloudflare/workers-types" } EOF pnpm add /tmp/test-types -w - name: Run Wrangler unit tests # Run all the wrangler unit tests besides the ConfigController ones since those # are currently very flaky (the ANT team will look into stabilizing them and # re-enabling them here as soon as possible, ref: https://jira.cfdata.org/browse/DEVX-2309) run: pnpm test:ci --filter wrangler -- -t '^((?!(ConfigController)).)*$' env: MINIFLARE_WORKERD_PATH: /tmp/workerd - name: Run Miniflare unit tests run: pnpm test:ci --filter miniflare env: MINIFLARE_WORKERD_PATH: /tmp/workerd - name: Run Vite unit tests run: pnpm test:ci --filter @cloudflare/vite-plugin env: MINIFLARE_WORKERD_PATH: /tmp/workerd - name: Run Vitest unit tests run: pnpm test:ci --filter="./fixtures/vitest-pool-workers-examples" env: MINIFLARE_WORKERD_PATH: /tmp/workerd - name: Run Wrangler Node.js e2e tests run: pnpm test:e2e --filter wrangler -- unenv-preset env: MINIFLARE_WORKERD_PATH: /tmp/workerd wpt-report: needs: [test-linux] uses: ./.github/workflows/_wpt.yml with: image: 'ubuntu-22.04-16core' logs_artifact: 'test-logs-linux-X64.zip' report_artifact: 'wpt-report-linux-X64.json'