From 4229a1402c4667ffeea502e71539f52bbcd3d742 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Thu, 29 Aug 2019 17:19:35 +0100 Subject: [PATCH 01/13] feat: improvements to the release process License: MIT Signed-off-by: Alan Shaw --- RELEASE.md | 66 ------------------ doc/EARLY_TESTERS.md | 29 ++++++++ doc/RELEASE_ISSUE_TEMPLATE.md | 122 ++++++++++++++++++++++++++++++++++ doc/releases.md | 109 ++++++++++++++++++++++++++++++ 4 files changed, 260 insertions(+), 66 deletions(-) delete mode 100644 RELEASE.md create mode 100644 doc/EARLY_TESTERS.md create mode 100644 doc/RELEASE_ISSUE_TEMPLATE.md create mode 100644 doc/releases.md diff --git a/RELEASE.md b/RELEASE.md deleted file mode 100644 index c8e9c9ca0d..0000000000 --- a/RELEASE.md +++ /dev/null @@ -1,66 +0,0 @@ -# Release Template - -> short tl;dr; of the release - -# 🗺 What's left for release - -# 🔦 Highlights - -# 🏗 API Changes - -# ✅ Release Checklist - -- Robustness and quality - - [ ] Ensure that all tests are passing, this includes: - - [ ] unit - - [ ] interop - - [ ] sharness - - [ ] Publish a release candidate to npm - ```sh - # Minor prerelease (e.g. 0.33.1 -> 0.34.0-rc.0) - $ npx aegir release --type preminor --preid rc --dist-tag next - - # Increment prerelease (e.g. 0.34.0-rc.0 -> 0.34.0-rc.1) - $ npx aegir release --type prerelease --preid rc --dist-tag next - ``` - - [ ] Run tests of the following projects with the new release: - - [ ] [ipfs-pubsub-room](https://github.com/ipfs-shipyard/ipfs-pubsub-room) - - [ ] [peer-base](https://github.com/peer-base/peer-base) - - [ ] [ipfs-log](https://github.com/orbitdb/ipfs-log) - - [ ] [orbit-db](https://github.com/orbitdb/orbit-db) - - [ ] [service-worker-gateway](https://github.com/ipfs-shipyard/service-worker-gateway) - - [ ] Update js.ipfs.io examples and Service Worker Gateway to use latest js-ipfs -- Documentation - - [ ] Ensure that README.md is up to date - - [ ] Ensure that all the examples run -- Communication - - [ ] Create the release issue - - [ ] Take a snapshot between of everyone that has contributed to this release (including its subdeps in IPFS, libp2p, IPLD and multiformats) using [`name-your-contributors`](https://www.npmjs.com/package/name-your-contributors). Generate a nice markdown list with [this script](https://gist.github.com/alanshaw/5a2d9465c5a05b201d949551bdb1fcc3). - - [ ] Announcements (both pre-release and post-release) - - [ ] Twitter - - [ ] IRC - - [ ] Reddit - - [ ] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements) - - [ ] Announce it on the [IPFS Users mlist](https://groups.google.com/forum/#!forum/ipfs-users) - - [ ] Blog post - - [ ] Copy release notes to the [GitHub Release description](https://github.com/ipfs/js-ipfs/releases) - -# ❤️ Huge thank you to everyone that made this release possible - -In alphabetical order, here are all the humans that contributed to the release: - -- ... - -# 🙌🏽 Want to contribute? - -Would you like to contribute to the IPFS project and don't know how? Well, there are a few places you can get started: - -- Check the issues with the `help wanted` label in the [js-ipfs repo](https://github.com/ipfs/js-ipfs/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) -- Join an IPFS All Hands, introduce yourself and let us know where you would like to contribute - https://github.com/ipfs/team-mgmt/#weekly-ipfs-all-hands -- Hack with IPFS and show us what you made! The All Hands call is also the perfect venue for demos, join in and show us what you built -- Join the discussion at http://discuss.ipfs.io/ and help users finding their answers. -- Join the [🚀 IPFS Core Implementations Weekly Sync 🛰](https://github.com/ipfs/team-mgmt/issues/992) and be part of the action! - -# ⁉️ Do you have questions? - -The best place to ask your questions about IPFS, how it works and what you can do with it is at [discuss.ipfs.io](http://discuss.ipfs.io). We are also available at the `#ipfs` channel on Freenode. diff --git a/doc/EARLY_TESTERS.md b/doc/EARLY_TESTERS.md new file mode 100644 index 0000000000..6fadb8cdc2 --- /dev/null +++ b/doc/EARLY_TESTERS.md @@ -0,0 +1,29 @@ +# Early Testers Programme + +## What is it? + +The early testers programme allows groups using js-ipfs in production to self-volunteer to help test js-ipfs release candidates to ensure that no regressions that might affect production systems make it into the final release. While we invite the _entire_ community to help test releases, members of the early testers program are expected to participate directly and actively in every release. + +## What are the expectations? + +Members of the early tester program are expected to work closely with us to: + +* Provide high quality, actionable feedback. +* Work directly with us to debug regressions in the release. +* Help ensure a rock-solid, timely release. + +We will ask early testers to participate at two points in the process: + +* When js-ipfs enters the second release stage, early testers will be asked to test js-ipfs on non-production infrastructure. This may involve things like: + - Running integration tests against the release candidate. + - Running simulations/benchmarks on the release candidate. + - Manually testing the release candidate to check for regressions. +* When js-ipfs enters the third release stage (soft release), early testers will be asked to partially deploy the release candidate to production infrastructure. Release candidates at this stage are expected to be identical to the final release. However, this stage allows the js-ipfs team to fix any last-minute regressions without cutting an entirely new release. + +## Who has signed up? + +No early testers volunteers yet! + +## How to sign up? + +Simply submit a PR to this document by adding your project name and contact. diff --git a/doc/RELEASE_ISSUE_TEMPLATE.md b/doc/RELEASE_ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..89b96c3217 --- /dev/null +++ b/doc/RELEASE_ISSUE_TEMPLATE.md @@ -0,0 +1,122 @@ +# Release Template + +> short tl;dr; of the release + +# 🗺 What's left for release + + + +# 🔦 Highlights + + + +# 🏗 API Changes + + + +# ✅ Release Checklist + +- [ ] **Stage 0 - Automated Testing** + - [ ] Feature freeze. If any "non-trivial" changes (see the footnotes of [doc/releases.md](https://github.com/ipfs/js-ipfs/tree/master/doc/releases.md) for a definition) get added to the release, uncheck all the checkboxes and return to this stage. + - [ ] Automated Testing (already tested in CI) - Ensure that all tests are passing, this includes: + - [ ] unit/functional/integration/e2e + - [ ] interop + - [ ] sharness +- [ ] **Stage 1 - Internal Testing** + - Network Testing: + - test lab things - TBD + - Infrastructure Testing: + - TBD + - [ ] IPFS Application Testing - Run the tests of the following applications: + - [ ] [webui](https://github.com/ipfs-shipyard/ipfs-webui) + - [ ] [ipfs-desktop](https://github.com/ipfs-shipyard/ipfs-desktop) + - [ ] [ipfs-companion](https://github.com/ipfs-shipyard/ipfs-companion) + - [ ] [npm-on-ipfs](https://github.com/ipfs-shipyard/npm-on-ipfs) + - [ ] [ipfs-pubsub-room](https://github.com/ipfs-shipyard/ipfs-pubsub-room) + - [ ] [peer-base](https://github.com/peer-base/peer-base) + - [ ] [service-worker-gateway](https://github.com/ipfs-shipyard/service-worker-gateway) +- [ ] **Stage 2 - Community Dev Testing** + - [ ] Reach out to the IPFS _early testers_ listed in [doc/EARLY_TESTERS.md](https://github.com/ipfs/js-ipfs/tree/master/doc/EARLY_TESTERS.md) for testing this release (check when no more problems have been reported). If you'd like to be added to this list, please file a PR. + - [ ] Reach out to on IRC for additional early testers. + - [ ] Run tests available in the following repos with the latest beta (check when all tests pass): + - [ ] [ipfs-log](https://github.com/orbitdb/ipfs-log) + - [ ] [orbit-db](https://github.com/orbitdb/orbit-db) +- [ ] **Stage 3 - Community Prod Testing** + - [ ] Documentation + - [ ] Ensure that [CHANGELOG.md](https://github.com/ipfs/go-ipfs/tree/master/CHANGELOG.md) is up to date + - [ ] Ensure that [README.md](https://github.com/ipfs/go-ipfs/tree/master/README.md) is up to date + - [ ] Ensure that all the examples we have produced for go-ipfs run without problems + - [ ] Update HTTP-API Documentation on the Website using https://github.com/ipfs/http-api-docs + - [ ] Invite the IPFS [_early testers_](https://github.com/ipfs/go-ipfs/tree/master/docs/EARLY_TESTERS.md) to deploy the release to part of their production infrastructure. + - [ ] Invite the wider community through (link to the release issue): + - [ ] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements) + - [ ] Twitter + - [ ] IRC +- [ ] **Stage 4 - Release** + - [ ] Final preparation + - [ ] Verify that version string in [`repo/version.go`](https://github.com/ipfs/go-ipfs/tree/master/repo/version.go) has been updated + - [ ] tag commit with vX.Y.Z + - [ ] update release branch to point to release commit (`git merge vX.Y.Z`). + - [ ] Release published + - [ ] to [dist.ipfs.io](https://dist.ipfs.io) + - [ ] to [npm-go-ipfs](https://github.com/ipfs/npm-go-ipfs) + - [ ] to [chocolatey](https://chocolatey.org/packages/ipfs) + - [ ] to [github](https://github.com/ipfs/go-ipfs/releases) + - [ ] Publish a Release Blog post (at minimum, a c&p of this release issue with all the highlights, API changes, link to changelog and thank yous) + - [ ] Broadcasting (link to blog post) + - [ ] Twitter + - [ ] IRC + - [ ] [Reddit](https://reddit.com/r/ipfs) + - [ ] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements) + - [ ] Announce it on the [IPFS Users Mailing List](https://groups.google.com/forum/#!forum/ipfs-users) + + + + + + + + + +- Robustness and quality + + + - [ ] Run tests of the following projects with the new release: + - [ ] [ipfs-pubsub-room](https://github.com/ipfs-shipyard/ipfs-pubsub-room) + - [ ] [peer-base](https://github.com/peer-base/peer-base) + - [ ] [service-worker-gateway](https://github.com/ipfs-shipyard/service-worker-gateway) + - [ ] [ipfs-log](https://github.com/orbitdb/ipfs-log) + - [ ] [orbit-db](https://github.com/orbitdb/orbit-db) + - [ ] Update js.ipfs.io examples and Service Worker Gateway to use latest js-ipfs +- Documentation + - [ ] Ensure that README.md is up to date + - [ ] Ensure that all the examples run +- Communication + - [ ] Create the release issue + - [ ] Take a snapshot of everyone that has contributed to this release (including its subdeps in IPFS, libp2p, IPLD and multiformats) using [`name-your-contributors`](https://www.npmjs.com/package/name-your-contributors). Generate a nice markdown list with [this script](https://gist.github.com/alanshaw/5a2d9465c5a05b201d949551bdb1fcc3). + - [ ] Announcements (both pre-release and post-release) + - [ ] Twitter + - [ ] IRC + - [ ] Reddit + - [ ] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements) + - [ ] Announce it on the [IPFS Users mlist](https://groups.google.com/forum/#!forum/ipfs-users) + - [ ] Blog post + - [ ] Copy release notes to the [GitHub Release description](https://github.com/ipfs/js-ipfs/releases) + +# ❤️ Huge thank you to everyone that made this release possible + + + +# 🙌🏽 Want to contribute? + +Would you like to contribute to the IPFS project and don't know how? Well, there are a few places you can get started: + +- Check the issues with the `help wanted` label in the [js-ipfs repo](https://github.com/ipfs/js-ipfs/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) +- Join an IPFS All Hands, introduce yourself and let us know where you would like to contribute - https://github.com/ipfs/team-mgmt/#weekly-ipfs-all-hands +- Hack with IPFS and show us what you made! The All Hands call is also the perfect venue for demos, join in and show us what you built +- Join the discussion at http://discuss.ipfs.io/ and help users finding their answers. +- Join the [🚀 IPFS Core Implementations Weekly Sync 🛰](https://github.com/ipfs/team-mgmt/issues/992) and be part of the action! + +# ⁉️ Do you have questions? + +The best place to ask your questions about IPFS, how it works and what you can do with it is at [discuss.ipfs.io](http://discuss.ipfs.io). We are also available at the `#ipfs` channel on Freenode. diff --git a/doc/releases.md b/doc/releases.md new file mode 100644 index 0000000000..388e97db01 --- /dev/null +++ b/doc/releases.md @@ -0,0 +1,109 @@ +# Release Flow + +## Table of Contents + +- [Release Philosophy](#release-philosophy) +- [Release Flow](#release-flow) +- [Performing a Release](#performing-a-release) +- [Release Version Numbers](#release-version-numbers) + +## Release Philosophy + +js-ipfs aims to have release every six weeks, two releases per quarter. During these 6 week releases, we go through 4 different stages that gives us the opportunity to test the new version against our test environments (unit, interop, integration), QA in our current production environment, IPFS apps (e.g. Desktop and WebUI) and with our community and _early testers_[1] that have IPFS running in production. + +We might expand the six week release schedule in case of: +- No new updates to be added +- In case of a large community event that takes the core team availability away (e.g. IPFS Conf, Dev Meetings, IPFS Camp, etc.) + +## Release Flow + +js-ipfs releases come in 5 stages designed to gradually roll out changes and reduce the impact of any regressions that may have been introduced. If we need to merge non-trivial[2] changes during the process, we start over at stage 0. + +### Stage 0 - Automated Testing + +At this stage, we expect _all_ automated tests (unit, functional, integration, interop, testlab, performance, etc.) to pass. + +### Stage 1 - Internal Testing + +At this stage, we'll: + +1. Start a partial-rollout to our own infrastructure. +2. Test against applications in the [ipfs](https://github.com/ipfs/) and [ipfs-shipyard](https://github.com/ipfs-shipyard/) organisations and a selection of other hand picked projects. + +**Goal(s):** + +1. Make sure we haven't introduced any obvious regressions. +2. Test the release in an environment we can monitor and easily roll back (i.e. our own infra). + +### Stage 2 - Community Dev Testing + +At this stage, we'll announce the impending release to the community and ask for pre-release testers. + +**Goal(s):** + +Test the release in as many non-production environments as possible. This is relatively low-risk but gives us a _breadth_ of testing internal testing can't. + +### Stage 3 - Community Prod Testing + +At this stage, we consider the release to be "production ready" and will ask the community and our early testers to (partially) deploy the release to their production infrastructure. + +**Goal(s):** + +1. Test the release in some production environments with heavy workloads. +2. Partially roll-out an upgrade to see how it affects the network. +3. Retain the ability to ship last-minute fixes before the final release. + +### Stage 4 - Release + +At this stage, the release is "battle hardened" and ready for wide deployment. A new version is published to npm, announcements are made and a blog post is published to ipfs.io. + +## Release Cycle + +A full release process should take about 3 weeks, a week per stage 1-3. We will start a new process every 6 weeks, regardless of when the previous release landed unless it's still ongoing. + +### Patch Releases + +If we encounter a serious bug in the stable latest release, we will create a patch release based on this release. For now, bug fixes will _not_ be backported to previous releases. + +Patch releases will usually follow a compressed release cycle and should take 2-3 days. In a patch release: + +1. Automated and internal testing (stage 0 and 1) will be compressed into a few hours - ideally less than a day. +2. Stage 2 will be skipped. +3. Community production testing will be shortened to 1-2 days of opt-in testing in production (early testers can choose to pass). + +Some patch releases, especially ones fixing one or more complex bugs, may undergo the full release process. + +## Performing a Release + +The release is managed by the "Lead Maintainer" for js-ipfs. It starts with the opening of an issue containing the content available on the [RELEASE_ISSUE_TEMPLATE](./RELEASE_ISSUE_TEMPLATE.md) not more than **48 hours** after the previous release. + +This issue is pinned and labeled ["release"](https://github.com/ipfs/js-ipfs/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Arelease). When the cycle is due to begin the 5 stages will be followed until the release is done. + +## Release Version Numbers + +js-ipfs is currently pre-1.0. In semver terms this means [anything may change at any time](https://semver.org/#spec-item-4). + +However, js-ipfs currently reserves MINOR version increments for BREAKING CHANGES and/or major feature additions and PATCH version increments for bug fixes or backwards compatible minor feature additions. + +Post 1.x.x (future), MAJOR version number increments will contain BREAKING CHANGES, MINOR version increments will be reserved for new features and PATCH version increments for bug fixes. + +We do not yet retroactively apply fixes to older releases (no Long Term Support releases for now), which means that we always recommend users to update to the latest, whenever possible. + +### Pre-Releases and Release Candidates + +Prior to or during the early stages of a release cycle, js-ipfs may release a pre-release version for users who want to try out the "bleeding edge". This typically happens when a new major feature or breaking change lands in master. When this happens is entirely at the discretion of the Lead Maintainer. + +Pre-release version numbers take the form `x.y.z-pre.n`. + +Where `x`, `y`, and `z` are the usual MAJOR, MINOR and PATCH version numbers and `n` (starting at 0) increments by 1 for every pre-release version that is released. + +Following any pre-releases, at least one release candidate will be published during stage 1/2. + +Release candidate version numbers take the form `x.y.z-rc.n`. + +Where `x`, `y`, and `z` are the usual MAJOR, MINOR and PATCH version numbers and `n` (starting at 0) increments by 1 for every release candidate that is released. + +--- + +- **[1]** - _early testers_ is an IPFS programme in which members of the community can self-volunteer to help test `js-ipfs` Release Candidates. You find more info about it at [EARLY_TESTERS.md](./EARLY_TESTERS.md) +- **[2]** - A non-trivial change is any change that could potentially introduce an issue that could not categorically be caught by automated testing. This is up to the discretion of the Lead Maintainer but the assumption is that every change is non-trivial unless proven otherwise. From d929e467a0e751e00ef20ab2b8a7f590d911d6e4 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Fri, 30 Aug 2019 09:35:45 +0100 Subject: [PATCH 02/13] feat: add cartoon Also fix ToC. License: MIT Signed-off-by: Alan Shaw --- doc/releases.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/releases.md b/doc/releases.md index 388e97db01..3dfc53b819 100644 --- a/doc/releases.md +++ b/doc/releases.md @@ -4,8 +4,16 @@ - [Release Philosophy](#release-philosophy) - [Release Flow](#release-flow) + - [Stage 0 - Automated Testing](#stage-0-automated-testing) + - [Stage 1 - Internal Testing](#stage-1-internal-testing) + - [Stage 2 - Community Dev Testing](#stage-2-community-dev-testing) + - [Stage 3 - Community Prod Testing](#stage-2-community-prod-testing) + - [Stage 4 - Release](#stage-4-release) +- [Release Cycle](#release-cycle) + - [Patch Releases](#patch-releases) - [Performing a Release](#performing-a-release) - [Release Version Numbers](#release-version-numbers) + - [Pre-Releases and Release Candidates](#pre-releases-and-release-candidates) ## Release Philosophy @@ -17,6 +25,8 @@ We might expand the six week release schedule in case of: ## Release Flow +![js-ipfs release flow cartoon](https://ipfs.io/ipfs/QmU5pwcGh38DqzLy3rK8GAHuWm2kK87oGqDAtqZYWhxjab) + js-ipfs releases come in 5 stages designed to gradually roll out changes and reduce the impact of any regressions that may have been introduced. If we need to merge non-trivial[2] changes during the process, we start over at stage 0. ### Stage 0 - Automated Testing From fef01c1c2a798991358b53d33143a0182605b9dc Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Fri, 30 Aug 2019 09:40:56 +0100 Subject: [PATCH 03/13] fix: copy tweaks License: MIT Signed-off-by: Alan Shaw --- doc/releases.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/releases.md b/doc/releases.md index 3dfc53b819..057a5c45c8 100644 --- a/doc/releases.md +++ b/doc/releases.md @@ -25,10 +25,10 @@ We might expand the six week release schedule in case of: ## Release Flow -![js-ipfs release flow cartoon](https://ipfs.io/ipfs/QmU5pwcGh38DqzLy3rK8GAHuWm2kK87oGqDAtqZYWhxjab) - js-ipfs releases come in 5 stages designed to gradually roll out changes and reduce the impact of any regressions that may have been introduced. If we need to merge non-trivial[2] changes during the process, we start over at stage 0. +![js-ipfs release flow cartoon](https://ipfs.io/ipfs/QmU5pwcGh38DqzLy3rK8GAHuWm2kK87oGqDAtqZYWhxjab) + ### Stage 0 - Automated Testing At this stage, we expect _all_ automated tests (unit, functional, integration, interop, testlab, performance, etc.) to pass. @@ -40,7 +40,7 @@ At this stage, we'll: 1. Start a partial-rollout to our own infrastructure. 2. Test against applications in the [ipfs](https://github.com/ipfs/) and [ipfs-shipyard](https://github.com/ipfs-shipyard/) organisations and a selection of other hand picked projects. -**Goal(s):** +**Goals:** 1. Make sure we haven't introduced any obvious regressions. 2. Test the release in an environment we can monitor and easily roll back (i.e. our own infra). @@ -49,7 +49,7 @@ At this stage, we'll: At this stage, we'll announce the impending release to the community and ask for pre-release testers. -**Goal(s):** +**Goal:** Test the release in as many non-production environments as possible. This is relatively low-risk but gives us a _breadth_ of testing internal testing can't. @@ -57,7 +57,7 @@ Test the release in as many non-production environments as possible. This is rel At this stage, we consider the release to be "production ready" and will ask the community and our early testers to (partially) deploy the release to their production infrastructure. -**Goal(s):** +**Goals:** 1. Test the release in some production environments with heavy workloads. 2. Partially roll-out an upgrade to see how it affects the network. From 19a7a5f08f440f239b0333123fc1e68ab13804f8 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Fri, 30 Aug 2019 09:45:40 +0100 Subject: [PATCH 04/13] fix: ToC License: MIT Signed-off-by: Alan Shaw --- doc/releases.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/releases.md b/doc/releases.md index 057a5c45c8..a12b004094 100644 --- a/doc/releases.md +++ b/doc/releases.md @@ -3,12 +3,12 @@ ## Table of Contents - [Release Philosophy](#release-philosophy) -- [Release Flow](#release-flow) - - [Stage 0 - Automated Testing](#stage-0-automated-testing) - - [Stage 1 - Internal Testing](#stage-1-internal-testing) - - [Stage 2 - Community Dev Testing](#stage-2-community-dev-testing) - - [Stage 3 - Community Prod Testing](#stage-2-community-prod-testing) - - [Stage 4 - Release](#stage-4-release) +- [Release Flow](#release-flow-1) + - [Stage 0 - Automated Testing](#stage-0--automated-testing) + - [Stage 1 - Internal Testing](#stage-1--internal-testing) + - [Stage 2 - Community Dev Testing](#stage-2--community-dev-testing) + - [Stage 3 - Community Prod Testing](#stage-2--community-prod-testing) + - [Stage 4 - Release](#stage-4--release) - [Release Cycle](#release-cycle) - [Patch Releases](#patch-releases) - [Performing a Release](#performing-a-release) From f0ab4d3fb5c51e155359238f7da2c463c9e007a5 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Fri, 30 Aug 2019 10:01:51 +0100 Subject: [PATCH 05/13] fix: more tweak License: MIT Signed-off-by: Alan Shaw --- doc/releases.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/releases.md b/doc/releases.md index a12b004094..371a7ce904 100644 --- a/doc/releases.md +++ b/doc/releases.md @@ -1,9 +1,9 @@ -# Release Flow +# Releases ## Table of Contents - [Release Philosophy](#release-philosophy) -- [Release Flow](#release-flow-1) +- [Release Flow](#release-flow) - [Stage 0 - Automated Testing](#stage-0--automated-testing) - [Stage 1 - Internal Testing](#stage-1--internal-testing) - [Stage 2 - Community Dev Testing](#stage-2--community-dev-testing) @@ -20,6 +20,7 @@ js-ipfs aims to have release every six weeks, two releases per quarter. During these 6 week releases, we go through 4 different stages that gives us the opportunity to test the new version against our test environments (unit, interop, integration), QA in our current production environment, IPFS apps (e.g. Desktop and WebUI) and with our community and _early testers_[1] that have IPFS running in production. We might expand the six week release schedule in case of: + - No new updates to be added - In case of a large community event that takes the core team availability away (e.g. IPFS Conf, Dev Meetings, IPFS Camp, etc.) @@ -65,7 +66,7 @@ At this stage, we consider the release to be "production ready" and will ask the ### Stage 4 - Release -At this stage, the release is "battle hardened" and ready for wide deployment. A new version is published to npm, announcements are made and a blog post is published to ipfs.io. +At this stage, the release is "battle hardened" and ready for wide deployment. A new version is published to npm, announcements are made and a blog post is published to [ipfs.io/blog](https://ipfs.io/blog). ## Release Cycle @@ -93,9 +94,9 @@ This issue is pinned and labeled ["release"](https://github.com/ipfs/js-ipfs/iss js-ipfs is currently pre-1.0. In semver terms this means [anything may change at any time](https://semver.org/#spec-item-4). -However, js-ipfs currently reserves MINOR version increments for BREAKING CHANGES and/or major feature additions and PATCH version increments for bug fixes or backwards compatible minor feature additions. +However, js-ipfs follows semver "shifted by one". This means js-ipfs reserves MINOR version increments for BREAKING CHANGES and/or major feature additions and PATCH version increments for bug fixes and _backwards compatible_ minor feature additions. -Post 1.x.x (future), MAJOR version number increments will contain BREAKING CHANGES, MINOR version increments will be reserved for new features and PATCH version increments for bug fixes. +Post `1.x.x` (future), MAJOR version number increments will contain BREAKING CHANGES, MINOR version increments will be reserved for backwards compatible new features and PATCH version increments for bug fixes. We do not yet retroactively apply fixes to older releases (no Long Term Support releases for now), which means that we always recommend users to update to the latest, whenever possible. From ed3b138c9e8f12dabedf2e720f494a9c87cba769 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Fri, 30 Aug 2019 10:36:21 +0100 Subject: [PATCH 06/13] fix: stage 3 link License: MIT Signed-off-by: Alan Shaw --- doc/releases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/releases.md b/doc/releases.md index 371a7ce904..c57a767018 100644 --- a/doc/releases.md +++ b/doc/releases.md @@ -7,7 +7,7 @@ - [Stage 0 - Automated Testing](#stage-0--automated-testing) - [Stage 1 - Internal Testing](#stage-1--internal-testing) - [Stage 2 - Community Dev Testing](#stage-2--community-dev-testing) - - [Stage 3 - Community Prod Testing](#stage-2--community-prod-testing) + - [Stage 3 - Community Prod Testing](#stage-3--community-prod-testing) - [Stage 4 - Release](#stage-4--release) - [Release Cycle](#release-cycle) - [Patch Releases](#patch-releases) From 7a296a7b3f15909910d252c6a39e1e048c7717c8 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Fri, 30 Aug 2019 11:27:36 +0100 Subject: [PATCH 07/13] fix: tweaks and changes to release issue template License: MIT Signed-off-by: Alan Shaw --- doc/RELEASE_ISSUE_TEMPLATE.md | 102 +++++++++++++++++----------------- doc/releases.md | 10 ++-- 2 files changed, 56 insertions(+), 56 deletions(-) diff --git a/doc/RELEASE_ISSUE_TEMPLATE.md b/doc/RELEASE_ISSUE_TEMPLATE.md index 89b96c3217..122d8772da 100644 --- a/doc/RELEASE_ISSUE_TEMPLATE.md +++ b/doc/RELEASE_ISSUE_TEMPLATE.md @@ -23,11 +23,24 @@ - [ ] interop - [ ] sharness - [ ] **Stage 1 - Internal Testing** + - [ ] Publish a release candidate to npm + ```sh + # Clean out node_modules and re-install dependencies + # (Ensures you have the latest versions for the browser build) + rm -rf node_modules package-lock.json + npm install + + # Minor prerelease (e.g. 0.33.1 -> 0.34.0-rc.0) + npx aegir release --type preminor --preid rc --dist-tag next + + # Increment prerelease (e.g. 0.34.0-rc.0 -> 0.34.0-rc.1) + npx aegir release --type prerelease --preid rc --dist-tag next + ``` - Network Testing: - test lab things - TBD - Infrastructure Testing: - TBD - - [ ] IPFS Application Testing - Run the tests of the following applications: + - [ ] IPFS Application Testing - Run the tests of the following applications: - [ ] [webui](https://github.com/ipfs-shipyard/ipfs-webui) - [ ] [ipfs-desktop](https://github.com/ipfs-shipyard/ipfs-desktop) - [ ] [ipfs-companion](https://github.com/ipfs-shipyard/ipfs-companion) @@ -37,70 +50,57 @@ - [ ] [service-worker-gateway](https://github.com/ipfs-shipyard/service-worker-gateway) - [ ] **Stage 2 - Community Dev Testing** - [ ] Reach out to the IPFS _early testers_ listed in [doc/EARLY_TESTERS.md](https://github.com/ipfs/js-ipfs/tree/master/doc/EARLY_TESTERS.md) for testing this release (check when no more problems have been reported). If you'd like to be added to this list, please file a PR. - - [ ] Reach out to on IRC for additional early testers. - - [ ] Run tests available in the following repos with the latest beta (check when all tests pass): + - [ ] Reach out on IRC for additional early testers. + - [ ] Run tests available in the following repos with the latest RC: - [ ] [ipfs-log](https://github.com/orbitdb/ipfs-log) - [ ] [orbit-db](https://github.com/orbitdb/orbit-db) - [ ] **Stage 3 - Community Prod Testing** - [ ] Documentation - - [ ] Ensure that [CHANGELOG.md](https://github.com/ipfs/go-ipfs/tree/master/CHANGELOG.md) is up to date - - [ ] Ensure that [README.md](https://github.com/ipfs/go-ipfs/tree/master/README.md) is up to date - - [ ] Ensure that all the examples we have produced for go-ipfs run without problems - - [ ] Update HTTP-API Documentation on the Website using https://github.com/ipfs/http-api-docs - - [ ] Invite the IPFS [_early testers_](https://github.com/ipfs/go-ipfs/tree/master/docs/EARLY_TESTERS.md) to deploy the release to part of their production infrastructure. - - [ ] Invite the wider community through (link to the release issue): + - [ ] Ensure that [README.md](https://github.com/ipfs/js-ipfs/tree/master/README.md) is up to date + - [ ] Ensure that all the examples run without problems: + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-add-readable-stream + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-browserify + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-mfs + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-parceljs + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-readablestream + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-script-tag + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-video-streaming + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-vue + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-webpack + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/custom-ipfs-repo + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/custom-libp2p + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/exchange-files-in-browser + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/explore-ethereum-blockchain + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/ipfs-101 + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/run-in-electron + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/running-multiple-nodes + - [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/traverse-ipld-graphs + - [ ] Update [js.ipfs.io](https://js.ipfs.io) examples to use the latest js-ipfs + - [ ] Invite the IPFS [_early testers_](https://github.com/ipfs/js-ipfs/tree/master/doc/EARLY_TESTERS.md) to deploy the release to part of their production infrastructure. + - [ ] Invite the wider community (link to the release issue): - [ ] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements) - [ ] Twitter - [ ] IRC - [ ] **Stage 4 - Release** - - [ ] Final preparation - - [ ] Verify that version string in [`repo/version.go`](https://github.com/ipfs/go-ipfs/tree/master/repo/version.go) has been updated - - [ ] tag commit with vX.Y.Z - - [ ] update release branch to point to release commit (`git merge vX.Y.Z`). - - [ ] Release published - - [ ] to [dist.ipfs.io](https://dist.ipfs.io) - - [ ] to [npm-go-ipfs](https://github.com/ipfs/npm-go-ipfs) - - [ ] to [chocolatey](https://chocolatey.org/packages/ipfs) - - [ ] to [github](https://github.com/ipfs/go-ipfs/releases) - - [ ] Publish a Release Blog post (at minimum, a c&p of this release issue with all the highlights, API changes, link to changelog and thank yous) + - [ ] Take a snapshot of everyone that has contributed to this release (including its direct dependencies in IPFS, libp2p, IPLD and multiformats) using [this script](https://gist.github.com/alanshaw/5a2d9465c5a05b201d949551bdb1fcc3). + - [ ] Publish to npm: + ```sh + # Clean out node_modules and re-install dependencies + # (Ensures you have the latest versions for the browser build) + rm -rf node_modules package-lock.json + npm install + + # lint, build, test, tag, publish + npm run release-minor + ``` + - [ ] Publish a blog post to [github.com/ipfs/blog](https://github.com/ipfs/blog) (at minimum, a c&p of this release issue with all the highlights, API changes and thank yous) - [ ] Broadcasting (link to blog post) - [ ] Twitter - [ ] IRC - [ ] [Reddit](https://reddit.com/r/ipfs) - [ ] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements) - [ ] Announce it on the [IPFS Users Mailing List](https://groups.google.com/forum/#!forum/ipfs-users) - - - - - - - - - -- Robustness and quality - - - - [ ] Run tests of the following projects with the new release: - - [ ] [ipfs-pubsub-room](https://github.com/ipfs-shipyard/ipfs-pubsub-room) - - [ ] [peer-base](https://github.com/peer-base/peer-base) - - [ ] [service-worker-gateway](https://github.com/ipfs-shipyard/service-worker-gateway) - - [ ] [ipfs-log](https://github.com/orbitdb/ipfs-log) - - [ ] [orbit-db](https://github.com/orbitdb/orbit-db) - - [ ] Update js.ipfs.io examples and Service Worker Gateway to use latest js-ipfs -- Documentation - - [ ] Ensure that README.md is up to date - - [ ] Ensure that all the examples run -- Communication - - [ ] Create the release issue - - [ ] Take a snapshot of everyone that has contributed to this release (including its subdeps in IPFS, libp2p, IPLD and multiformats) using [`name-your-contributors`](https://www.npmjs.com/package/name-your-contributors). Generate a nice markdown list with [this script](https://gist.github.com/alanshaw/5a2d9465c5a05b201d949551bdb1fcc3). - - [ ] Announcements (both pre-release and post-release) - - [ ] Twitter - - [ ] IRC - - [ ] Reddit - - [ ] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements) - - [ ] Announce it on the [IPFS Users mlist](https://groups.google.com/forum/#!forum/ipfs-users) - - [ ] Blog post - [ ] Copy release notes to the [GitHub Release description](https://github.com/ipfs/js-ipfs/releases) # ❤️ Huge thank you to everyone that made this release possible diff --git a/doc/releases.md b/doc/releases.md index c57a767018..7469ca4d09 100644 --- a/doc/releases.md +++ b/doc/releases.md @@ -4,11 +4,11 @@ - [Release Philosophy](#release-philosophy) - [Release Flow](#release-flow) - - [Stage 0 - Automated Testing](#stage-0--automated-testing) - - [Stage 1 - Internal Testing](#stage-1--internal-testing) - - [Stage 2 - Community Dev Testing](#stage-2--community-dev-testing) - - [Stage 3 - Community Prod Testing](#stage-3--community-prod-testing) - - [Stage 4 - Release](#stage-4--release) + - [Stage 0 - Automated Testing](#stage-0---automated-testing) + - [Stage 1 - Internal Testing](#stage-1---internal-testing) + - [Stage 2 - Community Dev Testing](#stage-2---community-dev-testing) + - [Stage 3 - Community Prod Testing](#stage-3---community-prod-testing) + - [Stage 4 - Release](#stage-4---release) - [Release Cycle](#release-cycle) - [Patch Releases](#patch-releases) - [Performing a Release](#performing-a-release) From 4805832edb8a0cd5313cb2d46584b19a2bea386b Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Fri, 30 Aug 2019 12:17:24 +0100 Subject: [PATCH 08/13] feat: estimated shipping date? License: MIT Signed-off-by: Alan Shaw --- doc/RELEASE_ISSUE_TEMPLATE.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/RELEASE_ISSUE_TEMPLATE.md b/doc/RELEASE_ISSUE_TEMPLATE.md index 122d8772da..b143ab0efd 100644 --- a/doc/RELEASE_ISSUE_TEMPLATE.md +++ b/doc/RELEASE_ISSUE_TEMPLATE.md @@ -6,6 +6,10 @@ +# 🚢 Estimated shipping date + + + # 🔦 Highlights From d2965dc911c7c31187d977b64601af7cb572a752 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Tue, 3 Sep 2019 17:53:37 +0100 Subject: [PATCH 09/13] docs: fix blog url Co-Authored-By: Marcin Rataj --- doc/releases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/releases.md b/doc/releases.md index 7469ca4d09..1509408d5e 100644 --- a/doc/releases.md +++ b/doc/releases.md @@ -66,7 +66,7 @@ At this stage, we consider the release to be "production ready" and will ask the ### Stage 4 - Release -At this stage, the release is "battle hardened" and ready for wide deployment. A new version is published to npm, announcements are made and a blog post is published to [ipfs.io/blog](https://ipfs.io/blog). +At this stage, the release is "battle hardened" and ready for wide deployment. A new version is published to npm, announcements are made and a blog post is published to [blog.ipfs.io](https://blog.ipfs.io). ## Release Cycle From 8680975626fe4efefc06014078f1482fc21cb44d Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Tue, 3 Sep 2019 17:53:54 +0100 Subject: [PATCH 10/13] docs: fix discuss url Co-Authored-By: Marcin Rataj --- doc/RELEASE_ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/RELEASE_ISSUE_TEMPLATE.md b/doc/RELEASE_ISSUE_TEMPLATE.md index b143ab0efd..b29320de79 100644 --- a/doc/RELEASE_ISSUE_TEMPLATE.md +++ b/doc/RELEASE_ISSUE_TEMPLATE.md @@ -118,7 +118,7 @@ Would you like to contribute to the IPFS project and don't know how? Well, there - Check the issues with the `help wanted` label in the [js-ipfs repo](https://github.com/ipfs/js-ipfs/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) - Join an IPFS All Hands, introduce yourself and let us know where you would like to contribute - https://github.com/ipfs/team-mgmt/#weekly-ipfs-all-hands - Hack with IPFS and show us what you made! The All Hands call is also the perfect venue for demos, join in and show us what you built -- Join the discussion at http://discuss.ipfs.io/ and help users finding their answers. +- Join the discussion at https://discuss.ipfs.io/ and help users finding their answers. - Join the [🚀 IPFS Core Implementations Weekly Sync 🛰](https://github.com/ipfs/team-mgmt/issues/992) and be part of the action! # ⁉️ Do you have questions? From 1754255a32dc5ce4994df6b2824ce7aa593f3c2a Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Tue, 3 Sep 2019 17:54:17 +0100 Subject: [PATCH 11/13] docs: fix discuss url again Co-Authored-By: Marcin Rataj --- doc/RELEASE_ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/RELEASE_ISSUE_TEMPLATE.md b/doc/RELEASE_ISSUE_TEMPLATE.md index b29320de79..9fee9127c9 100644 --- a/doc/RELEASE_ISSUE_TEMPLATE.md +++ b/doc/RELEASE_ISSUE_TEMPLATE.md @@ -123,4 +123,4 @@ Would you like to contribute to the IPFS project and don't know how? Well, there # ⁉️ Do you have questions? -The best place to ask your questions about IPFS, how it works and what you can do with it is at [discuss.ipfs.io](http://discuss.ipfs.io). We are also available at the `#ipfs` channel on Freenode. +The best place to ask your questions about IPFS, how it works and what you can do with it is at [discuss.ipfs.io](https://discuss.ipfs.io). We are also available at the `#ipfs` channel on Freenode. From c5b86b2705b137583ea8ead800ac4ed193de88ec Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Wed, 4 Sep 2019 09:36:21 +0100 Subject: [PATCH 12/13] refactor: use MINOR for breaks and features, PATCH for bug fixes License: MIT Signed-off-by: Alan Shaw --- doc/releases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/releases.md b/doc/releases.md index 1509408d5e..ac03194a61 100644 --- a/doc/releases.md +++ b/doc/releases.md @@ -94,7 +94,7 @@ This issue is pinned and labeled ["release"](https://github.com/ipfs/js-ipfs/iss js-ipfs is currently pre-1.0. In semver terms this means [anything may change at any time](https://semver.org/#spec-item-4). -However, js-ipfs follows semver "shifted by one". This means js-ipfs reserves MINOR version increments for BREAKING CHANGES and/or major feature additions and PATCH version increments for bug fixes and _backwards compatible_ minor feature additions. +However, pre-1.0 js-ipfs reserves MINOR version increments for BREAKING CHANGES _and_ feature additions and PATCH version increments for bug fixes. Post `1.x.x` (future), MAJOR version number increments will contain BREAKING CHANGES, MINOR version increments will be reserved for backwards compatible new features and PATCH version increments for bug fixes. From 8af5edc0c469c51fbb3ee7d71fd8f0041d9206a3 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Wed, 4 Sep 2019 09:43:22 +0100 Subject: [PATCH 13/13] refactor: suggest fuzzy shipping date License: MIT Signed-off-by: Alan Shaw --- doc/RELEASE_ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/RELEASE_ISSUE_TEMPLATE.md b/doc/RELEASE_ISSUE_TEMPLATE.md index 9fee9127c9..dd8e7e6a60 100644 --- a/doc/RELEASE_ISSUE_TEMPLATE.md +++ b/doc/RELEASE_ISSUE_TEMPLATE.md @@ -8,7 +8,7 @@ # 🚢 Estimated shipping date - + # 🔦 Highlights