Files
tmux-browser-android/scripts/upload-gitea-preview.sh
T
2026-07-09 10:01:14 +00:00

94 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
APK_PATH="${1:-${ROOT_DIR}/release/preview/tmux-android-preview.apk}"
LATEST_JSON="${2:-${ROOT_DIR}/release/preview/latest.json}"
TAG="preview"
API_ROOT="https://gitea.neatcn.com/api/v1/repos/tmux/tmux-browser-android"
if [ ! -f "${APK_PATH}" ]; then
echo "APK not found: ${APK_PATH}" >&2
exit 1
fi
if [ ! -f "${LATEST_JSON}" ]; then
echo "latest.json not found: ${LATEST_JSON}" >&2
exit 1
fi
TOKEN="${TMUX_GITEA_TOKEN:-}"
if [ -z "${TOKEN}" ]; then
printf "Gitea token: " >&2
IFS= read -rs TOKEN
printf "\n" >&2
fi
if [ -z "${TOKEN}" ]; then
echo "Missing Gitea token." >&2
exit 1
fi
WORK_DIR="$(mktemp -d)"
trap 'rm -rf "${WORK_DIR}"' EXIT
RELEASE_JSON="${WORK_DIR}/release.json"
BODY='{"tag_name":"preview","target_commitish":"main","name":"tmux Android Preview","body":"Mutable preview APK for fast UI testing. This is not a formal release.","draft":false,"prerelease":true}'
if ! curl -fsSL \
-X POST \
-H "Authorization: token ${TOKEN}" \
-H "Content-Type: application/json" \
-d "${BODY}" \
"${API_ROOT}/releases" \
-o "${RELEASE_JSON}"; then
curl -fsSL \
-H "Authorization: token ${TOKEN}" \
"${API_ROOT}/releases/tags/${TAG}" \
-o "${RELEASE_JSON}"
fi
RELEASE_ID="$(sed -n 's/^{"id":\([0-9][0-9]*\),.*/\1/p' "${RELEASE_JSON}" | head -1)"
if [ -z "${RELEASE_ID}" ]; then
echo "Cannot resolve Gitea release id for preview." >&2
exit 1
fi
upload_asset() {
local file="$1"
local name="$2"
local type="$3"
local assets_json old_ids old_id
assets_json="${WORK_DIR}/assets-${name}.json"
curl -fsSL -H "Authorization: token ${TOKEN}" \
"${API_ROOT}/releases/${RELEASE_ID}/assets" \
-o "${assets_json}"
old_ids="$(python3 - "${assets_json}" "${name}" <<'PY'
import json
import sys
with open(sys.argv[1], "r", encoding="utf-8") as handle:
assets = json.load(handle)
for asset in assets:
if asset.get("name") == sys.argv[2]:
print(asset.get("id"))
PY
)"
for old_id in ${old_ids}; do
curl -fsSL -X DELETE -H "Authorization: token ${TOKEN}" \
"${API_ROOT}/releases/${RELEASE_ID}/assets/${old_id}" \
-o /dev/null
done
curl -fsSL \
-X POST \
-H "Authorization: token ${TOKEN}" \
-F "attachment=@${file};type=${type}" \
"${API_ROOT}/releases/${RELEASE_ID}/assets?name=${name}" \
-o "${WORK_DIR}/${name}.asset.json"
}
upload_asset "${APK_PATH}" "tmux-android-preview.apk" "application/vnd.android.package-archive"
upload_asset "${LATEST_JSON}" "latest.json" "application/json"
echo "Uploaded preview release ${RELEASE_ID}"
echo "Manifest: https://gitea.neatcn.com/tmux/tmux-browser-android/releases/download/preview/latest.json"
echo "APK: https://gitea.neatcn.com/tmux/tmux-browser-android/releases/download/preview/tmux-android-preview.apk"