Didactical implementation of PONG as an online multiplayer game, aimed at exemplifying distributed systems
APACHE-2.0 License
A simple template of Python projects, with a rigid file structure, and predisposition for unit testing and release on PyPi.
dpongpy/
)test/
)unittest
setuptools
semantic-release
Overview:
<root directory>
├── dpongpy/ # main package (should be named after your project)
│ ├── __init__.py # python package marker
│ └── __main__.py # application entry point
├── tests/ # test package (should contain unit tests)
├── .github/ # configuration of GitHub CI
│ └── workflows/ # configuration of GitHub Workflows
│ ├── check.yml # runs tests on multiple OS and versions of Python
│ └── deploy.yml # if check succeeds, and the current branch is one of {main, master}, triggers automatic releas on PyPi
├── LICENSE # license file (Apache 2.0 by default)
├── pyproject.toml # project configuration file as prescribed by Poetry
├── renovate.json # configuration of Renovate bot, for automatic dependency updates
├── requirements.txt # only declares a dependency on Poetry. DO NOT EDIT THIS FILE
└── release.config.js # script to release on PyPi, and GitHub via semantic-release
Use this template to create a new GitHub repository, say dpongpy
using_snake_case
)Clone the dpongpy
repository
Open a shell into your local dpongpy
directory and run
./rename-template.sh dpongpy
This will coherently rename the template's project name with the one chosen by you (i.e. dpongpy
, in this example)
Commit & push
Ensure you like the Apache 2.0 License. If you don't, change the content of the LICENSE
file
Ensure the versions-range of Python reported in pyproject.toml
fits the versions you want to support
>= 3.9
.github/workflows/check.yml
Check the Python version and OS tests should be run on in CI, by looking the file .github/workflows/check.yml
Add your runtime, development, and build dependencies to pyproject.toml
Check the other metadata in pyproject.toml
Change the assignee for pull-requests for automatic dependency updates by editing renovate.json
Add your PyPi credentials as secrets of the GitHub repository
PYPI_USERNAME
(resp. PYPI_PASSWORD
) for your username (resp. password)Generate a GitHub token and add it as a secret of the GitHub repository, named RELEASE_TOKEN
Put your main (resp. test) code in dpongpy/
(resp. test/
)
Install Poetry if you don't have it yet
pip install -r requirements.txt
Install the project's dependencies
poetry install
poetry run poe test
Tests are automatically run in CI, on all pushes on all branches. There, tests are executed on multiple OS (Win, Mac, Ubuntu) and on multiple Python versions.
This will execute the __main__.py
file in the dpongpy
package:
python -m dpongpy
or alternatively:
dpongpy
the latter is possible because of the script defined in the pyproject.toml
file.
New versions are automatically released on PyPi via GitHub Actions, when a push is made on the main
or master
branch.
The version number is updated automatically by the semantic-release
tool, which uses the commit messages to infer the type of the release (major, minor, patch).
It is paramount that the commit messages follow the Conventional Commits specification,
in order for semantic-release
to compute version numbers correctly.