Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
67
tools/project.py
Normal file
67
tools/project.py
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
"""Paths and metadata shared by the desktop and Android build tools."""
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
|
||||
|
||||
def validate_assets():
|
||||
"""Require the checked-in Gaia payload instead of a private profile copy."""
|
||||
apps = ROOT / "assets/webapps"
|
||||
required = [
|
||||
ROOT / "assets/settings-defaults.json",
|
||||
apps / "system.gaiamobile.org/index.html",
|
||||
apps / "homescreen.gaiamobile.org/index.html",
|
||||
apps / "default_theme.gaiamobile.org/manifest.webapp",
|
||||
]
|
||||
missing = [str(path.relative_to(ROOT)) for path in required if not path.is_file()]
|
||||
if missing:
|
||||
raise RuntimeError("Incomplete checkout; missing Gaia files: " + ", ".join(missing))
|
||||
manifests = sorted(apps.glob("*/manifest.webapp"))
|
||||
if not manifests:
|
||||
raise RuntimeError("No installed Gaia manifests in assets/webapps")
|
||||
for manifest in manifests:
|
||||
json.loads(manifest.read_text())
|
||||
json.loads((ROOT / "assets/settings-defaults.json").read_text())
|
||||
return len(manifests)
|
||||
|
||||
|
||||
def build_info():
|
||||
"""Read this checkout's revision; archives without .git report it as unknown."""
|
||||
unknown = {"revision": "unknown", "timestamp": 0, "dirty": None}
|
||||
if not (ROOT / ".git").exists():
|
||||
return unknown
|
||||
try:
|
||||
revision, timestamp = (
|
||||
subprocess.check_output(
|
||||
["git", "show", "-s", "--format=%H%n%ct", "HEAD"],
|
||||
cwd=ROOT,
|
||||
text=True,
|
||||
stderr=subprocess.DEVNULL,
|
||||
)
|
||||
.strip()
|
||||
.splitlines()
|
||||
)
|
||||
changes = subprocess.check_output(
|
||||
["git", "status", "--porcelain", "--untracked-files=normal"],
|
||||
cwd=ROOT,
|
||||
text=True,
|
||||
)
|
||||
except (OSError, subprocess.CalledProcessError, ValueError):
|
||||
return unknown
|
||||
return {"revision": revision, "timestamp": int(timestamp), "dirty": bool(changes)}
|
||||
|
||||
|
||||
def release_info():
|
||||
"""One product revision, with independently verified platform engine packages."""
|
||||
release = json.loads((ROOT / "release.json").read_text())
|
||||
release.setdefault("version", f'{release["gaia"]}-{release["channel"]}.{release["revision"]}')
|
||||
release["desktopEngine"] = json.loads((ROOT / "engine-lock.json").read_text())["version"]
|
||||
engine, build_id = release["geckoview"].rsplit(".", 1)
|
||||
release["androidEngine"] = engine
|
||||
release["androidEngineBuildID"] = build_id
|
||||
if not release["androidVersionCode"] > 4:
|
||||
raise ValueError("Android versionCode must preserve upgrades from Preview 4")
|
||||
return release
|
||||
Loading…
Reference in a new issue