142 lines
4.5 KiB
YAML
142 lines
4.5 KiB
YAML
|
name: Test
|
||
|
|
||
|
on:
|
||
|
push:
|
||
|
branches:
|
||
|
- master
|
||
|
pull_request:
|
||
|
types:
|
||
|
- opened
|
||
|
- synchronize
|
||
|
schedule:
|
||
|
# cron every week on monday
|
||
|
- cron: "0 0 * * 1"
|
||
|
|
||
|
jobs:
|
||
|
lint:
|
||
|
runs-on: ubuntu-latest
|
||
|
steps:
|
||
|
- name: Dump GitHub context
|
||
|
env:
|
||
|
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||
|
run: echo "$GITHUB_CONTEXT"
|
||
|
- uses: actions/checkout@v4
|
||
|
- name: Set up Python
|
||
|
uses: actions/setup-python@v5
|
||
|
with:
|
||
|
python-version: "3.11"
|
||
|
# Issue ref: https://github.com/actions/setup-python/issues/436
|
||
|
# cache: "pip"
|
||
|
# cache-dependency-path: pyproject.toml
|
||
|
- uses: actions/cache@v4
|
||
|
id: cache
|
||
|
with:
|
||
|
path: ${{ env.pythonLocation }}
|
||
|
key: ${{ runner.os }}-python-${{ env.pythonLocation }}-pydantic-v2-${{ hashFiles('pyproject.toml', 'requirements-tests.txt', 'requirements-docs-tests.txt') }}-test-v08
|
||
|
- name: Install Dependencies
|
||
|
if: steps.cache.outputs.cache-hit != 'true'
|
||
|
run: pip install -r requirements-tests.txt
|
||
|
- name: Install Pydantic v2
|
||
|
run: pip install "pydantic>=2.0.2,<3.0.0"
|
||
|
- name: Lint
|
||
|
run: bash scripts/lint.sh
|
||
|
|
||
|
test:
|
||
|
runs-on: ubuntu-latest
|
||
|
strategy:
|
||
|
matrix:
|
||
|
python-version:
|
||
|
- "3.12"
|
||
|
- "3.11"
|
||
|
- "3.10"
|
||
|
- "3.9"
|
||
|
- "3.8"
|
||
|
pydantic-version: ["pydantic-v1", "pydantic-v2"]
|
||
|
fail-fast: false
|
||
|
steps:
|
||
|
- name: Dump GitHub context
|
||
|
env:
|
||
|
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||
|
run: echo "$GITHUB_CONTEXT"
|
||
|
- uses: actions/checkout@v4
|
||
|
- name: Set up Python
|
||
|
uses: actions/setup-python@v5
|
||
|
with:
|
||
|
python-version: ${{ matrix.python-version }}
|
||
|
# Issue ref: https://github.com/actions/setup-python/issues/436
|
||
|
# cache: "pip"
|
||
|
# cache-dependency-path: pyproject.toml
|
||
|
- uses: actions/cache@v4
|
||
|
id: cache
|
||
|
with:
|
||
|
path: ${{ env.pythonLocation }}
|
||
|
key: ${{ runner.os }}-python-${{ env.pythonLocation }}-${{ matrix.pydantic-version }}-${{ hashFiles('pyproject.toml', 'requirements-tests.txt', 'requirements-docs-tests.txt') }}-test-v08
|
||
|
- 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 "pydantic>=1.10.0,<2.0.0"
|
||
|
- name: Install Pydantic v2
|
||
|
if: matrix.pydantic-version == 'pydantic-v2'
|
||
|
run: pip install "pydantic>=2.0.2,<3.0.0"
|
||
|
- 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
|
||
|
|
||
|
coverage-combine:
|
||
|
needs: [test]
|
||
|
runs-on: ubuntu-latest
|
||
|
steps:
|
||
|
- name: Dump GitHub context
|
||
|
env:
|
||
|
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||
|
run: echo "$GITHUB_CONTEXT"
|
||
|
- uses: actions/checkout@v4
|
||
|
- uses: actions/setup-python@v5
|
||
|
with:
|
||
|
python-version: '3.8'
|
||
|
# Issue ref: https://github.com/actions/setup-python/issues/436
|
||
|
# cache: "pip"
|
||
|
# cache-dependency-path: pyproject.toml
|
||
|
- 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
|
||
|
|
||
|
# https://github.com/marketplace/actions/alls-green#why
|
||
|
check: # This job does nothing and is only used for the branch protection
|
||
|
if: always()
|
||
|
needs:
|
||
|
- coverage-combine
|
||
|
runs-on: ubuntu-latest
|
||
|
steps:
|
||
|
- name: Dump GitHub context
|
||
|
env:
|
||
|
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||
|
run: echo "$GITHUB_CONTEXT"
|
||
|
- name: Decide whether the needed jobs succeeded or failed
|
||
|
uses: re-actors/alls-green@release/v1
|
||
|
with:
|
||
|
jobs: ${{ toJSON(needs) }}
|