On Thu, Sep 16, 2021 at 12:10 AM John Snow <js...@redhat.com> wrote: > GitLab: https://gitlab.com/jsnow/qemu/-/commits/python-package-iotest > CI: https://gitlab.com/jsnow/qemu/-/pipelines/371611883 > Based-On: <20210915175318.853225-1-hre...@redhat.com> > "[PULL 00/32] Block patches" > > Since iotests are such a heavy and prominent user of the Python qemu.qmp > and qemu.machine packages, it would be convenient if the Python linting > suite also checked this client for any possible regressions introduced > by shifting around signatures, types, or interfaces in these packages. > > (We'd eventually find those problems when iotest 297 ran, but with > increasing distance between Python development and Block development, > the risk of an accidental breakage in this regard increases. I, > personally, know to run iotests (and especially 297) after changing > Python code, but not everyone in the future might. Plus, I am lazy, and > I like only having to push one button.) > > Add the ability for the Python CI to run the iotest linters too, which > means that the iotest linters would be checked against: > > - Python 3.6, using a frozen set of linting packages at their oldest > supported versions, using 'pipenv' > - Python 3.6 through Python 3.10 inclusive, using 'tox' and the latest > versions of mypy/pylint that happen to be installed during test > time. This CI test is allowed to fail with a warning, and can serve > as a bellwether for when new incompatible changes may disrupt the > linters. Testing against old and new Python interpreters alike can > help surface incompatibility issues we may need to be aware of.) > > Here are example outputs of those CI jobs with this series applied: > - "check-python-pipenv": https://gitlab.com/jsnow/qemu/-/jobs/1377735087 > - "check-python-tox": https://gitlab.com/jsnow/qemu/-/jobs/1377735088 > > You can also run these same tests locally from ./python, plus one more: > > - "make check-dev" to test against whatever python you have. > - "make check-pipenv", if you have Python 3.6 and pipenv installed. > - "make check-tox", to test against multiple python versions you have > installed, > from 3.6 to 3.10 inclusive. (CI tests against all 5.) > > See the old commit message for more sample output, etc. > > https://lists.gnu.org/archive/html/qemu-devel/2021-06/msg07056.html > > V3: > - Added patch 1 which has been submitted separately upstream, > but was necessary for testing. > - Rebased on top of hreitz/block, which fixed some linting issues. > - Added a workaround for a rather nasty mypy bug ... >:( > > V2: > - Added patches 1-5 which do some more delinting. > - Added patch 8, which scans subdirs for tests to lint. > - Added patch 17, which improves the speed of mypy analysis. > - Patch 14 is different because of the new patch 8. > > John Snow (16): > python: Update for pylint 2.10 > iotests/mirror-top-perms: Adjust imports > iotests/migrate-bitmaps-postcopy-test: declare instance variables > iotests/migrate-bitmaps-test: delint > iotests/297: modify is_python_file to work from any CWD > iotests/297: Add get_files() function > iotests/297: Don't rely on distro-specific linter binaries > iotests/297: Create main() function > iotests/297: Separate environment setup from test execution > iotests/297: Add 'directory' argument to run_linters > iotests/297: return error code from run_linters() > iotests/297: split linters.py off from 297 > iotests/linters: Add entry point for Python CI linters > iotests/linters: Add workaround for mypy bug #9852 > python: Add iotest linters to test suite > iotests/linters: check mypy files all at once > > python/qemu/machine/machine.py | 9 +- > python/setup.cfg | 1 + > python/tests/iotests.sh | 4 + > tests/qemu-iotests/297 | 81 ++--------- > tests/qemu-iotests/linters.py | 129 ++++++++++++++++++ > .../tests/migrate-bitmaps-postcopy-test | 3 + > tests/qemu-iotests/tests/migrate-bitmaps-test | 50 ++++--- > tests/qemu-iotests/tests/mirror-top-perms | 7 +- > 8 files changed, 186 insertions(+), 98 deletions(-) > create mode 100755 python/tests/iotests.sh > create mode 100755 tests/qemu-iotests/linters.py > > -- > 2.31.1 > > > FWIW: I sent a new version of a pull request that adds pylint 2.10 *and* 2.11 support; the 2.11 release happened just yesterday, so I am going to rebase this series.
Additionally, I found a new way to avoid sys.path hacking in all of our test files entirely, so I will include that in this series, rebase, and resend extremely soon. If you have difficulties applying this patchset or testing it, sit tight for a refreshed version -- but most of these patches can still be reviewed on their own merits in the meantime. Thanks, --js