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:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

67
tools/project.py Normal file
View 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