CI
Service providers
Continuous integration testing is handled by GitHub Actions and the generous CircleCI service.
Configurable CI Variables
This section documents environment variables used across CI workflows to ensure consistency and simplify maintenance.
Python Version Variables
To standardize Python version management across all CI workflows, we use a set of environment variables defined at the top of each workflow file. This approach centralizes version definitions while maintaining separation between workflows, making future updates easier and ensuring consistency.
Standard Python Version Variables
Variable |
Purpose |
Example Value |
|---|---|---|
|
The default Python version used for single-version jobs |
|
|
Oldest/minimum Python version for cross-python portability testing |
|
|
Additional Python version for coverage testing |
|
|
Future/experimental Python version for optional testing |
|
Usage Examples
Setting up Python with the default version
- uses: actions/setup-python@v5
with:
python-version: "${{ vars.PYTHON_DEFAULT }}"
Using matrix strategy for multi-version testing
jobs:
test:
strategy:
fail-fast: false
matrix:
python-version: ["${{ vars.PYTHON_DEFAULT }}", "${{ vars.PYTHON_EXPERIMENTAL }}"]
steps:
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
Testing
[!IMPORTANT] Testing is initiated with the bash command:
make test-pytestor justmake testand can be reset before and after with:make cleanandmake purge
You can find all the testing code in the aptly named tests/ directory.
Unit-testing is primarily done with the
unittestframework.Functional testing is done via additional checks, including an end-to-end check invoking an actual pair of processes to test that
SAYandHEARindeed work together.
MATs
Minimal acceptance testing is run across multiple versions of Python to ensure stable behavior across a wide range of environments. MATs are also automated as part of the CI processes, and run for each push to the repository. Feature development and non-security related bug fixes are done on development branches and then merged into the default branch (master) for further integration testing. This ensures the release branch (stable) remains acceptable for production use.
Linting
The Multicast project uses CI/CD to ensure all files, including code, configurations, and
documentation, are linted before publishing releases. This is automatically triggered by
pull requests during the project’s release workflow, namely before merging anything to the
branch master.
Linting Badges
As a Dependency, Testing
[!TIP] In a rush to get this module working? Then try using this in your own test workflow
#cd /MY-AWESOME-DEV-PATH/multicast || git clone ...
make clean ; # cleans up from any previous tests hopefully
make test ; # runs the tests
make clean ; # cleans up for next test
[!TIP] Use PEP8 to check python code style? Great! Try this:
make clean ; # cleans up from any previous tests hopefully
make test-style ; # runs the project's tests for style
make clean ; # cleans up for next test