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 diff
|
||||||
- "! git status -s | grep -q ."
|
- "! 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:
|
flatpak:
|
||||||
stage: flatpak
|
stage: flatpak
|
||||||
extends: .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