Thorough tests #411
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# The thorough tests run only on the main branch after everything is merged, | |
# and regularly by time —- on order to detect bugs and incompatibility with | |
# the new versions of freshly released software (e.g. K8s, K3s, Python libs). | |
# The first part fully includes the CI workflow, with more versions of K3d/K3s. | |
# The second part is unique to the thorough tests. | |
name: Thorough tests | |
on: | |
push: | |
branches: | |
- main | |
- release/** | |
schedule: | |
- cron: "13 3 * * 6" | |
workflow_dispatch: {} | |
jobs: | |
linters: | |
name: Linting and static analysis | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 5 # usually 1-2, rarely 3 mins (because of installations) | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: "3.12" | |
- run: pip install -r requirements.txt | |
- run: pre-commit run --all-files | |
- run: mypy kopf --strict | |
- run: | | |
# Mypying the examples | |
exit_codes=0 | |
for d in $(find examples -maxdepth 1 -mindepth 1 -type d) | |
do | |
echo "Checking ${d}" | |
mypy $d | |
exit_codes=$[${exit_codes} + $?] | |
done | |
exit ${exit_codes} | |
unit-tests: | |
strategy: | |
fail-fast: false | |
matrix: | |
install-extras: [ "", "full-auth" ] | |
python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ] | |
include: | |
- install-extras: "uvloop" | |
python-version: "3.12" | |
name: Python ${{ matrix.python-version }} ${{ matrix.install-extras }} | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 5 # usually 2-3 mins | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- run: pip install -r requirements.txt | |
- run: pip install -e .[${{ matrix.install-extras }}] | |
if: ${{ matrix.install-extras }} | |
- run: pytest --color=yes --timeout=2 --cov=kopf --cov-branch | |
- name: Publish coverage to Coveralls.io | |
if: success() | |
run: coveralls --service=github | |
env: | |
GITHUB_TOKEN: ${{ secrets.github_token }} | |
continue-on-error: true | |
- name: Publish coverage to CodeCov.io | |
uses: codecov/codecov-action@v3 | |
if: success() | |
env: | |
PYTHON: ${{ matrix.python-version }} | |
with: | |
flags: unit | |
env_vars: PYTHON | |
continue-on-error: true | |
# Only the core functionality is tested: no e2e or functional tests (for simplicity). | |
# No coverage: PyPy performs extremely poorly with tracing/coverage (13 mins vs. 3 mins). | |
# Extra time: 2-3 mins for building the dependencies (since no binary wheels are available). | |
# Extra time: PyPy is good with JIT for repetitive code; tests are too unique for JIT. | |
pypy-tests: | |
strategy: | |
fail-fast: false | |
matrix: | |
install-extras: [ "", "full-auth" ] | |
python-version: [ "pypy-3.8", "pypy-3.9", "pypy-3.10" ] | |
name: Python ${{ matrix.python-version }} ${{ matrix.install-extras }} | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 10 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- run: sudo apt-get update && sudo apt-get install libxml2-dev libxslt-dev | |
- run: pip install wheel | |
- run: pip install -r requirements.txt | |
- run: pip install -e .[${{ matrix.install-extras }}] | |
if: ${{ matrix.install-extras }} | |
- run: pytest --color=yes --timeout=2 --no-cov | |
functional: | |
strategy: | |
fail-fast: false | |
matrix: | |
k3s: [latest, v1.28, v1.27, v1.26] | |
name: K3s ${{matrix.k3s}} | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 10 # usually 4-5 mins | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: "3.12" | |
- uses: nolar/setup-k3d-k3s@v1 | |
with: | |
version: ${{ matrix.k3s }} | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- run: pip install -r requirements.txt -r examples/requirements.txt | |
- run: pytest --color=yes --timeout=30 --only-e2e | |
full-scale: | |
strategy: | |
fail-fast: false | |
matrix: | |
k8s: [latest, v1.28.5, v1.27.9, v1.26.13] | |
name: K8s ${{matrix.k8s}} | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 10 # usually 4-5 mins | |
env: | |
K8S: ${{ matrix.k8s }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: "3.12" | |
- run: tools/install-minikube.sh | |
- run: pip install -r requirements.txt -r examples/requirements.txt | |
- run: pytest --color=yes --timeout=30 --only-e2e | |
coveralls-finish: | |
name: Finalize coveralls.io | |
needs: [unit-tests, pypy-tests, functional] | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/setup-python@v4 | |
- run: pip install coveralls | |
- run: coveralls --service=github --finish | |
env: | |
GITHUB_TOKEN: ${{ secrets.github_token }} | |
continue-on-error: true |