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¶
Clone:
$ git clone https://github.com/vcs-python/vcspull.git
$ cd vcspull
Install packages:
$ uv sync --all-extras --dev
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)¶
$ uv 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¶
ruff¶
The project uses ruff to handle formatting, sorting imports and linting.
uv:
$ uv run ruff check .
If you setup manually:
$ ruff check .
$ make ruff
$ make watch_ruff
requires entr(1)
.
uv:
$ uv run ruff check . --fix
If you setup manually:
$ ruff check . --fix
ruff format¶
ruff format is used for formatting.
uv:
$ uv run ruff format .
If you setup manually:
$ ruff format .
$ make ruff_format
mypy¶
mypy is used for static type checking.
uv:
$ uv 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
files = [
"src",
"tests",
]
strict = true
Publishing to PyPI¶
uv 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
GitHub Actions will detect the new git tag, and in its own workflow run uv build
and push to PyPI.