diff --git a/.github/workflows/meson-test.yml b/.github/workflows/meson-test.yml index b182f03..f942e60 100644 --- a/.github/workflows/meson-test.yml +++ b/.github/workflows/meson-test.yml @@ -10,7 +10,7 @@ on: jobs: meson-build: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: "CHECKOUT: nvme-stas" uses: actions/checkout@v4 @@ -22,22 +22,19 @@ jobs: - name: "INSTALL: python packages" run: | - sudo apt update sudo apt-get install --yes --quiet python3-pip python3-wheel pylint pyflakes3 python3-systemd python3-pyudev python3-lxml python3-dasbus python3-gi python3-importlib-resources python3-pyfakefs - name: "INSTALL: documentation packages" run: | - sudo apt update sudo apt-get install --yes --quiet docbook-xml docbook-xsl xsltproc - name: "INSTALL: remaining debian packages" run: | - sudo apt update sudo apt-get install --yes --quiet iproute2 libglib2.0-dev libgirepository1.0-dev libsystemd-dev - name: "INSTALL: pip packages" run: | - sudo pip install vermin --break-system-packages + pip install vermin - name: "INSTALL: libnvme packages (needed to build libnvme)" run: | diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 95f5196..aa78f0f 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -20,13 +20,27 @@ jobs: recursive: true ignore: DL3041 - python-lint: + python-black: + if: ${{ !github.event.act }} # skip during local actions testing + name: python-black formatter runs-on: ubuntu-latest + steps: + - name: "CHECKOUT: nvme-stas" + uses: actions/checkout@v4 + + - name: "BLACK" + uses: psf/black@24.10.0 + with: + options: "--check --diff --color --line-length 120 --skip-string-normalization --extend-exclude (subprojects|debian|.build)" + src: "." + + python-lint-Jammy: + runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: - python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.9", "3.10"] steps: - name: "CHECKOUT: nvme-stas" @@ -41,11 +55,12 @@ jobs: run: | sudo apt update sudo apt-get install --yes --quiet meson ninja-build cmake libgirepository1.0-dev libsystemd-dev swig libjson-c-dev - sudo apt-get install --yes --quiet python3-wheel python3-systemd python3-pyudev python3-dasbus python3-gi python3-lxml pylint pyflakes3 python3-pyflakes python3-tomli + sudo apt-get install --yes --quiet python3-wheel python3-systemd python3-pyudev python3-dasbus python3-gi python3-lxml pyflakes3 python3-tomli - name: "INSTALL: pip packages" run: | - sudo pip install PyGObject --break-system-packages + pip install pylint --upgrade + pip install PyGObject --upgrade - name: "BUILD: [libnvme, nvme-stas]" uses: BSFishy/meson-build@v1.0.3 @@ -64,27 +79,69 @@ jobs: python3 -VV python3 -m site pylint --version - echo "pyflakes $(python3 -m pyflakes --version)" + echo "pyflakes3 $(pyflakes3 --version)" - - name: Pylint - run: | - pylint -j 0 --rcfile=test/pylint.rc .build/stacctl .build/stacd .build/stafctl .build/stafd .build/stasadm .build/staslib + #- name: Pylint + # run: | + # pylint --rcfile=test/pylint.rc .build/stacctl .build/stacd .build/stafctl .build/stafd .build/stasadm .build/staslib - name: Pyflakes if: always() run: | - python3 -m pyflakes .build/stacctl .build/stacd .build/stafctl .build/stafd .build/stasadm .build/staslib + pyflakes3 .build/stacctl .build/stacd .build/stafctl .build/stafd .build/stasadm .build/staslib + + python-lint-Noble: + runs-on: ubuntu-24.04 + + strategy: + fail-fast: false + matrix: + python-version: ["3.11", "3.12", "3.13"] - python-black: - if: ${{ !github.event.act }} # skip during local actions testing - name: python-black formatter - runs-on: ubuntu-latest steps: - name: "CHECKOUT: nvme-stas" uses: actions/checkout@v4 - - name: "BLACK" - uses: psf/black@24.10.0 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5.3.0 with: - options: "--check --diff --color --line-length 120 --skip-string-normalization --extend-exclude (subprojects|debian|.build)" - src: "." + python-version: ${{ matrix.python-version }} + + - name: "INSTALL: apt-get packages" + run: | + sudo apt update + sudo apt-get install --yes --quiet meson ninja-build cmake libgirepository1.0-dev libsystemd-dev swig libjson-c-dev + sudo apt-get install --yes --quiet python3-wheel python3-systemd python3-pyudev python3-dasbus python3-gi python3-lxml pylint pyflakes3 python3-tomli + + #- name: "INSTALL: pip packages" + # run: | + # pip install pylint + # pip install PyGObject + + - name: "BUILD: [libnvme, nvme-stas]" + uses: BSFishy/meson-build@v1.0.3 + with: + action: build + directory: .build + setup-options: --buildtype=release --sysconfdir=/etc --prefix=/usr -Dlibnvme:buildtype=release -Dlibnvme:sysconfdir=/etc -Dlibnvme:prefix=/usr -Dlibnvme:python=enabled -Dlibnvme:libdbus=disabled -Dlibnvme:openssl=disabled -Dlibnvme:json-c=disabled -Dlibnvme:keyutils=disabled + + - name: Set PYTHONPATH + run: | + echo "PYTHONPATH=.build:.build/subprojects/libnvme:/usr/lib/python3/dist-packages" >> $GITHUB_ENV + + - name: Show test environment + run: | + echo -e "Build Directory:\n$(ls -laF .build)" + python3 -VV + python3 -m site + pylint --version + echo "pyflakes3 $(pyflakes3 --version)" + + - name: Pylint + run: | + pylint --jobs=0 --rcfile=test/pylint.rc .build/stacctl .build/stacd .build/stafctl .build/stafd .build/stasadm .build/staslib + + - name: Pyflakes + if: always() + run: | + pyflakes3 .build/stacctl .build/stacd .build/stafctl .build/stafd .build/stasadm .build/staslib diff --git a/Makefile b/Makefile index e069fe1..46c13c1 100644 --- a/Makefile +++ b/Makefile @@ -38,6 +38,7 @@ endif purge: ifneq ("$(wildcard ${BUILD-DIR})","") rm -rf ${BUILD-DIR} + meson subprojects purge --confirm endif .PHONY: install diff --git a/meson.build b/meson.build index a18b4a6..56a1331 100644 --- a/meson.build +++ b/meson.build @@ -39,7 +39,13 @@ if want_man or want_html or want_readthedocs buildtime_modules += ['lxml'] endif -python3 = import('python').find_installation('python3', modules:buildtime_modules) +# On older systems we had to invoke Python 3 as "python3". On newer systems, +# Python 2 has been completely deprecated and Python 3 is simply named "python". +pymod = import('python') +python3 = pymod.find_installation('python3', modules:buildtime_modules, required:false) +if not python3.found() + python3 = pymod.find_installation('python', modules:buildtime_modules) +endif python_version = python3.language_version() python_version_req = '>=3.6' if not python_version.version_compare(python_version_req)