Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit df8ef7f

Browse files
author
Alan Shaw
authored
refactor: improvements to the release process (#2408)
License: MIT Signed-off-by: Alan Shaw <[email protected]>
1 parent 46a80cb commit df8ef7f

File tree

4 files changed

+275
-66
lines changed

4 files changed

+275
-66
lines changed

RELEASE.md

-66
This file was deleted.

doc/EARLY_TESTERS.md

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Early Testers Programme
2+
3+
## What is it?
4+
5+
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.
6+
7+
## What are the expectations?
8+
9+
Members of the early tester program are expected to work closely with us to:
10+
11+
* Provide high quality, actionable feedback.
12+
* Work directly with us to debug regressions in the release.
13+
* Help ensure a rock-solid, timely release.
14+
15+
We will ask early testers to participate at two points in the process:
16+
17+
* 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:
18+
- Running integration tests against the release candidate.
19+
- Running simulations/benchmarks on the release candidate.
20+
- Manually testing the release candidate to check for regressions.
21+
* 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.
22+
23+
## Who has signed up?
24+
25+
No early testers volunteers yet!
26+
27+
## How to sign up?
28+
29+
Simply submit a PR to this document by adding your project name and contact.

doc/RELEASE_ISSUE_TEMPLATE.md

+126
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# Release Template
2+
3+
> short tl;dr; of the release
4+
5+
# 🗺 What's left for release
6+
7+
<List of items with PRs and/or Issues to be considered for this release>
8+
9+
# 🚢 Estimated shipping date
10+
11+
<Date this release will ship on if everything goes to plan (week beginning...)>
12+
13+
# 🔦 Highlights
14+
15+
<Top highlights for this release>
16+
17+
# 🏗 API Changes
18+
19+
<Any API changes breaking or otherwise that people should know of>
20+
21+
# ✅ Release Checklist
22+
23+
- [ ] **Stage 0 - Automated Testing**
24+
- [ ] 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.
25+
- [ ] Automated Testing (already tested in CI) - Ensure that all tests are passing, this includes:
26+
- [ ] unit/functional/integration/e2e
27+
- [ ] interop
28+
- [ ] sharness
29+
- [ ] **Stage 1 - Internal Testing**
30+
- [ ] Publish a release candidate to npm
31+
```sh
32+
# Clean out node_modules and re-install dependencies
33+
# (Ensures you have the latest versions for the browser build)
34+
rm -rf node_modules package-lock.json
35+
npm install
36+
37+
# Minor prerelease (e.g. 0.33.1 -> 0.34.0-rc.0)
38+
npx aegir release --type preminor --preid rc --dist-tag next
39+
40+
# Increment prerelease (e.g. 0.34.0-rc.0 -> 0.34.0-rc.1)
41+
npx aegir release --type prerelease --preid rc --dist-tag next
42+
```
43+
- Network Testing:
44+
- test lab things - TBD
45+
- Infrastructure Testing:
46+
- TBD
47+
- [ ] IPFS Application Testing - Run the tests of the following applications:
48+
- [ ] [webui](https://github.com/ipfs-shipyard/ipfs-webui)
49+
- [ ] [ipfs-desktop](https://github.com/ipfs-shipyard/ipfs-desktop)
50+
- [ ] [ipfs-companion](https://github.com/ipfs-shipyard/ipfs-companion)
51+
- [ ] [npm-on-ipfs](https://github.com/ipfs-shipyard/npm-on-ipfs)
52+
- [ ] [ipfs-pubsub-room](https://github.com/ipfs-shipyard/ipfs-pubsub-room)
53+
- [ ] [peer-base](https://github.com/peer-base/peer-base)
54+
- [ ] [service-worker-gateway](https://github.com/ipfs-shipyard/service-worker-gateway)
55+
- [ ] **Stage 2 - Community Dev Testing**
56+
- [ ] 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.
57+
- [ ] Reach out on IRC for additional early testers.
58+
- [ ] Run tests available in the following repos with the latest RC:
59+
- [ ] [ipfs-log](https://github.com/orbitdb/ipfs-log)
60+
- [ ] [orbit-db](https://github.com/orbitdb/orbit-db)
61+
- [ ] **Stage 3 - Community Prod Testing**
62+
- [ ] Documentation
63+
- [ ] Ensure that [README.md](https://github.com/ipfs/js-ipfs/tree/master/README.md) is up to date
64+
- [ ] Ensure that all the examples run without problems:
65+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-add-readable-stream
66+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-browserify
67+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-mfs
68+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-parceljs
69+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-readablestream
70+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-script-tag
71+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-video-streaming
72+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-vue
73+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/browser-webpack
74+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying
75+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/custom-ipfs-repo
76+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/custom-libp2p
77+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/exchange-files-in-browser
78+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/explore-ethereum-blockchain
79+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/ipfs-101
80+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/run-in-electron
81+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/running-multiple-nodes
82+
- [ ] https://github.com/ipfs/js-ipfs/tree/master/examples/traverse-ipld-graphs
83+
- [ ] Update [js.ipfs.io](https://js.ipfs.io) examples to use the latest js-ipfs
84+
- [ ] 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.
85+
- [ ] Invite the wider community (link to the release issue):
86+
- [ ] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements)
87+
- [ ] Twitter
88+
- [ ] IRC
89+
- [ ] **Stage 4 - Release**
90+
- [ ] 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).
91+
- [ ] Publish to npm:
92+
```sh
93+
# Clean out node_modules and re-install dependencies
94+
# (Ensures you have the latest versions for the browser build)
95+
rm -rf node_modules package-lock.json
96+
npm install
97+
98+
# lint, build, test, tag, publish
99+
npm run release-minor
100+
```
101+
- [ ] 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)
102+
- [ ] Broadcasting (link to blog post)
103+
- [ ] Twitter
104+
- [ ] IRC
105+
- [ ] [Reddit](https://reddit.com/r/ipfs)
106+
- [ ] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements)
107+
- [ ] Announce it on the [IPFS Users Mailing List](https://groups.google.com/forum/#!forum/ipfs-users)
108+
- [ ] Copy release notes to the [GitHub Release description](https://github.com/ipfs/js-ipfs/releases)
109+
110+
# ❤️ Huge thank you to everyone that made this release possible
111+
112+
<Generated contributor list>
113+
114+
# 🙌🏽 Want to contribute?
115+
116+
Would you like to contribute to the IPFS project and don't know how? Well, there are a few places you can get started:
117+
118+
- 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)
119+
- 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
120+
- 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
121+
- Join the discussion at https://discuss.ipfs.io/ and help users finding their answers.
122+
- Join the [🚀 IPFS Core Implementations Weekly Sync 🛰](https://github.com/ipfs/team-mgmt/issues/992) and be part of the action!
123+
124+
# ⁉️ Do you have questions?
125+
126+
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.

doc/releases.md

+120
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# Releases
2+
3+
## Table of Contents
4+
5+
- [Release Philosophy](#release-philosophy)
6+
- [Release Flow](#release-flow)
7+
- [Stage 0 - Automated Testing](#stage-0---automated-testing)
8+
- [Stage 1 - Internal Testing](#stage-1---internal-testing)
9+
- [Stage 2 - Community Dev Testing](#stage-2---community-dev-testing)
10+
- [Stage 3 - Community Prod Testing](#stage-3---community-prod-testing)
11+
- [Stage 4 - Release](#stage-4---release)
12+
- [Release Cycle](#release-cycle)
13+
- [Patch Releases](#patch-releases)
14+
- [Performing a Release](#performing-a-release)
15+
- [Release Version Numbers](#release-version-numbers)
16+
- [Pre-Releases and Release Candidates](#pre-releases-and-release-candidates)
17+
18+
## Release Philosophy
19+
20+
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_<sup>[1]</sup> that have IPFS running in production.
21+
22+
We might expand the six week release schedule in case of:
23+
24+
- No new updates to be added
25+
- In case of a large community event that takes the core team availability away (e.g. IPFS Conf, Dev Meetings, IPFS Camp, etc.)
26+
27+
## Release Flow
28+
29+
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<sup>[2]</sup> changes during the process, we start over at stage 0.
30+
31+
![js-ipfs release flow cartoon](https://ipfs.io/ipfs/QmU5pwcGh38DqzLy3rK8GAHuWm2kK87oGqDAtqZYWhxjab)
32+
33+
### Stage 0 - Automated Testing
34+
35+
At this stage, we expect _all_ automated tests (unit, functional, integration, interop, testlab, performance, etc.) to pass.
36+
37+
### Stage 1 - Internal Testing
38+
39+
At this stage, we'll:
40+
41+
1. Start a partial-rollout to our own infrastructure.
42+
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.
43+
44+
**Goals:**
45+
46+
1. Make sure we haven't introduced any obvious regressions.
47+
2. Test the release in an environment we can monitor and easily roll back (i.e. our own infra).
48+
49+
### Stage 2 - Community Dev Testing
50+
51+
At this stage, we'll announce the impending release to the community and ask for pre-release testers.
52+
53+
**Goal:**
54+
55+
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.
56+
57+
### Stage 3 - Community Prod Testing
58+
59+
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.
60+
61+
**Goals:**
62+
63+
1. Test the release in some production environments with heavy workloads.
64+
2. Partially roll-out an upgrade to see how it affects the network.
65+
3. Retain the ability to ship last-minute fixes before the final release.
66+
67+
### Stage 4 - Release
68+
69+
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).
70+
71+
## Release Cycle
72+
73+
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.
74+
75+
### Patch Releases
76+
77+
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.
78+
79+
Patch releases will usually follow a compressed release cycle and should take 2-3 days. In a patch release:
80+
81+
1. Automated and internal testing (stage 0 and 1) will be compressed into a few hours - ideally less than a day.
82+
2. Stage 2 will be skipped.
83+
3. Community production testing will be shortened to 1-2 days of opt-in testing in production (early testers can choose to pass).
84+
85+
Some patch releases, especially ones fixing one or more complex bugs, may undergo the full release process.
86+
87+
## Performing a Release
88+
89+
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.
90+
91+
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.
92+
93+
## Release Version Numbers
94+
95+
js-ipfs is currently pre-1.0. In semver terms this means [anything may change at any time](https://semver.org/#spec-item-4).
96+
97+
However, pre-1.0 js-ipfs reserves MINOR version increments for BREAKING CHANGES _and_ feature additions and PATCH version increments for bug fixes.
98+
99+
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.
100+
101+
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.
102+
103+
### Pre-Releases and Release Candidates
104+
105+
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.
106+
107+
Pre-release version numbers take the form `x.y.z-pre.n`.
108+
109+
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.
110+
111+
Following any pre-releases, at least one release candidate will be published during stage 1/2.
112+
113+
Release candidate version numbers take the form `x.y.z-rc.n`.
114+
115+
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.
116+
117+
---
118+
119+
- <sup>**[1]**</sup> - _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)
120+
- <sup>**[2]**</sup> - 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.

0 commit comments

Comments
 (0)