Replies: 12 comments 10 replies
-
Proposal: decouple CLI versioning and library versioning.The CLI and library have different users. We could make a breaking change to one without affecting the other--for instance, removing an unused method. I think that we should stop versioning them in tandem, because the versions track different things. This will positively improve release notes, but require some changes to release processes. |
Beta Was this translation helpful? Give feedback.
-
Question: how long are old CLI versions supported?The Sigstore infrastructure might change in a way that's ambiguous as to whether it's breaking or not. If an old Cosign version was doing something incorrectly, how long should we support that behavior server-side? (This is slightly off-topic but feels relevant enough I'd like to discuss it.) |
Beta Was this translation helpful? Give feedback.
-
Question: what's a breaking change in the CLI?For instance, which of these count? Some are obvious, some less so. See Hyrum's Law and XKCD #1172.
Can we come up with a guiding principle that's easy to explain? For instance (not advocating for anything in particular):
|
Beta Was this translation helpful? Give feedback.
-
Question: what's a breaking change in the API?Obviously, removing a public method counts. But what if it's a method we're pretty sure nobody uses? What if the method never worked in the first place? What about a public method in the What about changes to behavior? What if the behavior was a bug? What's a bug vs. a feature? What if the behavior was undocumented? What if the whole API was undocumented---does that give us license to change everything? |
Beta Was this translation helpful? Give feedback.
-
Proposal: broad exception for security issuesSome security issues require "breaking" fixes. For instance, if something verifies successfully but it shouldn't, it could be considered breaking to fix that. IMO, it's pretty clear that we want to do that, and we don't want a major version bump because that involves friction. |
Beta Was this translation helpful? Give feedback.
-
Proposal: follow semver pretty strictly for the libraryAs a Go library, we are supposed to follow the idiosyncratic beliefs of the Go core team about versioning: namely, that perfect semantic versioning is possible and that "what is the public API of this package" is a question that can be answered unambiguously, and no exceptions are allowed unless you're really special. I'll leave it as an exercise to the reader to figure out whether I think this is a wise policy, but these are the rules regardless and IMO we should follow them, especially because Go's build tooling assumes that we do. Otherwise, we should very explicitly document that we don't. |
Beta Was this translation helpful? Give feedback.
-
Proposal: have an "experimental" sectionNow that Cosign is v1, every new addition is technically supposed to be permanent. That's annoying---it doesn't give any lattitude to experiment with APIs. Should |
Beta Was this translation helpful? Give feedback.
-
Question: how to track things that we're waiting on a new major version to fix?There are things in the Cosign API that we're planning to remove/change in v2 (example). A lot of these require very straightforward code changes. But it'd be annoying to push a major version and forget to do that. How can we make sure we don't forget? Some ideas related to this:
This is basically a question about how we should do deprecation. |
Beta Was this translation helpful? Give feedback.
-
Proposal: We should issue a v2 sooner rather than later.I frequently notice a weird aversion to publishing new major versions of a library. While I think it's a good idea to weigh the benefits of a proposed change against the cost to users forced to update their calling code and to not make breaking changes willy-nilly, it can get a little silly if you avoid making a good/useful change to the library to avoid breaking an interface that probably 0 people use. I think the v2 release has the largest psychological overhead and propose we should do it sooner rather than later. After that point, I think such decisions will be made a little more rationally. |
Beta Was this translation helpful? Give feedback.
-
Proposal: use automation to detect breaking changes in PRsIt's pretty easy to miss breaking changes while reviewing code (I've done it). Proposal: add automation, like gorelease, to detect these in PRs. |
Beta Was this translation helpful? Give feedback.
-
In the community meeting this week @znewman01 shared this versioning proposal for Cosign. I wanted to make sure that got shared here, too. He'd mentioned he was looking for feedback by the end of this week, but can we extend that a little, @znewman01? Maybe just another week (or two, given the US holiday next week), so folks can engage if they care to. |
Beta Was this translation helpful? Give feedback.
-
The versioning of the container packages seems broken to me. The |
Beta Was this translation helpful? Give feedback.
-
I think we should document guarantees around versioning. It's not clear what changes are/aren't breaking (to the CLI vs. library API), and if they are breaking, what the process for making them is.
This discussion is a good venue to bring up ideas/questions. Hopefully at the end we can codify it in a doc. Call it, say
VERSIONING.md
. It will include the resolutions of most of the questions in this discussion. This will be useful for code reviewers as well as users of the API and CLI.EDIT: there is existing documentation about versioning, but it leaves most of the below questions unaddressed.
EDIT EDIT: Proposal: Cosign Versioning aggregates many of the below discussions into one place so we can consider adopting a new versioning policy!
Beta Was this translation helpful? Give feedback.
All reactions