初始化奇妙小屏幕控制器项目

This commit is contained in:
2026-09-08 22:56:52 +08:00
commit 8d368de3b5
491 changed files with 67678 additions and 0 deletions
@@ -0,0 +1,79 @@
#!/usr/bin/env python3
"""Create one self-contained browser OTA package on the development computer."""
from __future__ import annotations
import argparse
from datetime import datetime, timezone
import hashlib
from pathlib import Path
import sys
SOURCE_ROOT = Path(__file__).resolve().parents[1]
if str(SOURCE_ROOT) not in sys.path:
sys.path.insert(0, str(SOURCE_ROOT))
from app.ota.package import build_package
from app.ota.versioning import read_software_version
from app.ota.policy import read_policy
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("--notes", required=True, help="short release description")
parser.add_argument("--output-root", type=Path)
args = parser.parse_args()
source_root = Path(__file__).resolve().parents[1]
project_root = source_root.parent
wheelhouse = project_root / "发布更新相关" / "其他依赖" / "aarch64-py311"
frpc_bundle = project_root / "发布更新相关" / "其他依赖" / "frp" / "0.71.0" / "linux-arm64"
version = read_software_version(source_root)
policy = read_policy(source_root)
if policy["checkpoints"] and version < type(version).parse(policy["checkpoints"][-1]["version"]):
parser.error("源码包含未发布的软件依赖;请使用 export_release.py ota --version 导出安装节点")
if version.patch != 0:
frpc_bundle = None
output_root = (args.output_root or project_root / "发布更新相关" / "OTA数据包").resolve()
version_dir = output_root / str(version)
if version_dir.exists():
parser.error(f"version output already exists and will not be overwritten: {version_dir}")
version_dir.mkdir(parents=True)
package_path = version_dir / f"matrix-screen-controller-{version}.ota"
created = datetime.now(timezone.utc)
try:
info = build_package(
source_root,
wheelhouse,
package_path,
version=version,
release_notes=args.notes,
created_at=created,
system_dependencies=frpc_bundle,
)
package_sha = hashlib.sha256(package_path.read_bytes()).hexdigest()
readme = (
f"# 奇妙小屏幕控制器 OTA {version}\n\n"
f"- 软件版本:`{version}`\n"
f"- 打包时间:`{info.created_at}`\n"
f"- 更新说明:{args.notes.strip()}\n"
f"- 更新包:`{package_path.name}`\n"
f"- 文件大小:`{package_path.stat().st_size}` bytes\n"
f"- 文件 SHA-256:`{package_sha}`\n"
f"- 载荷 SHA-256:`{info.payload_sha256}`\n\n"
"通过设备网页的“系统设置 → 软件更新”选择 `.ota` 文件。"
"本包是离线全量包,不使用服务器下载、增量、加密或签名。\n"
)
(version_dir / "README.md").write_text(readme, encoding="utf-8", newline="\n")
except BaseException:
package_path.unlink(missing_ok=True)
try:
version_dir.rmdir()
except OSError:
pass
raise
print(version_dir)
return 0
if __name__ == "__main__":
raise SystemExit(main())