Skip to content

PYTHON-1631 Document new release process #488

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 22, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 59 additions & 24 deletions RELEASE.rst
Original file line number Diff line number Diff line change
Expand Up @@ -31,39 +31,74 @@ that changes the major version number.
Doing a Release
---------------

1. Test releases on Python 2.7 and 3.4+ on Windows, Linux and OSX,
with and without the C extensions. It's generally enough to just run the
tests on 2.7, 3.4 and the latest 3.x version with and without the
extensions on a single platform, and then just test any version on the
other platforms as a sanity check. `python setup.py test` will build the
extensions and test. `python tools/clean.py` will remove the extensions,
and then `python setup.py --no_ext test` will run the tests without
them. You can also run the doctests: `python setup.py doc -t`.

2. Add release notes to doc/changelog.rst. Generally just summarize/clarify
1. PyMongo is tested on Evergreen. Ensure the latest commit are passing CI
as expected: https://evergreen.mongodb.com/waterfall/mongo-python-driver.
To test locally, ``python setup.py test`` will build the C extensions and
test. ``python tools/clean.py`` will remove the extensions,
and then ``python setup.py --no_ext test`` will run the tests without
them. You can also run the doctests: ``python setup.py doc -t``.

2. Check Jira to ensure all the tickets in this version have been completed.

3. Add release notes to doc/changelog.rst. Generally just summarize/clarify
the git log, but you might add some more long form notes for big changes.

3. Search and replace the "devN" version number w/ the new version number (see
note above).
4. Search and replace the "devN" version number w/ the new version number (see
note above in `Versioning`_).

5. Make sure version number is updated in setup.py and pymongo/__init__.py

6. Commit with a BUMP version_number message, eg ``git commit -m 'BUMP 3.11.0'``.

7. Tag w/ version_number, eg, ``git tag -a '3.11.0' -m '3.11.0' <COMMIT>``.

4. Make sure version number is updated in setup.py and pymongo/__init__.py
8. Push commit / tag, eg ``git push && git push --tags``.

5. Commit with a BUMP version_number message.
9. Pushing a tag will trigger a release process in Evergreen which builds
wheels and eggs for manylinux, macOS, and Windows. Wait for these jobs to
complete and then download the "Release files" archive from each task. See:
https://evergreen.mongodb.com/waterfall/mongo-python-driver?bv_filter=release

6. Tag w/ version_number
Unpack each downloaded archive so that we can upload the included files. For
the next steps let's assume we unpacked these files into the following paths::

7. Push commit / tag.
$ ls path/to/manylinux
pymongo-<version>-cp27-cp27m-manylinux1_i686.whl
...
pymongo-<version>-cp38-cp38-manylinux2014_x86_64.whl
$ ls path/to/mac/
pymongo-<version>-cp27-cp27m-macosx_10_14_intel.whl
...
pymongo-<version>-py2.7-macosx-10.14-intel.egg
$ ls path/to/windows/
pymongo-<version>-cp27-cp27m-win32.whl
...
pymongo-<version>-cp38-cp38-win_amd64.whl

8. Push source to PyPI: `python setup.py sdist upload`
10. Build the source distribution::

9. Push binaries to PyPI; for each version of python and platform do:`python
setup.py bdist_egg upload`. Probably best to do `python setup.py bdist_egg`
first, to make sure the egg builds properly. We also publish wheels.
`python setup.py bdist_wheel upload`.
$ git clone [email protected]:mongodb/mongo-python-driver.git
$ cd mongo-python-driver
$ git checkout "<release version number>"
$ python3 setup.py sdist

10. Make sure to push a build of the new docs (see the apidocs repo).
This will create the following distribution::

11. Bump the version number to <next version>.dev0 in setup.py/__init__.py,
$ ls dist
pymongo-<version>.tar.gz

11. Upload all the release packages to PyPI with twine::

$ python3 -m twine upload dist/*.tar.gz path/to/manylinux/* path/to/mac/* path/to/windows/*

12. Make sure the new version appears on https://pymongo.readthedocs.io/. If the
new version does not show up automatically, trigger a rebuild of "latest":
https://readthedocs.org/projects/pymongo/builds/

13. Bump the version number to <next version>.dev0 in setup.py/__init__.py,
commit, push.

12. Announce!
14. Publish the release version in Jira.

15. Announce the release on:
https://developer.mongodb.com/community/forums/c/community/release-notes/