Release process
Tasks that need to happen for a release:
Preparation
- Open release issue with the Release tag and mention all issues and tickets that will go on that release (https://github.com/ipfs-cluster/ipfs-cluster/issues/620). It helps backtrack when things happening from the issues.
- Write the changelog entry for the release (copy from previous) and commit to
branch:
- Summary of what’s happening in the release
- List of features, bugs
- Configuration changes and upgrades notices (note comment at the bottom of the file about how to write @issuelinks and replace them with sed)
- PR to the website with all the necessary documentation changes
- Special attention to documentation changes (/configuration section)
- Special attention to behaviour changes that are described somewhere in the docs
- Add an entry to
newsabout the new release. Explain it for humans. Thank main contributors. - Updaqte the
Updated tp version x.x.xstring
Make a release candidate
- Merge all code that needs to be merged for the release. Double check on
master:
- It builds.
gx deps dupesis empty.- All the dependency tree is pinned (
gx2cluster). ipfs-cluster-servicestarts with a configuration file from the last release just fine.- Depending on what has changed in the release, it might be useful to run a test deployment of cluster and make sure things look fine.
- Make sure to start a peer at least and check that there is no weird log messages on boot.
- Fully clean your repository workspace: there should not be anything in it that is not part of the repository (untracked files).
- Call the
/release.sh 0.x.x-rc1on master:- IPFS daemon must be started before.
- git must be able to sign commits.
gxmust be installed in the system.- It seds and replaces the version numbers in the code, signs and commits the new Release, tags the new Release with an annotated signed tag which includes the full changelog since last stable release, and gx-releases the whole thing (which again, signs the gx-release commit).
- Triple-check all is well. If not, remove tags, reset to
origin/master --hard. git push origin master --tagsNO TURNING BACK FROM THIS POINT.- Pin the new ipfs-cluster gx hash.
- Publish the new release to
dist.ipfs.io:- Keep your cluster repository in master and don’t touch anything in it.
- ipfs daemon must be running.
- Check out
ipfs/distributions. Make a branch. Update theversionsfile and add the new RC (MUST HAVE A NEW LINE AT THE END).make clean->make publish. This will take a while. ipfs object diff /ipns/dist.ipfs.io (tail -n1 versions )should only show changes in cluster folders.- Commit and push the branch, add the
ipfs object diff outputto the PR, wait for travis to be green and merge. - Pin the new dist hash.
- Update DNSSimple entry for
dist.ipfs.ioto the new hash.
- Deploy storage cluster with the new release:
ipfs-cluster-infra/ansiblerepo, update the configurations and runansible.- If configurations changed, you may need to update
ansible-ipfs-clustersubmodule.
- Update the pinbot to the new cluster version:
ipfs/pinbot-ircandgx update ipfs-cluster github.com/ipfs-cluster/ipfs-cluster.- Any
clientAPI changes might need to fix the pinbot code. - Commit and push.
- Deploy the pinbot by updated the ref commit in
ipfs-cluster-infra/ansible.
- Announce the RC to the world via twitter.
Testing
- This is the triple check that things should be working as they should. Most of this testing should have happened locally before making the RC.
- Storage cluster started just fine.
- Pinbot works with the new cluster and in the new pinbot version.
- Test that things that were introduced are actually doing what they should be doing (again).
- Test that bugfixes are actually fixed (again).
- Depending on the introduced changes, let the RC rest for a couple of days.
Make the final release
- Set the right date in the changelog branch. Ensure all issue links are there. Merge.
- Close
Release issue. - Set the right date in the
newspost in the website. - If there have been changes since the RC, double check the same things on master as with RC.
- Fully clean your repo space as with the RC.
- Call
/release.sh 0.x.x. Same subtasks as with the RC. - Publish the new release to
dist.ipfs.io. Same procedure except:- Need to update the
currentfiles to the new version. THEY NEED TO HAVE A NEW LINE AT THE END.
- Need to update the
- Merge the documentation for the website.
- Check that Jenkins actually built the website and published it.
- Pin the new hash.
- Deploy storage cluster with the stable.
- Update the pinbots to the stable.
- Announce to the world.