Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
141 lines
4.4 KiB
YAML
141 lines
4.4 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"
|
|
|
|
env:
|
|
UV_SYSTEM_PYTHON: 1
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
python-version:
|
|
- "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 }}
|
|
- name: Setup uv
|
|
uses: astral-sh/setup-uv@v5
|
|
with:
|
|
version: "0.4.15"
|
|
enable-cache: true
|
|
cache-dependency-glob: |
|
|
requirements**.txt
|
|
pyproject.toml
|
|
# 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
|
|
- name: Install Dependencies
|
|
run: uv pip install -r requirements-tests.txt
|
|
- name: Install Pydantic v1
|
|
if: matrix.pydantic-version == 'pydantic-v1'
|
|
run: uv pip install --upgrade "pydantic>=1.10.0,<2.0.0"
|
|
- name: Install Pydantic v2
|
|
if: matrix.pydantic-version == 'pydantic-v2'
|
|
run: uv 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 }}-${{ matrix.pydantic-version }}
|
|
CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }}
|
|
# TODO: if removing Smokeshow, and moving only to Codecov, remove this
|
|
# Upload files before running Codecov, as it generates an extra file coverage/coverage.xml, and that breaks coverage-combine
|
|
- name: Store coverage files
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: coverage-${{ matrix.python-version }}-${{ matrix.pydantic-version }}
|
|
path: coverage
|
|
include-hidden-files: true
|
|
- uses: codecov/codecov-action@v5
|
|
with:
|
|
fail_ci_if_error: true
|
|
files: ./coverage.xml
|
|
name: codecov-umbrella
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
verbose: true
|
|
|
|
# TODO: if removing Smokeshow, and moving only to Codecov, remove this
|
|
coverage-combine:
|
|
needs:
|
|
- test
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.12'
|
|
- name: Setup uv
|
|
uses: astral-sh/setup-uv@v5
|
|
with:
|
|
version: "0.4.15"
|
|
enable-cache: true
|
|
cache-dependency-glob: |
|
|
requirements**.txt
|
|
pyproject.toml
|
|
- name: Get coverage files
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
pattern: coverage-*
|
|
path: coverage
|
|
merge-multiple: true
|
|
- name: Install Dependencies
|
|
run: uv pip install -r requirements-tests.txt
|
|
- 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) }}
|