Example repo: using GitHub Actions for CI/CD for a Python project
This is a minimal repo demonstrating the use of GitHub Actions for Continuous
Integration (CI) & Continous Deployment (CD) for a Python project.
The GitHub Actions are:
- Tests: Automatically unit test code using
unittest
from Python's
standard library. - Code coverage: Generate code coverage reports using
coverage.py. The reports are
automatically uploaded to codecov. The
@codecov-commenter bot adds a comment to PR on code coverage status.
- Lint and format code: Lint using pylint. Check code formatting using
black. Check type hints using
mypy.
- Check docs build: Check Sphinx docs build successfully.
- Deploy docs to GitHub pages: Automatically deploy docs to a
GitHub Pages repo upon
merges to
main
branch. - Upload release to PyPI: Publish the latest version of the package on
PyPI when a new GitHub Release is created.
Each of these actions is stored in a YAML file in the
.github/workflows
directory.
File system structure
TBA...
Push Token for Deploying Docs
Action #5 requires setting up a Personal Access Token with full repo access via
the Developer Settings page. Store this token as an Actions secret under the
name PUSH_TOKEN
in the main repo (i.e. the repo where the docs source code is
held). See more here.
Useful resources on the topic
- mCoding's YouTube video on
using GitHub actions for automated testing (see associated
code repo).
- Alex Damiani's YouTube videos on automated testing
[1],
[2] &
[3] and associated code repos:
[1]
[2], &
[3].
- librosa is a real-world example of
pyproject.toml
, setup.cfg
& setup.py
working together. - Pharmpy uses Actions for building docs
then deploying them to a separate GitHub Pages repo.
- Vinod Kurup's
blog post
on automating PyPI releases with GitHub Actions.