Description
Abstract
The value of the go
directive in golang.org/x repositories is automatically maintained to be at least 1.(N-1).0, where Go 1.N is the most recent major Go release, and Go 1.(N-1) is the previous major Go release.
Background
In the beginning, there was the GOPATH mode and versions of dependencies of golang.org/x repositories weren't explicitly tracked. Go 1.11 introduced the module mode, and over time it became the default mode. All golang.org/x repositories had an initial go.mod file checked in, and that file was maintained manually. This meant that a bug fix or a new feature in one golang.org/x repository didn't benefit another golang.org/x repository until someone chose to manually update that dependency. It also meant that eventual updates sometimes jumped many versions at once to catch up. This was resolved in 2022, when an automated monthly relui workflow began to create tags and update golang.org/x dependencies across all golang.org/x repositories (issue #48523).
At this point there are upwards of 35 golang.org/x repositories. Owners of each repository update the "go" directive manually, ad-hoc, so golang.org/x repositories may receive different levels of "go" directive maintenance. For example, owners of the golang.org/x/mod module wished to use the new-to-Go-1.22 go/version
package as soon as Go 1.23 came out, and so its "go" directive was recently updated to "1.22.0". On the other hand, golang.org/x/image hasn't been updated in a while, and its "go" directive is currently still at "1.18", which itself was an upgrade from "1.12" in CL 526895 as part of bringing all golang.org/x repos to use at minimum Go 1.18 language version (issue #60268).
Leaving go directive maintenance to be done entirely manually creates the possibility of some repositories staying on an older Go language version longer. When there's enough of a need to finally upgrade it to a recent Go language version, this requires a change across multiple major Go releases at once, which can be harder to review. Having continuous, smaller incremental upgrades requires creating many CLs for all of golang.org/x repositories every 6 months, which is toilsome if always done manually.
Design
Design document at go.dev/design/69095-x-repo-continuous-go.
CC @golang/release.
Metadata
Metadata
Assignees
Type
Projects
Status
Status
Activity
gopherbot commentedon Aug 27, 2024
Change https://go.dev/cl/608955 mentions this issue:
design/69095-x-repo-continuous-go.md: add design
design/69095-x-repo-continuous-go.md: add design
gabyhelp commentedon Aug 28, 2024
Related Issues and Documentation
(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)
rsc commentedon Aug 29, 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
findleyr commentedon Aug 30, 2024
I think we should perhaps emphasize that once the go.mod go directive is updated to Go version
1.N-1.X
, is our policy is going to be that package maintainers in that module should feel free to also break the build at older Go versions. This is implied by the reference to using thego/version
package, but should be highlighted.For example, right now x/telemetry has 1.20 in its go.mod file, but still builds with 1.19 (and this "feature" will still be relied upon by v0.16.2 of gopls, which is the final version of gopls supporting building with 1.19, before #65917 takes effect).
With that said, I think this proposal is good for Go overall. Not only will it reduce the toil of go directive maintenance, but it will also help eliminate significant complexity in these repositories related to build support for older Go versions. Additionally, with the help of all the work that has been done to make it easier to use a recent Go toolchain, I think this policy may indirectly help nudge the ecosystem away from using unsupported versions of Go.
gopherbot commentedon Sep 4, 2024
Change https://go.dev/cl/610716 mentions this issue:
go.mod: for consistency with other repos, use 1.22.0 in go.mod
go.mod: for consistency with other repos, use 1.22.0 in go.mod
rsc commentedon Sep 11, 2024
Based on the discussion above, this proposal seems like a likely accept.
— rsc for the proposal review group
The proposal is #69095 (comment).
258 remaining items