From 8fa68d5d6625e47a81559c0748561e17f96f8316 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 8 Jun 2026 10:13:45 -0400 Subject: [PATCH 01/11] ci: condense integration workflows --- .github/workflows/integration-full.yml | 53 ------- .github/workflows/integration-pr-ubuntu.yml | 35 ----- .../integration-pr-windows-macos.yml | 54 ------- ...ed-integration.yml => integration-run.yml} | 4 +- .github/workflows/integration.yml | 137 ++++++++++++++++++ package.json | 3 +- 6 files changed, 141 insertions(+), 145 deletions(-) delete mode 100644 .github/workflows/integration-full.yml delete mode 100644 .github/workflows/integration-pr-ubuntu.yml delete mode 100644 .github/workflows/integration-pr-windows-macos.yml rename .github/workflows/{shared-integration.yml => integration-run.yml} (92%) create mode 100644 .github/workflows/integration.yml diff --git a/.github/workflows/integration-full.yml b/.github/workflows/integration-full.yml deleted file mode 100644 index d023c28381..0000000000 --- a/.github/workflows/integration-full.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Branch - -# The main branch gets the full run across -# all OS/browsers for multiple node versions - -on: - push: - branches: - - main - paths-ignore: - - "packages/*/.changes/**" - - "decisions/**" - - "docs/**" - - "examples/**" - - "jest/**" - - "scripts/**" - - "tutorial/**" - - "contributors.yml" - - "**/*.md" - -jobs: - build: - name: "โš™๏ธ Build" - if: github.repository == 'remix-run/react-router' - uses: ./.github/workflows/shared-build.yml - - integration-ubuntu: - name: "๐Ÿ‘€ Integration Test" - if: github.repository == 'remix-run/react-router' - uses: ./.github/workflows/shared-integration.yml - with: - os: "ubuntu-latest" - node_version: "[22.22, 24]" - browser: '["chromium", "firefox"]' - - integration-windows: - name: "๐Ÿ‘€ Integration Test" - if: github.repository == 'remix-run/react-router' - uses: ./.github/workflows/shared-integration.yml - with: - os: "windows-latest" - node_version: "[24]" - browser: '["msedge"]' - timeout: 90 - - integration-macos: - name: "๐Ÿ‘€ Integration Test" - if: github.repository == 'remix-run/react-router' - uses: ./.github/workflows/shared-integration.yml - with: - os: "macos-latest" - node_version: "[22.22, 24]" - browser: '["webkit"]' diff --git a/.github/workflows/integration-pr-ubuntu.yml b/.github/workflows/integration-pr-ubuntu.yml deleted file mode 100644 index b13f78d1ac..0000000000 --- a/.github/workflows/integration-pr-ubuntu.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: PR (Base) - -# All PRs touching code will run tests on ubuntu/node/chromium - -on: - pull_request: - paths-ignore: - - "packages/*/.changes/**" - - "decisions/**" - - "docs/**" - - "examples/**" - - "jest/**" - - "scripts/**" - - "tutorial/**" - - "contributors.yml" - - "**/*.md" - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - name: "โš™๏ธ Build" - if: github.repository == 'remix-run/react-router' - uses: ./.github/workflows/shared-build.yml - - integration-chromium: - name: "๐Ÿ‘€ Integration Test" - if: github.repository == 'remix-run/react-router' - uses: ./.github/workflows/shared-integration.yml - with: - os: "ubuntu-latest" - node_version: "[24]" - browser: '["chromium"]' diff --git a/.github/workflows/integration-pr-windows-macos.yml b/.github/workflows/integration-pr-windows-macos.yml deleted file mode 100644 index c29da71511..0000000000 --- a/.github/workflows/integration-pr-windows-macos.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: PR (Full) - -# PRs touching @react-router/dev will also run on Ubuntu/Firefox, Windows/Edge and -# OSX/WebKit as well as an Ubuntu/Chromium run on Node 22.22. - -on: - pull_request: - paths: - - "pnpm-lock.yaml" - - "integration/**" - - "packages/react-router-dev/**" - - "!**/*.md" - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - integration-chromium: - name: "๐Ÿ‘€ Integration Test" - if: github.repository == 'remix-run/react-router' - uses: ./.github/workflows/shared-integration.yml - with: - os: "ubuntu-latest" - node_version: "[22.22]" - browser: '["chromium"]' - - integration-firefox: - name: "๐Ÿ‘€ Integration Test" - if: github.repository == 'remix-run/react-router' - uses: ./.github/workflows/shared-integration.yml - with: - os: "ubuntu-latest" - node_version: "[24]" - browser: '["firefox"]' - - integration-msedge: - name: "๐Ÿ‘€ Integration Test" - if: github.repository == 'remix-run/react-router' - uses: ./.github/workflows/shared-integration.yml - with: - os: "windows-latest" - node_version: "[24]" - browser: '["msedge"]' - timeout: 90 - - integration-webkit: - name: "๐Ÿ‘€ Integration Test" - if: github.repository == 'remix-run/react-router' - uses: ./.github/workflows/shared-integration.yml - with: - os: "macos-latest" - node_version: "[24]" - browser: '["webkit"]' diff --git a/.github/workflows/shared-integration.yml b/.github/workflows/integration-run.yml similarity index 92% rename from .github/workflows/shared-integration.yml rename to .github/workflows/integration-run.yml index b80396ef29..ccd0dd0be0 100644 --- a/.github/workflows/shared-integration.yml +++ b/.github/workflows/integration-run.yml @@ -49,8 +49,8 @@ jobs: node-version: ${{ matrix.node }} cache: "pnpm" - # TODO: Track and renable once this has been fixed: https://github.com/google/wireit/issues/1297 - # - uses: google/wireit@setup-github-actions-caching/v2 + - name: Setup wireit cache ${{ matrix.node }} + uses: google/wireit@setup-github-actions-caching/v2 - name: Disable GitHub Actions Annotations run: | diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml new file mode 100644 index 0000000000..5922b861cb --- /dev/null +++ b/.github/workflows/integration.yml @@ -0,0 +1,137 @@ +name: Integration + +# Source changes get the base Ubuntu/Node 24/Chromium run. PRs that touch +# @react-router/dev add broader Node 24/browser coverage and Node 22/Chromium. +# PRs targeting main and main branch pushes also add Node 22 for other browsers. + +on: + push: + branches: + - main + paths: + - "packages/**" + - "integration/**" + - "package.json" + - "pnpm-lock.yaml" + - "pnpm-workspace.yaml" + - "build.utils.ts" + - "build.utils.d.ts" + - "!**/*.md" + pull_request: + paths: + - "packages/**" + - "integration/**" + - "package.json" + - "pnpm-lock.yaml" + - "pnpm-workspace.yaml" + - "build.utils.ts" + - "build.utils.d.ts" + - "!**/*.md" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + pull-requests: read + +jobs: + changes: + name: "๐Ÿ”Ž Check Changed Files" + if: github.repository == 'remix-run/react-router' + runs-on: ubuntu-latest + outputs: + type: ${{ steps.suites.outputs.type }} + steps: + - name: ๐Ÿ”Ž Select integration suites + id: suites + env: + GH_TOKEN: ${{ github.token }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + if [ "${{ github.event_name }}" = "push" ]; then + echo "type=full" >> "$GITHUB_OUTPUT" + elif gh pr view "$PR_NUMBER" --json files -q '.files[].path' | grep -q '^packages/react-router-dev/'; then + echo "type=dev" >> "$GITHUB_OUTPUT" + else + echo "type=base" >> "$GITHUB_OUTPUT" + fi + + # base only runs Node 24/Chromium + integration-chromium: + name: "๐Ÿ‘€ Integration Test" + needs: changes + if: github.repository == 'remix-run/react-router' + uses: ./.github/workflows/integration-run.yml + with: + os: "ubuntu-latest" + node_version: "[24]" + browser: '["chromium"]' + + # dev/full add Node 22/Chromium + integration-chromium-node-22: + name: "๐Ÿ‘€ Integration Test" + needs: changes + if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) + uses: ./.github/workflows/integration-run.yml + with: + os: "ubuntu-latest" + node_version: "[22.22]" + browser: '["chromium"]' + + # dev/full add Node 24/Firefox + integration-firefox: + name: "๐Ÿ‘€ Integration Test" + needs: changes + if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) + uses: ./.github/workflows/integration-run.yml + with: + os: "ubuntu-latest" + node_version: "[24]" + browser: '["firefox"]' + + # dev/full add Node 24/Edge + integration-msedge: + name: "๐Ÿ‘€ Integration Test" + needs: changes + if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) + uses: ./.github/workflows/integration-run.yml + with: + os: "windows-latest" + node_version: "[24]" + browser: '["msedge"]' + timeout: 90 + + # dev/full add Node 24/WebKit + integration-webkit: + name: "๐Ÿ‘€ Integration Test" + needs: changes + if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) + uses: ./.github/workflows/integration-run.yml + with: + os: "macos-latest" + node_version: "[24]" + browser: '["webkit"]' + + # full adds Node 22/Firefox + integration-firefox-node-22: + name: "๐Ÿ‘€ Integration Test" + needs: changes + if: github.repository == 'remix-run/react-router' && needs.changes.outputs.type == 'full' + uses: ./.github/workflows/integration-run.yml + with: + os: "ubuntu-latest" + node_version: "[22.22]" + browser: '["firefox"]' + + # full adds Node 22/WebKit + integration-webkit-node-22: + name: "๐Ÿ‘€ Integration Test" + needs: changes + if: github.repository == 'remix-run/react-router' && needs.changes.outputs.type == 'full' + uses: ./.github/workflows/integration-run.yml + with: + os: "macos-latest" + node_version: "[22.22]" + browser: '["webkit"]' diff --git a/package.json b/package.json index 81bae84e0c..78f494752f 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,9 @@ "typegen": "pnpm run --recursive --parallel typegen", "typecheck": "pnpm run --recursive --parallel typecheck", "test:integration:run": "pnpm playwright:integration", - "test:integration": "pnpm build && pnpm test:integration:run", "posttest:integration:run": "pnpm clean:integration", + "pretest:integration": "pnpm build", + "test:integration": "pnpm test:integration:run", "playwright:integration": "playwright test --config ./integration/playwright.config.ts", "vite-ecosystem-ci:build": "pnpm build", "vite-ecosystem-ci:before-test": "pnpm playwright install", From 281e69a8f8daf1cd298a2baa37dc8d49985353ad Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 8 Jun 2026 10:20:36 -0400 Subject: [PATCH 02/11] Pin github action version --- .github/workflows/integration-run.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-run.yml b/.github/workflows/integration-run.yml index ccd0dd0be0..219bedb36d 100644 --- a/.github/workflows/integration-run.yml +++ b/.github/workflows/integration-run.yml @@ -50,7 +50,7 @@ jobs: cache: "pnpm" - name: Setup wireit cache ${{ matrix.node }} - uses: google/wireit@setup-github-actions-caching/v2 + uses: google/wireit@setup-github-actions-caching/v2.0.4 - name: Disable GitHub Actions Annotations run: | From 449ae87ac35a4645b7b57c22af74b9b927602fa2 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 8 Jun 2026 10:26:08 -0400 Subject: [PATCH 03/11] Updates --- ...mments.yml => release-comments-manual.yml} | 0 .github/workflows/shared-build.yml | 38 ------------------- .github/workflows/test.yml | 9 ++--- 3 files changed, 4 insertions(+), 43 deletions(-) rename .github/workflows/{release-comments.yml => release-comments-manual.yml} (100%) delete mode 100644 .github/workflows/shared-build.yml diff --git a/.github/workflows/release-comments.yml b/.github/workflows/release-comments-manual.yml similarity index 100% rename from .github/workflows/release-comments.yml rename to .github/workflows/release-comments-manual.yml diff --git a/.github/workflows/shared-build.yml b/.github/workflows/shared-build.yml deleted file mode 100644 index 06e5e44b48..0000000000 --- a/.github/workflows/shared-build.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: ๐Ÿ› ๏ธ Build - -on: - workflow_call: - -env: - CI: true - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: โฌ‡๏ธ Checkout repo - uses: actions/checkout@v6 - - - name: ๐Ÿ“ฆ Setup pnpm - uses: pnpm/action-setup@v6 - - - name: โŽ” Setup node - uses: actions/setup-node@v6 - with: - node-version-file: ".nvmrc" - cache: "pnpm" - - # TODO: Track and renable once this has been fixed: https://github.com/google/wireit/issues/1297 - # - uses: google/wireit@setup-github-actions-caching/v2 - - - name: Disable GitHub Actions Annotations - run: | - echo "::remove-matcher owner=tsc::" - echo "::remove-matcher owner=eslint-compact::" - echo "::remove-matcher owner=eslint-stylish::" - - - name: ๐Ÿ“ฅ Install deps - run: pnpm install --frozen-lockfile - - - name: ๐Ÿ— Build - run: pnpm build diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4ac54b5944..b452afb7c0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,7 +8,7 @@ on: - v* paths-ignore: - "docs/**" - - "**/README.md" + - "**/*.md" pull_request: paths-ignore: - "docs/**" @@ -24,6 +24,7 @@ permissions: jobs: test: name: "๐Ÿงช Test: (Node: ${{ matrix.node }})" + runs-on: ubuntu-latest strategy: fail-fast: false matrix: @@ -31,8 +32,6 @@ jobs: - 22.22 - 24 - runs-on: ubuntu-latest - steps: - name: โฌ‡๏ธ Checkout repo uses: actions/checkout@v6 @@ -47,8 +46,8 @@ jobs: cache: pnpm check-latest: true - # TODO: Track and renable once this has been fixed: https://github.com/google/wireit/issues/1297 - # - uses: google/wireit@setup-github-actions-caching/v2 + - name: Setup wireit cache ${{ matrix.node }} + uses: google/wireit@setup-github-actions-caching/v2.0.4 - name: Disable GitHub Actions Annotations run: | From 6bd928babab773d735c57d2896fbdf21bb7722c7 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 8 Jun 2026 10:33:44 -0400 Subject: [PATCH 04/11] ci: remove workflow name emojis --- .github/workflows/pr-checks.yml | 2 +- .github/workflows/release-comments-manual.yml | 2 +- .github/workflows/release.yml | 50 +++++++++---------- .../{integration.yml => test-integration.yml} | 18 +++---- .github/workflows/{test.yml => test-unit.yml} | 22 ++++---- README.md | 2 +- 6 files changed, 48 insertions(+), 48 deletions(-) rename .github/workflows/{integration.yml => test-integration.yml} (92%) rename .github/workflows/{test.yml => test-unit.yml} (76%) diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index 46d8f5b2a3..f26a4c6930 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -15,7 +15,7 @@ concurrency: jobs: check: - name: ๐Ÿ” Check PR + name: Check PR if: github.repository == 'remix-run/react-router' runs-on: ubuntu-latest permissions: diff --git a/.github/workflows/release-comments-manual.yml b/.github/workflows/release-comments-manual.yml index b48f731c29..a35701506a 100644 --- a/.github/workflows/release-comments-manual.yml +++ b/.github/workflows/release-comments-manual.yml @@ -9,7 +9,7 @@ concurrency: jobs: comment: - name: ๐Ÿ“ Comment on released issues/pull requests + name: Comment on released issues/pull requests runs-on: ubuntu-latest permissions: issues: write # enable commenting on released issues diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ffb5ba5960..b0f84fe0ed 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,7 +8,7 @@ # - v8 prereleases (from a workflow_dispatch trigger on the v8 branch) # - Experimental releases (from a workflow_dispatch trigger) -name: ๐Ÿšข Release/Publish +name: Release on: push: @@ -109,19 +109,19 @@ jobs: contents: write # enable pushing changes to the origin id-token: write # enable generation of an ID token for publishing steps: - - name: โฌ‡๏ธ Checkout repo + - name: Checkout repo uses: actions/checkout@v6 - - name: ๐Ÿ“ฆ Setup pnpm + - name: Setup pnpm uses: pnpm/action-setup@v6 - - name: โŽ” Setup node + - name: Setup node uses: actions/setup-node@v6 with: node-version-file: ".nvmrc" package-manager-cache: false - - name: ๐Ÿ“ฅ Install deps + - name: Install deps run: pnpm install --frozen-lockfile - name: Build packages @@ -133,31 +133,31 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} comment: - name: ๐Ÿ“ Comment on released issues/pull requests + name: Comment on released issues/pull requests needs: publish runs-on: ubuntu-latest permissions: issues: write # enable commenting on released issues pull-requests: write # enable commenting on released pull requests steps: - - name: โฌ‡๏ธ Checkout repo + - name: Checkout repo uses: actions/checkout@v6 with: fetch-depth: 0 - - name: ๐Ÿ“ฆ Setup pnpm + - name: Setup pnpm uses: pnpm/action-setup@v6 - - name: โŽ” Setup node + - name: Setup node uses: actions/setup-node@v6 with: node-version-file: ".nvmrc" package-manager-cache: false - - name: ๐Ÿ“ฅ Install deps + - name: Install deps run: pnpm install --frozen-lockfile - - name: ๐Ÿ“ Comment on released issues and pull requests + - name: Comment on released issues and pull requests env: GH_TOKEN: ${{ github.token }} run: pnpm run release-comments @@ -170,39 +170,39 @@ jobs: contents: read id-token: write # enable generation of an ID token for publishing steps: - - name: โฌ‡๏ธ Checkout repo + - name: Checkout repo uses: actions/checkout@v6 with: ref: ${{ github.event.inputs.branch }} fetch-depth: 0 # needed for tags - - name: ๐Ÿ“ฆ Setup pnpm + - name: Setup pnpm uses: pnpm/action-setup@v6 - - name: โŽ” Setup node + - name: Setup node uses: actions/setup-node@v6 with: node-version-file: ".nvmrc" package-manager-cache: false - - name: ๐Ÿ“ฅ Install deps + - name: Install deps run: pnpm install --frozen-lockfile - - name: ๐Ÿ— Build + - name: Build run: pnpm build - - name: ๐Ÿš€ Publish prerelease + - name: Publish prerelease run: pnpm prerelease:publish experimental-release: - name: ๐Ÿงช Experimental Release + name: Experimental Release if: github.repository == 'remix-run/react-router' && github.event_name == 'workflow_dispatch' && github.event.inputs.branch != 'v8' runs-on: ubuntu-latest permissions: contents: write # enable pushing changes to the origin id-token: write # enable generation of an ID token for publishing steps: - - name: โฌ‡๏ธ Checkout repo + - name: Checkout repo uses: actions/checkout@v6 with: ref: ${{ github.event.inputs.branch }} @@ -210,27 +210,27 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} fetch-depth: 0 - - name: ๐Ÿ“ฆ Setup pnpm + - name: Setup pnpm uses: pnpm/action-setup@v6 - - name: โŽ” Setup node + - name: Setup node uses: actions/setup-node@v6 with: node-version-file: ".nvmrc" package-manager-cache: false - - name: ๐Ÿ“ฅ Install deps + - name: Install deps run: pnpm install --frozen-lockfile - - name: โคด๏ธ Update version + - name: Update version run: | git config --local user.email "hello@remix.run" git config --local user.name "Remix Run Bot" pnpm run experimental:version git push origin --tags - - name: ๐Ÿ— Build + - name: Build run: pnpm build - - name: ๐Ÿš€ Publish + - name: Publish run: pnpm run experimental:publish diff --git a/.github/workflows/integration.yml b/.github/workflows/test-integration.yml similarity index 92% rename from .github/workflows/integration.yml rename to .github/workflows/test-integration.yml index 5922b861cb..817a4ad103 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/test-integration.yml @@ -1,4 +1,4 @@ -name: Integration +name: Test # Source changes get the base Ubuntu/Node 24/Chromium run. PRs that touch # @react-router/dev add broader Node 24/browser coverage and Node 22/Chromium. @@ -38,7 +38,7 @@ permissions: jobs: changes: - name: "๐Ÿ”Ž Check Changed Files" + name: "Check Changed Files" if: github.repository == 'remix-run/react-router' runs-on: ubuntu-latest outputs: @@ -60,7 +60,7 @@ jobs: # base only runs Node 24/Chromium integration-chromium: - name: "๐Ÿ‘€ Integration Test" + name: Integration (Node 24/Chromium)" needs: changes if: github.repository == 'remix-run/react-router' uses: ./.github/workflows/integration-run.yml @@ -71,7 +71,7 @@ jobs: # dev/full add Node 22/Chromium integration-chromium-node-22: - name: "๐Ÿ‘€ Integration Test" + name: "Integration (Node 22/Chromium)" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -82,7 +82,7 @@ jobs: # dev/full add Node 24/Firefox integration-firefox: - name: "๐Ÿ‘€ Integration Test" + name: "Integration (Node 24/Firefox)" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -93,7 +93,7 @@ jobs: # dev/full add Node 24/Edge integration-msedge: - name: "๐Ÿ‘€ Integration Test" + name: "Integration (Node 24/Edge)" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -105,7 +105,7 @@ jobs: # dev/full add Node 24/WebKit integration-webkit: - name: "๐Ÿ‘€ Integration Test" + name: "Integration (Node 24/WebKit)" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -116,7 +116,7 @@ jobs: # full adds Node 22/Firefox integration-firefox-node-22: - name: "๐Ÿ‘€ Integration Test" + name: "Integration (Node 22/Firefox)" needs: changes if: github.repository == 'remix-run/react-router' && needs.changes.outputs.type == 'full' uses: ./.github/workflows/integration-run.yml @@ -127,7 +127,7 @@ jobs: # full adds Node 22/WebKit integration-webkit-node-22: - name: "๐Ÿ‘€ Integration Test" + name: "Integration (Node 22/WebKit)" needs: changes if: github.repository == 'remix-run/react-router' && needs.changes.outputs.type == 'full' uses: ./.github/workflows/integration-run.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test-unit.yml similarity index 76% rename from .github/workflows/test.yml rename to .github/workflows/test-unit.yml index b452afb7c0..d6420dbacc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test-unit.yml @@ -1,4 +1,4 @@ -name: ๐Ÿงช Test +name: Test on: push: @@ -23,7 +23,7 @@ permissions: jobs: test: - name: "๐Ÿงช Test: (Node: ${{ matrix.node }})" + name: "Unit (Node ${{ matrix.node }})" runs-on: ubuntu-latest strategy: fail-fast: false @@ -33,20 +33,20 @@ jobs: - 24 steps: - - name: โฌ‡๏ธ Checkout repo + - name: Checkout repo uses: actions/checkout@v6 - - name: ๐Ÿ“ฆ Setup pnpm + - name: Setup pnpm uses: pnpm/action-setup@v6 - - name: โŽ” Setup node + - name: Setup node uses: actions/setup-node@v6 with: node-version: ${{ matrix.node }} cache: pnpm check-latest: true - - name: Setup wireit cache ${{ matrix.node }} + - name: Setup wireit cache uses: google/wireit@setup-github-actions-caching/v2.0.4 - name: Disable GitHub Actions Annotations @@ -55,17 +55,17 @@ jobs: echo "::remove-matcher owner=eslint-compact::" echo "::remove-matcher owner=eslint-stylish::" - - name: ๐Ÿ“ฅ Install deps + - name: Install deps run: pnpm install --frozen-lockfile - - name: ๐Ÿ— Build + - name: Build run: pnpm build - - name: ๐Ÿ” Typecheck + - name: Typecheck run: pnpm typecheck - - name: ๐Ÿ”ฌ Lint + - name: Lint run: pnpm lint - - name: ๐Ÿงช Run tests + - name: Run tests run: pnpm test diff --git a/README.md b/README.md index acc28164c2..f634862dc7 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [npm-badge]: https://img.shields.io/npm/v/react-router.svg [npm]: https://www.npmjs.org/package/react-router [build-badge]: https://img.shields.io/github/actions/workflow/status/remix-run/react-router/test.yml?branch=dev&style=square -[build]: https://github.com/remix-run/react-router/actions/workflows/test.yml +[build]: https://github.com/remix-run/react-router/actions/workflows/test-unit.yml React Router is a multi-strategy router for React bridging the gap from React 18 to React 19. You can use it maximally as a React framework or minimally as a library with your own architecture. From 74e8cb6fd56152945de41ebb7debf0e6501e25d6 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 8 Jun 2026 10:35:19 -0400 Subject: [PATCH 05/11] fix quote --- .github/workflows/test-integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 817a4ad103..15147a02e8 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -60,7 +60,7 @@ jobs: # base only runs Node 24/Chromium integration-chromium: - name: Integration (Node 24/Chromium)" + name: "Integration (Node 24/Chromium)" needs: changes if: github.repository == 'remix-run/react-router' uses: ./.github/workflows/integration-run.yml From 22c02732e3a5222858678d644e7fdd5671d6e93f Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 8 Jun 2026 10:38:20 -0400 Subject: [PATCH 06/11] Update titles --- .github/workflows/test-integration.yml | 16 ++++++++-------- .github/workflows/test-unit.yml | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 15147a02e8..24feb165bc 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -1,4 +1,4 @@ -name: Test +name: Integration Test # Source changes get the base Ubuntu/Node 24/Chromium run. PRs that touch # @react-router/dev add broader Node 24/browser coverage and Node 22/Chromium. @@ -60,7 +60,7 @@ jobs: # base only runs Node 24/Chromium integration-chromium: - name: "Integration (Node 24/Chromium)" + name: "Node 24/Chromium" needs: changes if: github.repository == 'remix-run/react-router' uses: ./.github/workflows/integration-run.yml @@ -71,7 +71,7 @@ jobs: # dev/full add Node 22/Chromium integration-chromium-node-22: - name: "Integration (Node 22/Chromium)" + name: "Node 22/Chromium" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -82,7 +82,7 @@ jobs: # dev/full add Node 24/Firefox integration-firefox: - name: "Integration (Node 24/Firefox)" + name: "Node 24/Firefox" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -93,7 +93,7 @@ jobs: # dev/full add Node 24/Edge integration-msedge: - name: "Integration (Node 24/Edge)" + name: "Node 24/Edge" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -105,7 +105,7 @@ jobs: # dev/full add Node 24/WebKit integration-webkit: - name: "Integration (Node 24/WebKit)" + name: "Node 24/WebKit" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -116,7 +116,7 @@ jobs: # full adds Node 22/Firefox integration-firefox-node-22: - name: "Integration (Node 22/Firefox)" + name: "Node 22/Firefox" needs: changes if: github.repository == 'remix-run/react-router' && needs.changes.outputs.type == 'full' uses: ./.github/workflows/integration-run.yml @@ -127,7 +127,7 @@ jobs: # full adds Node 22/WebKit integration-webkit-node-22: - name: "Integration (Node 22/WebKit)" + name: "Node 22/WebKit" needs: changes if: github.repository == 'remix-run/react-router' && needs.changes.outputs.type == 'full' uses: ./.github/workflows/integration-run.yml diff --git a/.github/workflows/test-unit.yml b/.github/workflows/test-unit.yml index d6420dbacc..14f1f5a41c 100644 --- a/.github/workflows/test-unit.yml +++ b/.github/workflows/test-unit.yml @@ -1,4 +1,4 @@ -name: Test +name: Unit Test on: push: @@ -23,7 +23,7 @@ permissions: jobs: test: - name: "Unit (Node ${{ matrix.node }})" + name: "Node ${{ matrix.node }}" runs-on: ubuntu-latest strategy: fail-fast: false From e872470d9709149b06dd203a5eceeddde4aaf29e Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 8 Jun 2026 10:39:28 -0400 Subject: [PATCH 07/11] Update titles --- .github/workflows/pr-actions.yml | 6 +++--- .github/workflows/pr-checks.yml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pr-actions.yml b/.github/workflows/pr-actions.yml index 724fe3dd8c..91cc86014b 100644 --- a/.github/workflows/pr-actions.yml +++ b/.github/workflows/pr-actions.yml @@ -1,4 +1,4 @@ -name: PR (Actions) +name: PR Actions # Triggered when "PR (Check)" completes. Downloads the artifact produced by # the upstream workflow and applies the recorded actions (sticky comments, @@ -7,12 +7,12 @@ name: PR (Actions) on: workflow_run: - workflows: ["PR (Check)"] + workflows: ["PR Checks"] types: [completed] jobs: actions: - name: PR (Actions) + name: Actions if: > github.event.workflow_run.conclusion == 'success' && github.repository == 'remix-run/react-router' diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index f26a4c6930..756591f20c 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -1,4 +1,4 @@ -name: PR (Check) +name: PR Checks # Read-only PR inspection. Computes a list of "actions" (sticky comments, # label changes, close, etc.) and uploads them as an artifact. The PR (Actions) @@ -15,7 +15,7 @@ concurrency: jobs: check: - name: Check PR + name: Checks if: github.repository == 'remix-run/react-router' runs-on: ubuntu-latest permissions: From 38fa11f3e32cc53d9e20cc69f771e292cbad7a1c Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 8 Jun 2026 12:18:57 -0400 Subject: [PATCH 08/11] Comment out name --- .github/workflows/test-integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 24feb165bc..84806b2e87 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -60,7 +60,7 @@ jobs: # base only runs Node 24/Chromium integration-chromium: - name: "Node 24/Chromium" + # name: "Node 24/Chromium" needs: changes if: github.repository == 'remix-run/react-router' uses: ./.github/workflows/integration-run.yml From d0010a7cd64cbc394e4b45bb1f8d9432970064c9 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 8 Jun 2026 12:21:04 -0400 Subject: [PATCH 09/11] Update --- .github/workflows/integration-run.yml | 1 - .github/workflows/test-integration.yml | 14 +++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/integration-run.yml b/.github/workflows/integration-run.yml index 219bedb36d..b05cfff180 100644 --- a/.github/workflows/integration-run.yml +++ b/.github/workflows/integration-run.yml @@ -28,7 +28,6 @@ env: jobs: integration: - name: "${{ inputs.os }} / node@${{ matrix.node }} / ${{ matrix.browser }}" strategy: fail-fast: false matrix: diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 84806b2e87..301b83c9ee 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -60,7 +60,7 @@ jobs: # base only runs Node 24/Chromium integration-chromium: - # name: "Node 24/Chromium" + name: "Node 24/Chromium/Ubuntu" needs: changes if: github.repository == 'remix-run/react-router' uses: ./.github/workflows/integration-run.yml @@ -71,7 +71,7 @@ jobs: # dev/full add Node 22/Chromium integration-chromium-node-22: - name: "Node 22/Chromium" + name: "Node 22/Chromium/Ubuntu" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -82,7 +82,7 @@ jobs: # dev/full add Node 24/Firefox integration-firefox: - name: "Node 24/Firefox" + name: "Node 24/Firefox/Ubuntu" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -93,7 +93,7 @@ jobs: # dev/full add Node 24/Edge integration-msedge: - name: "Node 24/Edge" + name: "Node 24/Edge/Windows" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -105,7 +105,7 @@ jobs: # dev/full add Node 24/WebKit integration-webkit: - name: "Node 24/WebKit" + name: "Node 24/WebKit/macOS" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -116,7 +116,7 @@ jobs: # full adds Node 22/Firefox integration-firefox-node-22: - name: "Node 22/Firefox" + name: "Node 22/Firefox/Ubuntu" needs: changes if: github.repository == 'remix-run/react-router' && needs.changes.outputs.type == 'full' uses: ./.github/workflows/integration-run.yml @@ -127,7 +127,7 @@ jobs: # full adds Node 22/WebKit integration-webkit-node-22: - name: "Node 22/WebKit" + name: "Node 22/WebKit/macOS" needs: changes if: github.repository == 'remix-run/react-router' && needs.changes.outputs.type == 'full' uses: ./.github/workflows/integration-run.yml From 5fd7b00c7f97f8d7f333dc6ed9afc69ac094f96d Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 8 Jun 2026 12:23:13 -0400 Subject: [PATCH 10/11] Update --- .github/workflows/integration-run.yml | 1 + .github/workflows/test-integration.yml | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/integration-run.yml b/.github/workflows/integration-run.yml index b05cfff180..219bedb36d 100644 --- a/.github/workflows/integration-run.yml +++ b/.github/workflows/integration-run.yml @@ -28,6 +28,7 @@ env: jobs: integration: + name: "${{ inputs.os }} / node@${{ matrix.node }} / ${{ matrix.browser }}" strategy: fail-fast: false matrix: diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 301b83c9ee..0d67e1455a 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -60,7 +60,7 @@ jobs: # base only runs Node 24/Chromium integration-chromium: - name: "Node 24/Chromium/Ubuntu" + name: "Chromium (24)" needs: changes if: github.repository == 'remix-run/react-router' uses: ./.github/workflows/integration-run.yml @@ -71,7 +71,7 @@ jobs: # dev/full add Node 22/Chromium integration-chromium-node-22: - name: "Node 22/Chromium/Ubuntu" + name: "Chromium (22)" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -82,7 +82,7 @@ jobs: # dev/full add Node 24/Firefox integration-firefox: - name: "Node 24/Firefox/Ubuntu" + name: "Firefox (24)" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -93,7 +93,7 @@ jobs: # dev/full add Node 24/Edge integration-msedge: - name: "Node 24/Edge/Windows" + name: "Edge (24)" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -105,7 +105,7 @@ jobs: # dev/full add Node 24/WebKit integration-webkit: - name: "Node 24/WebKit/macOS" + name: "WebKit (24)" needs: changes if: github.repository == 'remix-run/react-router' && contains(fromJSON('["dev", "full"]'), needs.changes.outputs.type) uses: ./.github/workflows/integration-run.yml @@ -116,7 +116,7 @@ jobs: # full adds Node 22/Firefox integration-firefox-node-22: - name: "Node 22/Firefox/Ubuntu" + name: "Firefox (22)" needs: changes if: github.repository == 'remix-run/react-router' && needs.changes.outputs.type == 'full' uses: ./.github/workflows/integration-run.yml @@ -127,7 +127,7 @@ jobs: # full adds Node 22/WebKit integration-webkit-node-22: - name: "Node 22/WebKit/macOS" + name: "WebKit (22)" needs: changes if: github.repository == 'remix-run/react-router' && needs.changes.outputs.type == 'full' uses: ./.github/workflows/integration-run.yml From a872f61afc26bb795fcde2269f51d97840cc040d Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 8 Jun 2026 13:47:10 -0400 Subject: [PATCH 11/11] Update comment --- .github/workflows/test-integration.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 0d67e1455a..75ba10309f 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -1,8 +1,12 @@ name: Integration Test -# Source changes get the base Ubuntu/Node 24/Chromium run. PRs that touch -# @react-router/dev add broader Node 24/browser coverage and Node 22/Chromium. -# PRs targeting main and main branch pushes also add Node 22 for other browsers. +# Incrementally comprehensive based on the type of change: +# +# | Type | Description | Test Runs | +# |--------|-----------------------|-------------------------------------------| +# | base | Source code PRs | Chromium (Node 24) | +# | normal | @react-router/dev PRs | + Firefox/Webkit/Edge (n24), Chromium (n22) | +# | full | Commits on `main` | + Firefox/Webkit (n22) | on: push: