Skip to content

Commit

Permalink
Upgrade PyQt5 and supported Python versions.
Browse files Browse the repository at this point in the history
  • Loading branch information
carlosperate committed Feb 5, 2024
1 parent 30af5d5 commit 0819f62
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 66 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ jobs:
pip list
- run: mkdir upload
- name: Build Linux AppImage
run: xvfb-run make linux
run: QT_QPA_PLATFORM=offscreen make linux
# GitHub actions upload artifact breaks permissions, workaround using tar
# https://github.com/actions/upload-artifact/issues/38
- name: Tar AppImage to maintain permissions
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
analyze:
timeout-minutes: 20
name: Analyze
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
permissions:
actions: read
contents: read
Expand Down
44 changes: 12 additions & 32 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-20.04, ubuntu-latest, macos-11, macos-latest, windows-2019, windows-latest]
python-version: ['3.5', '3.6', '3.7', '3.8']
exclude:
# Python 3.5 and 3.6 not available in the latest Ubuntu runners
- os: ubuntu-latest
python-version: '3.5'
- os: ubuntu-latest
python-version: '3.6'
python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
fail-fast: false
runs-on: ${{ matrix.os }}
name: Test Py ${{ matrix.python-version }} - ${{ matrix.os }}
Expand All @@ -37,19 +31,14 @@ jobs:
pip --version
pip config list
pip freeze
- name: Prepare Ubuntu
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libxkbcommon-x11-0 xvfb
- name: Install Mu dependencies
run: |
pip install .[dev]
pip list
timeout-minutes: 10
- name: Run tests
if: runner.os == 'Linux'
run: xvfb-run make check
run: QT_QPA_PLATFORM=offscreen python make.py check
timeout-minutes: 5
- name: Run tests
if: runner.os != 'Linux'
Expand Down Expand Up @@ -100,7 +89,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
docker-tag: ['stretch-2018-03-13', 'buster-2021-05-28', 'buster-legacy-2023-05-03']
docker-tag: ['buster-2021-05-28', 'buster-legacy-2023-05-03', 'bullseye-2023-05-03']
fail-fast: false
services:
rpios:
Expand All @@ -112,7 +101,7 @@ jobs:
- name: Wait 2m30s for the docker image to start up QEMU and Raspberry Pi OS
run: sleep 150
- name: Clone project & setup it as the bash entry directory
uses: appleboy/ssh-action@master
uses: appleboy/ssh-action@v1.0.0
with:
host: rpios
username: pi
Expand All @@ -126,18 +115,8 @@ jobs:
git checkout --progress FETCH_HEAD
echo "cd ~/mu" > ~/.bashrc_new && cat ~/.bashrc >> ~/.bashrc_new
rm ~/.bashrc && mv ~/.bashrc_new ~/.bashrc
# As Pi OS stretch is no longer supported the repository URL was moved and is no longer updated
- name: Update Stretch sources.list
if: ${{ matrix.docker-tag == 'stretch-2018-03-13' }}
uses: appleboy/ssh-action@master
with:
host: rpios
username: pi
password: raspberry
port: ${{ job.services.rpios.ports[5022] }}
script: echo "deb http://legacy.raspbian.org/raspbian/ stretch main contrib non-free rpi" | sudo tee /etc/apt/sources.list
- name: Install Mu extra apt dependencies
uses: appleboy/ssh-action@master
uses: appleboy/ssh-action@v1.0.0
with:
host: rpios
username: pi
Expand All @@ -147,22 +126,24 @@ jobs:
sudo apt-get update
sudo apt-get install -y python3-virtualenv
- name: Create venv and install Python dependencies
uses: appleboy/ssh-action@master
uses: appleboy/ssh-action@v1.0.0
with:
host: rpios
username: pi
password: raspberry
port: ${{ job.services.rpios.ports[5022] }}
command_timeout: 20m
# Some compiled packages take a while to be built in piwheels, so to
# avoid intermittent pip install failures we use `--prefer-binary`
script: |
python3 -m virtualenv ~/mu/.venv -v --python=python3 --system-site-packages
echo "source ~/mu/.venv/bin/activate" > ~/.bashrc_new && cat ~/.bashrc >> ~/.bashrc_new
rm ~/.bashrc && mv ~/.bashrc_new ~/.bashrc
source .venv/bin/activate
python -m pip list
python -m pip install ."[dev]"
python -m pip install ."[dev]" --prefer-binary
- name: Environment info
uses: appleboy/ssh-action@master
uses: appleboy/ssh-action@v1.0.0
with:
host: rpios
username: pi
Expand All @@ -175,12 +156,11 @@ jobs:
python3 -m pip --version
python3 -m pip list
- name: Run tests
uses: appleboy/ssh-action@master
uses: appleboy/ssh-action@v1.0.0
with:
host: rpios
username: pi
password: raspberry
port: ${{ job.services.rpios.ports[5022] }}
# The time out can be decreased to 30 min when Stretch is dropped
command_timeout: 45m
command_timeout: 30m
script: xvfb-run python make.py check
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,9 @@ macos: check
# 1. Not really needed.
# 2. Previously active venv would be "gone" on venv-pup deactivation.
# Installing pup from a fork with the --pip-platform flag proof of concept
# and using it to install wheels for the `macosx_10_12_x86_64` platform
# and using it to install wheels for the `macosx_10_13_x86_64` platform
./venv-pup/bin/pip install git+https://github.com/carlosperate/pup.git@pip-platform
./venv-pup/bin/pup package --launch-module=mu --nice-name="Mu Editor" --icon-path=./package/icons/mac_icon.icns --license-path=./LICENSE --pip-platform=macosx_10_12_x86_64 .
./venv-pup/bin/pup package --launch-module=mu --nice-name="Mu Editor" --icon-path=./package/icons/mac_icon.icns --license-path=./LICENSE --pip-platform=macosx_10_13_x86_64 .
rm -r venv-pup
ls -la ./build/pup/
ls -la ./dist/
Expand Down
17 changes: 6 additions & 11 deletions mu/wheels/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,9 @@ class WheelsBuildError(WheelsError):
("flask", ("flask==2.0.3", "Werkzeug<3.0.0")),
# The version of ipykernel here should match to the version used by
# qtconsole at the version specified in setup.py
# FIXME: ipykernel max ver added for macOS 10.13 compatibility, min taken
# from qtconsole 4.7.7. This is mirrored in setup.py
("ipykernel", ("ipykernel>=4.1,<6",)),
# FIXME: ipykernel<6 depends on ipython_genutils, but it isn't explicitly
# declared as a dependency. It also depends on traitlets, which
# incidentally brought ipython_genutils, but in v5.1 it was dropped, so as
# a workaround we need to manually specify it here
("ipython_genutils", ("ipython_genutils>=0.2.0",)),
# ipykernel max ver added for macOS 10.13 compatibility, min taken
# from setup.py. This is version has to mirror the one from setup.py
("ipykernel", ("ipykernel>=5.5.6,<6",)),
]


Expand All @@ -62,12 +57,12 @@ def os_compatibility_flags():
an issue to be resolved before doing a Mu release.
"""
extra_flags = []
# For macOS the oldest supported version is 10.12 Sierra, as that's the
# oldest version supported by PyQt5 v5.13
# For macOS the oldest supported version is 10.13 High Sierra,
# as that's the oldest version supported by PyQt5 v5.15
if sys.platform == "darwin":
extra_flags.extend(
[
"--platform=macosx_10_12_x86_64",
"--platform=macosx_10_13_x86_64",
"--only-binary=:all:",
]
)
Expand Down
36 changes: 17 additions & 19 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,26 +25,21 @@
# The core 'install_requires' should only be things
# which are needed for the main editor to function.
#
"PyQt5==5.13.2"
"PyQt5==5.15.10"
+ ';"arm" not in platform_machine and "aarch" not in platform_machine',
"QScintilla==2.11.3"
"QScintilla==2.14.1"
+ ';"arm" not in platform_machine and "aarch" not in platform_machine',
"PyQtChart==5.13.1"
"PyQtChart==5.15.6"
+ ';"arm" not in platform_machine and "aarch" not in platform_machine',
# FIXME: jupyter-client added for Py3.5 compatibility, to be dropped after
# Mu v1.1 release. So, qtconsole < 5 and jupyter-client < 6.2 (issue #1444)
"jupyter-client>=4.1,<6.2",
# FIXME: ipykernel max added for macOS 10.13 compatibility, min taken from
# qtconsole 4.7.7. Full line can be removed after Mu v1.1 release.
# Dependency mirrored for user venv in mu/wheels/__init__.py
"ipykernel>=4.1,<6",
# FIXME: ipykernel<6 depends on ipython_genutils, but it isn't explicitly
# declared as a dependency. It also depends on traitlets, which
# incidentally brought ipython_genutils, but in v5.1 it was dropped, so as
# a workaround we need to manually specify it here.
"ipython_genutils>=0.2.0",
"qtconsole==4.7.7",
#
# ipykernel has to be < v6 for macOS 10.13 compatibility (v6 depends on
# debugpy package), v5.5.6 resolves issue ipython/ipykernel#759.
# Full line can be removed after Mu v1.3 release as PyQt6 drops old macOS.
# ipykernel version has to be mirrored in mu/wheels/__init__.py
"ipykernel>=5.5.6,<6",
"qtconsole~=5.4",
# In Python 3.12 the deprecated 'imp' module was removed from the stdlib.
# ipykernel only moved to importlib in v6.10, so this is a "forward-port"
"zombie_imp>=0.0.2;python_version>='3.12'",
# adafruit-board-toolkit is used to find serial ports and help identify
# CircuitPython boards in the CircuitPython mode.
"adafruit-board-toolkit~=1.1",
Expand All @@ -58,7 +53,7 @@
"flake8 >= 3.8.3",
# Clamp click max version to workaround incompatibility with black<22.1.0
"click<=8.0.4",
"black>=19.10b0,<22.1.0;python_version>'3.5'",
"black>=19.10b0,<22.1.0",
"platformdirs>=2.0.0,<3.0.0",
"semver>=2.8.0",
# virtualenv vendors pip, we need at least pip v19.3 to install some
Expand All @@ -75,6 +70,9 @@
# Needed to resolve an issue with paths in the user virtual environment
#
"pywin32; sys_platform=='win32'",
# pkg_resources has been removed in Python 3.12, until we move to importlib
# we need it via setuptools: https://github.com/mu-editor/mu/issues/2485
"setuptools",
]


Expand Down Expand Up @@ -128,7 +126,7 @@
"mu.modes.api",
"mu.wheels",
],
python_requires=">=3.5,<3.9",
python_requires=">=3.7,<3.13",
install_requires=install_requires,
extras_require=extras_require,
package_data={"mu.wheels": ["*.whl", "*.zip"]},
Expand Down
1 change: 1 addition & 0 deletions tests/interface/test_editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,7 @@ def test_EditorPane_toggle_comments_handle_crlf_newline():
"""
ep = mu.interface.editor.EditorPane(None, "test\r\nline 2\n")
ep.hasSelectedText = mock.MagicMock(return_value=False)
ep.setCursorPosition(0, 0)
ep.toggle_comments()
assert ep.text() == "# test\nline 2\n"
assert ep.selectedText() == "# test"
Expand Down

0 comments on commit 0819f62

Please sign in to comment.