From f68798a0816bd109ddb135816c03aeb1f81fa61c Mon Sep 17 00:00:00 2001 From: toofar Date: Sat, 18 Mar 2023 15:20:19 +1300 Subject: ci: attempt to make the qt6 docker run work On CI were were getting "Could not import sip" because link_pyqt was looking for PyQt5.sip. I made that look at QUTE_QT_WRAPPER since that's being set already on tox.ini There are probably a few other changes around link_pyqt and the makefile etc we need to change when we switch the default wrapper. I overrode the default `py` tox environment with py-qt6 to override those wrapper related variables. I probably could have done something sneaky with curly braces to make it so we don't have to add a few more lines to the file. But in my opinion in config file is far to obfuscated and hard to maintain already. I changed the docker file to call the new py-qt6 env if it's a qt6 container. I'm not 100% sure that is required though since there is also a tox invocation in the GH action definition, maybe that overrides the container entrypoint? Also changed the indentation in the dockerfile template a bit to make it easier to see where the conditionals start and end. Speaking of which I changed the matrix definition and tox invocation to match a later one to hopefully make it so we can invoke different tox environments in the containers without having to rebuild the containers. Not sure I did that right, I'll see soon. I added the unstable-qt6 container generation line so we can use it in the future, and to match the not-qt6 one. I'm not switching to that in CI though because the pyqt used by that is broken at the moment (ref https://www.riverbankcomputing.com/pipermail/pyqt/2023-March/045214.html) Also fixed the vim modeline in generate.py so my syntax highlighting works. --- .github/workflows/ci.yml | 20 +++++++++++++------- scripts/dev/ci/docker/Dockerfile.j2 | 26 +++++++++++++------------- scripts/dev/ci/docker/generate.py | 3 ++- scripts/link_pyqt.py | 7 ++++--- tox.ini | 5 +++++ 5 files changed, 37 insertions(+), 24 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e4c264ed5..c9b6a023e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -89,12 +89,18 @@ jobs: strategy: fail-fast: false matrix: - image: - - archlinux-webkit - - archlinux-webengine - - archlinux-webengine-qt6 - - archlinux-webengine-unstable - # - archlinux-webengine-unstable-qt6 # FIXME:qt6.5 activate + include: + - testenv: py + image: archlinux-webkit + - testenv: py + image: archlinux-webengine + - testenv: py-qt6 + image: archlinux-webengine-qt6 + - testenv: py + image: archlinux-webengine-unstable + args: "" + # - testenv: py + # image: archlinux-webengine-unstable-qt6 # FIXME:qt6.5 activate container: image: "qutebrowser/ci:${{ matrix.image }}" env: @@ -112,7 +118,7 @@ jobs: - name: Set up problem matchers run: "python scripts/dev/ci/problemmatchers.py py38 ${{ runner.temp }}" - name: Run tox - run: dbus-run-session tox -e py + run: "dbus-run-session -- tox -e ${{ matrix.testenv }} -- ${{ matrix.args }}" tests: if: "!contains(github.event.head_commit.message, '[ci skip]')" diff --git a/scripts/dev/ci/docker/Dockerfile.j2 b/scripts/dev/ci/docker/Dockerfile.j2 index 0ca7d330d..6a06faf82 100644 --- a/scripts/dev/ci/docker/Dockerfile.j2 +++ b/scripts/dev/ci/docker/Dockerfile.j2 @@ -10,19 +10,19 @@ RUN pacman -Su --noconfirm \ python-tox \ python-distlib \ {% if qt6 %} - qt6-base \ - qt6-declarative \ - {% if webengine %} - qt6-webengine python-pyqt6-webengine \ - {% else %}{{ 1/0 }}{% endif %} - python-pyqt6 \ + qt6-base \ + qt6-declarative \ + {% if webengine %} + qt6-webengine python-pyqt6-webengine \ + {% else %}{{ 1/0 }}{% endif %} + python-pyqt6 \ {% else %} - qt5-base \ - qt5-declarative \ - {% if webengine %} - qt5-webengine python-pyqtwebengine \ - {% endif %} - python-pyqt5 \ + qt5-base \ + qt5-declarative \ + {% if webengine %} + qt5-webengine python-pyqtwebengine \ + {% endif %} + python-pyqt5 \ {% endif %} xorg-xinit \ xorg-server-xvfb \ @@ -56,4 +56,4 @@ WORKDIR /home/user CMD git clone /outside qutebrowser.git && \ cd qutebrowser.git && \ - tox -e py + tox -e {% if qt6 %}py-qt6{% else %}py{% endif %} diff --git a/scripts/dev/ci/docker/generate.py b/scripts/dev/ci/docker/generate.py index 763a04ecf..2eca90d78 100644 --- a/scripts/dev/ci/docker/generate.py +++ b/scripts/dev/ci/docker/generate.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# vim: ft=sh fileencoding=utf-8 sts=4 sw=4 et: +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: # Copyright 2019-2021 Florian Bruhin (The Compiler) @@ -35,6 +35,7 @@ def main(): 'archlinux-webengine': {'webengine': True, 'unstable': False, 'qt6': False}, 'archlinux-webengine-qt6': {'webengine': True, 'unstable': False, 'qt6': True}, 'archlinux-webengine-unstable': {'webengine': True, 'unstable': True, 'qt6': False}, + 'archlinux-webengine-unstable-qt6': {'webengine': True, 'unstable': True, 'qt6': True}, }[image] with open('Dockerfile', 'w') as f: diff --git a/scripts/link_pyqt.py b/scripts/link_pyqt.py index e27a54a68..ff524f056 100644 --- a/scripts/link_pyqt.py +++ b/scripts/link_pyqt.py @@ -140,10 +140,10 @@ def link_pyqt(executable, venv_path, *, version='5'): try: get_lib_path(executable, f'PyQt{version}.sip') except Error: - # There is no PyQt5.sip, so we need to copy the toplevel sip. + # There is no PyQt*.sip, so we need to copy the toplevel sip. sip_file = get_lib_path(executable, 'sip') else: - # There is a PyQt5.sip, it'll get copied with the PyQt5 dir. + # There is a PyQt*.sip, it'll get copied with the PyQt* dir. sip_file = None sipconfig_file = get_lib_path(executable, 'sipconfig', required=False) @@ -218,7 +218,8 @@ def main(): executable = get_tox_syspython(args.path) if args.tox else sys.executable venv_path = get_venv_lib_path(args.path) - link_pyqt(executable, venv_path) + wrapper = os.environ["QUTE_QT_WRAPPER"] + link_pyqt(executable, venv_path, version=wrapper[-1]) if __name__ == '__main__': diff --git a/tox.ini b/tox.ini index 842e527b7..2fba834cc 100644 --- a/tox.ini +++ b/tox.ini @@ -53,6 +53,11 @@ commands = {envpython} -bb -m pytest {posargs:tests} cov: {envpython} scripts/dev/check_coverage.py {posargs} +[testenv:py-qt6] +setenv = + PYTEST_QT_API=pyqt6 + QUTE_QT_WRAPPER=PyQt6 + [testenv:bleeding] basepython = {env:PYTHON:python3} setenv = -- cgit v1.2.3-54-g00ecf