94 lines
2.8 KiB
Bash
Executable File
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"
|