Information for Project Maintainers
This information is for project maintainers. If you are simply contributing to the project, then you don’t need to know this, and you don’t need to perform any of these steps.
Merging into master
Merging into master
uses Git’s default merging mechanism. We don’t use
rebase-merges or squash-merges. Fast-forward merges are allowed, however,
and encouraged when applicable.
Merging should always be performed locally on the maintainer’s system,
and then pushed directly to the master
branch on GitHub. If the merge
was sufficiently complicated that it would be beneficial to run the
GitHub actions again on the merged result, then merge first into a
temporary test branch, make a new pull request from that, and finally
fast-forward master
when the result is acceptable.
Note that updating master
on GitHub does not automatically imply a
release must be made and published to PyPI, but the converse does hold:
releases are only made from the tip of master
.
Making a new release
Making a release is a fairly manual process, but it’s not too onerous and doesn’t happen very often, so there isn’t much impetus to automate it.
Releases are always made from the master
branch. Thus, begin by checking
out the tip of master
from GitHub.
Pre-release checks
The following conditions must be met before the release can be made.
The code is in a releasable state:
unit tests pass,
linting reports no violations, and
the documentation is up to date.
The change log (
CHANGELOG.md
) is up to date.
If necessary, make additional commits on master
until the conditions
are met. The steps that follow assume that the pre-release conditions
are satisfied on the tip of master
.
Increment the version
Incrementing the version is done via a small tagged commit. The information in this section can be summarized succinctly by looking at one of these commits:
git show v0.8.1
We’ll also briefly describe all the steps here.
Select a new version
Make sure to follow PEP-440.
In this example, v0.8
is the old version, and v0.8.1
is the new
version.
Currently, we don’t publish alpha or beta releases to PyPI, with the understanding that prereleases can be checked out directly from GitHub.
Update the version in pyproject.toml
One line is changed:
diff --git a/pyproject.toml b/pyproject.toml
index d079b17..5c42074 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,7 +3,7 @@
[project]
name = "plyfile"
-version = "0.8"
+version = "0.8.1"
description = "PLY file reader/writer"
authors = [
Update CHANGELOG.md
This should be pretty self-explanatory:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 03dba5f..22ee9a5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,8 @@
All notable changes to this project will be documented here.
## [Unreleased]
+
+## [0.8.1] - 2023-03-18
### Changed
- Package metadata management via PDM, rather than `setuptools`.
@@ -117,7 +119,8 @@ All notable changes to this project will be documented here.
- Rudimentary test setup.
- Basic installation script.
-[Unreleased]: https://github.com/dranjan/python-plyfile/compare/v0.8...HEAD
+[Unreleased]: https://github.com/dranjan/python-plyfile/compare/v0.8.1...HEAD
+[0.8.1]: https://github.com/dranjan/python-plyfile/compare/v0.8...v0.8.1
[0.8]: https://github.com/dranjan/python-plyfile/compare/v0.7.4...v0.8
[0.7.4]: https://github.com/dranjan/python-plyfile/compare/v0.7.3...v0.7.4
[0.7.3]: https://github.com/dranjan/python-plyfile/compare/v0.7.2...v0.7.3
A new heading containing a link is added. No content is added.
Make the commit
git add pyproject.toml
git add CHANGELOG.md
git commit -m "Bump version"
The commit message is exactly as above.
Tag the commit
git tag -a v0.8.1
The tag annotation should look like this, with only the 0.8.1
string
changing from version to version:
Version 0.8.1
See CHANGELOG.md for details.
Publish the new version
Prerequisite: generate a API token on PyPI and save it somewhere.
This example will assume the file is saved as token.txt
.
(PyPI no longer supports normal username/password authentication,
so this step must be performed.)
pdm publish -u __token__ -P $(< token.txt)
To use the test server, add the arguments -r testpypi
. Note that
a separate API token will be required, generated from your account
on the test server.
Publish the code to GitHub
git push origin master v0.8.1
(Don’t forget to push both the branch and the tag, as shown above!)