feat: add debian package
Some checks failed
/ build_debian (push) Failing after 10s

This commit is contained in:
s3lph 2024-11-29 01:23:35 +01:00
parent 70f52b63e4
commit db1ce3226c
Signed by: s3lph
GPG key ID: 0AA29A52FB33CFB5
4 changed files with 69 additions and 8 deletions

View file

@ -0,0 +1,35 @@
---
on: push
jobs:
build_debian:
runs-on: docker
container:
image: git.kabelsalat.ch/s3lph/package-pipeline-builder:latest
steps:
- uses: https://code.forgejo.org/actions/checkout@v4
- name: Prepare package
run: |
mkdir -p \
package/debian/barcode-utils/usr/bin
package/debian/barcode-utils/usr/share/webextensions
sed -re "s/__VERSION__/0.$(git rev-list --count HEAD)-1/g" -i package/debian/barcode-utils/DEBIAN/control
# barcode-websocket-server
cp barcode-websocket-server package/debian/barcode-utils/usr/bin/
# webextension-tabfocus
cd webextension-tabfocus
zip "../tabfocus-$(jq .version < manifest.json).zip" *
cd ..
cp tabfocus*zip package/debian/barcode-utils/usr/share/webextensions/
# package
find package/debian/barcode-utils -exec touch -m -d "$(git log -1 --format="%aI")" {} \;
cd package/debian/
dpkg-deb --build barcode-utils .
- uses: https://git.kabelsalat.ch/s3lph/forgejo-action-debian-package-upload@v2
with:
username: ${{ secrets.API_USERNAME }}
password: ${{ secrets.API_PASSWORD }}
deb: "package/debian/*.deb"

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
tabfocus-0.1.zip

View file

@ -15,6 +15,12 @@ from websockets.sync.server import serve
import hid import hid
HID_USAGE_PAGE_BARCODE_SCANNER = 0x8C
HID_USAGE_BARCODE_SCANNER = 0x02
HID_REPORT_SCANNED_DATA = 0x12
HID_REPORT_SCANNED_DATA_MAXLENGTH = 0xFF
# struct input_event data to move the mouse # struct input_event data to move the mouse
# the timeval header uses native types, the event data uses platform-independent types # the timeval header uses native types, the event data uses platform-independent types
# struct timeval { tv_sec = 0, tv_usec = 0 } # struct timeval { tv_sec = 0, tv_usec = 0 }
@ -29,8 +35,8 @@ evsyn = evhdr + struct.pack('=HHi', 0, 0, 0)
class BarcodeServer: class BarcodeServer:
def __init__(self, ns): def __init__(self, ns):
self.vid = int(ns.vid, 16) self.vid = int(ns.vid, 16) if ns.vid else None
self.pid = int(ns.pid, 16) self.pid = int(ns.pid, 16) if ns.pid else None
self.url = ns.url self.url = ns.url
self.aim = ns.aim self.aim = ns.aim
self.chars = ns.chars self.chars = ns.chars
@ -93,13 +99,22 @@ class BarcodeServer:
while not self.shutdown.is_set(): while not self.shutdown.is_set():
try: try:
h = hid.device() h = hid.device()
if self.vid and self.pid:
h.open(self.vid, self.pid) h.open(self.vid, self.pid)
else:
# Auto-detect barcode scanners
devs = [x for x in hid.enumerate()
if x['usage_page'] == HID_USAGE_PAGE_BARCODE_SCANNER
and x['usage'] == HID_USAGE_BARCODE_SCANNER]
if not devs:
raise RuntimeError('No USB HID POS barcode scanner found')
h.open(devs[0]['vendor_id'], devs[0]['product_id'])
print(f'Device manufacturer: {h.get_manufacturer_string()}') print(f'Device manufacturer: {h.get_manufacturer_string()}')
print(f'Product: {h.get_product_string()}') print(f'Product: {h.get_product_string()}')
print(f'Serial Number: {h.get_serial_number_string()}') print(f'Serial Number: {h.get_serial_number_string()}')
while not self.shutdown.is_set(): while not self.shutdown.is_set():
# Line from Honeywell scanner consists of: # Line from Honeywell HID POS scanner consists of:
# - 0x02 (magic?) # - 0x02 = HID Report ID "Scanned Data Report"
# - 1 byte payload length (without AIM, so 13 for EAN-13) # - 1 byte payload length (without AIM, so 13 for EAN-13)
# - 3 bytes AIM, e.g. "]E0" for EAN-13 # - 3 bytes AIM, e.g. "]E0" for EAN-13
# - payload bytes # - payload bytes
@ -151,9 +166,9 @@ class BarcodeServer:
def main(): def main():
ap = argparse.ArgumentParser(sys.argv[0], description='Opens a website when a barcode is scanned with an USB-HID barcode scanner.') ap = argparse.ArgumentParser(sys.argv[0], description='Opens a website when a barcode is scanned with an USB-HID barcode scanner.')
ap.add_argument('--url', '-u', type=str, help='The URL to open. "{}" is replaced by the barcode data. Default: http://localhost/?ean={}', default='http://localhost/?ean={}') ap.add_argument('--url', '-u', type=str, help='The URL to open. "{}" is replaced by the barcode data. Default: http://localhost/?ean={}', default='http://localhost/?ean={}')
ap.add_argument('--vid', '-v', type=str, help='The USB vendor ID. Default: 0c2e', default='0c2e') ap.add_argument('--vid', '-v', type=str, help='Connect to device using this USB vendor ID.')
ap.add_argument('--pid', '-p', type=str, help='The USB product ID. Default: 0b07', default='0b07') ap.add_argument('--pid', '-p', type=str, help='Connect to device using this USB product ID.')
ap.add_argument('--aim', '-A', type=str, help='AIM filter prefix, e.g. "]E0" for EAN13, "]E" for all EAN variants, or "]" for all barcodes. Default: "]E"', default=']E') ap.add_argument('--aim', '-A', type=str, help='AIM filter prefix, e.g. "]E0" for EAN13, "]E" for all EAN variants, or "]" for all barcodes. Default: "]"', default=']')
ap.add_argument('--chars', '-C', type=str, help='Permitted characters. Defaults to "0123456789"', default='0123456789') ap.add_argument('--chars', '-C', type=str, help='Permitted characters. Defaults to "0123456789"', default='0123456789')
ap.add_argument('--ydotool-socket', '-Y', type=str, help='If provided, the ydotool socket to wake the screen.') ap.add_argument('--ydotool-socket', '-Y', type=str, help='If provided, the ydotool socket to wake the screen.')
ap.add_argument('--websocket-host', '-w', type=str, help='Websocket host to listen on. Defaults to "localhost"', default='localhost') ap.add_argument('--websocket-host', '-w', type=str, help='Websocket host to listen on. Defaults to "localhost"', default='localhost')

View file

@ -0,0 +1,10 @@
Package: barcode-utils
Version: __VERSION__
Maintainer: s3lph <s3lph@kabelsalat.ch>
Section: utils
Priority: optional
Architecture: all
Depends: python3 (>= 3.6), python3-hid
Description: Miscellaneous utils for dealing with barcodes.
Miscellaneous utils for dealing with barcodes.