2022-10-12 14:23:45 +00:00
name : Tests
on :
- push
- pull_request
jobs :
tests :
name : ${{ matrix.session }} ${{ matrix.python }} / ${{ matrix.os }}
runs-on : ${{ matrix.os }}
strategy :
fail-fast : false
matrix :
include :
- { python : "3.10" , os : "ubuntu-latest" , session : "pre-commit" }
- { python : "3.10" , os : "ubuntu-latest" , session : "safety" }
- { python : "3.10" , os : "ubuntu-latest" , session : "mypy" }
- { python : "3.9" , os : "ubuntu-latest" , session : "mypy" }
- { python : "3.8" , os : "ubuntu-latest" , session : "mypy" }
- { python : "3.7" , os : "ubuntu-latest" , session : "mypy" }
- { python : "3.10" , os : "ubuntu-latest" , session : "tests" }
- { python : "3.9" , os : "ubuntu-latest" , session : "tests" }
- { python : "3.8" , os : "ubuntu-latest" , session : "tests" }
- { python : "3.7" , os : "ubuntu-latest" , session : "tests" }
- { python : "3.10" , os : "windows-latest" , session : "tests" }
- { python : "3.10" , os : "macos-latest" , session : "tests" }
- { python : "3.10" , os : "ubuntu-latest" , session : "typeguard" }
- { python : "3.10" , os : "ubuntu-latest" , session : "xdoctest" }
- { python : "3.10" , os : "ubuntu-latest" , session : "docs-build" }
env :
NOXSESSION : ${{ matrix.session }}
FORCE_COLOR : "1"
PRE_COMMIT_COLOR : "always"
steps :
- name : Check out the repository
uses : actions/checkout@v3.0.2
- name : Set up Python ${{ matrix.python }}
uses : actions/setup-python@v4.2.0
with :
python-version : ${{ matrix.python }}
- name : Upgrade pip
run : |
pip install --constraint=.github/workflows/constraints.txt pip
pip --version
- name : Upgrade pip in virtual environments
shell : python
run : |
import os
import pip
with open(os.environ["GITHUB_ENV"], mode="a") as io:
print(f"VIRTUALENV_PIP={pip.__version__}", file=io)
- name : Install Poetry
run : |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt poetry
poetry --version
- name : Install Nox
run : |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt nox
pipx inject --pip-args=--constraint=.github/workflows/constraints.txt nox nox-poetry
nox --version
- name : Compute pre-commit cache key
if : matrix.session == 'pre-commit'
id : pre-commit-cache
shell : python
run : |
import hashlib
import sys
python = "py{}.{}".format(*sys.version_info[:2])
payload = sys.version.encode() + sys.executable.encode()
digest = hashlib.sha256(payload).hexdigest()
result = "${{ runner.os }}-{}-{}-pre-commit".format(python, digest[:8])
print("::set-output name=result::{}".format(result))
- name : Restore pre-commit cache
uses : actions/cache@v3.0.6
if : matrix.session == 'pre-commit'
with :
path : ~/.cache/pre-commit
key : ${{ steps.pre-commit-cache.outputs.result }}-${{ hashFiles('.pre-commit-config.yaml') }}
restore-keys : |
${{ steps.pre-commit-cache.outputs.result }}-
- name : Run Nox
run : |
nox --force-color --python=${{ matrix.python }}
- name : Upload coverage data
# pin to upload coverage from only one matrix entry, otherwise coverage gets confused later
if : always() && matrix.session == 'tests' && matrix.python == '3.10' && matrix.os == 'ubuntu-latest'
2022-10-24 21:53:04 +00:00
uses : "actions/upload-artifact@v3.1.1"
2022-10-12 14:23:45 +00:00
with :
name : coverage-data
path : ".coverage.*"
- name : Upload documentation
if : matrix.session == 'docs-build'
2022-10-24 21:53:04 +00:00
uses : actions/upload-artifact@v3.1.1
2022-10-12 14:23:45 +00:00
with :
name : docs
path : docs/_build
coverage :
runs-on : ubuntu-latest
needs : tests
steps :
- name : Check out the repository
uses : actions/checkout@v3.0.2
with :
# Disabling shallow clone is recommended for improving relevancy of reporting in sonarcloud
fetch-depth : 0
- name : Set up Python
uses : actions/setup-python@v4.2.0
with :
python-version : "3.10"
- name : Upgrade pip
run : |
pip install --constraint=.github/workflows/constraints.txt pip
pip --version
- name : Install Poetry
run : |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt poetry
poetry --version
- name : Install Nox
run : |
pipx install --pip-args=--constraint=.github/workflows/constraints.txt nox
pipx inject --pip-args=--constraint=.github/workflows/constraints.txt nox nox-poetry
nox --version
- name : Download coverage data
2022-10-24 21:53:04 +00:00
uses : actions/download-artifact@v3.0.1
2022-10-12 14:23:45 +00:00
with :
name : coverage-data
- name : Combine coverage data and display human readable report
run : |
find . -name \*.pyc -delete
nox --force-color --session=coverage
- name : Create coverage report
run : |
nox --force-color --session=coverage -- xml
- name : Upload coverage report
uses : codecov/codecov-action@v3.1.0
with :
# server is flaky. see https://github.com/codecov/codecov-action/issues/598
fail_ci_if_error : false
- name : SonarCloud Scan
# thought about just skipping dependabot
# if: ${{ github.actor != 'dependabot[bot]' }}
# but figured all pull requests seems better, since none of them will have access to sonarcloud.
# however, with just skipping pull requests, the build associated with "Triggered via push" is also associated with the pull request and also fails hitting sonarcloud
# if: ${{ github.event_name != 'pull_request' }}
# so just skip everything but main
if : github.ref_name == 'main'
uses : sonarsource/sonarcloud-github-action@master
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN : ${{ secrets.SONAR_TOKEN }}
# part about saving PR number and then using it from auto-merge-dependabot-prs from:
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run
- name : Save PR number
if : ${{ github.event_name == 'pull_request' }}
env :
PR_NUMBER : ${{ github.event.number }}
run : |
mkdir -p ./pr
echo "$PR_NUMBER" > ./pr/pr_number
2022-10-24 21:53:04 +00:00
- uses : actions/upload-artifact@v3.1.1
2022-10-12 14:23:45 +00:00
with :
name : pr_number
path : pr/