ci: Add check that wiki and generator are in sync
Add a new test that checks that the unsupported list is not out of date. As the wiki can be edited at any time, add this as a further optional check into the CI pipeline.
This commit is contained in:
parent
1f2d723485
commit
284f6f1ef8
2 changed files with 63 additions and 0 deletions
|
@ -112,6 +112,15 @@ test_indent:
|
|||
- git diff
|
||||
- "! git status -s | grep -q ."
|
||||
|
||||
test_unsupported_list:
|
||||
stage: check-source
|
||||
except:
|
||||
variables:
|
||||
- $CI_PIPELINE_SOURCE == "schedule"
|
||||
allow_failure: true
|
||||
script:
|
||||
- tests/hwdb-check-unsupported.py
|
||||
|
||||
flatpak:
|
||||
stage: flatpak
|
||||
extends: .flatpak
|
||||
|
|
54
tests/hwdb-check-unsupported.py
Executable file
54
tests/hwdb-check-unsupported.py
Executable file
|
@ -0,0 +1,54 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import sys
|
||||
import urllib
|
||||
import urllib.request
|
||||
import re
|
||||
|
||||
error = False
|
||||
|
||||
try:
|
||||
response = urllib.request.urlopen('https://gitlab.freedesktop.org/libfprint/wiki/-/wikis/Unsupported-Devices.md')
|
||||
except:
|
||||
print("Could not download current list of unsupported devices, skipping test.")
|
||||
sys.exit(77)
|
||||
data = response.read().decode('utf-8')
|
||||
|
||||
devices = []
|
||||
devices_re = re.compile(r'^.*([0-9a-fA-F]{4}):([0-9a-fA-F]{4}).*$', re.MULTILINE)
|
||||
for m in devices_re.finditer(data):
|
||||
vid = m.group(1)
|
||||
pid = m.group(2)
|
||||
devices.append((vid, pid))
|
||||
|
||||
generator = open(os.path.join(os.path.dirname(__file__), '..', 'libfprint', 'fprint-list-udev-hwdb.c')).read()
|
||||
|
||||
id_re = re.compile(' { .vid = 0x([a-fA-F0-9]*), .pid = 0x([a-fA-F0-9]*) }')
|
||||
# Check everything is the same
|
||||
started = False
|
||||
for l in generator.split('\n'):
|
||||
m = id_re.match(l)
|
||||
if m is None:
|
||||
# Stop on the first line that does not match anymore
|
||||
if started:
|
||||
break
|
||||
continue
|
||||
else:
|
||||
started = True
|
||||
|
||||
vid_pid = (m.group(1), m.group(2))
|
||||
try:
|
||||
devices.remove(vid_pid)
|
||||
except ValueError:
|
||||
print("Generator has entry that is not on wiki: {}:{}".format(*vid_pid))
|
||||
error = True
|
||||
|
||||
for vid_pid in devices:
|
||||
print("New entry from wiki is missing: {}:{}".format(*vid_pid))
|
||||
error = True
|
||||
|
||||
if error:
|
||||
sys.exit(1)
|
||||
else:
|
||||
sys.exit(0)
|
Loading…
Reference in a new issue