Files
MyGoNavi/tools/generate-update-latest-manifest.test.py
Syngnat 193d68398b 🔧 chore(license): 补齐开源许可与发布声明
- 新增项目版权及上游 NOTICE
- 让桌面、容器、驱动发布包携带法律文档
- 补充 Wails 和前端许可证元数据
- 增加发布资产回归校验
2026-07-16 17:24:16 +08:00

78 lines
3.2 KiB
Python

#!/usr/bin/env python3
import json
import subprocess
import sys
import tempfile
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
SCRIPT = ROOT / "tools" / "generate-update-latest-manifest.py"
class GenerateUpdateLatestManifestTest(unittest.TestCase):
def test_generates_manifest_with_sha256(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
assets = Path(tmp)
exe = assets / "GoNavi-1.2.3-Windows-Amd64-Portable.exe"
msi = assets / "GoNavi-1.2.3-Windows-Amd64-Installer.msi"
exe.write_bytes(b"fake-binary")
msi.write_bytes(b"fake-installer")
(assets / "LICENSE").write_text("license text\n", encoding="utf-8")
(assets / "NOTICE").write_text("notice text\n", encoding="utf-8")
(assets / "SHA256SUMS").write_text(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa GoNavi-1.2.3-Windows-Amd64-Portable.exe\n"
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb GoNavi-1.2.3-Windows-Amd64-Installer.msi\n",
encoding="utf-8",
)
out = assets / "latest.json"
subprocess.check_call(
[
sys.executable,
str(SCRIPT),
"--assets-dir",
str(assets),
"--version",
"1.2.3",
"--tag",
"v1.2.3",
"--channel",
"latest",
"--output",
str(out),
],
cwd=str(ROOT),
)
data = json.loads(out.read_text(encoding="utf-8"))
self.assertEqual(data["schemaVersion"], 1)
self.assertEqual(data["channel"], "latest")
self.assertEqual(data["version"], "1.2.3")
self.assertEqual(data["tagName"], "v1.2.3")
assets_by_name = {asset["name"]: asset for asset in data["assets"]}
self.assertEqual(
set(assets_by_name),
{
"GoNavi-1.2.3-Windows-Amd64-Portable.exe",
"GoNavi-1.2.3-Windows-Amd64-Installer.msi",
},
)
portable_asset = assets_by_name["GoNavi-1.2.3-Windows-Amd64-Portable.exe"]
self.assertEqual(
portable_asset["url"],
"https://github.com/Syngnat/GoNavi/releases/download/v1.2.3/GoNavi-1.2.3-Windows-Amd64-Portable.exe",
)
self.assertEqual(portable_asset["sha256"], "a" * 64)
installer_asset = assets_by_name["GoNavi-1.2.3-Windows-Amd64-Installer.msi"]
self.assertEqual(
installer_asset["url"],
"https://github.com/Syngnat/GoNavi/releases/download/v1.2.3/GoNavi-1.2.3-Windows-Amd64-Installer.msi",
)
self.assertEqual(installer_asset["sha256"], "b" * 64)
self.assertNotIn("SHA256SUMS", [a["name"] for a in data["assets"]])
self.assertNotIn("LICENSE", [a["name"] for a in data["assets"]])
self.assertNotIn("NOTICE", [a["name"] for a in data["assets"]])
if __name__ == "__main__":
unittest.main()