DevelopmentΒΆ
Set up the repository with uv:
uv sync
Run the test suite:
uv run pytest
Build the package locally when you need to inspect the distribution artifacts:
uv build
Publishing to PyPI is handled by GitHub Actions. Push release-worthy changes to
main or run the Publish to PyPI workflow manually. The workflow runs
Python Semantic Release to stamp the next version, update uv.lock, create
the Git tag and GitHub Release, build the package with uv build, and upload
the distribution artifacts to PyPI using trusted publishing. Local
uv publish is not part of the release process.
If a release tag already exists but has not been uploaded to PyPI, run the
Publish to PyPI workflow manually and set ref to that tag, such as
v0.1.1. The workflow will check out the tag, build the package, and publish
those artifacts without asking Python Semantic Release to calculate another
version.
Published versions must have matching Git tags in the remote repository so
Python Semantic Release can find the correct baseline. The current release is
0.1.1, so keep v0.1.1 available before running the workflow; without
that tag, it can calculate the next version from an older release point.
Build the documentation locally:
python -m pip install -r docs/requirements.txt
sphinx-build -b html -E docs/source docs/build/html
If the local environment has locale-related Sphinx startup errors, retry with a plain C locale:
LC_ALL=C LANG=C sphinx-build -b html -E docs/source docs/build/html
Read the Docs builds the documentation from the repository using its project
configuration and .readthedocs.yaml. Keep that file in sync with the local
documentation build requirements when dependencies or build settings change.
The Read the Docs project is configured to update only when files under
docs change; that trigger rule is managed in Read the Docs, not in this
repository.
Documentation should describe the actual command-line behavior and Python API in
src/scrape_smith. When a new tool is added, update the CLI reference, add a
tool page, and include API coverage where the public functions are meant to be
used directly.