nvm-sh / nvm

Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions
MIT License
80.58k stars 8.03k forks source link

[ls-remote] only list active and/or maintained versions #3250

Open ryenus opened 11 months ago

ryenus commented 11 months ago

What happened?

Currently nvm ls-remote --lts literally list all the LTS versions, including the ones are no longer in active and/or maintenance status.

What did you expect to happen?

The most common usage of nvm ls-remote is to check for new versions, which is only relevant for currently supported versions, namely the ones in active and/or maintenance phases.

Therefore it would make sense to allow one to only list the currently supported versions, or to exclude the no longer supported versions.

If the default behavior cannot be changed, it would make sense to introduce certain command line options, such as --supported or --no-supported.

And we can use awk to parse the nodejs release schedule json to find supported versions, with end date later than the current date, for example:

$ curl -sL https://raw.githubusercontent.com/nodejs/Release/main/schedule.json |\
  awk -vT=$(date +%F) '{if($1~/v[0-9]+/){v=$1;gsub(/[":]/,"",v);while($1!~/end/)getline;
  e=$2;gsub(/[",]/,"",e);if(e>=T)print v,e}}'
v18 2025-04-30
v20 2026-04-30
v21 2024-06-01
v22 2027-04-30
v23 2025-06-01
v24 2028-04-30
ljharb commented 11 months ago

No, because that's a function of time, and that's not something I want nvm's output to depend on.

ryenus commented 11 months ago

Hmm, even if the content of https://nodejs.org/dist/index.tab is also somehow a function of time?

ljharb commented 11 months ago

It's not in the sense that nvm doesn't need to know the current date/time.

ryenus commented 11 months ago

TBH I don't see why we cannot put it behind a flag such as --supported, meanwhile maintain the existing behaviour as default?

ljharb commented 11 months ago

Of course we could. However, I don't think it would be a good idea to have anything depend on "the current date", and, if there were any way for a project's preferred node version to change based on the passage of time, then it would be possible for nvm use inside a project to work one day, and stop working the next, which would be both unacceptable and violate semver.

ryenus commented 11 months ago

for a project's preferred node version to change based on the passage of time

Hmm, here the request is only about nvm ls-remote, with no involvement with nvm use at all.

ljharb commented 11 months ago

That affects nvm install as well, though.

ryenus commented 11 months ago

That affects nvm install as well, though.

Maybe not if it's an option only for nvm ls-remote?

I guess this request would be more appealing back when nvm_print_versions was quite slow before it was reimplemented using awk.

Nowadays it's pretty fast. But in the context of using nvm ls-remote to check for newer versions, the no longer supported versions are NOT going to get new versions at all, that's where this option can be useful, by making the output less cluttered.

ljharb commented 11 months ago

Is your motivation to hasten/shorten the response of nvm ls-remote? That's very different from the OP :-)

ryenus commented 11 months ago

Is your motivation to hasten/shorten the response of nvm ls-remote?

Well yes, that's it.

BTW, and which OP? I guess I'm a bit confused.

ljharb commented 11 months ago

I meant your original post.

ryenus commented 11 months ago

Ahh, I was actually thinking the same, maybe my OP should have been more concise :-)

ljharb commented 11 months ago

Would a --min=18, for example, suffice here? basically it'd all work the same except it would omit displaying anything before v18 (and i'd optimize to skip contacting iojs.org entirely when the version was >= 4, etc)

ryenus commented 11 months ago

Would a --min=18, for example, suffice here?

Yes, that also works! And it has the advantage of being more flexible.

Maybe we can even have it as the default? So that in the most common use case we save several keystrokes for all the users :-) Meanwhile those who want the old behavior can use --min=0.

ljharb commented 11 months ago

I'm not quite comfortable with that level of a breaking change just yet; but perhaps I could also add an env var that sets that value, so it's easy to set your own default?

ryenus commented 11 months ago

add an env var that sets that value, so it's easy to set your own default?

That would be really great! Much appreciated 👍