Skip to content
Source
Sign inSign up
Open History to see the last commit

release.sh

97 lines3.1 KB

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