app/install_arch.sh generates a PKGBUILD into a mktemp dir with no source=() and
a package() that copies from hardcoded absolute paths under /home/kuhy. That
only ever works on one machine, so it cannot be published. This PKGBUILD builds
from the GitHub release tarball (v1.0.1) instead, and fixes what AUR review
would reject: license=('MIT') with the text actually installed to
/usr/share/licenses, real depends (glibc/bash/hicolor-icon-theme, found by
namcap), and the desktop entry plus icons installed into the package rather than
into ~/.local/share after the fact.
The app lives in app/ while LICENSE is at the repo root, so build()/package()
cd into the subdir and install the license from an absolute $srcdir path.
v1.0.0 was already taken by an older commit predating the LICENSE, hence v1.0.1.
The README documents the tagging hazard: this clone carries grafted upstream
Flutter SDK tags that must never be pushed with `git push --tags`.
install_arch.sh keeps its working-tree dev loop and is deliberately not wired to
this file. Verified: makepkg -Cf from a clean dir with only packaged Flutter on
PATH, namcap clean, pacman -U, and `diet-guard-app` serving on port 8732.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Aoa1nKWRrAbowz7Hfd3tgL
2.7 KiB
AUR packaging
PKGBUILD here is the source of truth for the diet-guard-app AUR package.
The AUR checkout (~/aur/diet-guard-app) is a copy of this file plus a
generated .SRCINFO.
Why the checksum can go stale
source= points at the GitHub tarball for tag v$pkgver, and sha256sums
is the hash of that tarball. A tarball contains this very file, so the
checksum for tag vX cannot be committed before vX is tagged. The copy here
is therefore a template: after pushing a new tag, run updpkgsums in the
AUR checkout to fill in the real hash, and copy the result back here.
Tagging hazard (read before tagging)
This repo has grafted upstream Flutter SDK history, so the local clone
carries hundreds of tags (flutter-N.N-candidate.N, vN.N.N-N.N.pre, and a
v1.16.3 that points at a 2020 [flutter_tools] commit) that do not belong to
this app. The remote has only a handful.
- Never run
git push --tagshere. It would publish all of them. - Always push one tag explicitly:
git push origin v1.2.3. - Resolve the next free version with
git ls-remote --tags origin, never with the localgit tag.
v1.0.0 on the remote points at an older commit that predates the LICENSE, so
the first packageable tag was v1.0.1.
Release flow
# 1. bump `version:` in app/pubspec.yaml, commit, push
# 2. tag and push the SINGLE tag
git tag v1.2.3 && git push origin v1.2.3
# 3. sync + checksum + build + verify
cp packaging/aur/PKGBUILD ~/aur/diet-guard-app/PKGBUILD
cd ~/aur/diet-guard-app
# bump pkgver to match the tag, then:
updpkgsums
makepkg -Cf
namcap ./*.pkg.tar.zst
sudo pacman -U ./diet-guard-app-*.pkg.tar.zst
diet-guard-app # must print: diet_guard desktop serving on http://localhost:8732
# 4. publish
makepkg --printsrcinfo > .SRCINFO
git add PKGBUILD .SRCINFO && git commit && git push # branch is `master`
Notes
- The Flutter app lives in
app/, so the tarball extracts asdiet-guard-$pkgver/app/whileLICENSEsits at the repo root.build()andpackage()cdinto the subdir; the license is installed from an absolute$srcdirpath. StartupWMClassisdiet_guard_app(underscores) while the icon name isdiet-guard-app(hyphens). They genuinely differ — the WM class must match what Chrome gets from the wrapper's--classflag.install_arch.shis deliberately not wired to this PKGBUILD. That script builds the working tree for local development; this one builds a downloaded release tarball. Merging them would destroy the dev loop.options=('!strip')is load-bearing — see the comment in the PKGBUILD.- Building requires network access (
pub get, plus a git fetch of the sharedcrdt_syncdependency). The trackedpubspec.lockpins what gets resolved.