Skip to content

chore(deps): upgrade Vue/Nuxt stack and workflows - #9

Merged
alanlu-tw merged 2 commits into
mainfrom
feat/upgrade-vue-nuxt
Oct 27, 2026
Merged

alanlu-tw merged 2 commits into
mainfrom
feat/upgrade-vue-nuxt

Conversation

@alanlu-tw

@alanlu-tw alanlu-tw commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Upgrade Nuxt 3.21.11 → 4.6.3, Vue 3.5.44, and vue-tsc 3.3.13
  • Remove future.compatibilityVersion and adapt to Unhead v3
  • Node 24 / pnpm 12.15.0; migrate pnpm settings to pnpm-workspace.yaml
  • Upgrade all non-@alanlu-dev and non-MasterCSS dependencies; TypeScript pinned to 6.0.3
  • Refresh GitHub Actions (checkout@v7, pnpm/setup@v3, cspell-action@v9, changed-files@v47.0.6, changesets/action@v2.1.2)
  • Update Changesets config schema to v4
  • Replace Plausible with Rybbit

Verification

  • pnpm install --frozen-lockfile
  • pnpm build
  • pnpm typecheck
  • pnpm lint
  • pnpm format
  • pnpm lint:cspell
  • pnpm test (currently no test tasks)
  • Production preview: / and /about return 200; Rybbit script is rendered
  • actionlint passes

Notes

  • MasterCSS remains at 2.0.0-rc.47
  • minimumReleaseAge: 0 is required to install the freshly released Nuxt 4.6.3 with pnpm 12
  • Local pnpm must be 12.15.0 (or use corepack)

Summary by CodeRabbit

  • Website
    • Updated the website to Nuxt 4 and refreshed its documentation links.
    • Website analytics now use Rybbit.
  • Compatibility
    • The minimum supported Node.js version is now 24.
  • Maintenance
    • Updated project tooling and automated workflows to current versions, including the release and testing processes.

Upgrade Nuxt to 4.6.3, Vue to 3.5.44, TypeScript to 6.0.3, and
refresh the remaining tooling and GitHub Actions. Migrate pnpm
settings for pnpm 12.15.0 and replace the Plausible tracking script
with Rybbit.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 27, 2026 04:15
@changeset-bot

changeset-bot Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: d06dbf3

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@alanlu-dev/website Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Caution

Review failed

The pull request is closed.

Walkthrough

The repository now targets Node.js 24 and pnpm 12, and updates workspace settings, development tools, and CI and release workflows. The website upgrades to Nuxt 4 and replaces its Plausible analytics loader with a deferred Rybbit script.

Changes: Node.js and pnpm toolchain

Layer / File(s) Summary
Runtime and workspace baseline
.nvmrc, package.json, .npmrc, pnpm-workspace.yaml, turbo.json
The configured Node.js and pnpm versions and minimum requirements are updated. Root development dependencies and pnpm workspace settings change, and Turbo uses new cache output paths.
CI and release workflows
.github/workflows/ci.yml, .github/workflows/release.yml, .changeset/config.json
CI and release workflows use updated setup actions and inputs. The CI test matrix now uses Node.js 24, and the Changesets schema URL is updated.

Website Nuxt upgrade

Layer / File(s) Summary
Nuxt 4 dependencies and configuration
apps/website/package.json, apps/website/nuxt.config.ts, apps/website/README.md
The website updates Vue, Nuxt, and vue-tsc dependency ranges. It removes the compatibilityVersion setting and updates the README to reference Nuxt 4.

Website analytics script

Layer / File(s) Summary
Analytics script replacement
apps/website/app/app.vue
The app replaces the Plausible script and queue initializer with a deferred Rybbit script.

Priority: Pending latest changes

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Other

Merge Risk: Low · up to f89ca

The site now sends analytics to Rybbit without separating development from production traffic, so local and preview visits can skew production statistics. This is a small, easily fixed issue and does not block merging.

Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Warning

Some tools did not complete. Review the errors below.

markdownlint-cli2 (0.23.3)
apps/website/README.md

markdownlint-cli2 did not write JSON output
markdownlint-cli2 v0.23.3 (markdownlint v0.41.1)

ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

apps/website/app/app.vue

ESLint skipped: missing config or dependency (missing-dependency). The ESLint configuration references a package that is not available in the sandbox.

apps/website/package.json

ESLint skipped: the matched ESLint configuration already failed (missing-dependency).

package.json

ESLint skipped: the matched ESLint configuration already failed (missing-dependency).

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Set privatePackages.version to true to preserve the Changesets v2

behavior of versioning the private website.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@alanlu-tw
alanlu-tw merged commit 2337231 into main Oct 27, 2026
5 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

It bundles many major-version upgrades (Nuxt 3→4, Vite 6→8, Vitest 2→5, TypeScript 5→6, Node 20→24, pnpm 9→12) whose runtime/build impact cannot be fully verified from the diff and warrants human validation of a green build.

No open issues 🎉

What changed in this PR

This PR performs a broad dependency and tooling modernization of the Vue/Nuxt monorepo: it upgrades the Nuxt/Vue stack (Nuxt 3→4, Vue 3.5.44, vue-tsc 3), bumps the Node/pnpm runtime (Node 24, pnpm 12), migrates pnpm config from .npmrc to pnpm-workspace.yaml, refreshes GitHub Actions to newer versions, updates the Changesets config/action to the v3/v2 line, and swaps the analytics provider from Plausible to Rybbit. It touches toolchain configuration and CI/release pipelines rather than application logic.

Changes:

  • Upgrade Nuxt/Vue stack and dev dependencies; drop future.compatibilityVersion (now the Nuxt 4 default).
  • Move runtime to Node 24 / pnpm 12 and relocate pnpm settings into pnpm-workspace.yaml (allowBuilds, minimumReleaseAge, verifyDepsBeforeRun, publicHoistPattern).
  • Modernize CI/release workflows (pnpm/setup@v3, checkout@v7, cspell-action@v9, changed-files@v47.0.6, changesets/action@v2.1.2) and replace Plausible with Rybbit.
File Description
turbo.json Renames cache outputs to .formatcache/.lintcache, matching the format/lint script --cache-location paths.
pnpm-workspace.yaml Adds pnpm 12 settings migrated from .npmrc plus minimumReleaseAge/allowBuilds/verifyDepsBeforeRun.
package.json Bumps packageManager, engines, and root dev dependencies; pins TypeScript to 6.0.3.
apps/​website/​README.md Updates "Nuxt 3" references to "Nuxt 4".
apps/​website/​package.json Bumps vue, nuxt, and vue-tsc.
apps/​website/​nuxt.config.ts Removes future.compatibilityVersion (default in Nuxt 4).
apps/​website/​app/​app.vue Replaces the Plausible script/init with a single Rybbit script tag.
.nvmrc Switches the pinned Node version to 24.22.1.
.npmrc Empties file (settings now live in pnpm-workspace.yaml).
.github/​workflows/​release.yml Migrates to pnpm/setup@v3 and changesets/action@v2.1.2 input names.
.github/​workflows/​ci.yml Migrates to pnpm/setup@v3, bumps action versions, narrows matrix to Node 24.
.changeset/​config.json Bumps config schema reference to v4.

I validated the parts most likely to break:

  • release.yml token removal is safe — changesets/action@v2 defaults github-token to ${{ github.token }} and injects GITHUB_TOKEN into both the version and publish script environments, so @changesets/changelog-github still works. Input renames (version-script/publish-script/commit-message/pr-title) match the v2 action.yml.
  • Removed "Install deps" steps are safe — pnpm/setup@v3 runs pnpm install automatically (install defaults to true; require-lockfile: true uses --frozen-lockfile) and reads the pnpm version from packageManager.
  • pnpm-workspace.yaml keys are all valid for pnpm 12 (allowBuilds map form, verifyDepsBeforeRun: false, etc.).
  • Rybbit migration is complete (no leftover Plausible references outside the historical CHANGELOG), and cspell's default Urls ignore pattern means the new domain won't fail CSpell.

No objective issues were found in the diff.

Review effort: Balanced

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants