Skip to content

[pre-commit.ci] pre-commit autoupdate #1215

[pre-commit.ci] pre-commit autoupdate

[pre-commit.ci] pre-commit autoupdate #1215

Workflow file for this run

name: "Build and test"
on: [ push, pull_request ]
permissions:
contents: read
env:
CFLAGS: "-Werror -Wno-error=missing-field-initializers"
UBUNTU_PACKAGES: libgudev-1.0-dev libxml++2.6-dev valgrind tree python3-pip python3-setuptools libevdev-dev udev
PIP_PACKAGES: meson ninja libevdev pyudev pytest yq
jobs:
build-and-dist:
runs-on: ubuntu-24.04
strategy:
matrix:
compiler:
- gcc
- clang
meson_options:
- ''
# clang requires b_lundef=false for b_santize, see
# https://github.com/mesonbuild/meson/issues/764
- '-Db_sanitize=address,undefined -Db_lundef=false'
steps:
- uses: actions/checkout@v4
# install python so we get pip for meson
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- uses: ./.github/actions/pkginstall
with:
apt: $UBUNTU_PACKAGES
pip: $PIP_PACKAGES
- name: make /etc/udev/hwdb.d writable
run: |
sudo mkdir -p /etc/udev/hwdb.d
sudo chmod o+rwx /etc/udev/hwdb.d
- name: make systemd-hwdb sticky
run: sudo chmod +s /usr/bin/systemd-hwdb
- name: meson test ${{matrix.meson_options}}
uses: ./.github/actions/meson
with:
meson_args: ${{matrix.meson_options}}
env:
CC: ${{matrix.compiler}}
# create the tarball
- name: meson dist
uses: ./.github/actions/meson
with:
ninja_args: dist
# Capture all the meson logs, even if we failed
- uses: actions/upload-artifact@v4
if: ${{ always() }} # even if we fail
with:
name: meson test logs-${{matrix.compiler}} ${{matrix.meson_options}}
path: |
builddir/meson-logs/*
# move the tarball to the top level
- name: move tarballs to top level
run: mv builddir/meson-dist/libwacom-*tar.xz .
# We only need one tarball for the build-from-tarball job
- uses: actions/upload-artifact@v4
if: ${{ matrix.compiler == 'gcc' && matrix.meson_options == '' }}
with:
name: tarball
path: libwacom-*tar.xz
###
#
# scan-build
#
scan-build:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
# install python so we get pip for meson
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- uses: ./.github/actions/pkginstall
with:
apt: $UBUNTU_PACKAGES
pip: $PIP_PACKAGES
- name: scan-build
uses: ./.github/actions/meson
with:
meson_skip_test: 1
ninja_args: scan-build
###
#
# valgrind run
#
valgrind:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
# install python so we get pip for meson
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- uses: ./.github/actions/pkginstall
with:
apt: $UBUNTU_PACKAGES
pip: $PIP_PACKAGES
- name: make /etc/udev/hwdb.d writable
run: |
sudo mkdir -p /etc/udev/hwdb.d
sudo chmod o+rwx /etc/udev/hwdb.d
# for the valgrind case, we need custom setup, the matrix isn't
# flexible enough for this
- name: valgrind - meson test
uses: ./.github/actions/meson
with:
meson_test_args: --setup=valgrind
env:
CC: ${{matrix.compiler}}
# Capture all the meson logs, even if we failed
- uses: actions/upload-artifact@v4
if: ${{ always() }} # even if we fail
with:
name: meson test logs-valgrind
path: |
builddir/meson-logs/testlog*.txt
builddir/meson-logs/meson-log.txt
####
# /etc/ loading check
etcdir:
needs: build-and-dist
runs-on: ubuntu-24.04
strategy:
matrix:
command:
# A variety of ways to split the database across the two locations
# we load from.
- sudo mv /usr/share/libwacom/wacom-intuos*.tablet /etc/libwacom
- sudo mv /usr/share/libwacom/*.tablet /etc/libwacom
- sudo mv /usr/share/libwacom/*.stylus /etc/libwacom
- sudo mv /usr/share/libwacom/*.tablet $HOME/.config/libwacom
- sudo mv /usr/share/libwacom/*.stylus $HOME/.config/libwacom
- sudo mv /usr/share/libwacom/wacom-*.tablet $HOME/.config/libwacom && sudo mv /usr/share/libwacom/huion-*.tablet /etc/libwacom
# split the wacom.stylus file into to two files to check for
# accumlated loading
- sudo csplit data/wacom.stylus '/^\[0x822\]/' && sudo mv xx00 /etc/libwacom/first.stylus && sudo mv xx01 /usr/share/libwacom/wacom.stylus
steps:
- uses: actions/checkout@v4
# install python so we get pip for meson
- uses: actions/setup-python@v5
with:
python-version: '3.12'
# Run as sudo because we install to /etc and thus need the pip
# packages available to root
- uses: ./.github/actions/pkginstall
with:
apt: $UBUNTU_PACKAGES
pip: $PIP_PACKAGES
pip_precmd: sudo
- uses: ./.github/actions/meson
with:
meson_args: --prefix=/usr
meson_skip_test: yes
ninja_args: install
ninja_precmd: sudo
- name: list devices with database in /usr
run: libwacom-list-devices --format=datafile > devicelist.default.txt
- run: sudo mkdir /etc/libwacom
- run: sudo mkdir $HOME/.config/libwacom
- name: split the databases between /usr/share and /etc
run: ${{matrix.command}}
- name: list devices with database in /etc and /usr
run: libwacom-list-devices --format=datafile > devicelist.modified.txt
- name: compare device database
run: diff -u8 devicelist.default.txt devicelist.modified.txt
####
# duplicate device check
duplicate-devices:
needs: build-and-dist
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
# install python so we get pip for meson
- uses: actions/setup-python@v5
with:
python-version: '3.12'
# Run as sudo because we install to /etc and thus need the pip
# packages available to root
- uses: ./.github/actions/pkginstall
with:
apt: $UBUNTU_PACKAGES
pip: $PIP_PACKAGES
pip_precmd: sudo
- uses: ./.github/actions/meson
with:
meson_args: --prefix=/usr
meson_skip_test: yes
ninja_args: install
ninja_precmd: sudo
- name: list devices with database in /usr
run: libwacom-list-devices --format=yaml > devicelist.default.txt
- run: sudo mkdir /etc/libwacom
# We override a Cintiq 27QHD with a single device match, and one of
# the multiple matches of the Intuos Pro L.
- name: copy and modify tablet files to override another one
run: |
sed -e 's/27QHD/27QHD MODIFIED/' data/wacom-cintiq-27hd.tablet | sudo tee /etc/libwacom/wacom-cintiq-27hd.tablet
sed -e 's/Pro L/Pro L MODIFIED/' -e 's/usb|056a|0358;//' data/wacom-intuos-pro-2-l.tablet | sudo tee /etc/libwacom/wacom-intuos-pro-2-l.tablet
- name: list all devices for debugging
run: libwacom-list-devices --format=yaml
# We expect the modified tablets to be listed
# We expect the remaining match for a modified tablet to not be listed
# We expect the overridden match *not* to be listed
- name: check for the expected devices to be present (or not present)
run: |
test "$(libwacom-list-devices --format=yaml | yq -r '.devices[] | select(.bus == "usb") | select(.vid == "0x056a") | select(.pid == "0x032a") | .name')" == "Wacom Cintiq 27QHD MODIFIED"
test "$(libwacom-list-devices --format=yaml | yq -r '.devices[] | select(.bus == "bluetooth") | select(.vid == "0x056a") | select(.pid == "0x0361") | .name')" == "Wacom Intuos Pro L MODIFIED"
test $(libwacom-list-devices --format=yaml | yq -r '.devices[] | select(.bus == "usb") | select(.vid == "0x056a") | select(.pid == "0x0358") | .name' | wc -l) -eq 0
test $(libwacom-list-devices --format=yaml | yq -r '.devices[] | select(.bus == "usb") | select(.vid == "0x056a") | select(.pid == "0x032a") | .name' | wc -l) -eq 1
####
# make sure clean_svg.py works on our layout files
clean-svg-check:
needs: build-and-dist
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: run clean-svg on all .tablet files
run: |
for tabletfile in data/*.tablet; do
echo "Checking $tabletfile"
./tools/clean_svg.py --ignore-missing "$tabletfile"
done
###
#
# tarball verification
#
build-from-tarball:
needs: build-and-dist
runs-on: ubuntu-24.04
env:
TARBALLDIR: '_tarball_dir'
INSTALLDIR: '/tmp/libwacom/_inst'
steps:
- uses: actions/checkout@v4
- name: install python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- uses: ./.github/actions/pkginstall
with:
apt: $UBUNTU_PACKAGES
pip: $PIP_PACKAGES
- name: fetch tarball from previous job(s)
uses: actions/download-artifact@v4
with:
name: tarball
- name: extract tarball
run: |
mkdir -p "$TARBALLDIR"
tar xf libwacom-*.tar.xz -C "$TARBALLDIR"
- run: mkdir -p "$INSTALLDIR"
- name: build from tarball with meson
uses: ./.github/actions/meson
with:
srcdir: $TARBALLDIR/libwacom-*/
meson_args: --prefix="$INSTALLDIR"
ninja_args: test install