Files
MapLibreParticleLab/tools/particle_release_pipeline/finalize_release.py

179 lines
5.2 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
from __future__ import annotations
import hashlib
import json
import os
import re
import sys
from datetime import datetime, timezone
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
PUBLIC = "https://pbf.jpcn.ccwu.cc"
def sha256(path: Path) -> str:
h = hashlib.sha256()
with path.open("rb") as handle:
for chunk in iter(lambda: handle.read(1024 * 1024), b""):
h.update(chunk)
return h.hexdigest()
def base_version(value: str) -> str:
return re.sub(r"-particle\.\d+$", "", value.strip())
def artifact(path: Path, url: str) -> dict:
return {
"fileName": path.name,
"sizeBytes": path.stat().st_size,
"sha256": sha256(path),
"url": url,
}
def main() -> None:
if len(sys.argv) != 4:
raise SystemExit(
"usage: finalize_release.py <revision> <source-commit> <artifact-dir>"
)
revision = int(sys.argv[1])
source_commit = sys.argv[2]
artifact_dir = Path(sys.argv[3])
android_base = base_version((ROOT / "platform/android/VERSION").read_text())
ios_base = base_version((ROOT / "platform/ios/VERSION").read_text())
android_version = f"{android_base}-particle.{revision}"
ios_version = f"{ios_base}-particle.{revision}"
aar_name = f"android-sdk-particle-opengl-{android_version}.aar"
tgz_name = f"navsea-maplibre-particle-rn-{android_version}.tgz"
ios_name = "MapLibre.dynamic.xcframework.zip"
aar = artifact(
artifact_dir / aar_name,
f"{PUBLIC}/maven/cc/navsea/maplibre/android-sdk-particle-opengl/"
f"{android_version}/{aar_name}",
)
tgz = artifact(
artifact_dir / tgz_name,
f"{PUBLIC}/npm/{tgz_name}",
)
ios = artifact(
artifact_dir / ios_name,
f"{PUBLIC}/swift/maplibre-particle/{ios_version}/{ios_name}",
)
manifest = {
"schemaVersion": 2,
"releaseState": "PUBLISHED_PUBLIC_READBACK_PASS",
"particleRevision": revision,
"sourceCommit": source_commit,
"generatedAtUtc": datetime.now(timezone.utc).isoformat(),
"reactNative": {
"name": "@navsea/maplibre-particle-rn",
"version": android_version,
"artifact": tgz,
"mapLibreReactNative": "11.3.6",
},
"android": {
"version": android_version,
"coordinate": (
"cc.navsea.maplibre:android-sdk-particle-opengl:"
+ android_version
),
"renderer": "opengl",
"artifact": aar,
"ndk": os.environ.get("PARTICLE_NDK_VERSION"),
"gradle": os.environ.get("PARTICLE_GRADLE_VERSION"),
"jdk": os.environ.get("PARTICLE_JDK_VERSION"),
},
"ios": {
"distributionVersion": ios_version,
"renderer": "metal",
"moduleName": "MapLibre",
"artifact": ios,
"swiftPackage": {
"url": f"{PUBLIC}/swift/maplibre-particle-spm.git",
"requirement": "exactVersion",
"version": ios_version,
"productName": "MapLibre",
},
"xcode": os.environ.get("PARTICLE_XCODE_VERSION"),
"bazel": os.environ.get("PARTICLE_BAZEL_VERSION"),
},
}
(ROOT / "release/maplibre-particle/release-manifest.json").write_text(
json.dumps(manifest, ensure_ascii=False, indent=2) + "\n"
)
ios_manifest = {
"schemaVersion": 2,
"status": "PUBLISHED_PUBLIC_READBACK_PASS",
"distributionVersion": ios_version,
"moduleName": "MapLibre",
"artifact": ios,
"sourceCommit": source_commit,
"swiftPackage": manifest["ios"]["swiftPackage"],
"notes": (
"Metal renderer release built with "
"bazel build --//:renderer=metal //platform/ios:MapLibre.dynamic"
),
}
(ROOT / "release/maplibre-particle/ios/release-manifest.json").write_text(
json.dumps(ios_manifest, ensure_ascii=False, indent=2) + "\n"
)
package_template = f"""// swift-tools-version: 5.7
import PackageDescription
let package = Package(
name: "MapLibreDistribution",
products: [
.library(name: "MapLibre", targets: ["MapLibre"]),
],
targets: [
.binaryTarget(
name: "MapLibre",
url: "{ios['url']}",
checksum: "{ios['sha256']}"
),
]
)
"""
(ROOT / "release/maplibre-particle/ios/Package.swift.template").write_text(
package_template
)
release_readme = f"""# MapLibre Particle iOS 发行
当前正式发行:{ios_version}
- Renderer:Metal
- Product / Module:MapLibre
- Binary:{ios['url']}
- SHA-256:{ios['sha256']}
- SwiftPM:{PUBLIC}/swift/maplibre-particle-spm.git
- Exact Version:{ios_version}
- Source Commit:{source_commit}
构建命令固定为:
bazel build --//:renderer=metal //platform/ios:MapLibre.dynamic
不得用默认 OpenGL XCFramework 覆盖同版本。新版本必须使用新的 Particle revision。
"""
(ROOT / "release/maplibre-particle/ios/README.md").write_text(
release_readme
)
print(json.dumps(manifest, ensure_ascii=False, indent=2))
if __name__ == "__main__":
main()