The release process uses flit
to build the package, Sphinx
to generate documentation,
publishes the documentation to an IPFS server (obtaining an IPFS hash), and then links
the IPFS hash (which varies based on content) to a static IPNS name.
The IPNS name requires a private key, which is controlled by the project owners and not available to the public.
All steps can be completed up through but not including linking the IPFS hash to IPNS.
- On Debian
- Python 3.8+ (or typings will be incomplete)
Install the release tools into your virtual environment:
$ pip install -r tools/release/requirements.txt
Source: tools/release/requirements.txt
Yes, we use IPFS to host our documentation. In case you haven't already you can download it here: https://ipfs.io/docs/install/
For publishing the documentation an IPNS key used only for this task should be generated if there is no such key already:
ipfs key gen --type ed25519 ipfs-http-client
This key will need to be copied to all other servers hosting the IPNS link. Without the private key, other servers can host the IPFS files, but not the IPNS link.
At the time of writing the officially used key is: 12D3KooWEqnTdgqHnkkwarSrJjeMP2ZJiADWLYADaNvUb6SQNyPF
-
Make a GIT commit
- Incrementing the version number in
ipfshttpclient/version.py
- Completing the currently open
CHANGELOG.md
entry
git commit -m "Release version 0.X.Y" ipfshttpclient/version.py CHANGELOG.md
- Incrementing the version number in
-
After the change is merged into master, pull master
-
Tag the GIT commit with the version number using an annotated and signed tag:
git tag --sign -m "Release version 0.X.Y" 0.X.Y
-
Push the new tag
Run:
$ flit build && flit publish
Run:
$ python docs/publish.py ipns-key-id
The command will also print a commandline that may be used to mirror the generated documentation on systems other then the current one.
If you don't have the IPNS private key, you can still exercise the documentation generation and publish process:
$ python docs/publish.py
If you are publishing to an IPFS server that is remote, and protected by an HTTP reverse proxy with TLS and basic authentication, run this instead:
$ PY_IPFS_HTTP_CLIENT_DEFAULT_ADDR=/dns/yourserver.tld/tcp/5001/https PY_IPFS_HTTP_CLIENT_DEFAULT_USERNAME=basicauthuser PY_IPFS_HTTP_CLIENT_DEFAULT_PASSWORD=basicauthpassword python publish.py ipns-key-id