https://github.com/34j/pypackage-template-fork
Project template for a Python Package using Copier. [autoflake, sphinx-autodoc, CC0 support, "and conrtibutors", repo settings, Python 3.8+, venv creation, more Windows friendly] `copier copy --trust "gh:34j/pypackage-template-fork" <name>`
https://github.com/34j/pypackage-template-fork
cookiecutter cookiecutter-template copier copier-template github package package-template poetry poetry-python pypi python
Last synced: 7 months ago
JSON representation
Project template for a Python Package using Copier. [autoflake, sphinx-autodoc, CC0 support, "and conrtibutors", repo settings, Python 3.8+, venv creation, more Windows friendly] `copier copy --trust "gh:34j/pypackage-template-fork" <name>`
- Host: GitHub
- URL: https://github.com/34j/pypackage-template-fork
- Owner: 34j
- License: mit
- Created: 2023-02-20T06:13:11.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-30T17:06:47.000Z (about 1 year ago)
- Last Synced: 2024-10-06T16:23:31.168Z (12 months ago)
- Topics: cookiecutter, cookiecutter-template, copier, copier-template, github, package, package-template, poetry, poetry-python, pypi, python
- Language: Jinja
- Homepage: https://github.com/browniebroke/pypackage-template
- Size: 749 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Python Package Template
Project template for a Python Package using Copier.
## Features
- Project for Python 3.8+.
- Testing with Pytest using Github actions.
- Packaging powered by [poetry]
- Follows the [black] style guide with [flake8] and [isort], [autoflake].
- Comes with [pre-commit] hook config for black, isort, flake8 and [pyupgrade](https://github.com/asottile/pyupgrade).
- Style guide enforced on CI.
- Dependencies kept up to date by [Renovate].
- Follow the [all-contributors] specification.
- Follow to [the conventional commits][conventional-commits] specification.
- Automated releasing using [python-semantic-release][python-semantic-release].
- Documentation configured with Sphinx and [MyST Parser][myst].
- Standardised list of GitHub labels synchronised on push to master using [the labels CLI][pylabels].## Quickstart
```shell
copier copy --trust "gh:34j/pypackage-template-fork"
```Branches/`main`/Branch protection rules
- [x] Allow force pushes
Actions/General/Workflow permissions
- [x] Read and write permissions
Secrets and variables/Actions/Repository secrets
go to [Applications][gh-applications] and set up Renovate
go to [codecov.io][codecov] and copy CODECOV_TOKEN and add it
go to [Read the Docs][rtd-dashboard] and add the project
set up [pre-commit-ci][pre-commit-ci]
### Update
```shell
copier --force update
```## Usage
Generate a new project with:
```shell
copier copy --trust "gh:34j/pypackage-template-fork"
```This will prompt you for a few questions and create new directory with the name you used as project slug.
> _Note:_
> the `--trust` option is required because this template may execute some tasks after generating the project, like initialising the git repo, installing dependencies and so forth. These are all listed in the `copier.yml` of this repo, under the `_tasks` key. They are all optional and safe to run. You can take my word for it, or better, check the code yourself!### Start developing
The project uses [Poetry] for dependencies management and packaging. Make sure you have it installed in your development machine. To install the development dependencies in a virtual environment, type:
```shell
poetry install
```This will also generate a `poetry.lock` file, you should track this file in version control. To execute the test suite, call pytest inside Poetry's virtual environment via `poetry run`:
```shell
poetry run pytest
```Check out the [Poetry] documentation for more information on the available commands.
### GitHub Actions
When you first push to GitHub, it'll start a `ci` GitHub workflow that you can see in the "Actions" tab of your repository. This workflow runs a couple of jobs:
- The `test` job will run your test suite with Pytest against all Python version from 3.8 to 3.11
- A few things will run in the lint job:
- black in check mode
- isort in check mode
- flake8
- pyupgrade for Python 3.8+A `labels` workflow will also run and synchronise the GitHub labels based on the `.github/labels.toml` file.
### Secrets
The workflows need [a few secrets][gh-secrets] to be setup in your GitHub repository:
- `PYPI_TOKEN` to publish releases to [PyPI][pypi]. This one should be created as `release` environment secret.
- `GH_PAT` a [personal access token (PAT) with the `repo` scope][create-pat] for opening pull requests and updating the repository topics. This is used by the `hacktoberfest` workflow.
- `CODECOV_TOKEN` to upload coverage data to [codecov.io][codecov] in the Test workflow (optional for public repos).If you have the GitHub CLI installed and chose to set up GitHub, they will be created with a dummy value.
### Automated release
By following the conventional commits specification, we're able to completely automate versioning and releasing to PyPI. This is handled by the `semantic-release.yml` workflow. It is triggered manually by default, but can be configured to run on every push to your main branch.
Here is an overview of its features:
- Check the commit log since the last release, and determine the next version to be released.
- If no significant change detected, stop here (e.g. just dependencies update).
- Otherwise, bump the version in code locations specified in `setup.cfg`.
- Update the `CHANGELOG.md` file.
- Commit changes.
- Create a git tag.
- Push to GitHub.
- Create a release in GitHub with the changes as release notes.
- Build the source and binary distribution (wheel).
- Upload the sources to PyPI and attach them to the Github release.For more details, check out the [conventional commits website][conventional-commits] and [Python semantic release][python-semantic-release] Github action.
### Pre-commit
The project comes with the config for [pre-commit]. If you're not familiar with it, follow their documentation on how to install it and set it up.
### Documentation
The project assumes that the documentation will be hosted on Read the Docs and written in Markdown with the [MyST parser for Sphinx][myst].
To enable it, you might need to go [into your dashboard][rtd-dashboard] and import the project from Github. Everything else should work out of the box.
### Dependencies update
The project dependencies are kept up to date with [Renovate] which requires [the Github app][renovate-gh-app] to be installed.
The main advantage of Renovate over Dependabot is the auto-merge option, which is configured to automatically merge minor/patch updates with all the CI checks passing. It supports a variety of package managers, including Poetry, GitHub actions and pre-commit hooks which are used by default.
### All contributors
This is a specification that help you highlight every open source contribution in your README. This is easy to maintain as it comes with a GitHub bot to do the updates for you, so more manual updates on the contributors file.
If you never used it before, you will have to [install the Github app][all-contribs-install] and give it access to your repo.
## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Bruno Alla
💻 🤔 📖
Jeff Tsay
💻
34j
💻
Stefan Rado
📖
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
[poetry]: https://python-poetry.org/
[black]: https://github.com/psf/black
[flake8]: https://pypi.org/project/flake8/
[isort]: https://pypi.org/project/isort/
[autoflake]: https://pypi.org/project/autoflake/
[pre-commit]: https://pre-commit.com/
[renovate]: https://docs.renovatebot.com/
[renovate-gh-app]: https://github.com/apps/renovate
[all-contributors]: https://github.com/all-contributors/all-contributors
[conventional-commits]: https://www.conventionalcommits.org
[python-semantic-release]: https://github.com/relekang/python-semantic-release
[myst]: https://myst-parser.readthedocs.io
[pylabels]: https://github.com/hackebrot/labels
[gh-secrets]: https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets
[codecov]: https://codecov.io/
[pypi]: https://pypi.org/
[create-pat]: https://github.com/settings/tokens/new?scopes=repo
[rtd-dashboard]: https://readthedocs.org/dashboard/
[all-contribs-install]: https://allcontributors.org/docs/en/bot/installation
[pre-commit-ci]: https://pre-commit.ci/
[gh-applications]: https://github.com/settings/installations