Do not use deprecated positioning in the code and examples (#869) #648
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: Python package | |
on: | |
push: | |
branches-ignore: | |
- 'dependabot/**' | |
- 'gh-pages' | |
tags: | |
- "[0-9]+.[0-9]+.[0-9]+" # Canonical versioned tags | |
- "[0-9]+.[0-9]+.[0-9]+.post[0-9]+" # Canonical rebuild tags | |
pull_request: | |
paths: | |
- "urwid/**" | |
- "source/**" | |
- "setup.py" | |
- "pyproject.toml" | |
- "MANIFEST.in" | |
- "README.rst" | |
- "COPYING" | |
- "tests/**" | |
- "examples/**" | |
- ".coveralls.yml" | |
- ".github/workflows/pythonpackage.yml" | |
concurrency: | |
group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" | |
cancel-in-progress: true | |
jobs: | |
Isort: | |
name: Validate import sorting | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
cache: 'pip' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade -r isort-requirements.txt | |
- name: Check imports with isort | |
run: | | |
isort --check --diff . | |
Black: | |
name: Validate black formatting | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
cache: 'pip' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade -r black-requirements.txt | |
- name: Check code style with black | |
run: | | |
black --check . | |
Ruff: | |
name: Check with Ruff | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
cache: 'pip' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade -r ruff-requirements.txt | |
- name: Lint with ruff | |
run: | | |
ruff check --output-format github . | |
PyLint: | |
name: Check with pylint | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Ubuntu dependencies | |
run: | | |
sudo apt-get -qq update | |
sudo apt-get install -y python3-gi gobject-introspection libgirepository1.0-dev | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
cache: 'pip' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -r test_requirements.txt PyGObject | |
pip install --upgrade -r pylint-requirements.txt | |
- name: Install package for test | |
run: pip install -e . | |
- name: Lint with pylint | |
run: pylint urwid | |
Test: | |
needs: [ Isort, Black, Ruff, PyLint ] | |
runs-on: ${{ matrix.os }} | |
strategy: | |
max-parallel: 6 | |
matrix: | |
os: [ "ubuntu-latest", "windows-latest" ] | |
# , "macos-latest" | |
# enable macOS only if OS specific branch will be added | |
python-version: [ "3.7", "3.8", "3.9", "3.10", "3.11", "3.12" ] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # need for setuptools_scm | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
allow-prereleases: true | |
cache: 'pip' | |
- name: Install Ubuntu dependencies | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get -qq update | |
sudo apt-get install -y python3-gi gobject-introspection libgirepository1.0-dev | |
- name: Install Mac OS X dependencies | |
if: runner.os == 'macOS' | |
run: | | |
brew install gtk+3 gobject-introspection gtk-mac-integration | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip wheel | |
pip install -r test_requirements.txt | |
- name: Install PyGObject | |
if: runner.os == 'Linux' || runner.os == 'macOS' | |
run: pip install PyGObject | |
- name: Install package for test | |
run: pip install -e . | |
- name: Test | |
run: | | |
coverage run -m unittest discover -s tests -v | |
coverage report | |
coverage xml | |
- name: Coveralls Parallel | |
uses: coverallsapp/github-action@v2 | |
with: | |
flag-name: run-${{ matrix.python-version }}-${{ matrix.os }}" | |
parallel: true | |
file: coverage.xml | |
UploadCoverage: | |
name: Upload coverage to Coveralls | |
needs: [ Test ] | |
if: ${{ always() }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Coveralls Finished | |
uses: coverallsapp/github-action@v2 | |
with: | |
parallel-finished: true | |
build: | |
name: Build distribution | |
needs: [ Test, Isort, Black, Ruff, PyLint ] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # need for setuptools_scm | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Install dependencies | |
run: pip install -U build | |
- name: Build dist | |
run: python -m build | |
- uses: actions/upload-artifact@v4 | |
with: | |
path: dist/*.tar.gz | |
name: built-sdist | |
retention-days: 3 | |
- uses: actions/upload-artifact@v4 | |
with: | |
path: dist/*.whl | |
name: built-bdist | |
retention-days: 3 | |
Metadata: | |
name: Validate metadata | |
runs-on: ubuntu-latest | |
needs: [ build ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
cache: 'pip' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade twine | |
- uses: actions/download-artifact@v4 | |
with: | |
# unpacks default artifact into dist/ | |
# if `name: wheels` is omitted, the action will create extra parent dir | |
pattern: built-* | |
merge-multiple: true | |
path: dist | |
- name: Validate metadata | |
run: | | |
twine check dist/* | |
upload_pypi: | |
needs: [ build, Metadata ] | |
# upload to PyPI on every tag | |
if: github.event_name == 'push' && github.ref_type == 'tag' && github.repository == 'urwid/urwid' | |
# alternatively, to publish when a GitHub Release is created, use the following rule: | |
# if: github.event_name == 'release' && github.event.action == 'published' | |
runs-on: ubuntu-latest | |
environment: | |
name: pypi | |
url: https://pypi.org/p/urwid | |
permissions: | |
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: built-* | |
merge-multiple: true | |
path: dist | |
- name: Publish package distributions to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 |