Re: [PATCH v2 00/17] python/iotests: Run iotest linters during Python CI
On 20.07.21 19:33, John Snow wrote: GitLab: https://gitlab.com/jsnow/qemu/-/commits/python-package-iotest CI: https://gitlab.com/jsnow/qemu/-/pipelines/340144191 I’ll take the liberty of applying patches 1 and 2 to my block-next branch, because, well, they fix some of the 297 errors I’m seeing with an updated pylint. (There’s more still, namely some unspecified-encoding errors, one use-dict-literal, and one use-list-literal, but I don’t think there are patches for that in this series, so I guess I’ll have to have a go myself...) To make this formal: Thanks, I’ve applied patches 1 and 2 to my block-next branch: https://github.com/XanClic/qemu/commits/block-next Hanna
Re: [PATCH v2 00/17] python/iotests: Run iotest linters during Python CI
I realize that some of this has been covered before: https://lists.gnu.org/archive/html/qemu-devel/2021-05/msg04221.html Missed it at the time -- I suppose these patches never went in. I'll rebase my series and front-load these patches. --js On Tue, Jul 20, 2021 at 1:33 PM John Snow wrote: > GitLab: https://gitlab.com/jsnow/qemu/-/commits/python-package-iotest > CI: https://gitlab.com/jsnow/qemu/-/pipelines/340144191 > > 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", if you have Python 3.6 through Python 3.10 installed. > > See the old commit message for more sample output, etc. > > https://lists.gnu.org/archive/html/qemu-devel/2021-06/msg07056.html > > 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. > > Unreviewed patches: > > [01] iotests-use-with-statement-for # [SOB] JS > [02] iotests-use-subprocess.devnull # [SOB] JS > [03] iotests-mirror-top-perms # [SOB] JS > [04] iotests-migrate-bitmaps# [SOB] JS > [05] iotests-migrate-bitmaps-test # [SOB] JS > [07] iotests-297-add-get_files # [SOB] JS > [08] wip-make-the-test-finding # [SOB] JS > [14] iotests-297-split-linters-py # [SOB] JS > [17] iotests-297-check-mypy-files # [SOB] JS > > --js > > John Snow (17): > iotests: use with-statement for open() calls > iotests: use subprocess.DEVNULL instead of open("/dev/null") > iotests/mirror-top-perms: Adjust import paths > 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: Include sub-directories when finding tests to lint > 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 > python: Add iotest linters to test suite > iotests/linters: check mypy files all at once > > python/tests/iotests.sh | 2 + > tests/qemu-iotests/297| 80 ++- > tests/qemu-iotests/iotests.py | 21 +-- > tests/qemu-iotests/linters.py | 130 ++ > .../tests/migrate-bitmaps-postcopy-test | 3 + > tests/qemu-iotests/tests/migrate-bitmaps-test | 70 +- > tests/qemu-iotests/tests/mirror-top-perms | 7 +- > 7 files changed, 198 insertions(+), 115 deletions(-) > create mode 100755 python/tests/iotests.sh > create mode 100755 tests/qemu-iotests/linters.py > > -- > 2.31.1 > > >
[PATCH v2 00/17] python/iotests: Run iotest linters during Python CI
GitLab: https://gitlab.com/jsnow/qemu/-/commits/python-package-iotest CI: https://gitlab.com/jsnow/qemu/-/pipelines/340144191 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", if you have Python 3.6 through Python 3.10 installed. See the old commit message for more sample output, etc. https://lists.gnu.org/archive/html/qemu-devel/2021-06/msg07056.html 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. Unreviewed patches: [01] iotests-use-with-statement-for # [SOB] JS [02] iotests-use-subprocess.devnull # [SOB] JS [03] iotests-mirror-top-perms # [SOB] JS [04] iotests-migrate-bitmaps# [SOB] JS [05] iotests-migrate-bitmaps-test # [SOB] JS [07] iotests-297-add-get_files # [SOB] JS [08] wip-make-the-test-finding # [SOB] JS [14] iotests-297-split-linters-py # [SOB] JS [17] iotests-297-check-mypy-files # [SOB] JS --js John Snow (17): iotests: use with-statement for open() calls iotests: use subprocess.DEVNULL instead of open("/dev/null") iotests/mirror-top-perms: Adjust import paths 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: Include sub-directories when finding tests to lint 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 python: Add iotest linters to test suite iotests/linters: check mypy files all at once python/tests/iotests.sh | 2 + tests/qemu-iotests/297| 80 ++- tests/qemu-iotests/iotests.py | 21 +-- tests/qemu-iotests/linters.py | 130 ++ .../tests/migrate-bitmaps-postcopy-test | 3 + tests/qemu-iotests/tests/migrate-bitmaps-test | 70 +- tests/qemu-iotests/tests/mirror-top-perms | 7 +- 7 files changed, 198 insertions(+), 115 deletions(-) create mode 100755 python/tests/iotests.sh create mode 100755 tests/qemu-iotests/linters.py -- 2.31.1