diff --git a/.changeset/first-rc.md b/.changeset/first-rc.md index 4701e2483e..9d4870748e 100644 --- a/.changeset/first-rc.md +++ b/.changeset/first-rc.md @@ -3,6 +3,7 @@ '@tanstack/browser-db-sqlite-persistence': major '@tanstack/capacitor-db-sqlite-persistence': major '@tanstack/cloudflare-durable-objects-db-sqlite-persistence': major +'@tanstack/convex-db-collection': major '@tanstack/db': major '@tanstack/db-ivm': major '@tanstack/db-sqlite-persistence-core': major @@ -12,9 +13,11 @@ '@tanstack/node-db-sqlite-persistence': major '@tanstack/offline-transactions': minor '@tanstack/powersync-db-collection': major +'@tanstack/preact-db': major '@tanstack/query-db-collection': minor '@tanstack/react-db': major '@tanstack/react-native-db-sqlite-persistence': major +'@tanstack/react-router-with-db': major '@tanstack/rxdb-db-collection': major '@tanstack/solid-db': major '@tanstack/svelte-db': major @@ -31,10 +34,6 @@ Keep the two packages accidentally released as stable 1.x on their stable release lines. Both stable minor releases require `@tanstack/db@^1.0.0-rc.0` for the RC health and restoration settlement APIs; upgrade DB with them. -Convex Collection, Preact DB, and React Router with DB are temporarily private -while their initial npm publication and publishing permissions are arranged. -Restore their public manifests and release entries when they can be published. - Remove Query Collection’s automatic refetch after mutation handlers. Handlers return `Promise` and must await `collection.utils.refetch()` or write confirmed data with the `write*` utilities; `{ refetch: false }` is removed. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a0757ad200..825a0f5f10 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,11 +31,68 @@ jobs: - name: Check release versioning run: pnpm run test:release - # Temporarily rely on PR test jobs during the staged RC publication. - # Restore the release test matrices and DB report merge after npm bootstrap. + test-db: + name: Test (${{ matrix.group }}) + if: github.repository_owner == 'TanStack' + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + group: [db-1, db-2, db-replay] + env: + TEST_GROUP: ${{ matrix.group }} + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - name: Setup Tools + uses: tanstack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 + - name: Build dependencies + run: node scripts/ci-tests.mjs build "$TEST_GROUP" + - name: Run tests + run: node scripts/ci-tests.mjs test "$TEST_GROUP" + - name: Upload DB report + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: db-report-${{ matrix.group }} + path: packages/db/.vitest-reports/*.json + include-hidden-files: true + if-no-files-found: error + retention-days: 1 + + test-packages: + name: Test (${{ matrix.group }}) + if: github.repository_owner == 'TanStack' + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + group: + [ivm-offline, sqlite-core, sqlite-adapters, frameworks, collections] + env: + TEST_GROUP: ${{ matrix.group }} + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - name: Setup Tools + uses: tanstack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 + - name: Build dependencies + run: node scripts/ci-tests.mjs build "$TEST_GROUP" + - name: Typecheck Test Sources + if: matrix.group == 'ivm-offline' + run: pnpm run typecheck:tests + - name: Run tests + run: node scripts/ci-tests.mjs test "$TEST_GROUP" + - name: Check dependency versions + if: matrix.group == 'ivm-offline' + run: pnpm run test:sherif + release: name: Release - needs: [lint] + needs: [lint, test-db, test-packages] if: github.repository_owner == 'TanStack' runs-on: ubuntu-latest permissions: @@ -51,6 +108,14 @@ jobs: persist-credentials: true # release job pushes version/docs changes - name: Setup Tools uses: tanstack/config/.github/setup@e4b48f16568324f76f467aa4c2aac2f05db632c3 + - name: Download DB reports + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + pattern: db-report-* + path: packages/db/.vitest-reports + merge-multiple: true + - name: Merge DB coverage and test reports + run: pnpm --dir packages/db exec vitest --mergeReports .vitest-reports - name: Build packages run: pnpm run build - name: Run Changesets (version or publish) diff --git a/docs/contributing/oracle-coverage.md b/docs/contributing/oracle-coverage.md index 6425c2cebe..afa469b5b0 100644 --- a/docs/contributing/oracle-coverage.md +++ b/docs/contributing/oracle-coverage.md @@ -12,12 +12,16 @@ type campaigns remain active. For the staged RC publication, the maintainer temporarily removed the duplicate test matrices and DB report merge from the Release workflow on 2026-10-29. -The PR workflow retains its test gates; Release retains lint and release-script -checks. Restore the release test matrices and report merge after the initial -npm publications and permissions for Convex Collection, Preact DB, and React -Router with DB are arranged. Those three package manifests are temporarily -private, so Changesets excludes them from publication. This gate deferral does -not close the counterexamples in [#2294](https://github.com/TanStack/db/issues/2294), +Release run [40910451885](https://github.com/TanStack/db/actions/runs/40910451885) +succeeded and reported all 20 included RC versions and the two stable versions +already published on npm. The release test matrices and report merge are now +restored. At the maintainer's request, Convex Collection, Preact DB, and React +Router with DB have their public manifests and consumed first-RC release entries +restored too. Their initial manual publications and npm trusted publisher setup +still require verification; restoring publication eligibility does not establish +npm access. +The successful release does not close the counterexamples in +[#2294](https://github.com/TanStack/db/issues/2294), [#2281](https://github.com/TanStack/db/issues/2281), or [#2296](https://github.com/TanStack/db/issues/2296), or the reach gap in [#2287](https://github.com/TanStack/db/issues/2287). diff --git a/packages/convex-db-collection/package.json b/packages/convex-db-collection/package.json index 9aa0caf939..81bf3a7894 100644 --- a/packages/convex-db-collection/package.json +++ b/packages/convex-db-collection/package.json @@ -1,6 +1,5 @@ { "name": "@tanstack/convex-db-collection", - "private": true, "version": "1.0.0-rc.1", "description": "Convex collection for TanStack DB", "author": "Tanner Linsley", diff --git a/packages/preact-db/package.json b/packages/preact-db/package.json index aba879051c..88391a3943 100644 --- a/packages/preact-db/package.json +++ b/packages/preact-db/package.json @@ -1,6 +1,5 @@ { "name": "@tanstack/preact-db", - "private": true, "version": "1.0.0-rc.1", "description": "Preact integration for @tanstack/db", "author": "Kyle Mathews", diff --git a/packages/react-router-with-db/package.json b/packages/react-router-with-db/package.json index 55cd131690..83fed79bb6 100644 --- a/packages/react-router-with-db/package.json +++ b/packages/react-router-with-db/package.json @@ -1,6 +1,5 @@ { "name": "@tanstack/react-router-with-db", - "private": true, "version": "1.0.0-rc.1", "description": "TanStack Router SSR integration for TanStack DB", "author": "Kyle Mathews", diff --git a/scripts/check-doc-snippets.mjs b/scripts/check-doc-snippets.mjs index 2ebbe21bb0..ad5692f298 100644 --- a/scripts/check-doc-snippets.mjs +++ b/scripts/check-doc-snippets.mjs @@ -78,13 +78,9 @@ const declaresTypes = (target) => for (const pkg of readdirSync(join(root, `packages`))) { const manifest = join(root, `packages`, pkg, `package.json`) if (!existsSync(manifest)) continue - const { - name, - private: unpublished, - exports = {}, - } = JSON.parse(readFileSync(manifest, `utf8`)) - // Examples document published packages only. - if (unpublished) continue + const { name, exports = {} } = JSON.parse(readFileSync(manifest, `utf8`)) + // Publication can be deferred while a package's documented API still needs + // source types. Keep private workspace packages in the same export mapping. for (const [subpath, target] of Object.entries(exports)) { // A typed snippet can import only an export that declares types. Untyped // exports, such as package.json, a WASM file, or a worker script, are