| 1 | #!/usr/bin/env bash |
| 2 | set -euo pipefail |
| 3 | |
| 4 | repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)" |
| 5 | repo='pingdotgg/t3code' |
| 6 | tag="${RELEASE_TAG:?RELEASE_TAG is required}" |
| 7 | pkgrel="${PKGREL:-1}" |
| 8 | |
| 9 | if [[ "$tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then |
| 10 | pkgname='t3code-bin' |
| 11 | elif [[ "$tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-nightly\.[0-9]{8}\.[0-9]+$ ]]; then |
| 12 | pkgname='t3code-nightly-bin' |
| 13 | else |
| 14 | echo "Release $tag does not publish an AUR package." |
| 15 | exit 0 |
| 16 | fi |
| 17 | |
| 18 | version="${tag#v}" |
| 19 | pkgver="${version//-/_}" |
| 20 | asset_name="T3-Code-${version}-x86_64.AppImage" |
| 21 | release_json="$(gh api "repos/$repo/releases/tags/$tag")" |
| 22 | asset_digest="$(jq -r --arg name "$asset_name" \ |
| 23 | '.assets[] | select(.name == $name) | .digest' <<<"$release_json")" |
| 24 | appimage_sha256="${asset_digest#sha256:}" |
| 25 | |
| 26 | if [[ ! "$appimage_sha256" =~ ^[0-9a-f]{64}$ ]]; then |
| 27 | echo "Release $tag is missing $asset_name or its SHA-256 digest." >&2 |
| 28 | exit 1 |
| 29 | fi |
| 30 | |
| 31 | work_dir="$(mktemp -d)" |
| 32 | trap 'rm -rf -- "$work_dir"' EXIT |
| 33 | gh api -H 'Accept: application/vnd.github.raw' \ |
| 34 | "repos/$repo/contents/LICENSE?ref=$tag" > "$work_dir/LICENSE" |
| 35 | license_sha256="$(sha256sum "$work_dir/LICENSE" | awk '{print $1}')" |
| 36 | |
| 37 | package_dir="$repo_root/packaging/aur/$pkgname" |
| 38 | cd "$package_dir" |
| 39 | sed -Ei \ |
| 40 | -e "s/^pkgver=.*/pkgver=$pkgver/" \ |
| 41 | -e "s/^pkgrel=.*/pkgrel=$pkgrel/" \ |
| 42 | -e "/# AppImage$/s/'[0-9a-f]{64}'/'$appimage_sha256'/" \ |
| 43 | -e "/# upstream license$/s/'[0-9a-f]{64}'/'$license_sha256'/" \ |
| 44 | PKGBUILD |
| 45 | |
| 46 | run_as_builder() { |
| 47 | if [[ "$(id -u)" == 0 ]]; then |
| 48 | runuser -u builder -- "$@" |
| 49 | else |
| 50 | "$@" |
| 51 | fi |
| 52 | } |
| 53 | |
| 54 | if [[ "$(id -u)" == 0 ]]; then |
| 55 | chown -R builder:builder "$package_dir" |
| 56 | fi |
| 57 | run_as_builder namcap PKGBUILD |
| 58 | run_as_builder makepkg --printsrcinfo > .SRCINFO |
| 59 | run_as_builder makepkg --syncdeps --cleanbuild --clean --noconfirm |
| 60 | run_as_builder namcap "$(run_as_builder makepkg --packagelist)" |
| 61 | |
| 62 | if [[ -z "${AUR_SSH_PRIVATE_KEY:-}" ]]; then |
| 63 | echo 'AUR_SSH_PRIVATE_KEY is not set; build complete, skipping publish.' |
| 64 | exit 0 |
| 65 | fi |
| 66 | |
| 67 | key_file="$work_dir/id_ed25519" |
| 68 | known_hosts_file="$work_dir/known_hosts" |
| 69 | aur_dir="$work_dir/$pkgname" |
| 70 | printf '%s\n' "$AUR_SSH_PRIVATE_KEY" > "$key_file" |
| 71 | chmod 600 "$key_file" |
| 72 | printf '%s\n' \ |
| 73 | 'aur.archlinux.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEuBKrPzbawxA/k2g6NcyV5jmqwJ2s+zpgZGZ7tpLIcN' \ |
| 74 | > "$known_hosts_file" |
| 75 | export GIT_SSH_COMMAND="ssh -i $key_file -o IdentitiesOnly=yes -o UserKnownHostsFile=$known_hosts_file -o StrictHostKeyChecking=yes" |
| 76 | |
| 77 | git clone "ssh://aur@aur.archlinux.org/$pkgname.git" "$aur_dir" |
| 78 | cp PKGBUILD .SRCINFO "$aur_dir/" |
| 79 | cd "$aur_dir" |
| 80 | git rm --ignore-unmatch LICENSE .upstream-commit t3code-icon.png |
| 81 | git config user.name 't3code-ci' |
| 82 | git config user.email 't3code-ci@users.noreply.github.com' |
| 83 | git add -A |
| 84 | |
| 85 | if git diff --cached --quiet; then |
| 86 | echo 'AUR package is already up to date.' |
| 87 | exit 0 |
| 88 | fi |
| 89 | |
| 90 | git commit -m "$pkgname: update to $pkgver-$pkgrel" |
| 91 | git push origin HEAD:master |