Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 19 additions & 4 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ concurrency:
env:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
SERVER_PRESET: 'node-server'
# Enable dynamic task packing for distributed CI.
NX_CLOUD_AGENT_TASK_QUEUE: true
NX_CLOUD_AUTO_TASK_PACKING: true
NX_CLOUD_AGENT_UNCAPPED_GROUP_WORK: true
NX_CLOUD_PACKING_MEM_MULTIPLIER: 1.5
NX_CLOUD_BUFFER_TASK_COMPLETIONS: true
NX_CLOUD_CONTINUOUS_ASSIGNMENT: true

permissions:
contents: read
Expand All @@ -25,23 +32,30 @@ jobs:
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false
- name: Start Nx Agents
run: npx nx-cloud start-ci-run --distribute-on=".nx/workflows/dynamic-changesets.yaml"
- name: Start Nx Workers
run: npx nx-cloud start-workers
- name: Setup Tools
uses: TanStack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 # main
- name: Get base and head commits for `nx affected`
uses: nrwl/nx-set-shas@afb73a62d26e41464e9254689e1fd6122ee683c1 # v5.0.1
with:
main-branch-name: main
- name: Run Checks
env:
# Use the same comparison base even if main advances between runs.
NX_BASE: 6b9fe6d29552270836c511bc9b343d73541f4424
run: pnpm run test:pr --parallel=3
- name: Stop Nx Agents
- name: Stop Nx Workers
if: ${{ always() }}
run: npx nx-cloud stop-all-agents
run: npx nx-cloud stop-all-workers
preview:
name: Preview
runs-on: ubuntu-latest
env:
# Keep preview builds from warming the distributed Test job cache.
NX_NO_CLOUD: true
permissions:
contents: read
pull-requests: write
Expand All @@ -50,6 +64,7 @@ jobs:
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false
- name: Setup Tools
uses: TanStack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 # main
Expand Down
5 changes: 5 additions & 0 deletions .nx/ci-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
dte:
distribute-on:
small-changeset: 4 linux-medium-js
medium-changeset: 8 linux-medium-js
large-changeset: 19 linux-medium-js
4 changes: 0 additions & 4 deletions .nx/workflows/dynamic-changesets.yaml

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
exclude-reads:
ignore-reads:
- e2e/.gitignore
- '**/src/routeTree.gen.ts'
exclude-writes:
ignore-writes:
- '**/src/routeTree.gen.ts'
task-exclusions:
- target: test:build
exclude-reads:
ignore-reads:
- LICENSE
# HMR tests edit these inputs in place and restore their original contents.
# Keep them out of cached outputs so cache replay never overwrites source.
- project: tanstack-react-start-e2e-deferred-hydration
target: test:e2e
exclude-writes:
ignore-writes:
- e2e/react-start/deferred-hydration/src/routes/components.tsx
- project: tanstack-react-start-e2e-hmr
target: test:e2e
exclude-writes: &hmr-source-writes
ignore-writes: &hmr-source-writes
- e2e/react-start/hmr/src/components/AliasedRouteImportChildPanel.tsx
- e2e/react-start/hmr/src/components/AliasedRouteImportParentPanel.tsx
- e2e/react-start/hmr/src/hmr/server-fn-hmr-factory.ts
Expand All @@ -32,93 +32,93 @@ task-exclusions:
- e2e/react-start/hmr/src/routes/inputs.tsx
- project: tanstack-react-start-e2e-hmr
target: test:e2e--vite-ssr
exclude-writes: *hmr-source-writes
ignore-writes: *hmr-source-writes
- project: tanstack-react-start-e2e-hmr
target: test:e2e--vite-ssr--bundled-dev
exclude-writes: *hmr-source-writes
ignore-writes: *hmr-source-writes
- project: tanstack-react-start-e2e-hmr
target: test:e2e--rsbuild-ssr
exclude-writes: *hmr-source-writes
ignore-writes: *hmr-source-writes
- project: tanstack-react-start-e2e-rsbuild
target: test:e2e--rsbuild-ssr
exclude-writes:
ignore-writes:
- e2e/react-start/rsbuild/src/routes/index.tsx
- project: tanstack-react-start-e2e-server-functions
target: test:e2e
exclude-writes:
ignore-writes:
- e2e/react-start/server-functions/src/routes/consistent.tsx
# Scaffolding tests deliberately populate tracked empty route fixtures.
- project: '@tanstack/router-generator'
target: test:unit
exclude-writes:
ignore-writes:
- packages/router-generator/tests/generator/custom-scaffolding/routes/__root.tsx
- packages/router-generator/tests/generator/custom-scaffolding/routes/api/bar.tsx
- packages/router-generator/tests/generator/custom-scaffolding/routes/foo.lazy.tsx
- packages/router-generator/tests/generator/custom-scaffolding/routes/index.tsx
# These reads are of scratch files created by the same test invocation.
- project: tanstack-solid-start-e2e-basic-auth
target: test:e2e
exclude-reads:
ignore-reads:
- e2e/solid-start/basic-auth/.tmp/dev.db
- project: tanstack-vue-start-e2e-basic-auth
target: test:e2e
exclude-reads:
ignore-reads:
- e2e/vue-start/basic-auth/.tmp/dev.db
- project: '@tanstack/router-generator'
target: test:unit
exclude-reads:
ignore-reads:
- packages/router-generator/tests/generator/file-modification/routes/[(]test[)]/initiallyEmpty.tsx
- packages/router-generator/tests/generator/file-modification/routes/[(]test[)]/initiallyEmpty.lazy.tsx
# Mutable counters are scratch state, not artifacts to replay from cache.
- project: tanstack-react-start-e2e-basic-tsr-config
target: test:e2e
exclude-reads:
ignore-reads:
- e2e/react-start/basic-tsr-config/count.txt
exclude-writes:
ignore-writes:
- e2e/react-start/basic-tsr-config/count.txt
- project: tanstack-solid-start-e2e-basic-tsr-config
target: test:e2e
exclude-reads:
ignore-reads:
- e2e/solid-start/basic-tsr-config/count.txt
exclude-writes:
ignore-writes:
- e2e/solid-start/basic-tsr-config/count.txt
- project: tanstack-vue-start-e2e-basic-tsr-config
target: test:e2e
exclude-reads:
ignore-reads:
- e2e/vue-start/basic-tsr-config/count.txt
exclude-writes:
ignore-writes:
- e2e/vue-start/basic-tsr-config/count.txt
# Paraglide downloads compiler plugins from the URLs in settings.json.
# Ignore warm-cache reads; the settings remain inputs and cache files outputs.
- project: tanstack-react-start-e2e-i18n-paraglide
target: build
exclude-reads:
ignore-reads:
- e2e/react-start/i18n-paraglide/project.inlang/cache/plugins/*
- project: tanstack-router-e2e-react-i18n-paraglide
target: build
exclude-reads:
ignore-reads:
- e2e/react-router/i18n-paraglide/project.inlang/cache/plugins/*
- project: tanstack-react-start-e2e-i18n-paraglide
target: test:e2e
exclude-reads:
ignore-reads:
- e2e/react-start/i18n-paraglide/project.inlang/cache/plugins/*
- project: tanstack-router-e2e-react-i18n-paraglide
target: test:e2e
exclude-reads:
ignore-reads:
- e2e/react-router/i18n-paraglide/project.inlang/cache/plugins/*
- project: tanstack-router-i18n-paraglide
target: build
exclude-reads:
ignore-reads:
- examples/react/i18n-paraglide/project.inlang/cache/plugins/*
- project: tanstack-start-i18n-paraglide
target: build
exclude-reads:
ignore-reads:
- examples/react/start-i18n-paraglide/project.inlang/cache/plugins/*
- project: tanstack-router-solid-i18n-paraglide
target: build
exclude-reads:
ignore-reads:
- examples/solid/i18n-paraglide/project.inlang/cache/plugins/*
- project: tanstack-solid-start-i18n-paraglide
target: build
exclude-reads:
ignore-reads:
- examples/solid/start-i18n-paraglide/project.inlang/cache/plugins/*
6 changes: 4 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@
- For sandbox-blocked registry/store access, escalate the same command; report the blocker if unavailable. Do not change stores, delete dependencies/lockfiles, use `--force`/`--ignore-scripts`, or weaken workspace trust/build policies to bypass it.
- Never manually edit `pnpm-lock.yaml` or any `routeTree.gen.ts`. Regenerate the lockfile with `pnpm install --no-frozen-lockfile` after intentional dependency changes; regenerate route trees through app builds/dev servers or the generator fixture harness.
- Always use control-flow braces. Run `pnpm format` before validation.
- Use Nx: workspace imports consume built packages, so direct runners can test stale dependencies. Inspect resolved targets; some are inferred.
- Use Nx: workspace imports consume built packages, so direct runners can test stale dependencies. Inspect resolved targets with `pnpm nx show project <project> --json`; some are inferred.
- Run finite validation through `run-many` with explicit projects and targets, including a single project/target. Nx automatically selects `summary` output when it detects an AI agent: omit `--outputStyle` for normal runs. Read the reported full log files for failures; use `--outputStyle=summary` if agent detection is unavailable.
- Use `--outputStyle=static` or `pnpm nx run <project>:<target>` only when diagnosing a task and its full output is needed. Continuous/watch targets may use live output.

```sh
CI=1 NX_DAEMON=false pnpm nx run <project>:<target> --outputStyle=stream --skipRemoteCache
CI=1 NX_DAEMON=false pnpm nx run-many -p <project> -t <target> --skipRemoteCache
```

- Run one Nx command at a time. For a ~20-second startup/graph stall, stop, run `pnpm nx reset`, and retry once, then escalate. Do not apply that timeout to running tests.
Expand Down
8 changes: 6 additions & 2 deletions nx.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"$schema": "./node_modules/nx/schemas/nx-schema.json",
"defaultBase": "main",
"bust": "nx24-exclusive-e2e-ci-19-medium-workers-full-2026-10-25-05",
"nxCloudId": "6442f7de8226a6291646a813",
"useInferencePlugins": false,
"parallel": 5,
Expand All @@ -10,7 +11,10 @@
"namedInputs": {
"sharedGlobals": [
"{workspaceRoot}/.npmrc",
"{workspaceRoot}/.nx/workflows/sandboxing-config.yaml",
"{workspaceRoot}/nx.json",
"{workspaceRoot}/.github/workflows/pr.yml",
"{workspaceRoot}/.nx/ci-config.yaml",
"{workspaceRoot}/.nx/workflows/ultracache-config.yaml",
"{workspaceRoot}/.nvmrc",
"{workspaceRoot}/package.json",
"{workspaceRoot}/tsconfig.json"
Expand Down Expand Up @@ -41,7 +45,7 @@
"targetDefaults": {
"test:docs": {
"cache": true,
"inputs": ["{workspaceRoot}/docs/**/*"]
"inputs": ["sharedGlobals", "{workspaceRoot}/docs/**/*"]
},
"test:eslint": {
"cache": true,
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,15 @@
"devDependencies": {
"@changesets/changelog-github": "^0.7.0",
"@changesets/cli": "^2.30.0",
"@nx/devkit": "23.2.0",
"@nx/devkit": "24.0.0",
"@playwright/test": "catalog:",
"@swc-node/register": "^1.11.1",
"@tanstack/eslint-config": "0.4.0",
"@types/node": "catalog:",
"eslint": "catalog:",
"eslint-plugin-unused-imports": "^4.1.4",
"markdown-link-extractor": "^4.0.3",
"nx": "23.2.0",
"nx": "24.0.0",
"prettier": "^3.8.0",
"tinyglobby": "^0.2.15",
"typescript": "npm:@typescript/typescript6@^6.0.2",
Expand Down
Loading
Loading