Bump Astro 5→6, Tina canary→stable, CF adapter 12→13#24
Conversation
Sync the repo with the upstream tina-astro-starter dependency floor and move off the pinned canary Tina builds onto stable releases. UI / block-builder / Tailwind changes from upstream PR #42 are intentionally NOT adopted — SSW Global landing is custom and would be overwritten. Dependency bumps: - astro ^5.16.0 → ^6.3.7 - @astrojs/cloudflare ^12.6.13 → ^13.1.10 - @astrojs/mdx ^4.3.0 → ^5.0.6 - @astrojs/rss ^4.0.15 → ^4.0.18 - @astrojs/sitemap ^3.7.0 → ^3.7.2 - @tinacms/astro 0.0.0-c724883-… (canary) → ^0.4.0 (stable) - @tinacms/cli 0.0.0-c724883-… (canary) → ^2.4.0 (stable) - tinacms 0.0.0-c724883-… (canary) → ^3.8.2 (stable) - wrangler 4.59.2 → ^4.95.0 (satisfies @astrojs/cloudflare 13 + @cloudflare/vite-plugin peer ranges) - @types/node ^25.1.0 → ^25.9.1 Other package.json changes: - Add engines.node ">=22.12.0" (matches upstream + .nvmrc) - Replace the pnpm.overrides react pin with explicit react/react-dom devDependencies at 18.3.1 (upstream pattern, PR #45); keeps @tinacms/cli's React 18 admin bundle correct without overriding the whole tree Config changes: - wrangler.toml: point `main` at `@astrojs/cloudflare/entrypoints/ server` (the adapter's unified dev+prod entry). Required by the new @cloudflare/vite-plugin in @astrojs/cloudflare v13, which validates the entry path eagerly at config-load time — the old `./dist/_worker.js/index.js` path doesn't exist until after a build, so the previous setup failed before Astro even started. - astro.config.mjs: drop the rollupOptions.onwarn shim that silenced UNUSED_EXTERNAL_IMPORT from tinacms/dist/client. With @tinacms/astro@0.4.0 the warning no longer fires. - Add src/content.config.ts: declare the `config` collection so Astro's content layer (mandatory in v6) doesn't try to glob the JSON-only src/content/config dir as Markdown. blog and page stay auto-inferred. Mirrors upstream's pattern. - src/pages/rss.xml.js → rss.xml.ts: switch from `getCollection('blog')` (Astro content layer, didn't see Tina posts in v6) to `listBlogs()` from `src/lib/data.ts`, which is the existing Tina query path used by /blog. RSS now generates correctly without the "collection blog does not exist or is empty" warning. - public/admin/.gitignore: auto-rewritten by the new Tina CLI (drops the stale bridge.js entry; the new admin bundle doesn't emit a separate bridge file). Local verification: `pnpm run build:local` succeeds; only remaining warning is unenv fs.mkdirSync (cosmetic, from Cloudflare adapter's build-time cache attempt) and an empty /home/index.html prerender (cosmetic — the redirect ships via dist/_redirects, which is what Cloudflare actually uses). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ❌ Deployment failed View logs |
ssw-website-global | e0e0c09 | Jun 12 2026, 07:50 AM |
There was a problem hiding this comment.
Pull request overview
This PR updates the project’s Astro/Tina/Cloudflare toolchain to newer stable versions (Astro 6, Tina stable releases, Cloudflare adapter v13 / Wrangler updates) and applies the related configuration adjustments needed for the upgrade.
Changes:
- Bump core dependencies:
astro5→6,@astrojs/cloudflare12→13, Tina canary→stable,wrangler4.59→4.95, plus related integration updates. - Update Cloudflare Worker entrypoint (
wrangler.toml) and simplify Astro build config (remove Rollup warning shim). - Add Astro content config to avoid JSON-only collection warnings and migrate RSS implementation to use Tina-backed
listBlogs().
Reviewed changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
package.json |
Updates dependency versions, adds Node engine constraint, and pins React via explicit devDeps. |
pnpm-lock.yaml |
Lockfile regeneration reflecting Astro 6 / adapter 13 / Tina stable / Wrangler upgrades. |
wrangler.toml |
Switches Worker main entrypoint to the Cloudflare adapter v13 server entry. |
astro.config.mjs |
Removes the Rollup onwarn shim now that upstream warning is resolved. |
src/content.config.ts |
Introduces collection config to avoid Astro 6 content-layer warnings for JSON-only folders. |
src/pages/rss.xml.ts |
Replaces RSS endpoint implementation to use Tina listBlogs() and TypeScript route. |
src/pages/rss.xml.js |
Removes the prior RSS endpoint that used astro:content collections. |
public/admin/.gitignore |
Updates ignore rules to match Tina CLI output layout. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Match blog/index.astro and blog/[...slug].astro, which build the slug from _sys.relativePath. The feed used _sys.filename (basename), so a post in a nested Tina folder would 404 from the feed while the page resolved. - Drop the misleading `site: context.site ?? ''` fallback — an empty string isn't a valid @astrojs/rss site anyway. astro.config.mjs always sets `site`, so throw if that invariant is ever broken. Addresses Copilot review feedback on #24. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Independent Codex review (cross-model) + triageVerdict: merge-able. The Astro 5→6 / Cloudflare adapter 12→13 / Tina canary→stable migration checks out end to end:
One real fix applied (e0e0c09): the RSS feed linked posts by Copilot threads addressed: the Reviewed by Codex (gpt-5.5) + triage verification. No critical or important issues outstanding. |
|
Ready for human review. Automated review complete — no outstanding issues:
See the review summary comment above for details. |
Why
Sync
SSW.Website.Globalwith the floor oftinacms/tina-astro-starter'smain, and move off the date-pinned canary Tina builds onto stable releases.Also supersedes the open Dependabot PR #23 (covers everything that PR bumps, plus the two it skipped —
@tinacms/astroand@astrojs/mdx).Dependency bumps
astro^5.16.0^6.3.7@astrojs/cloudflare^12.6.13^13.1.10@astrojs/mdx^4.3.0^5.0.6@astrojs/rss^4.0.15^4.0.18@astrojs/sitemap^3.7.0^3.7.2@tinacms/astro^0.4.0stable@tinacms/cli^2.4.0stabletinacms^3.8.2stablewrangler4.59.2^4.95.0@types/node^25.1.0^25.9.1Other package.json
engines.node: ">=22.12.0"pnpm.overridesreact pin with explicitreact/react-domdevDeps at18.3.1(upstream PR fix: restore /privacy page (PR #30 commit was stranded on a merged branch) #45 pattern)Config
wrangler.toml—main = "@astrojs/cloudflare/entrypoints/server". Required by the new@cloudflare/vite-pluginin@astrojs/cloudflarev13.astro.config.mjs— drop therollupOptions.onwarnshim;@tinacms/astro@0.4.0no longer triggers the warning.src/content.config.ts(new) — declare theconfigcollection so Astro 6 doesn't glob the JSON-only dir as Markdown. Mirrors upstream.src/pages/rss.xml.js→rss.xml.ts— switch tolistBlogs()(Tina). Fixes "collection blog does not exist or is empty" under Astro 6.public/admin/.gitignore— auto-rewritten by Tina CLI 2.4.Verification
pnpm run build:localsucceeds. Remaining cosmetic warnings:unenv fs.mkdirSyncand/home/index.htmlempty body (redirect ships viadist/_redirects).Test plan
pr-lint-codepasses (once Add CI, repo policies & lint foundation (closes #6) #18 lands)pr-buildpasses/admin/works,/blog/,/rss.xmlrenderSkipped
Upstream UI overhaul (blocks/ui/space components, ThemeToggle, Tailwind 4), Vercel adapter, Astro Icon, upstream blog seed, block-builder rewrites of home.mdx / page.ts.
🤖 Generated with Claude Code