diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3803ff1..b591435 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,111 +50,111 @@ jobs: - name: ${{ matrix.task.name }} run: ${{ matrix.task.run }} -# coverage: -# name: "Test py-${{ matrix.python-version }} (${{ matrix.os }})" -# strategy: -# max-parallel: 4 -# fail-fast: false -# matrix: -# # ignore windows for now -# os: [ubuntu] #, macos] # , windows-latest] -# python-version: -# - "3.9" -# - "3.10" -# - "3.11" -# - "3.12" + coverage: + name: "Test py-${{ matrix.python-version }} (${{ matrix.os }})" + strategy: + max-parallel: 4 + fail-fast: false + matrix: + os: [ubuntu] + python-version: + - "3.8" + - "3.9" + - "3.10" + - "3.11" + - "3.12" # continue-on-error: >- # ${{ contains(matrix.python-version, 'dev') && true || false }} -# runs-on: ${{ matrix.os }}-latest -# steps: -# #---------------------------------------------- -# # check-out repo and set-up python -# #---------------------------------------------- -# - name: Check out repository -# uses: actions/checkout@v4 - -# #---------------------------------------------- -# # ----- install & configure python & rye ----- -# #---------------------------------------------- -# - name: Set up the environment -# uses: ./.github/actions/setup-python-env -# with: -# python-version: ${{ matrix.python-version }} + runs-on: ${{ matrix.os }}-latest + steps: + #---------------------------------------------- + # check-out repo and set-up python + #---------------------------------------------- + - name: Check out repository + uses: actions/checkout@v4 + + #---------------------------------------------- + # ----- install & configure python & rye ----- + #---------------------------------------------- + - name: Set up the environment + uses: ./.github/actions/setup-python-env + with: + python-version: ${{ matrix.python-version }} -# -# #---------------------------------------------- -# # Run tests and upload coverage -# #---------------------------------------------- -# - name: Run tests for coverage -# run: make test-w-coverage - -# - name: copy coverage -# run: | -# mkdir coverage -# cp -v .coverage coverage/.coverage.${{ matrix.os }}-py${{ matrix.python-version }} - -# - name: store coverage files -# uses: actions/upload-artifact@v3 -# with: -# name: coverage -# path: coverage - - -# upload-coverage: -# name: Upload test coverage to CodeCov -# needs: [coverage] -# runs-on: ubuntu-latest -# permissions: -# statuses: write -# steps: -# #---------------------------------------------- -# # check-out repo and set-up python -# #---------------------------------------------- -# - name: Check out repository -# uses: actions/checkout@v4 -# - name: Set up python ${{ env.MINIMUM_PYTHON_VERSION }} -# id: setup-python -# uses: actions/setup-python@v5 -# with: -# python-version: ${{ env.MINIMUM_PYTHON_VERSION }} - -# #---------------------------------------------- -# # install dependencies if cache does not exist -# #---------------------------------------------- -# - name: Install dependencies -# run: pip install coverage - -# - name: download coverage files -# uses: actions/download-artifact@v3 -# with: -# name: coverage -# path: coverage - -# - name: convert coverage to xml -# run: | -# coverage combine --data-file=coverage/.coverage -# coverage xml -i --data-file=coverage/.coverage -# ls -# ls coverage - -# - name: Upload coverage to Codecov -# uses: codecov/codecov-action@v3 -# 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 + + #---------------------------------------------- + # Run tests and upload coverage + #---------------------------------------------- + - name: Run tests for coverage + run: make test-w-coverage + + - name: copy coverage + run: | + mkdir coverage + cp -v .coverage coverage/.coverage.${{ matrix.os }}-py${{ matrix.python-version }} + + - name: store coverage files + uses: actions/upload-artifact@v4 + with: + name: coverage + path: coverage + + + upload-coverage: + name: Upload test coverage to CodeCov + needs: [coverage] + runs-on: ubuntu-latest + permissions: + statuses: write + steps: + #---------------------------------------------- + # check-out repo and set-up python + #---------------------------------------------- + - name: Check out repository + uses: actions/checkout@v4 + - name: Set up python ${{ env.MINIMUM_PYTHON_VERSION }} + id: setup-python + uses: actions/setup-python@v5 + with: + python-version: ${{ env.MINIMUM_PYTHON_VERSION }} + + #---------------------------------------------- + # install dependencies if cache does not exist + #---------------------------------------------- + - name: Install dependencies + run: pip install coverage + + - name: download coverage files + uses: actions/download-artifact@v4 + with: + name: coverage + path: coverage + + - name: convert coverage to xml + run: | + coverage combine --data-file=coverage/.coverage + coverage xml -i --data-file=coverage/.coverage + ls + ls coverage + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + 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 # https://github.com/marketplace/actions/alls-green#why used for branch protection checks check: if: always() - needs: [lint] + needs: [lint, coverage] runs-on: ubuntu-latest permissions: {} steps: diff --git a/Makefile b/Makefile index 8dde24f..a321129 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,7 @@ run-doc-tests: ${INVENV} python -m doctest -v karp_lex/value_objects/unique_id.py # run all tests with coverage collection -run-all-tests-w-coverage: +test-w-coverage: ${INVENV} pytest -vv --cov=src/${PROJECT} --cov-report=xml tests # check types diff --git a/pyproject.toml b/pyproject.toml index d85e505..113a2f4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ dependencies = [ ] license = "MIT" readme = "README.md" -requires-python = ">= 3.8" +requires-python = ">= 3.9" classifiers = [ "Development Status :: 4 - Beta", # "Development Status :: 5 - Production/Stable", @@ -64,3 +64,12 @@ allow-direct-references = true [tool.black] target-version = ["py38", "py39", "py310", "py311", "py312"] + +[tool.hatch.envs.test] +dependencies = ["pytest", "pytest-cov"] + +# [tool.hatch.envs.test.scripts] +# run = "pytest tests" + +[[tool.hatch.envs.test.matrix]] +python = ["3.8", "3.9", "3.10", "3.11", "3.12"]