Skip to content

chore: upgrade Node 22 LTS, Astro v6, oxlint, Biome, TypeScript 5.9#68

Draft
Copilot wants to merge 4 commits intomainfrom
copilot/upgrade-dependencies-overall
Draft

chore: upgrade Node 22 LTS, Astro v6, oxlint, Biome, TypeScript 5.9#68
Copilot wants to merge 4 commits intomainfrom
copilot/upgrade-dependencies-overall

Conversation

Copy link
Copy Markdown

Copilot AI commented Apr 25, 2026

  • Explore repo structure and understand current dependencies
  • Step 1: Update Node.js to LTS v22.15.0
  • Step 2: Upgrade Vite (via Astro v6)
  • Step 3a: Upgrade Astro v4 → v5
  • Step 3b: Upgrade Astro v5 → v6
  • Step 4: Migrate ESLint → oxlint
  • Step 5: Migrate Prettier → oxfmt (oxfmt@^0.46.0)
    • Removed @biomejs/biome and biome.json
    • Added oxfmt to devDependencies
    • Created .oxfmtrc.json (migrated from biome config, matching old Prettier settings)
    • Scripts: formatoxfmt --check ., format:fixoxfmt --write .
    • VSCode: default formatter → oxc.oxc-vscode; removed biomejs.biome extension
  • Step 6: Upgrade TypeScript and optimize tsconfig
  • Step 7: Update remaining dependencies
  • Step 8: Update GitHub Actions workflows
Original prompt

Overview

Perform a comprehensive dependency upgrade across the project. Work through each step in order, as later steps may depend on earlier ones.


Step 1 — Upgrade to the latest Node.js LTS

  • Update .nvmrc, .node-version, or any engine field in package.json to the latest Node.js LTS version (v22.x as of 2026).
  • Update any CI workflow files (.github/workflows/) that pin a Node version.

Step 2 — Migrate to the latest Vite

  • Upgrade vite to the latest stable version.
  • Apply any breaking-change migrations from the Vite changelog/migration guides.
  • Update vite.config.* if needed.

Step 3 — Upgrade Astro from v4.14 to v6.1

The project is currently on Astro v4.14. The target is v6.1. Perform each major version upgrade separately to handle breaking changes cleanly.

3a — Astro v4 → v5

Follow the official v5 upgrade guide: https://docs.astro.build/en/guides/upgrade-to/v5/

Key changes to handle:

  • astro core: ^4.x^5.x
  • All @astrojs/* packages: upgrade to their v5-compatible versions
  • Content Collections: migrate from legacy src/content/config.ts to the new Content Layer API if applicable
  • Astro.glob() removal: replace with import.meta.glob() if used
  • getStaticPaths and pagination changes
  • Updated <ViewTransitions /> import paths
  • Check for removed or renamed configuration options in astro.config.*

3b — Astro v5 → v6

Follow the official v6 upgrade guide: https://docs.astro.build/en/guides/upgrade-to/v6/

Key changes to handle:

  • astro core: ^5.x^6.x
  • All @astrojs/* packages: upgrade to their v6-compatible versions
  • Review and apply any further breaking changes from the v6 guide
  • Update astro.config.* as needed

Step 4 — Migrate from ESLint to oxlint

  • Remove ESLint and all ESLint-related packages (eslint, @eslint/*, eslint-plugin-*, @typescript-eslint/*, etc.)
  • Install oxlint (latest version).
  • Create an oxlint configuration file (e.g., oxlintrc.json or .oxlintrc) that mirrors the existing ESLint configuration as closely as possible.
  • Remove .eslintrc.*, eslint.config.*, or any ESLint config files.
  • Update package.json lint scripts to use oxlint instead of eslint.
  • Remove any ESLint-related VSCode settings or extensions recommendations if present.
  • Take into account any linting rules that should now be enforced at the TypeScript level (Step 6) rather than in oxlint.

Step 5 — Migrate from Prettier to oxfmt

  • Remove prettier and all Prettier-related packages (prettier-plugin-*, eslint-config-prettier, etc.)
  • Install oxfmt (latest version) — note: check if it's published as oxfmt or under the @oxidation-compiler or @biomejs scope; use whatever the correct package name is.
    • Note: If oxfmt is not yet publicly available as a stable npm package, fall back to using Biome (@biomejs/biome) as the formatter instead, which is a well-established Rust-based formatter/linter.
  • Create a formatting configuration that matches the existing Prettier config as closely as possible (print width, tab width, single quotes, trailing commas, etc.).
  • Remove .prettierrc.* and .prettierignore files.
  • Update package.json format scripts to use the new formatter.
  • Update any VSCode settings for the default formatter if present.

Step 6 — Upgrade to the latest TypeScript

  • Upgrade typescript to the latest stable version (5.x).
  • Review tsconfig.json and remove any options that are now default behavior in the new version.
  • Reduce redundancy between oxlint and tsconfig: if a code quality opinion can be expressed in tsconfig.json (e.g., noUncheckedIndexedAccess, exactOptionalPropertyTypes, noImplicitOverride, etc.), configure it there and remove the equivalent rule from oxlint. Only put rules in oxlint that TypeScript cannot enforce.
  • Update @types/* packages to their latest compatible versions.

Step 7 — Update remaining dependencies

  • Upgrade all remaining dependencies (both dependencies and devDependencies) to their latest compatible versions.
  • Avoid major version bumps for packages not explicitly mentioned above unless clearly safe (e.g., patch/minor updates).
  • If any packages have known incompatibilities with the new Astro/Node/Vite versions, resolve them.

Step 8 — Update GitHub Actions workflows

  • Review all files in .github/workflows/.
  • Update any action references (e.g., actions/checkout, actions/setup-node, etc.) to their latest major versions.
  • Ensure Node version matrix or pinned versions match the LTS version set in Step 1.

Deliverable

Open a pull request from a new branch (e.g., upgrade/deps-astro-v6) targeting main with all of the above changes.

Make sure:

  • package.json scripts all work with the new tooling.
  • The project builds successfully (astro build or equivalent).
  • Linting and formatting commands work.
  • No orphaned config files from removed tools remain.
    ...

This pull request was created from Copilot chat.

- Node: 22.6 → 22.15.0 (.nvmrc + engines.node)
- Astro: v4.14.5 → v6.1.9 (direct upgrade)
- @astrojs/check: ^0.9.3 → ^0.9.8
- astro-icon: ^1.1.1 → ^1.1.5
- @vite-pwa/astro: ^0.4.0 → ^1.2.0
- @vite-pwa/assets-generator: ^0.2.4 → ^1.0.2
- typescript: ^5.5.4 → ^5.9.3
- @fontsource-variable/outfit: ^5.0.14 → ^5.2.8
- beeftools: ^0.1.7 → ^0.1.9 (0.2.x requires Node 24)
- lightningcss: ^1.26.0 → ^1.32.0

ESLint → oxlint:
- Remove eslint, eslint-plugin-astro, eslint-plugin-jsx-a11y,
  @typescript-eslint/parser and eslint.config.mjs
- Add oxlint@^1.61.0 with .oxlintrc.json (jsx-a11y plugin,
  astro file ignore patterns)
- Update lint/lint:fix scripts

Prettier → Biome:
- Remove prettier, prettier-plugin-astro and .prettierrc
- Add @biomejs/biome@^2.4.13 with biome.json
  (formatter only, linter disabled, astro files excluded
  since Biome 2.x does not yet support .astro syntax)
- Update format/format:fix scripts

TypeScript:
- Add noUncheckedIndexedAccess, exactOptionalPropertyTypes,
  noImplicitOverride to tsconfig.json

VSCode:
- Replace ESLint/Prettier extensions with biomejs.biome
  and oxc.oxc-vscode
- Replace ESLint/Prettier settings with Biome formatter config

GitHub Actions:
- lint.yml: Node 20.x → 22.x; rename 'Prettier' step → 'Format'
- test.yml: Node 20.x → 22.x

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: beefchimi <643944+beefchimi@users.noreply.github.com>
Copilot AI changed the title [WIP] Perform comprehensive dependency upgrade across the project chore: upgrade Node 22 LTS, Astro v6, oxlint, Biome, TypeScript 5.9 Apr 25, 2026
Copilot AI requested a review from beefchimi April 25, 2026 01:35
Copilot AI and others added 2 commits April 25, 2026 17:40
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