Workflow¶
This page describes the tooling used during development of this project. It also serves as a reference for the various commands that you would use when working on this project.
Overview¶
This project uses the GitHub Flow for collaboration. The codebase is Python.
flit is used for automating development tasks.
nox is used for automating development tasks.
pre-commit is used for running the linters.
sphinx is used for generating this documentation.
pytest is used for running the automated tests.
Repository Layout¶
The repository layout is pretty standard for a modern pure-Python project.
CODE_OF_CONDUCT.md
LICENSE
README.md
.nox/
– Generated by nox.dist/
– Generated as part of the release process.docs/
– Sources for the documentation.src/
installer/
– Actual source code for the package
tests/
– Automated tests for the package.noxfile.py
– for nox.pyproject.toml
– for packaging and tooling configuration.
Initial Setup¶
To work on this project, you need to have git 2.17+ and Python 3.8+.
Clone this project using git:
git clone https://github.com/pypa/installer.git cd installer
Install the project’s main development dependencies:
pip install nox
You’re all set for working on this project.
Commands¶
Code Linting¶
nox -s lint
Run the linters, as configured with pre-commit.
Testing¶
nox -s test
Run the tests against all supported Python versions, if an interpreter for that version is available locally.
nox -s test-3.9
Run the tests against Python 3.9. It is also possible to specify other supported
Python versions (like 3.12
or pypy3
).
Documentation¶
nox -s docs
Generate the documentation for installer into the build/docs
folder. This
(mostly) does the same thing as nox -s docs-live
, except it invokes
sphinx-build
instead of sphinx-autobuild.
nox -s docs-live
Serve this project’s documentation locally, using sphinx-autobuild. This will open the generated documentation page in your browser.
The server also watches for changes made to the documentation (docs/
), which
will trigger a rebuild. Once the build is completed, server will automagically
reload any open pages using livereload.
Release process¶
Update the changelog.
Update the version number in
__init__.py
.Commit these changes.
Create a signed git tag.
Run
flit publish
.Update the version number in
__init__.py
.Commit these changes.
Push tag and commits.