--- # yamllint disable rule:line-length name: Python Unit Tests on: # yamllint disable-line rule:truthy pull_request: merge_group: branches: - main types: - checks_requested push: branches: - main workflow_dispatch: permissions: contents: read jobs: python: strategy: matrix: pyver_os: - ver: "2.7" os: ubuntu-22.04 - ver: "3.9" os: ubuntu-latest - ver: "3.10" os: ubuntu-latest - ver: "3.11" os: ubuntu-latest - ver: "3.12" os: ubuntu-latest - ver: "3.13" os: ubuntu-latest runs-on: ${{ matrix.pyver_os.os }} steps: - name: Update git run: | set -euxo pipefail sudo apt update sudo apt install -y git - name: checkout PR uses: actions/checkout@v4 - name: Set up Python 2.7 if: ${{ matrix.pyver_os.ver == '2.7' }} run: | set -euxo pipefail sudo apt install -y python2.7 - name: Set up Python 3 if: ${{ matrix.pyver_os.ver != '2.7' }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.pyver_os.ver }} - name: Install platform dependencies, python, tox, tox-lsr run: | set -euxo pipefail python -m pip install --upgrade pip if [ "${{ matrix.pyver_os.ver }}" = 2.7 ]; then # newer virtualenv cannot create python2 venvs # newer tox requires newer virtualenv tox='tox<4.15' virtualenv='virtualenv<20.22.0' else tox=tox virtualenv=virtualenv fi pip install "$tox" "$virtualenv" "git+https://github.com/linux-system-roles/tox-lsr@3.11.0" # If you have additional OS dependency packages e.g. libcairo2-dev # then put them in .github/config/ubuntu-requirements.txt, one # package per line. if [ -f .github/config/ubuntu-requirements.txt ]; then sudo apt-get install -y $(cat .github/config/ubuntu-requirements.txt) fi - name: Run unit tests run: | set -euxo pipefail toxpyver=$(echo "${{ matrix.pyver_os.ver }}" | tr -d .) toxenvs="py${toxpyver}" # NOTE: The use of flake8, pylint, black with specific # python envs is arbitrary and must be changed in tox-lsr case "$toxpyver" in 311) toxenvs="${toxenvs},coveralls,flake8,pylint,black" ;; *) toxenvs="${toxenvs},coveralls" ;; esac TOXENV="$toxenvs" lsr_ci_runtox - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v5 python-26: runs-on: ubuntu-latest steps: - name: checkout PR uses: actions/checkout@v4 - name: Run py26 tests uses: linux-system-roles/lsr-gh-action-py26@1.0.2 env: TOX_LSR: "git+https://github.com/linux-system-roles/tox-lsr@2.13.2"