feat(update): support release and local package OTA sources

This commit is contained in:
JianFeeeee
2026-10-26 11:16:38 +08:00
parent 5b759e80d7
commit 6dc87965ad
4 changed files with 168 additions and 23 deletions

View File

@ -0,0 +1,65 @@
#!/usr/bin/env bash
# Download the latest OTA-capable Linux package from the repository GitHub Release.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
REPO="${HOLOGRAM_RELEASE_REPO:-JianFeeeee/HologramAgent}"
API="https://api.github.com/repos/${REPO}/releases/latest"
OUT_DIR="$ROOT/build/package"
mkdir -p "$OUT_DIR"
command -v curl >/dev/null || {
echo "ERROR: curl is required" >&2
exit 1
}
command -v jq >/dev/null || {
echo "ERROR: jq is required" >&2
exit 1
}
release=$(curl --fail --silent --show-error -H 'Accept: application/vnd.github+json' "$API")
tag=$(printf '%s' "$release" | jq -r '.tag_name // empty')
release_url=$(printf '%s' "$release" | jq -r '.html_url // empty')
asset_name=$(printf '%s' "$release" | jq -r '[.assets[]?.name | select(test("linux_amd64\\.tar\\.gz$"; "i"))][0] // empty')
asset_url=$(printf '%s' "$release" | jq -r --arg name "$asset_name" '.assets[]? | select(.name == $name) | .browser_download_url' | head -1)
sums_url=$(printf '%s' "$release" | jq -r '.assets[]? | select(.name == "SHA256SUMS") | .browser_download_url' | head -1)
if [[ -z "$tag" || -z "$asset_name" || -z "$asset_url" || -z "$sums_url" ]]; then
echo "ERROR: latest release must contain a Linux amd64 tar.gz asset and SHA256SUMS: $API" >&2
exit 1
fi
archive="$OUT_DIR/$asset_name"
sums="$OUT_DIR/SHA256SUMS-$tag"
metadata="$OUT_DIR/${asset_name%.tar.gz}.release.txt"
echo "Release: $release_url"
echo "Downloading: $asset_name"
curl --fail --location --silent --show-error "$asset_url" -o "$archive"
curl --fail --location --silent --show-error "$sums_url" -o "$sums"
expected=$(awk -v name="$asset_name" '$2 == name || $2 == "*" name || $2 == "./" name || $2 == "./" name {print $1; exit}' "$sums")
if [[ -z "$expected" ]]; then
echo "ERROR: $asset_name has no SHA256 entry in the Release checksums" >&2
exit 1
fi
actual=$(sha256sum "$archive" | awk '{print $1}')
if [[ "$expected" != "$actual" ]]; then
echo "ERROR: SHA256 mismatch for $asset_name" >&2
echo "expected: $expected" >&2
echo "actual: $actual" >&2
exit 1
fi
{
printf 'release_tag=%s\n' "$tag"
printf 'release_url=%s\n' "$release_url"
printf 'asset_name=%s\n' "$asset_name"
printf 'asset_url=%s\n' "$asset_url"
printf 'sha256=%s\n' "$actual"
} >"$metadata"
printf '%s %s\n' "$actual" "$(basename "$archive")" >"$archive.sha256"
echo "OTA package: $archive"
echo "SHA256: $actual"
echo "Metadata: $metadata"

View File

@ -40,12 +40,7 @@ install -m 0644 "$ROOT/build/depgraph.bin" "$OUT/bin/depgraph.bin"
install -m 0755 "$ROOT/build/waiter" "$OUT/bin/waiter"
install -m 0755 "$ROOT/build/hmapdev" "$OUT/bin/hmapdev"
install -m 0755 "$ROOT/build/homed-upgrade" "$OUT/bin/homed-upgrade"
# 只带 SDK **源码**,排除构建产物。
#
# 实测:直接 cp -r 会把 example/commondev/rawfile(321M)、dist(189M)、
# build/(422M) 等产物一起打进去,包从 319M 涨到 1.3G、文件数 23293。
# 安装包里 sdk 的用途只有一个——给 hmapdev 现场编译插件提供 SDK 头/源码,
# 产物对它毫无用处。
# 只带 SDK 源码,排除构建产物。
SDK_SRC=third_party/homeagent-sdk
mkdir -p "$OUT/sdk"
(cd "$SDK_SRC" && tar -cf - \