#!/usr/bin/env bash
# publish-aur.sh PKGNAME — adapted from timfa/legacy-cycles.
# Runs in the tag pipeline after `release`: downloads this tag's .deb release
# asset, sets pkgver/_tag/sha256sums in packaging/aur/PKGNAME/PKGBUILD,
# regenerates .SRCINFO and pushes to aur.archlinux.org (the first push creates
# the AUR package). Uses AUR_GIT_AUTHOR_NAME / AUR_GIT_AUTHOR_EMAIL; the SSH
# key comes from aur-ssh-setup.sh (AUR_SSH_PRIVATE_KEY_B64).
set -euo pipefail
pkg="$1"
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
SRC="$ROOT/packaging/aur/$pkg"
: "${CI_COMMIT_TAG:?}" "${CI_PROJECT_URL:?}" "${AUR_GIT_AUTHOR_NAME:?}" "${AUR_GIT_AUTHOR_EMAIL:?}"
tag="$CI_COMMIT_TAG"
[[ "$tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo "not a release tag: $tag" >&2; exit 1; }
ver="${tag#v}"
url="$CI_PROJECT_URL/-/releases/$tag/assets/paperdoll-renderer-${tag}-amd64.deb"

WORKDIR="$(mktemp -d)"; export WORKDIR
trap 'rm -rf "$WORKDIR"' EXIT
curl -fsSL "$url" -o "$WORKDIR/asset.deb"
sha="$(sha256sum "$WORKDIR/asset.deb" | awk '{print $1}')"
echo "$pkg $ver  $url  $sha"

dest="$WORKDIR/$pkg"
remote="ssh://aur@aur.archlinux.org/${pkg}.git"
if ! git clone "$remote" "$dest"; then
  echo "AUR repo $pkg does not exist yet; the first push creates it"
  mkdir -p "$dest"; git -C "$dest" init -q -b master; git -C "$dest" remote add origin "$remote"
fi
git -C "$dest" symbolic-ref HEAD refs/heads/master
find "$dest" -mindepth 1 -maxdepth 1 ! -name .git -exec rm -rf {} +
cp -a "$SRC/." "$dest/"
cd "$dest"
sed -i "s/^pkgver=.*/pkgver=${ver}/; s/^pkgrel=.*/pkgrel=1/; s/^_tag=.*/_tag=${tag}/; s/^sha256sums=.*/sha256sums=('${sha}')/" PKGBUILD

useradd -m aurbuild 2>/dev/null || true
chmod 755 "$WORKDIR"; chown -R aurbuild "$dest"
runuser -u aurbuild -- makepkg --printsrcinfo > "$WORKDIR/srcinfo"
mv "$WORKDIR/srcinfo" .SRCINFO
chown -R root:root "$dest"
git config --global --add safe.directory '*'
git config user.name "$AUR_GIT_AUTHOR_NAME"
git config user.email "$AUR_GIT_AUTHOR_EMAIL"
git add -A
if git diff --cached --quiet; then echo "AUR $pkg already up to date ($ver)"; exit 0; fi
git commit -qm "$ver"
git push -u origin HEAD:master
echo "AUR updated: $pkg $ver"
