diff --git a/README.md b/README.md index b589809..15524de 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ source in the `PKGBUILD` (and drop the `-bin` suffix), or don't package it. | `snapx-bin` | [SnapXL/SnapX](https://github.com/SnapXL/SnapX) — ShareX-fork screenshot/sharing tool | self-contained tarball | [snapx-bin](https://aur.archlinux.org/packages/snapx-bin) | | `tenzen-studio-bin` | [tenzen.studio](https://tenzen.studio) — Tenzen Studio, screen recorder and editor for product demos (proprietary Electron app) | Flatpak bundle | [tenzen-studio-bin](https://aur.archlinux.org/packages/tenzen-studio-bin) | | `timetable` | [ostfriese4/untis](https://codeberg.org/ostfriese4/untis) — "Timetable", a GTK4 + LibAdwaita client for WebUntis | *built from source* | [timetable](https://aur.archlinux.org/packages/timetable) | +| `timetable-git` | [ostfriese4/untis](https://codeberg.org/ostfriese4/untis): `main` branch of `timetable` | *built from source* | [timetable-git](https://aur.archlinux.org/packages/timetable-git) | | `vacuumtube-bin` | [shy1132/VacuumTube](https://github.com/shy1132/VacuumTube) — YouTube Leanback (TV UI) with built-in adblocker | `.deb` | [vacuumtube-bin](https://aur.archlinux.org/packages/vacuumtube-bin) | | `waydroid-helper-bin` | [waydroid-helper/waydroid-helper](https://github.com/waydroid-helper/waydroid-helper) — GTK4 GUI for Waydroid configuration and extensions | AppImage | [waydroid-helper-bin](https://aur.archlinux.org/packages/waydroid-helper-bin) | | `wiiudownloader-bin` | [Xpl0itU/WiiUDownloader](https://github.com/Xpl0itU/WiiUDownloader) — Wii U title downloader (Go + GTK4) | AppImage | [wiiudownloader-bin](https://aur.archlinux.org/packages/wiiudownloader-bin) | diff --git a/timetable-git/.SRCINFO b/timetable-git/.SRCINFO new file mode 100644 index 0000000..1d10e3d --- /dev/null +++ b/timetable-git/.SRCINFO @@ -0,0 +1,38 @@ +pkgbase = timetable-git + pkgdesc = GTK4 + LibAdwaita client for WebUntis (git) + pkgver = 4.3.2.r31.g48ce032 + pkgrel = 1 + url = https://codeberg.org/ostfriese4/untis + arch = any + license = GPL-3.0-or-later + makedepends = meson + makedepends = ninja + makedepends = glib2-devel + makedepends = gettext + makedepends = git + depends = gtk4 + depends = libadwaita + depends = webkitgtk-6.0 + depends = libsecret + depends = python + depends = python-gobject + depends = python-cairo + depends = python-requests + depends = python-pyotp + depends = python-pillow + depends = python-zxing-cpp + depends = libportal + depends = gstreamer + depends = gst-plugins-base + depends = gst-plugin-pipewire + depends = gst-plugin-gtk4 + depends = glib2 + depends = hicolor-icon-theme + provides = timetable + provides = untis + conflicts = timetable + conflicts = untis + source = timetable-git::git+https://codeberg.org/ostfriese4/untis.git + sha256sums = SKIP + +pkgname = timetable-git diff --git a/timetable-git/PKGBUILD b/timetable-git/PKGBUILD new file mode 100644 index 0000000..2ecb79f --- /dev/null +++ b/timetable-git/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Felitendo +# This PKGBUILD is updated automatically: +# https://github.com/Felitendo/PKGBUILDS + +pkgname=timetable-git +pkgver=4.3.2.r31.g48ce032 +pkgrel=1 +pkgdesc="GTK4 + LibAdwaita client for WebUntis (git)" +arch=('any') +url="https://codeberg.org/ostfriese4/untis" +license=('GPL-3.0-or-later') +# main adds a QR code login: the camera comes through the portal (libportal) +# as a PipeWire stream, is shown with gtk4paintablesink and decoded with +# zxing-cpp's Python binding. +depends=('gtk4' 'libadwaita' 'webkitgtk-6.0' 'libsecret' 'python' + 'python-gobject' 'python-cairo' 'python-requests' 'python-pyotp' + 'python-pillow' 'python-zxing-cpp' 'libportal' 'gstreamer' + 'gst-plugins-base' 'gst-plugin-pipewire' 'gst-plugin-gtk4' 'glib2' + 'hicolor-icon-theme') +makedepends=('meson' 'ninja' 'glib2-devel' 'gettext' 'git') +provides=('timetable' 'untis') +conflicts=('timetable' 'untis') +source=("${pkgname}::git+https://codeberg.org/ostfriese4/untis.git") +sha256sums=('SKIP') + +pkgver() { + cd "$pkgname" + git describe --long --abbrev=7 --tags --match 'v[0-9]*' \ + | sed 's/^v//; s/\([^-]*-g\)/r\1/; s/-/./g' +} + +prepare() { + # The About dialog reads the version from src/api.py, which upstream only + # sets when it tags a release. + sed -i "s/^version = \"[^\"]*\"/version = \"$pkgver\"/" "$pkgname/src/api.py" +} + +build() { + meson setup build "$pkgname" \ + --prefix=/usr \ + --buildtype=release \ + --wrap-mode=nodownload + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" + + # generated by pacman hooks; shipping them would cause file conflicts + rm -f "$pkgdir/usr/share/glib-2.0/schemas/gschemas.compiled" \ + "$pkgdir/usr/share/applications/mimeinfo.cache" \ + "$pkgdir/usr/share/icons/hicolor/icon-theme.cache" +} diff --git a/timetable-git/pkg.sh b/timetable-git/pkg.sh new file mode 100644 index 0000000..98a3646 --- /dev/null +++ b/timetable-git/pkg.sh @@ -0,0 +1,27 @@ +# timetable-git - "Timetable" (https://codeberg.org/ostfriese4/untis) built +# from the main branch. Same meson build as timetable. +# +# There is no timetable-bin: upstream publishes no binary release assets, and +# the app is pure Python anyway, so there would be nothing prebuilt to ship. +# +# VCS packages are not version-tracked here on purpose. The AUR copy of a -git +# PKGBUILD carries only a snapshot of pkgver; the real version comes from +# pkgver() when the user builds it. latest_version() therefore reports the +# pkgver that is already in the PKGBUILD, which makes the update run a no-op: +# the package is rebuilt, re-checked and pushed only when the packaging itself +# changes. makepkg then refreshes the pkgver snapshot as part of the test build. + +# Installed in CI (pacman) before the makepkg test build. +BUILD_DEPS=(meson ninja glib2 glib2-devel gtk4 libadwaita python + python-gobject gettext git) + +latest_version() { + grep -Po '^pkgver=\K.*' "$(dirname "${BASH_SOURCE[0]}")/PKGBUILD" +} + +# refresh_checksums +# Unreachable: latest_version() never reports a version other than the current +# one. The git source carries SKIP checksums, so there would be nothing to do. +refresh_checksums() { + : +}