Contributing¶
Dependency management¶
Python dependencies¶
The requirements are listed in /pyproject.toml
. The constraints are relaxed
with the purpose of allowing a3m to be used as a library.
We use uv which pins the requirements in requirements.txt
and
requirements-dev.txt
for our Docker image. We provide a few helpers:
make pip-compile
generates the requirements with the latest versions of dependencies that satisfy the constraints inpyproject.toml
, but does not update versions if they are already satisfied.make pip-upgrade
regenerates the requirements, forcibly upgrading all listed packages to their latest available versions within the constraints.make pip-sync
installs the requirements in your current environment.
Our routine to keep up with the dependencies:
make pip-upgrade
make pip-sync
git add requirements.txt requirements-dev.txt
git commit -m "Update dependencies"
At this point you can also look up new versions beyond our constraints, e.g.:
$ pip list --outdated
Package Version Latest Type
------- ------- ------ -----
Django 4.2.9 5.0.1 wheel
lxml 4.9.4 5.1.0 wheel
urllib3 2.0.7 2.1.0 wheel
Update the constraints in pyproject.toml
as needed, use pip-compile
to
generate the requirements and pip-sync
to update your environment. As you’re
adopting new major versions of the dependencies, please make sure that you
understand how that impacts our project.
pre-commit¶
pre-commit is a framework we use for managing and maintaining pre-commit hooks. The easiest way to discover and apply new updates is to run:
pre-commit autoupdate
Commit the changes and run pre-commit again with:
tox -e pre-commit
Python version¶
There is a pinned version of Python in /.python-version
that we use when
packaging our Docker image and other development-oriented tools. The preference
is to use the latest version available. Currently:
3.12.3
But we aim to support at least a couple of versions, e.g. 3.11 and 3.12 to provide greater flexibility since a3m is also distributed as a Python package serving both as an application and a library. We’re using tox to test against multiple versions of Python. If you want to alter the list of versions we’re testing and supporting, the following files must be considered:
pyproject.toml
describes the minimum version supported (requires-python
), a list of all versions supported (classifiers
) and test environments (under[tool.tox]
).github/workflows/test.yml
lists the testing matrix in CI.
Releases¶
We aim to further enhance and automate our release process.
Please adhere to the following instructions:
Update the
main
branch with the latest version (a3m.__version__
) and the changelog (usescriv collect
to populateCHANGELOG.rst
). Submit these changes through a pull request and merge it once all checks have passed.Confirm that the checks are also passing in
main
.Create and push the git tag, e.g.:
$ git tag v0.7.7 $ git push origin refs/tags/v0.7.7
This should have triggered the publishing workflow. Please confirm that the new version of the package is available on PyPI and that the container image has been published to the GitHub Container Registry.