-
Notifications
You must be signed in to change notification settings - Fork 29.6k
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
Release Versioning #544
Comments
/cc @iojs/tc @domenic I'm partial to -canary or -next style of development but it shouldn't turn into another node.js v0.11, a dumping ground for new features, without a release date. If we're going to follow Chrome's release cadence, we can turn -next into the 'io.js from six weeks in the future': the next stable V8 and any pull requests that warrant a minor or major version bump. Six weeks time is short enough that contributors shouldn't get demotivated. It's also short enough that you won't get a massive delta like with node.js v0.10 and v0.11, where everything has changed so much that it's basically impossible to merge one into the other. |
Forgot to add, that would also carry over to projects like nan: nan-next would target the upcoming stable V8 and be ready and tested when io.js is released. /cc @kkoopa |
@bnoordhuis I agree with your comments, the whole 0.10 and 0.11 difference is annoying, I like Chrome (And V8 since they are directly linked) release cycles. I even ran canary builds for a while, went back to stables after a few rather buggy releases and just haven't switched back yet. |
+1 on -next. Having one build that is built against latest stable V8 and another that is built against what is planned to be the next stable V8 would be good. |
+1 on following the v8 release schedule. I believe they would like us to do the same. |
Though I don't like bumping major versions every 6 weeks. Instead upgrading v8 should be a minor version (i.e. API changes in dependencies shouldn't require upgrading major versions). |
👍 @trevnorris That does make more sense, major versions would be because of major API changes in io.js rather than V8 |
@trevnorris if the v8 change doesn't break the C++ API for addons, then yes, we should bump minor (or even patch!) for new v8 releases. However, if it does break addons we should reflect that in our version bump. |
@bnoordhuis what do -canary or -beta version descriptors look like? and under the proposal would this preclude merging anything in to the main release branch that would bump minor or major but leave them all for the 6 weekly bump? |
(sorry, to clarify my request, I'm looking for some example versions in a sequence, do we have 1.1.0-beta01, 1.1.0-beta02, 1.1.0-beta03, etc. until we reach the 6 week point and do a proper 1.1.0?) |
Here is more or less what I took away from the TC meeting. Let me know how it sounds. When writing it down, it is a bit complicated.
Potential points of discussion:
|
The more surface area represented under a semver version, the less useful it is, and the harder it is to get right. If you change the JS api and bump the major, this may convey zero meaningful information for an addon developer, and vice versa. What if io.js simply uses two versions? One which represents the C++ API for addons, and one for the JS API? |
Conversely, the more surface represented by the versioning scheme the more confusing it will be for everyone. "I'm using io.js v1.2.1+1.0.5" The |
@timoxley the C++ addon layer breaking means that many popular packages will have to update – so even if you're not personally concerned with that breakage at a JS level, chances are you may be dependent (indirectly) on a package that is. Put another way, every package npm ecosystem has an implicit Re: Canary builds: it seems like there are a few things interwoven here:
Semver makes it relatively easy to do (1). (2) entails that every time we release we're popping the last release off of the "release queue" out as the stable iojs, and pushing the new release into the top, and that the release queue has to be long enough to give folks enough early warning time to instrument and test the release. (3.1) entails that the V8 release would just be work done every 6 weeks, and pushed into the queue like any other work, while (3.2) would involve keeping a parallel version of the release queue around as a "canary" build. The train release system, if it's to be effective, sets a maximum number of releases / time period, which is at odds with our desire to ad-hoc release at least weekly. What if we set up two queues, and addressed the v8 canary in the second (closer to release) queue?
Thoughts on this? |
IMO it should be the least possible number of "channels". Basically this is +1 to top post |
@chrisdickinson I disagree. Based on release history you can pretty much guarantee that some aspect of the v8 user API will change between releases. Which means a new major version every 6 weeks. I don't think we should go down that path. |
@trevnorris Why avoid a major version every 6 weeks if we're committed to using semver? If the concern is LTS releases, we would cut (or preserve) a new |
@chrisdickinson IMO the C++ API does not have the same priority as that of the JS API. The user needs to explicitly It has nothing to do with being committed to using semver. It has to do with the fact that we aren't breaking our API. |
Taking semver out of it for a second, to me there are two buckets of "breaking changes" in the v8 API: those easily covered by |
@trevnorris while the API isn't ours, our API depends on the user sending arguments using classes from their API. Put in a hypothetical, userland-JS way: say I have a package that uses three.js, and its API requires parameters to be of type The major version is there to tell end users that code will likely have to change to adopt the new version of my package. In io.js terms, our consumers are the packages on npm. If we know that our changes will break any package on npm that take specific action to update, we should bump our major version to reflect that. If we say that nan is part of the platform, as @mikeal suggests, I'm more amenable to not bumping the major version (assuming packages depending on nan don't break), though I'm still a bit nervous about that – I prefer to be conservative and lean towards bumping major versions, personally. |
@chrisdickinson If I had a module that depended on functionality from a third-party module I'd wrap it with my own functions to make sure I could maintain compatibility. We haven't done that with Node. Native modules in iojs are still a mess. Also, consider that you're talking about the entire |
+1 on only bump the major because of a v8 API change when it can't be handled by nan. I thought I heard a TC meeting where this was already decided on, is it still up for discussion? It blesses nan, people are free to do anything else they want, but if they directly use v8 APIs, they are committing to dealing with breakage themselves ("ourselves"... I have code that doesn't use nan, and I'm OK with this). nan isn't distributed in-tree with node, but that's a distribution detail, its available. |
Closing in favor of #630 |
While listening to the TC meeting today, I had a few thoughts on versioning. Someone in IRC suggested writing an Issue.
My thoughts are that there should be a stable version, ex 1.0.2, 1.0.3 with current V8 release, then a -beta channel tracking latest V8
Such as:
IOJS: V8
1.1.x: 41
1.2.x: 42
etc
The text was updated successfully, but these errors were encountered: