Files
dewemoji/scripts/apk/verify-release.sh
2026-02-21 21:28:40 +07:00

68 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<USAGE
Usage:
scripts/apk/verify-release.sh [--base-url https://dewemoji.com/downloads]
USAGE
}
base_url="https://dewemoji.com/downloads"
while [[ $# -gt 0 ]]; do
case "$1" in
--base-url) base_url="$2"; shift 2 ;;
-h|--help) usage; exit 0 ;;
*) echo "error: unknown argument '$1'" >&2; usage; exit 1 ;;
esac
done
version_url="${base_url%/}/version.json"
apk_url="${base_url%/}/dewemoji-latest.apk"
tmp_dir="$(mktemp -d)"
trap 'rm -rf "${tmp_dir}"' EXIT
version_file="${tmp_dir}/version.json"
apk_file="${tmp_dir}/dewemoji-latest.apk"
echo "== Fetch version metadata =="
curl -fsSL "${version_url}" -o "${version_file}"
python3 - <<PY
import json
from pathlib import Path
obj = json.loads(Path("${version_file}").read_text(encoding="utf-8"))
required = ["appId", "channel", "versionName", "versionCode", "apkUrl", "sha256", "publishedAt"]
missing = [k for k in required if k not in obj]
if missing:
raise SystemExit(f"error: missing fields in version.json: {', '.join(missing)}")
print(f"versionName={obj['versionName']}")
print(f"versionCode={obj['versionCode']}")
print(f"apkUrl={obj['apkUrl']}")
print(f"sha256={obj['sha256']}")
PY
echo "== Download latest APK =="
curl -fL "${apk_url}" -o "${apk_file}"
local_sha="$(shasum -a 256 "${apk_file}" | awk '{print $1}')"
expected_sha="$(python3 - <<PY
import json
from pathlib import Path
obj = json.loads(Path("${version_file}").read_text(encoding="utf-8"))
print(obj["sha256"])
PY
)"
echo "local_sha=${local_sha}"
echo "expected_sha=${expected_sha}"
if [[ "${local_sha}" != "${expected_sha}" ]]; then
echo "error: checksum mismatch" >&2
exit 1
fi
echo "OK: release metadata and APK checksum are consistent"