-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Better support for io.js rapid release cycle #694
Comments
Yep I think that sounds good. Keeping support for all 1.x.x versions sounds imo reasonable. |
That was fast! Its like yesterday they released v1.2.. 😜 See the comment by @kkoopa #627 (comment). As soon as the minor version changes, it signifies a breaking change and requires a binary rebuild. However, I can confirm that our iojs-v1.2 binary for win-x64 is working with iojs-v1.3. For the resolution, I agree that instead of changing the binary names, we should change the install script to fallback to first available version. Here is one way to go about it: where we call the download function, retry with one lesser version in case of 404 and repeat it thrice before giving up. |
@am11 Doesn't a change in a minor version mean that the API has been changed in a backwards-compatible manner? Or is iojs not follwoing http://semver.org/? That was my reasoning behind the comment - that 1.x changes should not break things in most cases. This more fundamental discussion aside, I think this sounds like a good solution 👍 |
The current stable version of node.js is v0.12.0 and the major version hasn't been changed yet. It could be that all changes ever made in node.js are backward compatible but those do not account for the breaking changes presented by v8 and libuv (on which the C++ add-on binaries are dependent upon). |
Oh yeah that is a good point @am11, especially when getting into the land of C/C++ :) |
An alternate suggestion would be to change the version string in the binary path from the compiled version to the lowest supported version i.e.
This essentially translates to
Then use the github contents API to query the directory listing. This makes downloading a compatible binary easy, and makes us future proof for minor changes, compatible changes. |
@xzyfer, I think with that approach, we will be kind of assuring the user that the downloaded binary is compatible. That approach also means extra work: finding lowest compatible version for each io.js binary with all previous versions up to the available tag: in other words I guess it is different than saying "couldn't find the matching binary, lets see if the previous version works". When it stops working due to some breaking change (after say 3 minor iterations), users will complain, and we will release the newer version. Nonetheless, we may use GitHub APIs at some point when addressing #56 with node-pre-gyp, unless we decide to go with (node-pre-gyp recommended) Amazon cloud storage bucket. :) |
This is rather simple since we have the version number, and list of available versions. We simple loop decremting the minor digit. It's exactly the same approach you mentioned |
Then we will implement GH API and on install, query the available releases and download the closest lowest version for forward compatibility. So that will be two network requests per install. With the other approach, there is one network request in best case scenario (versions matched) and two more in worse-case scenario. The point is implementing GH API in node-sass build process to avoid three/four network requests sounds overkill. |
@am11 you may want to look at the original binary naming approach which just used platform + v8 version. |
@nschonni, awesome! It seems like I just tested, the binary that was built with iojs v1.2.0, works with v1.3.0 as well as v1.1.0, as all three have same v8 version. Also, the one that is built with v0.10.31, works with v0.10.36 (but not v0.12 because v8 differs). |
👍 to v8 version |
Request reopen: Why are we using v8 version number instead of
I think So I think we should use |
c:\Users\Adeel\Source\Repos\node-sass>nvmw use iojs-v1.4.1
Now using iojs v1.4.1
c:\Users\Adeel\Source\Repos\node-sass>iojs -p process.versions
{ http_parser: '2.3.0',
node: '1.4.1',
v8: '4.1.0.21',
uv: '1.4.2',
zlib: '1.2.8',
ares: '1.10.0-DEV',
modules: '43',
openssl: '1.0.1k' }
c:\Users\Adeel\Source\Repos\node-sass>nvmw use iojs-v1.5.0
Now using iojs v1.5.0
c:\Users\Adeel\Source\Repos\node-sass>iojs -p process.versions
{ http_parser: '2.3.0',
node: '1.5.0',
v8: '4.1.0.21',
uv: '1.4.2',
zlib: '1.2.8',
ares: '1.10.0-DEV',
modules: '43',
openssl: '1.0.1k' } modules versions remained same. I have tested it and v8 version is most reliable and give us flexibility to maneuver. If you find a real bug in future version, we can reconsider it or just release a new version of node-sass. Note that we already are binding the binaries with node-sass tag release, so duplicate names will not get mixed up across the releases. |
This is correct, iojs 1.4.1 and 1.5.0 should be binary compatible from our point of view. They didn't bump |
@am11 I think |
I didn't know about that either. It does sound like the |
Fixed by c5b4fa6. The new format is |
Any news on a release for this? Thanks. |
+1 :) |
What is interesting: FreeBSD binaries for io.js 1.0.4 (module version 42) and io.js 1.1.0+ (module version 43) differ only by one byte: |
@saper, yes but that bit change require recompilation of node module whenever |
Hi, I'm using node v4.2.1 and i'm getting the |
Use current version of node-sass, v2.1.1 is quite old. |
Io.js 1.3 has been released and is now failing to download the binary.
@am11 I think we should update the install script to be less strict on version mathing for io.js. Their releases more frequently than ours, and are unlikely to have broken older binaries.
I think in the long run it's better for us to assume binaries are good until proven broken (at least for io.js) rather than trying to keep releases in sync.
The text was updated successfully, but these errors were encountered: