Bump version (patch) (#181) #511
Workflow file for this run
This file contains hidden or 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: CI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| tags: | |
| - "v*.*.*" | |
| pull_request: | |
| branches: | |
| - main | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| # Tests for code integrity and code formatting | |
| lint: | |
| 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 . | |
| # Test that make sure the docs build without errors or warnings | |
| docs: | |
| 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 majority of code for a variety of Python versions and os's | |
| test-unit: | |
| name: 'Test Python ${{ matrix.pyversion }} on ${{ matrix.os }}' | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| pyversion: '3.10' | |
| - os: ubuntu-latest | |
| pyversion: '3.11' | |
| - os: ubuntu-latest | |
| pyversion: '3.12' | |
| - os: ubuntu-latest | |
| pyversion: '3.13' | |
| - os: windows-latest | |
| pyversion: '3.13' | |
| - os: macos-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 that wgpu is indeed optional | |
| test-without-wgpu: | |
| name: 'Test Python ${{ matrix.pyversion }} without wgpu' | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - 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] | |
| pip uninstall -y wgpu | |
| rm -r rendercanvas | |
| - name: Unit tests | |
| run: | | |
| python -c " | |
| try: | |
| import wgpu | |
| raise RuntimeError('wgpu could be imported, but this is the no-wgpu test build') | |
| except ImportError: | |
| print('wgpu is (intentionally) not available') | |
| " | |
| pytest -v tests | |
| # Test for the few GUI frameworks that we support. | |
| test-gui-frameworks: | |
| name: 'Test gui ${{ matrix.backendname }}' | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - guilib: 'glfw' | |
| backendname: 'glfw' | |
| guitestname: 'glfw' | |
| loopname: 'AsyncioLoop' | |
| os: windows-latest | |
| - guilib: 'PySide6' | |
| backendname: 'pyside6' | |
| guitestname: 'qt' | |
| loopname: 'PySide6Loop' | |
| os: windows-latest | |
| - guilib: 'PyQt6' | |
| backendname: 'pyqt6' | |
| guitestname: 'qt' | |
| loopname: 'PyQt6Loop' | |
| os: windows-latest | |
| - guilib: 'PyQt5' | |
| backendname: 'pyqt5' | |
| guitestname: 'qt' | |
| loopname: 'PyQt5Loop' | |
| os: windows-latest | |
| - guilib: 'wxPython' | |
| backendname: 'wx' | |
| guitestname: 'wx' | |
| loopname: 'WxLoop' | |
| os: windows-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.13' | |
| - name: Install xvfb and Vulkan drivers | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt update -y -qq | |
| sudo apt install -y xvfb | |
| sudo apt install --no-install-recommends -y libegl1-mesa-dev libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers | |
| - name: Install package and dev dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install .[tests] | |
| pip install ${{ matrix.guilib }} | |
| rm -r rendercanvas | |
| - name: Test import | |
| run: | | |
| python -c 'import rendercanvas.${{ matrix.backendname }}' | |
| - name: Test loop | |
| if: matrix.backendname != 'wx' | |
| run: | | |
| pytest -v tests/test_loop.py -k ${{ matrix.loopname }} | |
| - name: Test GUI canvas | |
| run: | | |
| pytest -v tests/test_gui_${{ matrix.guitestname }}.py | |
| # Test that the examples run without error, and screenshots match | |
| test-examples: | |
| name: Test examples on ${{ matrix.pyversion }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| pyversion: '3.10' | |
| - os: ubuntu-latest | |
| pyversion: '3.12' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.12 | |
| - name: Install llvmpipe and lavapipe for offscreen canvas | |
| run: | | |
| sudo apt update -y -qq | |
| sudo apt install --no-install-recommends -y libegl1-mesa-dev libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers | |
| - name: Install dev dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e .[examples] | |
| - name: Show wgpu backend | |
| run: | | |
| python -c "from examples.tests.test_examples import adapter_summary; print(adapter_summary)" | |
| - name: Test examples | |
| env: | |
| PYGFX_EXPECT_LAVAPIPE: true | |
| run: | | |
| pytest -v examples | |
| - uses: actions/upload-artifact@v4 | |
| if: ${{ failure() }} | |
| with: | |
| name: screenshots{{ matrix.pyversion }} | |
| path: examples/screenshots | |
| # Test that rendercanvas works with pyinstaller | |
| test-pyinstaller: | |
| 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 psutil glfw | |
| - name: Unit tests | |
| run: | | |
| pushd $HOME | |
| pytest -v --pyargs rendercanvas.__pyinstaller | |
| # Build package | |
| build-release: | |
| name: Build release artifacts | |
| 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 twine | |
| - name: Create source distribution | |
| run: | | |
| python -m flit build --no-use-vcs --format sdist | |
| - name: Build wheel | |
| run: | | |
| python -m flit build --no-use-vcs --format wheel | |
| - 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 to Github and Pypi | |
| publish: | |
| name: Publish release to Github and Pypi | |
| runs-on: ubuntu-latest | |
| needs: [lint, docs, test-unit, test-examples, test-pyinstaller, build-release] | |
| if: success() && startsWith(github.ref, 'refs/tags/v') | |
| environment: | |
| name: pypi | |
| url: https://pypi.org/p/rendercanvas | |
| permissions: | |
| contents: write | |
| id-token: write | |
| 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: | |
| print-hash: true |