Extend ci #1
Workflow file for this run
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
name: test | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
merge_group: | |
permissions: | |
contents: read | |
env: | |
MINIMUM_PYTHON_VERSION: "3.9" | |
jobs: | |
coverage: | |
name: "${{ matrix.os }} / ${{ matrix.python-version }} / coverage" | |
strategy: | |
max-parallel: 4 | |
fail-fast: false | |
matrix: | |
os: [ubuntu] | |
python-version: | |
# remove the unused versions | |
- "3.9" | |
- "3.10" | |
- "3.11" | |
# - "3.12" TODO support this | |
runs-on: ${{ matrix.os }}-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up the environment | |
uses: pdm-project/setup-pdm@v4 | |
id: setup-python | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Load cached venv | |
id: cached-venv | |
uses: actions/cache@v4 | |
with: | |
path: .venv | |
key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/pyproject.toml') }}-${{ hashFiles('.github/workflows/test.yml') }} | |
- name: Install dependencies | |
if: steps.cached-venv.outputs.cache-hit != 'true' | |
run: make install-dev | |
- name: Run tests for coverage | |
run: make test-w-coverage | |
- name: Upload coverage artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: .coverage-${{ matrix.os }}-${{ matrix.python-version }} | |
path: .coverage | |
doctests: | |
name: "${{ matrix.os }} / 3.9 / doctest" | |
strategy: | |
max-parallel: 4 | |
fail-fast: false | |
matrix: | |
os: [ubuntu] | |
runs-on: ${{ matrix.os }}-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up the environment | |
uses: pdm-project/setup-pdm@v4 | |
id: setup-python | |
with: | |
python-version: ${{ env.MINIMUM_PYTHON_VERSION }} | |
- name: Load cached venv | |
id: cached-venv | |
uses: actions/cache@v4 | |
with: | |
path: .venv | |
key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/pyproject.toml') }}-${{ hashFiles('.github/workflows/test.yml') }} | |
- name: Install dependencies | |
if: steps.cached-venv.outputs.cache-hit != 'true' | |
run: make install-dev | |
#---------------------------------------------- | |
# Run tests and upload coverage | |
#---------------------------------------------- | |
- name: make doc-tests | |
run: make doc-tests | |
- name: Upload coverage files | |
uses: actions/upload-artifact@v4 | |
with: | |
name: .coverage-${{ matrix.os }}-doctest-${{ matrix.json-lib }} | |
path: .coverage | |
upload-coverage: | |
name: ubuntu / 3.9 / upload-coverage | |
needs: [coverage, doctests] | |
runs-on: ubuntu-latest | |
permissions: | |
statuses: write | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up python ${{ env.MINIMUM_PYTHON_VERSION }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.MINIMUM_PYTHON_VERSION }} | |
- name: Install dependencies | |
run: pip install coverage | |
- name: Download coverage artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: .coverage-* | |
- name: convert coverage to xml | |
run: | | |
ls -aR | |
coverage combine .coverage*/.coverage | |
coverage xml -i | |
ls -a | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
# directory: ./coverage | |
# env_vars: OS,PYTHON | |
fail_ci_if_error: false | |
# files: ./coverage/coverage.xml | |
# flags: unittests | |
# name: codecov-umbrella | |
verbose: true | |
minimal: | |
# This action chooses the oldest version of the dependencies permitted by Cargo.toml to ensure | |
# that this crate is compatible with the minimal version that this crate and its dependencies | |
# require. This will pickup issues where this create relies on functionality that was introduced | |
# later than the actual version specified (e.g., when we choose just a major version, but a | |
# method was added after this version). | |
# | |
runs-on: ubuntu-latest | |
name: ubuntu / 3.9 / minimal-versions | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up the environment | |
uses: pdm-project/setup-pdm@v4 | |
id: setup-python | |
with: | |
python-version: ${{ env.MINIMUM_PYTHON_VERSION }} | |
- name: pdm lock --strategy direct_minimal_versions | |
run: pdm lock --strategy direct_minimal_versions | |
- name: pdm sync --dev | |
run: pdm sync --dev | |
- name: make test | |
run: make test | |
# https://github.com/marketplace/actions/alls-green#why used for branch protection checks | |
test-check: | |
if: always() | |
needs: | |
- coverage | |
- doctests | |
- minimal | |
- upload-coverage | |
runs-on: ubuntu-latest | |
permissions: {} | |
steps: | |
- name: Decide whether the needed jobs succeeded or failed | |
uses: re-actors/alls-green@release/v1 | |
with: | |
jobs: ${{ toJSON(needs) }} | |
allowed-failures: upload-coverage | |
build: | |
name: ubuntu / 3.9 / build package | |
# only run on push to main and on release | |
if: success() && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main') | |
runs-on: ubuntu-latest | |
steps: | |
#---------------------------------------------- | |
# check-out repo and set-up python | |
#---------------------------------------------- | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
#---------------------------------------------- | |
# ----- setup python ----- | |
#---------------------------------------------- | |
- name: Set up the environment | |
uses: pdm-project/setup-pdm@v4 | |
id: setup-python | |
with: | |
python-version: ${{ env.MINIMUM_PYTHON_VERSION }} | |
#---------------------------------------------- | |
# ----- build distribution ----- | |
#---------------------------------------------- | |
- name: Build distribution | |
run: make build | |
#---------------------------------------------- | |
# ----- upload artifacts ----- | |
#---------------------------------------------- | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: pypi_files | |
path: dist | |
test-build: | |
needs: [build] | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu] | |
name: ${{ matrix.os }} / 3.9 / test built package | |
runs-on: ${{ matrix.os }}-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: set up python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.MINIMUM_PYTHON_VERSION }} | |
- name: get dist artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: pypi_files | |
path: dist | |
- run: rm -r src/ocr_suggestion | |
- run: pip install typing-extensions | |
- run: pip install -r tests/requirements-testing.txt | |
- run: pip install sparv-ocr-suggestion-plugin --no-index --no-deps --find-links dist --force-reinstall | |
- run: pytest | |
publish: | |
needs: | |
- test-check | |
- test-build | |
if: success() && startsWith(github.ref, 'refs/tags/v') | |
runs-on: ubuntu-latest | |
environment: release | |
permissions: | |
# IMPORTANT: this permission is mandatory for trusted publishing | |
id-token: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Python ${{ env.MINIMUM_PYTHON_VERSION }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.MINIMUM_PYTHON_VERSION }} | |
- name: get dist artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: pypi_files | |
path: dist | |
- name: Publish package to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 |