Skip to content

a more deliberate release process #1854

Closed
@othiym23

Description

@othiym23

<whining>I'm going to be straight-up emotional for just a second here: this is the second Sunday in the last month where I've woken up to a brewing crisis involving io.js and npm (#1850, #1591). It is incredibly annoying, as well as demotivating, to have to clean up these situations on what should be one of my days off. I try very hard to be a conscientious project lead / OSS maintainer / io.js collaborator, but for human psychological and physiological reasons I need some downtime, and the weekends are that time for me. The suggestions below are offered in the spirit of making it so that I don't have to choose between being responsible to the io.js and npm user communities, and being responsible to myself. Thank you for reading this with that in mind.</whining>

Also, for all of the following, I frame things in terms of npm, but this is just as true of V8 and changes made to Node's own APIs.

About a year ago this time, npm introduced a new release process that included as one of its key features the notion of publishing every new release with a dist-tag of next, and only promoting it to latest after at least a few days (generally a week) so that interested members of the community could use / test it and identify any latent issues with the release. This was done as a reaction to what used to be an all-too-common pattern with Node.js releases, where a new release of Node.js would be followed almost immediately by another due to something messed up inside the version of npm bundled with Node, which was embarrassing and wasteful. This basically hasn't happened since npm's new process was put into place, which I think everybody agrees is a big improvement.
#1850 shows that this only deals with one side of the problem, though. If there's something in a new Node release that makes it incompatible with npm, we can end up putting out versions of Node that render npm unusable, which cripples the release. There's a lot of room for improvement in how npm is tested and integrated with io.js's CI, but even with that situation substantially improved (which a number of us are working on), there's no substitute for real use of the product to give it some real-world smoke-testing.

io.js has a much quicker release cadence than Node.js has had for a while, and this is one of the primary drivers of io.js's quick progress (and is great). New versions come out frequently, and when things break, a new release that fixes them is generally pretty quick to appear. However, because things like Travis pin to the latest version, and many many projects take advantage of this, official io.js releases can magnify issues into an avalanche of issue-tracker and support traffic.

Therefore, I have a few suggestions I'd like to make about how io.js is released:

  1. when upgrading dependencies within Node, they should be included in at least 1 (preferably more) nightly release before an official release is cut (I don't know how widely-used the nightlies are, but this is better than nothing)
  2. to get potential releases in front of more people, it would be great to have some notion of release candidates for "larger" releases (semver-major definitely, semver-minor probably, semver-patch it would be nice but also probably a gratuitous amount of work [ETA: finished incomplete thought])
  3. io.js releases should only happen during the week. I completely understand that for many io.js contributors, the weekend is the only time they have available for OSS / io.js-specific work, which is why I haven't raised this point before. At the same time, many of us are already spending pretty full weeks working on things related to Node – dealing with this is our job, and as such we just need some time off.

Note that these suggestions are orthogonal to adding more / better tests of dependencies, better integration of the tests we do have into CI, acceptance tests, and other prophylaxes intended to improve release quality. All of those things would be great, as would some kind of defined QA process for the project. I still think, however, that Node and npm are both complex and widely-used enough that there's no real substitute for actual, hands-on use to help ensure quality.

Metadata

Metadata

Assignees

No one assigned

    Labels

    discussIssues opened for discussions and feedbacks.metaIssues and PRs related to the general management of the project.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions