Skip to content

fix(npm): warn on old bun and pnpm for install_before#9232

Merged
jdx merged 1 commit intojdx:mainfrom
risu729:codex/npm-install-before-pm-warning
Apr 18, 2026
Merged

fix(npm): warn on old bun and pnpm for install_before#9232
jdx merged 1 commit intojdx:mainfrom
risu729:codex/npm-install-before-pm-warning

Conversation

@risu729
Copy link
Copy Markdown
Contributor

@risu729 risu729 commented Apr 18, 2026

Summary

  • warn when install_before is active and the configured bun/pnpm version detected from a mise toolset is below the documented release-age flag minimum
  • skip the warning when the package manager version is not detectable from toolset state, and leave npm behavior unchanged
  • move shared semver comparison helpers into src/semver.rs and use them for npm, bun, and pnpm release-age version gates

Tests

  • cargo fmt --all -- --check
  • cargo check --all-features
  • cargo test --all-features semver::tests
  • cargo test --all-features backend::npm::tests

This PR was generated by an AI coding assistant.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 18, 2026

Greptile Summary

Adds advisory warnings for install_before when the configured bun or pnpm version (read from the active toolset) is older than the minimum required to support their respective --minimum-release-age / --config.minimumReleaseAge flags. Also refactors the shared semver comparison helpers (semver_triplet, semver_cmp, semver_is_older_than, semver_is_at_least) into src/semver.rs for reuse across npm, bun, and pnpm code paths.

Confidence Score: 5/5

Safe to merge — no correctness or data-integrity issues found in the new warning logic or refactored semver helpers.

All new code paths are well-guarded: version detection gracefully falls back when a semver string is unavailable, the semver helpers are thoroughly tested, and the warning is purely advisory so it cannot break existing behaviour. The one P2 note (flag still forwarded when version is too old) reflects a design choice rather than a defect.

No files require special attention.

Important Files Changed

Filename Overview
src/semver.rs Adds semver_triplet, semver_cmp, semver_is_older_than, and semver_is_at_least helpers, along with comprehensive tests. Functions are well-guarded and correct; pre-release/build metadata is stripped consistently.
src/backend/npm.rs Adds bun/pnpm version-gate warning before install, plus toolset_package_manager_version helper that prefers resolved versions over requested ones. Logic, fallback paths, and test coverage are solid.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[install_version_ called with before_date] --> B{package_manager?}
    B -->|npm| C[release_age_package_manager_requirement → None]
    C --> D[skip version warning]
    B -->|bun / pnpm| E[release_age_package_manager_requirement → tool, min_version, flag]
    E --> F{toolset_package_manager_version in ctx.ts?}
    F -->|found semver| G[use resolved/requested version]
    F -->|not found| H{dependency_toolset available?}
    H -->|yes| I{toolset_package_manager_version in dep_ts?}
    I -->|found semver| G
    I -->|not found| J[skip warning — version unknown]
    H -->|error| J
    G --> K{version < min_version?}
    K -->|yes| L[warn! with upgrade hint]
    K -->|no| M[no warning]
    L --> N[build_transitive_release_age_args — flag still forwarded]
    M --> N
    D --> O[build_npm_release_age_args]
Loading

Reviews (2): Last reviewed commit: "fix(npm): warn on old bun and pnpm for i..." | Re-trigger Greptile

Comment thread src/backend/npm.rs Outdated
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request adds a warning mechanism to the npm backend to notify users if their version of Bun or Pnpm is too old to support the install_before feature. It includes new logic for parsing and comparing semver versions. A review comment points out that the semver_triplet function does not handle partial version strings (e.g., "1.3"), which would cause the warning to be skipped, and suggests simplifying the approach by documenting minimum requirements instead.

Comment thread src/backend/npm.rs Outdated
@risu729 risu729 force-pushed the codex/npm-install-before-pm-warning branch from 0cb720a to 7725352 Compare April 18, 2026 06:05
@risu729 risu729 marked this pull request as ready for review April 18, 2026 06:08
@jdx jdx merged commit 02a9e17 into jdx:main Apr 18, 2026
35 checks passed
@risu729 risu729 deleted the codex/npm-install-before-pm-warning branch April 18, 2026 11:09
jdx pushed a commit that referenced this pull request Apr 18, 2026
### 🐛 Bug Fixes

- **(backend)** respect install_before in latest lookup by @risu729 in
[#9193](#9193)
- **(backend)** route explicit latest through stable lookup by @risu729
in [#9228](#9228)
- **(backends)** deprecate b shorthand by @risu729 in
[#9234](#9234)
- **(config)** warn for deprecated env keys by @risu729 in
[#9205](#9205)
- **(config)** treat enable_tools empty as disable-all by @risu729 in
[#9108](#9108)
- **(github)** avoid auth on release asset downloads by @risu729 in
[#9060](#9060)
- **(gitlab)** warn when glab OAuth2 token is expired by @stanhu in
[#9195](#9195)
- **(npm)** honor install_before without day drift by @risu729 in
[#9157](#9157)
- **(npm)** warn on old bun and pnpm for install_before by @risu729 in
[#9232](#9232)
- **(pipx)** honor install_before for uv and pipx installs by @risu729
in [#9190](#9190)
- **(registry)** allow shfmt on Windows by @zeitlinger in
[#9191](#9191)

### 🚜 Refactor

- **(backend)** remove unused rolling release helper by @risu729 in
[#9175](#9175)
- **(backend)** use file util for removals by @risu729 in
[#9206](#9206)

### 📚 Documentation

- **(config)** clarify always_keep_download behavior by @risu729 in
[#9235](#9235)
- **(configuration)** add rust to idiomatic version files by @jjt in
[#9233](#9233)
- **(contributing)** expand contribution guide introduction by
@marianwolf in [#9208](#9208)
- **(github)** document multiple release assets workaround by @risu729
in [#9236](#9236)

### 📦️ Dependency Updates

- update actions/setup-node action to v6 by @renovate[bot] in
[#9183](#9183)
- update dependency @types/node to v25 by @renovate[bot] in
[#9187](#9187)
- update crazy-max/ghaction-import-gpg action to v7 by @renovate[bot] in
[#9186](#9186)
- update actions/cache action to v5 by @renovate[bot] in
[#9181](#9181)
- update amannn/action-semantic-pull-request action to v6 by
@renovate[bot] in [#9184](#9184)
- update apple-actions/import-codesign-certs action to v6 by
@renovate[bot] in [#9185](#9185)
- update dependency eslint to v10 by @renovate[bot] in
[#9200](#9200)
- update dependency toml to v4 by @renovate[bot] in
[#9201](#9201)
- update rust crate reqwest to 0.13 by @renovate[bot] in
[#9171](#9171)
- update ghcr.io/jdx/mise:deb docker digest to 523d826 by @renovate[bot]
in [#9198](#9198)
- update ghcr.io/jdx/mise:alpine docker digest to 05617e0 by
@renovate[bot] in [#9196](#9196)
- update ghcr.io/jdx/mise:rpm docker digest to c1992f9 by @renovate[bot]
in [#9199](#9199)
- update ghcr.io/jdx/mise:copr docker digest to 90db6cd by
@renovate[bot] in [#9197](#9197)
- update taiki-e/install-action digest to 58e8625 by @renovate[bot] in
[#9209](#9209)
- update fedora docker tag to v45 by @renovate[bot] in
[#9213](#9213)
- update docker/setup-buildx-action action to v4 by @renovate[bot] in
[#9212](#9212)
- update docker/metadata-action action to v6 by @renovate[bot] in
[#9211](#9211)
- update docker/login-action action to v4 by @renovate[bot] in
[#9210](#9210)
- update dependency typescript to v6 by @renovate[bot] in
[#9202](#9202)
- update docker/build-push-action action to v7 by @renovate[bot] in
[#9203](#9203)
- update github artifact actions (major) by @renovate[bot] in
[#9215](#9215)
- update rust crate duct to v1 by @renovate[bot] in
[#9220](#9220)
- update rust crate demand to v2 by @renovate[bot] in
[#9219](#9219)
- update rust crate clx to v2 by @renovate[bot] in
[#9218](#9218)
- update nick-fields/retry action to v4 by @renovate[bot] in
[#9217](#9217)
- update jdx/mise-action action to v4 by @renovate[bot] in
[#9216](#9216)
- update rust crate self_update to 0.44 by @renovate[bot] in
[#9174](#9174)
- migrate eslint config to flat format for v10 compat by @jdx in
[#9222](#9222)
- update actions/checkout action to v6 by @renovate[bot] in
[#9182](#9182)
- update rust crate toml to v1 by @renovate[bot] in
[#9225](#9225)
- update rust crate versions to v7 by @renovate[bot] in
[#9226](#9226)
- update rust crate which to v8 by @renovate[bot] in
[#9227](#9227)
- update rust crate rmcp to v1 by @renovate[bot] in
[#9221](#9221)

### 📦 Registry

- add sheldon by @3w36zj6 in
[#9104](#9104)
- add pocketbase by @ranfdev in
[#9123](#9123)
- add worktrunk ([aqua:max-sixty/worktrunk,
cargo:worktrunk](https://github.com/max-sixty/worktrunk,
cargo:worktrunk))#1 by @edouardr in
[#8796](#8796)
- add dependency-check
([aqua:dependency-check/DependencyCheck](https://github.com/dependency-check/DependencyCheck))
by @kapitoshka438 in [#9204](#9204)
- add janet by @ranfdev in
[#9241](#9241)

### New Contributors

- @ranfdev made their first contribution in
[#9241](#9241)
- @jjt made their first contribution in
[#9233](#9233)
- @marianwolf made their first contribution in
[#9208](#9208)
- @edouardr made their first contribution in
[#8796](#8796)

## 📦 Aqua Registry Updates

#### New Packages (3)

- [`LargeModGames/spotatui`](https://github.com/LargeModGames/spotatui)
-
[`android-sms-gateway/cli`](https://github.com/android-sms-gateway/cli)
- [`velero-io/velero`](https://github.com/velero-io/velero)

#### Updated Packages (1)

- [`skim-rs/skim`](https://github.com/skim-rs/skim)
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