# gearlever-bin - prebuilt package of https://github.com/mijorus/gearlever # ("Gear Lever", a GTK4 + LibAdwaita AppImage manager written in Python). # # Upstream only publishes a Flatpak bundle, so build_artifact() builds the # app from the release tarball and the resulting install tree is published as # a GitHub release asset of this repository, which the PKGBUILD then uses. UPSTREAM_REPO="mijorus/gearlever" # Installed in CI (pacman) before build_artifact runs. BUILD_DEPS=(meson ninja glib2 glib2-devel python gettext python-pip) latest_version() { # gh instead of curl: unauthenticated GitHub API calls are rate-limited on # shared CI runner IPs. gh api "repos/$UPSTREAM_REPO/releases/latest" --jq '.tag_name' | sed 's/^v//' } # build_artifact build_artifact() { local ver="$1" outfile="$2" local workdir destdir srctree workdir="$(mktemp -d)" destdir="$(mktemp -d)" curl -sfL "https://github.com/$UPSTREAM_REPO/archive/refs/tags/$ver.tar.gz" | tar -xz -C "$workdir" srctree="$workdir/gearlever-$ver" # Arch's 7zip package ships /usr/bin/7z, not the 7zz binary the Flatpak # bundles, and the ELF-offset helper lives in /usr/lib/gearlever instead of # somewhere on $PATH. sed -i -e 's/7zz/7z/g' \ -e 's|get_appimage_offset|/usr/lib/gearlever/get_appimage_offset|g' \ "$srctree/src/providers/AppImageProvider.py" meson setup "$workdir/build" "$srctree" --prefix=/usr --buildtype=release meson install -C "$workdir/build" --destdir "$destdir" install -Dm755 "$srctree/build-aux/get_appimage_offset.sh" \ "$destdir/usr/lib/gearlever/get_appimage_offset" # src/meson.build uses install_subdir('.'), which drags the meson.build # files themselves into the install tree. find "$destdir" -name meson.build -delete # ftputil and desktop-entry-lib are AUR-only; bundle them (pure python) # into the app's module dir, which the launcher puts on sys.path. Versions # come from upstream's requirements.txt pins. grep -E '^(ftputil|desktop-entry-lib)' "$srctree/requirements.txt" > "$workdir/bundle-reqs.txt" [[ "$(wc -l < "$workdir/bundle-reqs.txt")" -eq 2 ]] || { echo "expected 2 pinned bundle deps in requirements.txt" >&2; return 1; } python -m pip install --isolated --no-deps --target "$destdir/usr/share/gearlever" \ -r "$workdir/bundle-reqs.txt" rm -rf "$destdir/usr/share/gearlever/bin" # These caches are generated by pacman hooks; shipping them would cause # file conflicts on install. rm -f "$destdir/usr/share/glib-2.0/schemas/gschemas.compiled" \ "$destdir/usr/share/applications/mimeinfo.cache" \ "$destdir/usr/share/icons/hicolor/icon-theme.cache" tar --zstd --sort=name --owner=0 --group=0 --numeric-owner --mtime='@0' \ -cf "$outfile" -C "$destdir" usr rm -rf "$workdir" "$destdir" }