Skip to content

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

@ryenus

Description

@ryenus
Contributor

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

Activity

ljharb

ljharb commented on Dec 19, 2023

@ljharb
Member

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

ryenus

ryenus commented on Dec 19, 2023

@ryenus
ContributorAuthor

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

ljharb

ljharb commented on Dec 19, 2023

@ljharb
Member

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

changed the title [-][ls-morete] possible to only list active and/or maintained versions?[/-] [+][ls-remote] possible to only list active and/or maintained versions?[/+] on Dec 19, 2023
ryenus

ryenus commented on Dec 19, 2023

@ryenus
ContributorAuthor

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

ljharb

ljharb commented on Dec 19, 2023

@ljharb
Member

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

ryenus commented on Dec 19, 2023

@ryenus
ContributorAuthor

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

ljharb commented on Dec 19, 2023

@ljharb
Member

That affects nvm install as well, though.

ryenus

ryenus commented on Dec 19, 2023

@ryenus
ContributorAuthor

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

ljharb commented on Dec 19, 2023

@ljharb
Member

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

ryenus

ryenus commented on Dec 19, 2023

@ryenus
ContributorAuthor

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

ljharb commented on Dec 19, 2023

@ljharb
Member

I meant your original post.

ryenus

ryenus commented on Dec 19, 2023

@ryenus
ContributorAuthor

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

ljharb

ljharb commented on Dec 19, 2023

@ljharb
Member

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

ryenus commented on Dec 20, 2023

@ryenus
ContributorAuthor

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

ljharb commented on Dec 20, 2023

@ljharb
Member

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

ryenus commented on Dec 20, 2023

@ryenus
ContributorAuthor

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

That would be really great! Much appreciated 👍

changed the title [-][ls-remote] possible to only list active and/or maintained versions?[/-] [+][ls-remote] only list active and/or maintained versions[/+] on Dec 22, 2023
linked a pull request that will close this issue on Jan 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @ljharb@ryenus

      Issue actions

        [ls-remote] only list active and/or maintained versions · Issue #3250 · nvm-sh/nvm