Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 55 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,58 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.2.0] - 2026-11-01

The headline of this release is **Vite+ support** — `nodeup` now
recognizes [Vite+](https://viteplus.dev), VoidZero's unified
toolchain, as a Node.js version manager. Vite+ users previously got
"no Node.js version manager detected" from `nodeup upgrade`; PR #124
adds a `VitePlus` manager that drives `vp env` directly, bringing the
supported-manager count from 8 to 9.

Vite+'s `vp env` subcommand exposes exactly the operations nodeup
needs from a version manager, so the integration is complete rather
than detection-only: `vp env list node --json` for the installed
set, `vp env current node --json` for the active version, and
`vp env {install,uninstall,use,default} node@<v>` for the mutations.
The global npm prefix resolves to
`<data>/js_runtime/node/<v>/lib/node_modules`.

The data-directory resolution mirrors upstream's own chain
(`VP_HOME` → `<home>/.vite-plus` → `VP_DATA_DIR` → the XDG/platform
default). All candidates are returned rather than just the first hit,
so nodeup can still find Node installs when the shell it runs in
doesn't carry the same Vite+ environment variables that `vp` itself
would resolve.

One subtlety is worth calling out for reviewers: Vite+ can run in
`system_first` mode, where the shims prefer the system Node over a
managed runtime. In that mode `vp env current` reports the *system*
version, so `Current()` returns an error instead of that version.
nodeup treats a failed `Current()` as "active version unknown" and
fails closed on cleanup (issue #58) rather than attributing a system
install to the Vite+-managed set.

Also included: the system-node classifier now treats
`<data>/js_runtime/node` as manager-managed, so a Vite+-managed `node`
on PATH no longer trips the "nodeup does not recognize this layout"
warning.

### Added
- Vite+ (`vp`) support as a ninth version manager
(`internal/detector/viteplus.go`): detection (`vp` on PATH or
`<data>/bin/vp` on disk, no subprocess), version parsing, installed-
version listing, active-version query, install / uninstall / use /
set-default, and global npm prefix resolution. Registered in the
detector registry for both unix and Windows, with the per-manager
detection order unchanged (fnm still wins). Closes #123.

### Fixed
- The Vite+ data-dir detection branch now checks for `vp.exe` as well
as `vp`, so a Vite+ install whose binary isn't on PATH is detected
on Windows. `exec.LookPath` applies `PATHEXT` for PATH lookups,
but a direct filesystem stat has to apply the suffix itself.

## [1.1.0] - 2026-07-05

The headline of this release is the **`internal/ui` rollout** — the
Expand Down Expand Up @@ -820,5 +872,7 @@ without weakening the body-length guard for hand-authored commits.
### Added
- Project blueprint — internal design doc covering language choice, scope, detection engine, version resolution, package migration, architecture, CLI design, edge cases, git workflow, conventional commits, versioning, CI/CD, and distribution. (Superseded by `README.md`; the standalone doc was removed in the Unreleased section.)

[Unreleased]: https://github.com/dipto0321/nodeup/compare/v0.0.0...HEAD
[Unreleased]: https://github.com/dipto0321/nodeup/compare/v1.2.0...HEAD
[1.2.0]: https://github.com/dipto0321/nodeup/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/dipto0321/nodeup/compare/v1.0.1...v1.1.0
[0.0.0]: https://github.com/dipto0321/nodeup/releases/tag/v0.0.0
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ orchestrator.
| 5 — Config subsystem | Done | merged |
| 6 — Cross-platform polish | Done | merged (interrupted-upgrade sentinel, `QuotePath`, system-node classifier) |
| 7 — Distribution packaging | Done | GoReleaser, brew/scoop/npm wrappers all shipped (#17, #18); manual v1.0.0 npm publish (#35) bootstrapped the OIDC trust |
| 8 — v1.0.0 → v1.1.0 releases | Done | `nodeupx@1.0.1` (and now `@1.1.0` matching the Go binary) live on npm; trusted-publisher OIDC flow active for every tag (`#109`) |
| 8 — v1.0.0 → v1.2.0 releases | Done | `nodeupx@1.2.0` live on npm, matching the Go binary; trusted-publisher OIDC flow active for every tag (`#109`) |

## On-disk data layout

Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -244,9 +244,9 @@ See [`docs/configuration.md`](./docs/configuration.md) for the full schema.

## Project status

Current release: **v1.1.0** (`nodeupx@1.0.1` on npm — the npm wrapper
trails the Go binary by one publish). See `CHANGELOG.md` for the
v1.0.0 → v1.1.0 history.
Current release: **v1.2.0** (`nodeupx@1.2.0` on npm — the wrapper
publishes automatically alongside the tag). See `CHANGELOG.md` for the
v1.1.0 → v1.2.0 history.

| Phase | Status | What shipped |
|---|---|---|
Expand All @@ -257,7 +257,7 @@ v1.0.0 → v1.1.0 history.
| 5 — Config subsystem | ✅ | YAML config at `~/.nodeup/config.yaml` + `config {show,get,set,init}` + env vars |
| 6 — Cross-platform polish | ✅ | `QuotePath`, interrupted-upgrade replay, system-node classifier, lock file |
| 7 — Distribution packaging | ✅ | GoReleaser + brew tap + Scoop bucket + npm wrapper (`nodeupx` via OIDC Trusted Publishing) |
| 8 — First tagged release | ✅ | `v1.0.0` shipped (PR #35); `v1.1.0` shipped with the `internal/ui` rollout (`#117`/`#118`/`#119`) |
| 8 — Tagged releases | ✅ | `v1.0.0` shipped (PR #35); `v1.1.0` shipped with the `internal/ui` rollout (`#117`/`#118`/`#119`); `v1.2.0` adds Vite+ support (`#124`) |

**Release train:** every `v*.*.*` tag triggers GoReleaser → brew formula
push → Scoop manifest push → `nodeupx` publish via OIDC. To ship a
Expand Down
8 changes: 5 additions & 3 deletions SPEC.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# SPEC — nodeup

Distilled from code (README, CLAUDE.md, CONTRIBUTING.md, docs/*, and
`internal/*` source). Last refresh: 2026-07-05 (post v1.1.0 release;
§C/§I/§V/§T updated to match current state — `internal/ui` rollout
complete via #117/#118/#119, #120/#121 are commitlint relaxations).
`internal/*` source). Last refresh: 2026-11-01 (post v1.2.0 release;
§C/§I/§V/§T updated to match current state — Vite+ support complete
via #124, `internal/ui` rollout complete via #117/#118/#119, #120/#121
are commitlint relaxations).
Caveman encoding per FORMAT.md convention (not present at repo root —
using shapes from the caveman skill).

Expand Down Expand Up @@ -122,6 +123,7 @@ T18|x|design + implement internal/ui output layer|V2,#74,#105,#117,#118,#119
T19|x|fix double-prompt + sticky-no-override at cleanup decision point|#76,#95
T20|x|rest of cleanup/chore/ci/release batch|#62-#69,#89-#94,#99,#100,#107-#109
T21|x|doc drift: CLAUDE.md ui/lipgloss/phase-table stale; SPEC §T stale|#106
T22|x|add Vite+ (`vp`) as a supported version manager (full `vp env` surface + classifier + registry + docs)|I.managers,V14,#123,#124

## §B Bugs

Expand Down
4 changes: 2 additions & 2 deletions docs/managers.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Supported Version Managers

All 9 managers listed below are fully detected by `nodeup` as of v1.1.0
All 9 managers listed below are fully detected by `nodeup` as of v1.2.0
(macOS, Linux, and Windows where applicable). The matrix is the source of
truth — keep it in sync with `internal/detector/registry_*.go` and the
per-manager files (`fnm.go`, `nvm.go`, `volta.go`, `asdf.go`, `mise.go`,
Expand Down Expand Up @@ -78,7 +78,7 @@ bin dir (e.g., `fnm env --use-on-cd | source`, or add
points at a binary inside the manager's data dir, nodeup's next
run will classify it as `manager` and proceed without warning.

> _Status: Phase 7 complete. Post-upgrade cleanup prompt, per-manager native mutation commands, and full distribution packaging (GoReleaser, brew/scoop taps, npm wrapper at `nodeupx@1.0.1` via OIDC Trusted Publishing) have all shipped — see `CHANGELOG.md` for the v1.0.0 → v1.1.0 history._
> _Status: Phase 7 complete. Post-upgrade cleanup prompt, per-manager native mutation commands, and full distribution packaging (GoReleaser, brew/scoop taps, npm wrapper at `nodeupx@1.2.0` via OIDC Trusted Publishing) have all shipped — see `CHANGELOG.md` for the v1.1.0 → v1.2.0 history._

## Post-upgrade cleanup

Expand Down
4 changes: 2 additions & 2 deletions nodeup-npm/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "nodeupx",
"version": "1.1.0",
"version": "1.2.0",
"description": "Automated Node.js version upgrade + global package migration CLI. Static Go binary wrapped for npm distribution.",
"license": "MIT",
"author": "Dipto Karmakar <dipto@local>",
Expand Down Expand Up @@ -42,5 +42,5 @@
"README.md",
"LICENSE"
],
"binaryVersion": "1.1.0"
"binaryVersion": "1.2.0"
}
Loading