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