Skip to content

[pull] main from tinacms:main#221

Merged
pull[bot] merged 2 commits into
code:mainfrom
tinacms:main
May 19, 2026
Merged

[pull] main from tinacms:main#221
pull[bot] merged 2 commits into
code:mainfrom
tinacms:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented May 19, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

kulesy and others added 2 commits May 19, 2026 14:53
## Context

Node 20 reached its official end-of-life on **2026-04-30** ([Node.js
release schedule](https://endoflife.date/nodejs)). The contributor and
CI default in this repo (\`.nvmrc\`) still points to Node 20, 18 days
after EOL.

## What

Single one-line change: \`.nvmrc\` from \`v20\` to \`v22\`.

## Why now

Two reasons compounding:

1. **Node 20 is no longer receiving security patches.** Anyone running
\`nvm use\` / \`fnm use\` in this repo today gets an EOL Node version.
The repo's own end-user verification CI
([\`build-starter-templates.yml\`](.github/workflows/build-starter-templates.yml))
already runs against Node 22 / 24 / 25 — Node 20 is excluded from the
user-facing matrix. The \`.nvmrc\` was just lagging.

2. **Coordinated with
[tinacms/sqlite-level#34](tinacms/sqlite-level#34
That PR bumps \`better-sqlite3\` from \`^11.8.1\` to \`^12.9.0\`
(resolves to 12.10.0) to fix
[#6686](#6686) on Node 24.
\`better-sqlite3@12.10.0\` [explicitly dropped Node 20
prebuilds](https://github.com/WiseLibs/better-sqlite3/releases/tag/v12.10.0):
*"Add support for Node.js v26 prebuilds and remove EOL builds (Node.js
v20, v23)"*. Once sqlite-level publishes from #34 and
\`@tinacms/search\` consumes it via
[#6848](#6848), the
[\`publish.yml\`](.github/workflows/publish.yml) workflow — which uses
\`node-version-file: .nvmrc\` — would hit a \`node-gyp rebuild\` attempt
and fail without a local Python + C++ toolchain in the runner image.

This bump prevents that.

## Workflows affected

Workflows that use \`node-version-file: '.nvmrc'\` (and will now run on
Node 22):

- \`.github/workflows/publish.yml\`
- \`.github/workflows/main.yml\`
- \`.github/workflows/e2e.yml\`
- \`.github/workflows/playwright-next-kitchen-sink.yml\`
- \`.github/workflows/playwright-react-kitchen-sink.yml\`
- \`.github/workflows/playwright-astro-kitchen-sink.yml\`
- \`.github/workflows/playwright-hugo-kitchen-sink.yml\`

Workflows with their own explicit \`node-version\` matrices are
unaffected (\`build-starter-templates.yml\` already runs 22 / 24 / 25).

## Out of scope

- \`packages/create-tina-app/package.json\` declares \`engines.node:
">=18.18.0"\`. That's the *user-facing* floor for scaffolding new
projects and is a separate decision — not changed here. Worth revisiting
in a future PR.
- This does **not** change any production runtime targets. Tina packages
themselves don't declare \`engines\` and are Node-version-agnostic at
runtime.

## Test plan

- [ ] CI workflows pass on Node 22 (will run automatically when PR
opens)
- [ ] No lockfile or package.json changes needed — this is purely the
\`.nvmrc\` hint file

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…#6908)

## What

Pin `.nvmrc` to `v22.20.0` (was `v22` after #6905).

## Why

[Publish workflow on main
failed](https://github.com/tinacms/tinacms/actions/runs/26077016715)
immediately after [#6905](#6905)
merged. The failure is in the *"Upgrade npm for OIDC support"* step
running `npm install -g npm@latest`:

```
npm error code MODULE_NOT_FOUND
npm error Cannot find module 'promise-retry'
npm error - /opt/hostedtoolcache/node/22.22.2/x64/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/rebuild.js
```

### Root cause: Node 22.22.2's bundled npm is broken

actions/setup-node resolves the unpinned `v22` to the latest 22.x
release. Today that's **Node 22.22.2** (released 2026-03-24), which
ships **npm 10.9.7** — and that bundled npm is missing transitive deps
(`promise-retry` via `@npmcli/arborist`) needed to install another npm
globally.

| Version | Released | Bundled npm | Status |
|---|---|---|---|
| **v22.20.0** | 2025-09-24 | 10.9.3 | ✅ known-good (this PR) |
| v22.21.1 | 2025-10-28 | 10.9.4 | ✅ likely fine |
| v22.22.0 / .1 | 2026-01 / .03 | 10.9.4 | ✅ likely fine |
| **v22.22.2** | 2026-03-24 | 10.9.7 | ❌ broken bundle (this is what
fired) |
| v22.22.3 | 2026-05-13 | 10.9.8 | unverified, just released |

### Why pin to v22.20.0 specifically

It's what tinacloud's `.nvmrc` already uses:

```
$ cat ~/projects/tinacloud/.nvmrc
v22.20.0
```

Aligning the two repos on a known-stable Node 22 release avoids the next
floating-tag surprise and keeps contributor experience consistent across
Tina-owned repos.

## Impact

Affects every workflow using `node-version-file: '.nvmrc'`:

- `publish.yml` (the failing one)
- `main.yml`
- `e2e.yml`
- `playwright-next-kitchen-sink.yml`
- `playwright-react-kitchen-sink.yml`
- `playwright-astro-kitchen-sink.yml`
- `playwright-hugo-kitchen-sink.yml`

All will switch from Node 22.22.2 → 22.20.0. OIDC support is preserved
(`npm 10.9.3` supports it; the upgrade-to-latest step will continue to
run, just on a working bundled npm).

## Refs

- Failed publish run:
https://github.com/tinacms/tinacms/actions/runs/26077016715
- Originating PR: #6905
- TinaCloud's `.nvmrc` for alignment:
https://github.com/tinacms/tinacloud/blob/main/.nvmrc

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@pull pull Bot locked and limited conversation to collaborators May 19, 2026
@pull pull Bot added the ⤵️ pull label May 19, 2026
@pull pull Bot merged commit 3bb712f into code:main May 19, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant