feat: add managed online updates
Signed Release / release (push) Successful in 9m24s

This commit is contained in:
Qiufeng
2026-08-04 20:05:50 +08:00
parent 4f2ea26e8e
commit d3892320dd
20 changed files with 1365 additions and 111 deletions
+23 -4
View File
@@ -60,7 +60,7 @@ jobs:
umask 077
key_file="${RUNNER_TEMP:-/tmp}/kaidi-erp-release-key.pem"
cleanup() { rm -f "$key_file" release.json release-payload.json; }
cleanup() { rm -f "$key_file" release.json release-payload.json release-notes.md; }
trap cleanup EXIT
printf '%s' "$RELEASE_PRIVATE_KEY_B64" | base64 --decode > "$key_file"
export ERP_RELEASE_PRIVATE_KEY_FILE="$key_file"
@@ -71,6 +71,23 @@ jobs:
)
bash scripts/package-release.sh "$version"
previous_tag="$(git describe --tags --match 'v[0-9]*' --abbrev=0 "${tag}^" 2>/dev/null || true)"
change_range="$tag"
[[ -z "$previous_tag" ]] || change_range="$previous_tag..$tag"
{
printf '## 更新内容\n\n'
if ! git log --no-merges --format='- %s (`%h`)' "$change_range"; then
printf -- '- Kaidi ERP %s 正式发布\n' "$version"
fi
printf '\n## 安全校验\n\n'
printf -- '- 安装包:`kaidi-erp-%s.tar.gz`\n' "$version"
printf -- '- 完整性:SHA-256\n'
printf -- '- 发布签名:Ed25519\n'
if [[ -n "$previous_tag" ]]; then
printf '\n上一个正式版本:`%s`\n' "$previous_tag"
fi
} > release-notes.md
owner="${repository%%/*}"
repo="${repository#*/}"
release_api="${api_base%/}/api/v1/repos/$owner/$repo/releases"
@@ -80,13 +97,15 @@ jobs:
--header "$auth_header" --header 'Accept: application/json' \
"$release_api/tags/$tag")"
python3 - "$tag" > release-payload.json <<'PY'
python3 - "$tag" release-notes.md > release-payload.json <<'PY'
import json, sys
tag = sys.argv[1]
with open(sys.argv[2], encoding="utf-8") as handle:
notes = handle.read().strip()
print(json.dumps({
"tag_name": tag,
"name": tag,
"body": f"Kaidi ERP {tag}",
"name": f"Kaidi ERP {tag}",
"body": notes,
"draft": False,
"prerelease": "-" in tag.split("+", 1)[0],
}, separators=(",", ":")))