Development#

Developing python projects associated with git-pull.com all use the same structure and workflow. At a later point these will refer to that website for documentation.

Bootstrap the project#

Install and git and poetry

Clone:

$ git clone https://github.com/vcs-python/vcspull.git
$ cd vcspull

Install packages:

$ poetry install -E "docs test coverage lint format"

Development loop#

Tests#

pytest is used for tests.

Rerun on file change#

via pytest-watcher (works out of the box):

$ make start

via entr(1) (requires installation):

$ make watch_test

Manual (just the command, please)#

$ poetry run py.test

or:

$ make test

pytest options#

PYTEST_ADDOPTS can be set in the commands below. For more information read docs.pytest.com for the latest documentation.

Verbose:

$ env PYTEST_ADDOPTS="-verbose" make start

Drop into pdb on first error:

$ env PYTEST_ADDOPTS="-x -s --pdb" make start

If you have ipython installed:

$ env PYTEST_ADDOPTS="--pdbcls=IPython.terminal.debugger:TerminalPdb" \
    make start

Documentation#

sphinx is used for documentation generation. In the future this may change to docusaurus.

Default preview server: http://localhost:8022

Rerun on file change#

sphinx-autobuild will automatically build the docs, it also handles launching a server, rebuilding file changes, and updating content in the browser:

$ cd docs
$ make start

If doing css adjustments:

$ make design

Rebuild docs on file change (requires entr(1)):

$ cd docs
$ make dev

If not GNU Make / no -J support, use two terminals:

$ make watch
$ make serve

Manual (just the command, please)#

$ cd docs

Build:

$ make html

Launch server:

$ make serve

Linting#

flake8 and mypy run via CI in our GitHub Actions. See the configuration in pyproject.toml and setup.cfg.

flake8#

flake8 provides fast, reliable, barebones styling and linting.

poetry:

$ poetry run flake8

If you setup manually:

$ flake8
$ make flake8
$ make watch_flake8

requires entr(1).

See [flake8] in setup.cfg.

[flake8]
exclude = .*/,.tox,*.egg,src/vcspull/__*__.py,
select = E,W,F,N
max-line-length = 88
# Stuff we ignore thanks to black: https://github.com/ambv/black/issues/429
extend-ignore = E203,W503

mypy#

mypy is used for static type checking.

poetry:

$ poetry run mypy .

If you setup manually:

$ mypy .
$ make mypy
$ make watch_mypy

requires entr(1).

See [tool.mypy] in pyproject.toml.

[tool.mypy]
python_version = 3.9
warn_unused_configs = true

Publishing to PyPI#

As of 0.10, poetry handles virtualenv creation, package requirements, versioning, building, and publishing. Therefore there is no setup.py or requirements files.

Update __version__ in __about__.py and pyproject.toml::

git commit -m 'build(vcspull): Tag v0.1.1'
git tag v0.1.1
git push
git push --tags
poetry build
poetry publish