SHA256
ci: collect native APK and screenshot evidence on Gitea
Bootstrap checksum-pinned ARM64 Node before Mac checkout, upload a dedicated installable native debug APK, collect AGP test output before UTP uninstall and reject stale/missing screenshots. Add five screenshot-output regressions and enforce native shipping-source invariants. Workflow lint, 10 runner and 8 JUnit verifier regressions pass; remote execution is not yet verified.
This commit is contained in:
1 parent
8c480ddca3
commit
1433e1670a
6 files changed
+131
-7
No files matched your search
@@ -23,6 +23,10 @@ def tool(name, *arguments):
|
||||
|
||||
|
||||
release = APP / "outputs/apk/release/app-release-unsigned.apk"
|
||||
configuration = (ROOT / "android/app/build.gradle.kts").read_text()
|
||||
version_name = re.search(r'versionName = "([^"]+)"', configuration).group(1)
|
||||
version_code = re.search(r'versionCode = (\d+)', configuration).group(1)
|
||||
assert "native" in version_name, "Collector expects the native preview, not the archived wrapper"
|
||||
manifest = tool("aapt2", "dump", "xmltree", release, "--file", "AndroidManifest.xml")
|
||||
assert 'package="community.yuvomi.mobile"' in manifest
|
||||
assert re.search(r":allowBackup\([^\n]*=false", manifest)
|
||||
@@ -38,6 +42,9 @@ assert policy.count("E: certificates") == 1 and 'src="system"' in policy
|
||||
(DESTINATION / "release-network-policy.txt").write_text(policy)
|
||||
|
||||
debug = APP / "outputs/apk/debug/app-debug.apk"
|
||||
for apk in [debug, release]:
|
||||
identity = tool("aapt2", "dump", "badging", apk).splitlines()[0]
|
||||
assert f"versionCode='{version_code}'" in identity and f"versionName='{version_name}'" in identity, identity
|
||||
(DESTINATION / "debug-signature.txt").write_text(tool("apksigner", "verify", "--verbose", debug))
|
||||
unsigned = subprocess.run([str(TOOLS / "apksigner"), "verify", str(release)], capture_output=True, text=True)
|
||||
assert unsigned.returncode != 0 and "Missing META-INF/MANIFEST.MF" in unsigned.stderr, unsigned.stderr
|
||||
@@ -61,7 +68,9 @@ dirty = bool(subprocess.check_output(["git", "status", "--porcelain"], cwd=ROOT,
|
||||
(DESTINATION / "build-info.json").write_text(json.dumps({
|
||||
"source_revision": revision, "worktree_dirty_at_collection": dirty,
|
||||
"upstream_revision": "10bfef7686ed7303b4c74c7fcc55a5eb16356c9d",
|
||||
"status": "Development debug APK; unsigned release APK/AAB. Not production-ready.",
|
||||
"version_name": version_name, "version_code": int(version_code),
|
||||
"renderer": "native Jetpack Compose",
|
||||
"status": "Incomplete native preview: development debug APK; unsigned release APK/AAB. No full PWA parity or production approval.",
|
||||
"artifacts": entries,
|
||||
}, indent=2) + "\n")
|
||||
print(f"Inspected and collected {len(entries)} artifacts in {DESTINATION}")
|
||||
|
||||
Reference in new issue
Block a user