125 lines
3.6 KiB
YAML
125 lines
3.6 KiB
YAML
name: Test
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
types:
|
|
- opened
|
|
- synchronize
|
|
workflow_dispatch:
|
|
inputs:
|
|
debug_enabled:
|
|
description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
|
|
required: false
|
|
default: 'false'
|
|
schedule:
|
|
# cron every week on monday
|
|
- cron: "0 0 * * 1"
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
python-version:
|
|
- "3.7"
|
|
- "3.8"
|
|
- "3.9"
|
|
- "3.10"
|
|
- "3.11"
|
|
- "3.12"
|
|
pydantic-version:
|
|
- pydantic-v1
|
|
- pydantic-v2
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
# Allow debugging with tmate
|
|
- name: Setup tmate session
|
|
uses: mxschmitt/action-tmate@v3
|
|
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }}
|
|
with:
|
|
limit-access-to-actor: true
|
|
- uses: actions/cache@v4
|
|
id: cache
|
|
with:
|
|
path: ${{ env.pythonLocation }}
|
|
key: ${{ runner.os }}-python-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml', 'requirements-tests.txt') }}-v01
|
|
- name: Install Dependencies
|
|
if: steps.cache.outputs.cache-hit != 'true'
|
|
run: pip install -r requirements-tests.txt
|
|
- name: Install Pydantic v1
|
|
if: matrix.pydantic-version == 'pydantic-v1'
|
|
run: pip install --upgrade "pydantic>=1.10.0,<2.0.0"
|
|
- name: Install Pydantic v2
|
|
if: matrix.pydantic-version == 'pydantic-v2'
|
|
run: pip install --upgrade "pydantic>=2.0.2,<3.0.0" "typing-extensions==4.6.1"
|
|
- name: Lint
|
|
# Do not run on Python 3.7 as mypy behaves differently
|
|
if: matrix.python-version != '3.7' && matrix.pydantic-version == 'pydantic-v2'
|
|
run: bash scripts/lint.sh
|
|
- run: mkdir coverage
|
|
- name: Test
|
|
run: bash scripts/test.sh
|
|
env:
|
|
COVERAGE_FILE: coverage/.coverage.${{ runner.os }}-py${{ matrix.python-version }}
|
|
CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }}
|
|
- name: Store coverage files
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: coverage-${{ matrix.python-version }}-${{ matrix.pydantic-version }}
|
|
path: coverage
|
|
include-hidden-files: true
|
|
|
|
coverage-combine:
|
|
needs:
|
|
- test
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.12'
|
|
|
|
- name: Get coverage files
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
pattern: coverage-*
|
|
path: coverage
|
|
merge-multiple: true
|
|
|
|
- run: pip install coverage[toml]
|
|
|
|
- run: ls -la coverage
|
|
- run: coverage combine coverage
|
|
- run: coverage report
|
|
- run: coverage html --title "Coverage for ${{ github.sha }}"
|
|
|
|
- name: Store coverage HTML
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: coverage-html
|
|
path: htmlcov
|
|
include-hidden-files: true
|
|
|
|
# https://github.com/marketplace/actions/alls-green#why
|
|
alls-green: # This job does nothing and is only used for the branch protection
|
|
if: always()
|
|
needs:
|
|
- coverage-combine
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Decide whether the needed jobs succeeded or failed
|
|
uses: re-actors/alls-green@release/v1
|
|
with:
|
|
jobs: ${{ toJSON(needs) }}
|