From d80e4485ac37a6589ca331c8d89f022ec098f7d6 Mon Sep 17 00:00:00 2001 From: XxJSONDeruloxX Date: Fri, 23 Oct 2026 16:52:23 -0400 Subject: [PATCH] fix(build): preserve local builds without Rust --- tools/packs/build.sh | 12 ++++++++---- tools/release/runtime_inputs.py | 14 ++++++++++---- tools/stores/README.md | 2 ++ tools/tests/test_runtime_inputs.py | 9 +++++++++ 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/tools/packs/build.sh b/tools/packs/build.sh index af347b96e..84c690950 100755 --- a/tools/packs/build.sh +++ b/tools/packs/build.sh @@ -83,7 +83,11 @@ pack tracking "$work/tracking" hand_landmarker.task hand_landmarker_lite.task po libopencv_java4.so libmediapipe_tasks_jni.so pack xbox "$linuxfs/droiddeck-xbox" version xodus-cli xodus-service pack comet "$linuxfs/droiddeck-comet" version comet -bash "$repo/tools/stores/build-amazon.sh" -mkdir "$work/amazon" -cp "$repo/app/build/amazon-engine/engine.json" "$repo/app/build/amazon-engine/libdroiddeckamazon.so" "$work/amazon/" -pack amazon "$work/amazon" engine.json libdroiddeckamazon.so +if [[ "${DROIDDECK_SKIP_RUST:-0}" == 1 && "${CI:-false}" != true ]]; then + rm -f "$out/amazon.tar.zst" +else + bash "$repo/tools/stores/build-amazon.sh" + mkdir "$work/amazon" + cp "$repo/app/build/amazon-engine/engine.json" "$repo/app/build/amazon-engine/libdroiddeckamazon.so" "$work/amazon/" + pack amazon "$work/amazon" engine.json libdroiddeckamazon.so +fi diff --git a/tools/release/runtime_inputs.py b/tools/release/runtime_inputs.py index e6f698c51..7504fe164 100644 --- a/tools/release/runtime_inputs.py +++ b/tools/release/runtime_inputs.py @@ -2,6 +2,7 @@ import hashlib import gzip import json +import os from pathlib import Path import subprocess import sys @@ -65,8 +66,9 @@ def outputs(root): result['assets/' + tree + '/' + path.relative_to(base).as_posix()] = path.relative_to(root).as_posix() for library in ['libproot.so', 'libproot-loader.so', 'libdirectaudiorelay.so']: result['lib/arm64-v8a/' + library] = 'app/src/main/jniLibs/arm64-v8a/' + library - result['lib/arm64-v8a/libdroiddeckamazon.so'] = 'app/build/amazon-engine/libdroiddeckamazon.so' - result['assets/store-engines/amazon/engine.json'] = 'app/build/amazon-engine/engine.json' + if amazon_enabled(): + result['lib/arm64-v8a/libdroiddeckamazon.so'] = 'app/build/amazon-engine/libdroiddeckamazon.so' + result['assets/store-engines/amazon/engine.json'] = 'app/build/amazon-engine/engine.json' result['assets/pulseaudio.tzst'] = 'app/build/prepared-assets/pulseaudio.tzst' result['assets/graphics_driver/adrenotools-turnip25.1.0-quest1.tzst'] = \ 'app/build/prepared-assets/graphics_driver/adrenotools-turnip25.1.0-quest1.tzst' @@ -76,8 +78,12 @@ def outputs(root): return result +def amazon_enabled(): + return os.environ.get('CI') == 'true' or os.environ.get('DROIDDECK_SKIP_RUST') != '1' + + def required(): - paths = ['lib/arm64-v8a/libdroiddeckamazon.so', 'assets/store-engines/amazon/engine.json'] + paths = ['lib/arm64-v8a/libdroiddeckamazon.so', 'assets/store-engines/amazon/engine.json'] if amazon_enabled() else [] paths += ['assets/graphics_driver/adrenotools-turnip25.1.0-quest1.tzst'] paths += [f'assets/graphics_driver/adrenotools-{name}.tzst' for name in ['turnip26.3.0-a6xx', 'turnip26.3.0-quest2']] @@ -194,7 +200,7 @@ def pack_digests(root, name): def check_apk(apk, root=ROOT): data = verify(root) - packs = {name: pack_digests(root, name) for name in PACK_NAMES} + packs = {name: pack_digests(root, name) for name in PACK_NAMES if name != 'amazon' or amazon_enabled()} with ZipFile(apk) as package: names = set(package.namelist()) for library in PACKED_LIBRARIES: diff --git a/tools/stores/README.md b/tools/stores/README.md index 48a96bf04..e34d7375f 100644 --- a/tools/stores/README.md +++ b/tools/stores/README.md @@ -28,6 +28,8 @@ New APKs reuse an existing pack when its digest is unchanged; changed pins downl their exact version rather than loading an arbitrary older engine. Loading verifies the manifest/library and JNI interface before configuring the engine. Unpinned local builds intentionally cannot borrow an arbitrary prior Amazon pack. +The existing local `DROIDDECK_SKIP_RUST=1` mode omits Amazon too. CI always requires +the engine and pack even when that local flag is present. Device validation still needs a fresh Amazon sign-in, existing-account upgrade, failed download/retry, offline relaunch, and cancel/resume installation. Robolectric integrity diff --git a/tools/tests/test_runtime_inputs.py b/tools/tests/test_runtime_inputs.py index 375e244d8..0d963cfdc 100644 --- a/tools/tests/test_runtime_inputs.py +++ b/tools/tests/test_runtime_inputs.py @@ -1,6 +1,7 @@ import importlib.util import gzip import io +import os from pathlib import Path, PureWindowsPath import subprocess import tarfile @@ -72,6 +73,14 @@ class RuntimeInputsTest(unittest.TestCase): with self.assertRaisesRegex(ValueError, 'proot pack provides'): runtime.check_apk(apk, self.root) + def test_local_rust_skip_cannot_disable_the_amazon_pack_in_ci(self): + with mock.patch.dict(os.environ, {'DROIDDECK_SKIP_RUST': '1', 'CI': 'false'}): + self.assertFalse(runtime.amazon_enabled()) + self.assertNotIn('lib/arm64-v8a/libdroiddeckamazon.so', runtime.outputs(self.root)) + with mock.patch.dict(os.environ, {'DROIDDECK_SKIP_RUST': '1', 'CI': 'true'}): + self.assertTrue(runtime.amazon_enabled()) + self.assertIn('lib/arm64-v8a/libdroiddeckamazon.so', runtime.required()) + def test_missing_proot_cannot_be_attested(self): (self.root / 'app/src/main/jniLibs/arm64-v8a/libproot.so').unlink() with self.assertRaisesRegex(ValueError, 'libproot.so'):