Let's head north, welcome to Septentrion!
This contributing guide is trying to avoid common pitfalls, but the project development environment is quite common. If it's not your first rodeo, here's a TL;DR:
$ sudo apt install postgresql-client
$ docker-compose up -d
$ export PGDATABASE=septentrion PGHOST=localhost PGUSER=postgres PGPASSWORD=password
$ createdb
$ scripts/bootstrap
$ scripts/tests
$ scripts/lint
$ scripts/docs
This project uses Poetry, pre-commit. We recommand installing those with
pipx. You will need a PostgreSQL
database, which you can either setup from
docker-compose or set up on your own (e.g. with pg_virtualenv
).
There are multiple ways of interacting with the project.
The development database can be launched using docker with a single command. The PostgreSQL database we used is a fresh standard out-of-the-box database on the latest stable version.
$ sudo apt install postgresql-client # debian
$ docker-compose up -d
$ export PGDATABASE=septentrion PGHOST=localhost PGUSER=postgres PGPASSWORD=password
$ createdb
The bootstrap
script will install poetry
and pre-commit
through pipx
for you. If pipx
is not installed, it will be added too.
$ scripts/bootstrap
$ scripts/tests
$ scripts/lint
$ scripts/docs
Please inspect those scripts, you'll see that they are very short. You're free to use the command they describe directly, there's nothing wrong in that.
Use poetry. Look at poetry env use python3.X
if you want to work on a specific
Python version.
Running poetry run
takes a good second or more. If you want to speed up thing,
create a shell in your virtual environment:
$ poetry shell
From here, you can launch commands directly, such as pytest
Build with:
$ scripts/docs
$ python -m webbrowser docs/_build/html/index.html
Run spell checking on the documentation (optional):
$ sudo apt install enchant
$ scripts/docs-spelling
Because of outdated software and version incompatibilities, spell checking is not checked in the CI, and we don't require people to run it in their PR. Though, it's always a nice thing to do. Feel free to include any spell fix in your PR, even if it's not related to your PR (but please put it in a dedicated commit).
If you need to add words to the spell checking dictionary, it's in
docs/spelling_wordlist.txt
. Make sure the file is alphabetically sorted.
If Sphinx's console output is localized and you would rather have it in English,
use the environment variable LC_ALL=C.utf-8
(either exported or attached to the
tox
process)
You're invited to hack around! We have set up those tools to ease usual developpement
but we're always doing our best so that you can remove the top layers and work
the way you prefer. For example: you can use pytest
or black
as-is, without
all the tools. It's even recommanded to remove layers when things become complicated.
The base commands are in the scripts/
folder.
With a running database:
(venv) $ export SEPTENTRION_MIGRATIONS_ROOT=example_migrations
(venv) $ septentrion migrate
There should be an active Release Draft with the changelog in GitHub releases. Make relevant edits to the changelog. Click on Release, that's it, the rest is automated.
When creating the release, GitHub will save the release info and create a tag with the
provided version. The new tag will be seen by GitHub Actions, which will then create a
wheel (using the tag as version number, thanks to our setup.py
), and push it to PyPI
(using the new API tokens). That tag should also trigger a ReadTheDocs build, which will
read GitHub releases which will write the changelog in the published documentation.
Note
If you need to edit the name or body of a release in the GitHub UI, don't forget to also rebuild the stable and latest doc on readthedocs.