Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/go: list deprecations and newer available major, minor versions #67420

Open
mitar opened this issue May 16, 2024 · 17 comments
Open

cmd/go: list deprecations and newer available major, minor versions #67420

mitar opened this issue May 16, 2024 · 17 comments

Comments

@mitar
Copy link
Contributor

mitar commented May 16, 2024

Proposal Details

This is a followup to #40323. In there the proposal was to print out warnings during other commands when there are newer versions of modules available.

This proposal instead proposes a new sub-command to go mod, something like go mod check or go mod upgradeable which would check existing dependencies for:

  • Deprecations.
  • Available minor versions.
  • Available major versions.

It could print that out in readable format or in JSON format (so that other tools could take that as input). I think this would allow then various plumbing with CI and other tooling to get warnings, errors, notifications, e-mail notifications, whatever. It would also not pollute all other go commands with messages people might not expect. I can imagine then somebody making a linter for golangci-lint which would require that everything is on the latest version. Or whichever policy you want.

The command could then also be extended in the future (suggesting fixes, adding additional checks - like suggesting which version changes might reduce the number of different versions in the program) without adding noise to existing other commands.

@H0llyW00dzZ
Copy link

Proposal Details

This is a followup to #40323. In there the proposal was to print out warnings during other commands when there are newer versions of modules available.

This proposal instead proposes a new sub-command to go mod, something like go mod check or go mod upgradeable which would check existing dependencies for:

  • Deprecations.
  • Available minor versions.
  • Available major versions.

It could print that out in readable format or in JSON format (so that other tools could take that as input). I think this would allow then various plumbing with CI and other tooling to get warnings, errors, notifications, e-mail notifications, whatever. It would also not pollute all other go commands with messages people might not expect. I can imagine then somebody making a linter for golangci-lint which would require that everything is on the latest version. Or whichever policy you want.

The command could then also be extended in the future (suggesting fixes, adding additional checks - like suggesting which version changes might reduce the number of different versions in the program) without adding noise to existing other commands.

That would be useful instead of currently having to manually click Check for upgrades | Upgrade transitive dependencies | Upgrade direct dependencies in the IDE.

@ianlancetaylor ianlancetaylor added the GoCommand cmd/go label May 20, 2024
@ianlancetaylor
Copy link
Contributor

CC @matloob

@fgm
Copy link

fgm commented May 20, 2024

Maybe that command could provide more info than just versions, to avoid having to introduce multiple such go mod subcommands over time. Consider for example composer show <package> --all providing all metadata about a package.

Otherwise, we have prior art like composer outdated, yarn outdated, npm outdated. And there is a similar discussion in the Rust community at rust-lang/cargo#4309 (comment) (open since 2017), which includes a nice summary of equivalent features in other languages as prior art.

@seankhliao seankhliao changed the title proposal: cmd/go: a command to obtain data about other module versions which are available proposal: cmd/go: a command to obtain data about other major module versions which are available May 20, 2024
@matloob
Copy link
Contributor

matloob commented May 20, 2024

cc @samthanawalla

This seems like it could be useful.

@mitar
Copy link
Contributor Author

mitar commented May 20, 2024

@seankhliao You changed the title, but my proposal is for both major and minor versions.

@seankhliao
Copy link
Member

I did, but minor version info is already available (the -u and -versions flag for go list). What's new and hard is obtaining information about major versions.

@mitar
Copy link
Contributor Author

mitar commented May 20, 2024

Hm, I was hoping for one command to show me all version information. But yes, adding major is new and hard, but I still think it is useful to have one command which can show both. One reason is that you can sometimes then see that a module has both a newer minor and newer major version, implying that the old major version is still maintained.

@jimmyfrasche
Copy link
Member

Having a single clear place to go to get all version related questions answered is good UX. I don't want to have to remember two things. That's one too many things!

@rsc rsc changed the title proposal: cmd/go: a command to obtain data about other major module versions which are available proposal: cmd/go: list deprecations and newer available major, minor versions May 23, 2024
@rsc
Copy link
Contributor

rsc commented May 23, 2024

This proposal has been added to the active column of the proposals project
and will now be reviewed at the weekly proposal review meetings.
— rsc for the proposal review group

@rsc
Copy link
Contributor

rsc commented Jun 5, 2024

What if we add a new MajorUpdate field to the Module struct that is output from go list -m, with these semantics:

  • go list -m -u # sets Deprecated, Update (latest minor) (this already exists)
  • go list -m -u=patch # sets Deprecated, Update (latest patch; this would be new)
  • go list -m -u=major # sets Deprecated, Update (latest minor), MajorUpdate (this adds MajorUpdate)

Would that be enough for people?

@rsc
Copy link
Contributor

rsc commented Jun 12, 2024

Have all remaining concerns about this proposal been addressed?

The proposal details are in #67420 (comment).

@mitar
Copy link
Contributor Author

mitar commented Jun 12, 2024

I think so. Thanks.

@gaby
Copy link

gaby commented Jun 12, 2024

Yes, they do.

@jimmyfrasche
Copy link
Member

Would -u=major also contain the results for -u=patch and just -u; or would it only show major updates?

@rsc
Copy link
Contributor

rsc commented Jun 20, 2024

No, each -u contains one result, since the (pre-existing) Update field can only describe one version.

@rsc
Copy link
Contributor

rsc commented Jun 24, 2024

Based on the discussion above, this proposal seems like a likely accept.
— rsc for the proposal review group

The proposal details are in #67420 (comment).

@rsc
Copy link
Contributor

rsc commented Jun 27, 2024

No change in consensus, so accepted. 🎉
This issue now tracks the work of implementing the proposal.
— rsc for the proposal review group

The proposal details are in #67420 (comment).

@rsc rsc changed the title proposal: cmd/go: list deprecations and newer available major, minor versions cmd/go: list deprecations and newer available major, minor versions Jun 27, 2024
@rsc rsc modified the milestones: Proposal, Backlog Jun 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Accepted
Development

No branches or pull requests