Refurb: force GitHub format (annotate PR) #81
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/**' | |
tags-ignore: | |
- '*.[0-9][ab][0-9]' | |
pull_request: {} | |
jobs: | |
PEP8: | |
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' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade ruff | |
- name: Lint with ruff | |
run: | | |
ruff check . --output-format github | |
PyLint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade -r CI_REQUIREMENTS.txt | |
pip install --upgrade "pylint >= 3.0.0" | |
- name: Install develop | |
run: | | |
pip install -e . | |
- name: Lint with PyLint | |
run: | | |
pylint threaded | |
MyPy: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade -r CI_REQUIREMENTS.txt | |
pip install --upgrade "mypy>=1.7.0" | |
- name: Install develop | |
run: | | |
pip install -e . | |
- name: Lint with MyPy | |
run: | | |
mypy --strict threaded | |
Black: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade black regex | |
- name: Check code style with black | |
run: | | |
black --check threaded | |
Refurb: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade refurb | |
- name: Lint with refurb | |
run: | | |
refurb --format github threaded | |
TestScript: | |
needs: [PEP8, PyLint, MyPy, Black, Refurb] # isort is broken | |
runs-on: ${{ matrix.os }} | |
strategy: | |
max-parallel: 8 | |
matrix: | |
os: [ubuntu-latest, windows-latest] | |
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | |
name: "Script based python ${{ matrix.python-version }} on ${{ matrix.os }}" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip wheel | |
pip install --upgrade -r CI_REQUIREMENTS.txt | |
pip install --upgrade -r pytest_requirements.txt | |
- name: Install develop | |
run: | | |
pip install -e . | |
- name: Test with pytest | |
run: | | |
py.test --cov-report= --cov=threaded test | |
coverage report -m --fail-under 85 | |
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: [ TestScript ] | |
if: ${{ always() }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Coveralls Finished | |
uses: coverallsapp/github-action@v2 | |
with: | |
parallel-finished: true | |
TestLinux: | |
needs: [TestScript] | |
runs-on: ubuntu-latest | |
strategy: | |
max-parallel: 4 | |
matrix: | |
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | |
name: "Cython based python ${{ matrix.python-version }} on linux" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip wheel | |
pip install --upgrade -r CI_REQUIREMENTS.txt | |
pip install --upgrade Cython build | |
pip install --upgrade -r pytest_requirements.txt | |
- name: Build package and install | |
run: | | |
python -m build --no-isolation | |
pip install threaded --no-index -f dist | |
- name: Test with pytest | |
run: | | |
py.test | |
TestWindows: | |
needs: [TestScript] | |
runs-on: windows-latest | |
strategy: | |
max-parallel: 8 | |
matrix: | |
WINDOWS: | |
- {ARCH: 'x86', WINDOWS: 'win32'} | |
- {ARCH: 'x64', WINDOWS: 'win64'} | |
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | |
name: "Cython based python ${{ matrix.python-version }} on ${{ matrix.WINDOWS.WINDOWS }}" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
architecture: ${{ matrix.WINDOWS.ARCH }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip wheel | |
pip install --upgrade -r CI_REQUIREMENTS.txt | |
pip install --upgrade Cython build | |
pip install --upgrade -r pytest_requirements.txt | |
- name: Build package and install | |
run: | | |
python -m build --no-isolation | |
pip install threaded --no-index -f dist | |
- name: Test with pytest | |
run: | | |
py.test | |
Build: | |
name: Build non-compiled sdist and bdist | |
needs: [TestScript] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # need for setuptools_scm | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install --upgrade twine build | |
- name: Build package | |
run: | | |
python -m build | |
- uses: actions/upload-artifact@v4 | |
with: | |
path: dist/* | |
name: built-sdist | |
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.1.8 | |
with: | |
pattern: built-* | |
merge-multiple: true | |
path: dist | |
- name: Validate metadata | |
run: | | |
twine check dist/* | |
build_wheels: | |
name: Build wheels on ${{ matrix.os }} | |
needs: [ TestScript, TestLinux, TestWindows ] | |
# build only on push: heavy job | |
if: github.event_name == 'push' | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-latest | |
- windows-latest | |
# - macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # need for setuptools_scm | |
# Used to host cibuildwheel | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Set up QEMU | |
if: runner.os == 'Linux' | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: all | |
- name: Build wheels | |
uses: pypa/cibuildwheel@v2.20.0 | |
env: | |
# configure cibuildwheel to build native archs ('auto'), and some | |
# emulated ones | |
CIBW_ARCHS_LINUX: auto64 aarch64 | |
CIBW_ARCHS_WINDOWS: auto64 | |
CIBW_ARCHS_MACOS: x86_64 universal2 arm64 | |
- uses: actions/upload-artifact@v4 | |
with: | |
path: ./wheelhouse/*.whl | |
name: built-bdist | |
retention-days: 3 | |
upload_pypi: | |
needs: [ Build, build_wheels, Metadata ] | |
# upload to PyPI on every tag | |
if: github.event_name == 'push' && github.ref_type == 'tag' | |
# 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/threaded | |
permissions: | |
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing | |
steps: | |
- uses: actions/download-artifact@v4.1.8 | |
with: | |
pattern: built-* | |
merge-multiple: true | |
path: dist | |
- name: Publish package distributions to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 |