From 26384c7bf854101936a02d0540fcdb69cbd1bebc Mon Sep 17 00:00:00 2001 From: Almar Klein Date: Fri, 25 Oct 2024 12:38:38 +0200 Subject: [PATCH 1/3] Add ci --- .github/workflows/ci.yml | 187 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..bd43ef2 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,187 @@ +name: CI + +on: + push: + branches: + - main + tags: + - "v*.*.*" + pull_request: + branches: + - main + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + + lint-build: + name: Linting + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install ruff + - name: Ruff lint + run: | + ruff check --output-format=github . + - name: Ruff format + run: | + ruff format --check . + + docs-build: + name: Docs + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + - name: Install dev dependencies + run: | + python -m pip install --upgrade pip + pip install -U -e .[docs] + - name: Build docs + run: | + cd docs + make html SPHINXOPTS="-W --keep-going" + + test-builds: + name: ${{ matrix.name }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - name: Test py39 + os: ubuntu-latest + pyversion: '3.9' + - name: Test py310 + os: ubuntu-latest + pyversion: '3.10' + - name: Test py311 + os: ubuntu-latest + pyversion: '3.11' + - name: Test py312 + os: ubuntu-latest + pyversion: '3.12' + - name: Test py313 + os: ubuntu-latest + pyversion: '3.13' + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.pyversion }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.pyversion }} + - name: Install package and dev dependencies + run: | + python -m pip install --upgrade pip + pip install .[tests] + rm -r rendercanvas + - name: Unit tests + run: | + pytest -v tests + + test-pyinstaller-build: + name: Test pyinstaller + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + - name: Install package and dev dependencies + run: | + python -m pip install --upgrade pip + pip install -U . + pip install pytest pyinstaller + - name: Unit tests + run: | + pushd $HOME + pytest -v --pyargs rendercanvas.__pyinstaller + + release: + name: Build release on ubuntu-latest + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + - name: Install dev dependencies + run: | + python -m pip install --upgrade pip + pip install -U flit build twine + - name: Create source distribution + run: | + python -m build -n -s + - name: Build wheel + run: | + python -m build -n -w + - name: Test sdist + shell: bash + run: | + rm -rf ./rendercanvas + pushd $HOME + pip install $GITHUB_WORKSPACE/dist/*.tar.gz + python -c "import rendercanvas; print(rendercanvas.__version__)" + popd + # don't run tests, we just want to know if the sdist can be installed + pip uninstall -y rendercanvas + git reset --hard HEAD + - name: Twine check + run: | + twine check dist/* + - name: Upload distributions + uses: actions/upload-artifact@v4 + with: + path: dist + name: dist + + publish: + name: Publish release to Github and Pypi + runs-on: ubuntu-latest + needs: [test-builds, release-build] + if: success() && startsWith(github.ref, 'refs/tags/v') + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + - name: Download assets + uses: actions/download-artifact@v4 + with: + name: dist + path: dist + - name: Release + uses: softprops/action-gh-release@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + files: | + dist/*.tar.gz + dist/*.whl + draft: true + prerelease: false + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_PASSWORD }} From b8c4fd9ecf9adaae067763672990b55ef9219293 Mon Sep 17 00:00:00 2001 From: Almar Klein Date: Fri, 25 Oct 2024 12:42:33 +0200 Subject: [PATCH 2/3] tweak --- .github/workflows/ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bd43ef2..e30f1fa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ concurrency: jobs: - lint-build: + lint: name: Linting runs-on: ubuntu-latest strategy: @@ -38,7 +38,7 @@ jobs: run: | ruff format --check . - docs-build: + docs: name: Docs runs-on: ubuntu-latest strategy: @@ -58,7 +58,7 @@ jobs: cd docs make html SPHINXOPTS="-W --keep-going" - test-builds: + tests: name: ${{ matrix.name }} runs-on: ${{ matrix.os }} strategy: @@ -95,7 +95,7 @@ jobs: run: | pytest -v tests - test-pyinstaller-build: + test-pyinstaller: name: Test pyinstaller runs-on: ubuntu-latest steps: @@ -158,7 +158,7 @@ jobs: publish: name: Publish release to Github and Pypi runs-on: ubuntu-latest - needs: [test-builds, release-build] + needs: [tests, release] if: success() && startsWith(github.ref, 'refs/tags/v') steps: - uses: actions/checkout@v4 From c36fe05c1eedfd74aaf0b6cf8bffd62d8442a808 Mon Sep 17 00:00:00 2001 From: Almar Klein Date: Fri, 25 Oct 2024 12:44:19 +0200 Subject: [PATCH 3/3] fix for ruff --- examples/gui_auto.py | 4 +++- examples/gui_glfw.py | 2 +- examples/gui_qt.py | 2 ++ examples/gui_wx.py | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/examples/gui_auto.py b/examples/gui_auto.py index bca63ba..668c7ad 100644 --- a/examples/gui_auto.py +++ b/examples/gui_auto.py @@ -7,7 +7,9 @@ from rendercanvas.utils.cube import setup_drawing_sync -canvas = WgpuCanvas(size=(640, 480), title=f"The wgpu cube example on a {WgpuCanvas.__name__}") +canvas = WgpuCanvas( + size=(640, 480), title=f"The wgpu cube example on a {WgpuCanvas.__name__}" +) draw_frame = setup_drawing_sync(canvas) diff --git a/examples/gui_glfw.py b/examples/gui_glfw.py index 5760ea8..bb8fbc3 100644 --- a/examples/gui_glfw.py +++ b/examples/gui_glfw.py @@ -7,7 +7,7 @@ from rendercanvas.utils.cube import setup_drawing_sync -canvas = WgpuCanvas(size=(640, 480), title=f"The wgpu cube example on glfw") +canvas = WgpuCanvas(size=(640, 480), title="The wgpu cube example on glfw") draw_frame = setup_drawing_sync(canvas) diff --git a/examples/gui_qt.py b/examples/gui_qt.py index 438f6a2..4289027 100644 --- a/examples/gui_qt.py +++ b/examples/gui_qt.py @@ -4,6 +4,8 @@ Works with either PySide6, PyQt6, PyQt5 or PySide2. """ +# ruff: noqa: E402 + import importlib # The `rendercanvas.qt` module checks what Qt libs is imported, so we need to import that first. diff --git a/examples/gui_wx.py b/examples/gui_wx.py index 0aa5827..b1fce04 100644 --- a/examples/gui_wx.py +++ b/examples/gui_wx.py @@ -7,7 +7,7 @@ from rendercanvas.utils.cube import setup_drawing_sync -canvas = WgpuCanvas(size=(640, 480), title=f"The wgpu cube example on wx") +canvas = WgpuCanvas(size=(640, 480), title="The wgpu cube example on wx") draw_frame = setup_drawing_sync(canvas)