-
Notifications
You must be signed in to change notification settings - Fork 2.1k
versioning and tagging releases #376
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
Comments
To me, vendoring makes this a moot issue - users can upgrade when they are ready and vendor the version they wish to use. This is ideal, however, and does not represent everyone's workflow. But it is something to suggest as people come pointing fingers about blame. I had a package break due to the addition of a parameter to PullRequestsService.Merge. I fixed it and moved on. Go makes it very easy to deal with small breaking changes like that. Moving the canonical source to gopkg.in is, in itself, a breaking change, right? Now that Go forces you to use the canonical import path? |
I suppose there are varying levels of supporting semantic versioning as well. This repo already has On other projects that I supported, maintaining a All that said, I don't have really strong opinions either way. My recommendation moving forward is to bump |
In case you misread, I have zero intention of moving to gopkg.in. I think it's a clever service and I greatly respect Gustavo, but I'm not about to add an extra single point of failure that I have no control over to how people access this package if I don't have to. And I definitely don't want to cede control of the namespace; I actually don't even like "github.com" in the import path either (as you know from my personal packages), but I don't have a good Google controlled hostname that would work well for this. And as you point out, vendoring mostly obviates the need for a service like gopkg.in. All that said, there are still other advantages to versioning and tagging the library, some hypothetical/theoretical, some practical.
Now even with that said, I don't typically version my go libraries because I always vendor anyway, and versioning is not all that common in the go community. And I don't relish the idea of trying to keep a changelog up to date, making decisions about version numbers, etc. |
Note that this is an API-breaking change but should have minimal impact on users of this package due to the nice inference properties of the Go programming language. Bumped `libraryVersion` to 0.2 due to API-breaking change as discussed in google#376. Fixes google#180. Change-Id: Ib386135e6b8f306d1f54278968c576f3ceccc4e7
I don't have strong opinions, but I would hope we lean towards doing the simpler thing. A more complex solution IMO is going to add overhead and little actual benefit.
I agree with this recommendation, but minor tweak. Maybe just make it an integer and increment it by 1 with every breaking API change (so, make it We have great commit messages, let's keep that up. We may make some minor breaking API changes, but only when it makes sense, leads to a better API, and isn't hard to update. If you're vendoring go-github, you update whenever you want and re-vendor. If you choose not to vendor (knowing the risks and choosing to accept them), you update right away. The API of this package is quite mature and unlikely to change or evolve significantly in the future. |
Another observation is that this library tends add support for new GitHub API features while those are still in preview, which means if you choose to use those features, they may break at any point. That just goes without saying, but I guess I'm saying it anyway. If you need full reliability at all times, you must vendor go-github AND not use any of the preview API endpoints. |
Note that this is an API-breaking change but should have minimal impact on users of this package due to the nice inference properties of the Go programming language. Bumped `libraryVersion` to `2` due to API-breaking change as discussed in google#376. Fixes google#180. Change-Id: Ib386135e6b8f306d1f54278968c576f3ceccc4e7
sounds good to me... we'll leave things as they are. |
I wonder if @davecheney has seen this thread when writing that. |
I was going to make a big comment after my request for versioning go-querystring was closed, but Mr. Cheney covered my thoughts pretty well. |
That's Mr. Cheney. On Sat, 2 Jul 2016, 01:19 Jim Deville notifications@github.com wrote:
|
Hi, I d like to re open that issue. As i faced a build issue with your repo because i basically can t track it via semver. Whatever, i m just arguing that having a I d like also to point out that i developed method to help to manage a changelog, version bumping and so on. this or that, please consider tagging your git. |
Reopening this discussion, particularly in light of the direction that https://github.com/golang/dep is taking. It will support specifying specific versions of dependencies, presumably relying on git tags, though I haven't tried it out yet. See also my comment in #529 that I'm not sure that the To @shurcooL's point above, if we go this route, we will need to decide (and document) when we bump which version numbers. semver is pretty clear on most of that, but what about the preview APIs? Do we explicitly call them out in the godocs and say that they are excluded from any versioning policy? This is somewhat complicated by the fact that many of our standard API calls are actually using a preview media type in order to get some different behavior or extra information in the response. In those cases, do we say that only the subset of behavior or fields are excluded from the versioning policy? (I think the answer has to be "yes", since otherwise we could be taking a previously stable method and regressing it back to preview status). |
Instead of using SemVer, which greatly complicates things and will favor backporting, simply tag chunks of changes as |
The preview APIs definitely complicate matters. It seems we have two options:
I imagine for some users that care about the utmost stability, they would only use stable endpoints and benefit from first option more. Many other users end up being more practical, have a higher tolerance for instability and choose to use some preview endpoints, and they would benefit more from second option. I'm leaning slightly towards the second option, and we can leave comments about whether the breaking change affects preview endpoints or stable endpoints. But not sure. |
Nothing in semver says when you have to cut releases. So we could simply decide to only cut releases at major versions and call them I'm not entirely sure we want to do that (only tag at major versions), but it's at least an option. |
@shurcooL or a third option, if we're willing to deal with both major and minor versions: a) major version is bumped with any breaking change to non-preview functionality, including changes to function signatures or behavior. |
Semver doesn't imply any level of support or backporting of bug fixes onto older branches. I would be completely fine saying that we only focus on supporting And if golang/dep adopts semver, which it sounds like they will, then we may not have a choice but to follow suit (which I'm fine with). Also, it could be said that older versions come with the exact same level of support as the master branch... none at all. (Or "best effort" if you prefer.) |
Any other final thoughts on this topic? I haven't heard adamant opposition to moving forward with semver tagging, so I'm going to plan on that being the path forward. I'll put together a PR that updates our docs to talk about how we handle versioning. |
Can you quickly summarize the final semver scheme you're thinking of going with? We've discussed at least 3 options above, so I'm not sure which one you're referring to. |
Hi @willnorris @shurcooL, Is something finalized on this? If yes are we tracking it somewhere else? Also, I want to know if there's anything I can help with :) |
I'm waiting on a summary of the final semver scheme that @willnorris had in mind. It's a little hard to deduct from reading the comments above, because a lot of different options were being discussed with back and forth. |
yep, this is squarely on me. I'll try and carve out some time soon. |
also remove libraryVersion var in favor of semver tagging on the repo itself. Fixes #376
also remove libraryVersion var in favor of semver tagging on the repo itself. Fixes google#376
We generally try not to have egregious breaking changes in this library, but we're also not afraid to do them when necessary (the latest example being #375). We've gotten a couple of people asking for us to use semver on google/go-querystring#11, which we could also consider doing here.
That doesn't help us for #375, but would allow us to do future breaking changes at a version boundary. I have no intention of changing the import path to use gopkg.in or anything like it, but it would still help set appropriate expectations for folks when they do upgrade to a new version. And keeping a
CHANGELOG.md
file might be nice (although a bit of work to keep up to date) to point out new APIs that we support, etc.@gmlewis @shurcooL what do you think?
The text was updated successfully, but these errors were encountered: