Skip to content

Project metadata for pyproject.toml #11

Project metadata for pyproject.toml

Project metadata for pyproject.toml #11

Workflow file for this run

# NOTES:
# - The map syntax used for matrix is flagged red but actually works
# - This runs everything in Python 3.11, except the fulltest which is also run in 3.8
# - Only coretest and fulltest environments are cached due to space limit
name: Continuous Integration
on:
push:
branches: main
tags: '*'
pull_request:
branches: main
workflow_dispatch:
env:
COVERAGE_OVERALL_THRESH: 70 # threshold for overall coverage check
COVERAGE_INDIVIDUAL_THRESH: 45 # threshold for individual coverage check
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
changelog:
name: "Changelog"
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' }}
steps:
- uses: actions/checkout@v3
- name: Assert Changelog Edit
run: |
git fetch origin main:main
NUM_ADDED=`git diff --numstat main HEAD CHANGELOG.md | cut -d$'\t' -f1`
echo "Changelog differences: $NUM_ADDED"
if [ "$NUM_ADDED" -gt "0" ]; then
echo "SUCCESS"
exit 0
else
echo "ERROR - Nothing has been added to CHANGELOG.md"
exit 1
fi
lint:
strategy:
matrix:
py-version: [ {semantic: '3.11', tox: 'py311'} ]
name: Lint ${{ matrix.py-version.semantic }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
id: setup-python
with:
python-version: ${{ matrix.py-version.semantic }}
- name: Run linting
run: |
pip install tox
tox -e lint-${{ matrix.py-version.tox }}
typecheck:
needs: [changelog, lint]
strategy:
matrix:
py-version: [ {semantic: '3.11', tox: 'py311'} ]
name: Type Check ${{ matrix.py-version.semantic }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
id: setup-python
with:
python-version: ${{ matrix.py-version.semantic }}
- name: Run type check
run: |
pip install tox
tox -e mypy-${{ matrix.py-version.tox }}
audit:
needs: [changelog, lint]
strategy:
matrix:
py-version: [ {semantic: '3.11', tox: 'py311'} ]
name: Audit ${{ matrix.py-version.semantic }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
id: setup-python
with:
python-version: ${{ matrix.py-version.semantic }}
- name: Run pip-audit
run: |
pip install tox
tox -e audit-${{ matrix.py-version.tox }}
coretest:
needs: [typecheck, audit]
strategy:
matrix:
py-version: [ {semantic: '3.8', tox: 'py38'} ]
name: Core Tests ${{ matrix.py-version.semantic }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
id: setup-python
with:
python-version: ${{ matrix.py-version.semantic }}
- uses: actions/cache@v3
with:
path: .tox/coretest-${{ matrix.py-version.tox }}
key: coretest-${{ matrix.py-version.tox }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('tox.ini') }}
- name: Run core tests
run: |
pip install tox
tox -e coretest-${{ matrix.py-version.tox }}
fulltest:
needs: [typecheck, audit]
strategy:
matrix:
py-version: [ {semantic: '3.8', tox: 'py38'}, {semantic: '3.11', tox: 'py311'} ]
name: Full Tests ${{ matrix.py-version.semantic }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
id: setup-python
with:
python-version: ${{ matrix.py-version.semantic }}
- uses: actions/cache@v3
with:
path: .tox/fulltest-${{ matrix.py-version.tox }}
key: fulltest-${{ matrix.py-version.tox }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('tox.ini') }}
- name: Run full tests
run: |
pip install tox
tox -e fulltest-${{ matrix.py-version.tox }} -- --cov-report=xml
- name: "Assert Overall Coverage"
run: |
pip install coverage
coverage report --fail-under=${{ env.COVERAGE_OVERALL_THRESH }}
- name: "Assert Individual Coverage"
shell: bash
run: |
coverage report |
grep -E -o '[0-9]+%' |
tr -d '%' |
sed '$d' |
awk '{if ( $1<${{ env.COVERAGE_INDIVIDUAL_THRESH }} ) exit 1 }'