mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-11 19:11:08 +00:00
chore: quick_deploy reuses runtime assets prepared on another branch (#1934)
This commit is contained in:
1 parent
6e57af02af
commit
9b024ffcdc
4 files changed
+29
-5
No files matched your search
+3
-1
@@ -313,7 +313,9 @@ if (!ciBuild) {
|
||||
def verifyRuntimeInputs = tasks.register('verifyRuntimeInputs', Exec) {
|
||||
mustRunAfter(stageSessionScripts, stageRuntimeAssets)
|
||||
workingDir rootProject.projectDir
|
||||
commandLine pythonExecutable, 'tools/release/runtime_inputs.py', 'verify'
|
||||
def allowStale = (project.findProperty('allowStaleRuntime')
|
||||
?: localBuildOptions.getProperty('droiddeck.allowStaleRuntime', 'false')).toString().toBoolean()
|
||||
commandLine([pythonExecutable, 'tools/release/runtime_inputs.py', 'verify'] + (allowStale ? ['--allow-stale-sources'] : []))
|
||||
}
|
||||
tasks.configureEach { task ->
|
||||
if (task.name in ['packageDebug', 'packageRelease']) task.dependsOn(verifyRuntimeInputs)
|
||||
|
||||
@@ -23,7 +23,8 @@ while IFS= read -r dir; do
|
||||
done < <(ls -d "${sdk_dir}"/build-tools/* 2>/dev/null | sort -rV)
|
||||
[[ -n "${build_tools}" ]] || { echo "No build-tools with aapt, zipalign and apksigner under ${sdk_dir}." >&2; exit 1; }
|
||||
|
||||
./gradlew -q :app:assembleRelease
|
||||
# Runtime assets from another branch are fine for a Kotlin/UI loop; CI and releases stay strict.
|
||||
./gradlew -q -PallowStaleRuntime=true :app:assembleRelease
|
||||
(
|
||||
cd "$(dirname "${signing_env}")"
|
||||
set -a; . "${signing_env}"; set +a
|
||||
|
||||
@@ -149,13 +149,21 @@ def record(root=ROOT):
|
||||
(root / MANIFEST).write_text(json.dumps(data, sort_keys=True, indent=2) + '\n')
|
||||
|
||||
|
||||
def verify(root=ROOT):
|
||||
def verify(root=ROOT, stale_sources_ok=False):
|
||||
try:
|
||||
data = json.loads((root / MANIFEST).read_text())
|
||||
except (OSError, ValueError):
|
||||
raise ValueError('Runtime inputs have not been prepared. Run tools/build_local.sh.')
|
||||
if data.get('version') != 1 or data.get('sources') != sources(root):
|
||||
if data.get('version') != 1:
|
||||
raise ValueError('Runtime sources changed since preparation. Run tools/build_local.sh.')
|
||||
current = sources(root)
|
||||
if data.get('sources') != current:
|
||||
if not stale_sources_ok:
|
||||
raise ValueError('Runtime sources changed since preparation. Run tools/build_local.sh.')
|
||||
recorded = data.get('sources') or {}
|
||||
changed = sorted(name for name in recorded.keys() | current.keys() if recorded.get(name) != current.get(name))
|
||||
print('Warning: reusing runtime assets prepared from other sources (run tools/build_local.sh if these matter):\n '
|
||||
+ '\n '.join(changed[:20]) + ('\n ...' if len(changed) > 20 else ''), file=sys.stderr)
|
||||
for name in required():
|
||||
if name not in data['outputs']:
|
||||
raise ValueError('Runtime manifest missing ' + name)
|
||||
@@ -224,7 +232,7 @@ if __name__ == '__main__':
|
||||
if sys.argv[1] == 'record':
|
||||
record()
|
||||
elif sys.argv[1] == 'verify':
|
||||
verify()
|
||||
verify(stale_sources_ok='--allow-stale-sources' in sys.argv[2:])
|
||||
elif sys.argv[1] == 'apk':
|
||||
check_apk(sys.argv[2])
|
||||
else:
|
||||
|
||||
@@ -88,6 +88,19 @@ class RuntimeInputsTest(unittest.TestCase):
|
||||
with self.assertRaisesRegex(ValueError, 'sources changed'):
|
||||
runtime.verify(self.root)
|
||||
|
||||
def test_dev_loop_can_reuse_assets_from_other_sources(self):
|
||||
runtime.record(self.root)
|
||||
self.source.write_text('new implementation')
|
||||
with mock.patch('sys.stderr', new_callable=io.StringIO) as stderr:
|
||||
runtime.verify(self.root, stale_sources_ok=True)
|
||||
self.assertIn('tools/linuxfs/preload/test.c', stderr.getvalue())
|
||||
|
||||
def test_dev_loop_still_rejects_changed_outputs(self):
|
||||
runtime.record(self.root)
|
||||
(self.root / 'app/src/main/jniLibs/arm64-v8a/libproot.so').write_bytes(b'old APK binary')
|
||||
with self.assertRaisesRegex(ValueError, 'changed runtime input'):
|
||||
runtime.verify(self.root, stale_sources_ok=True)
|
||||
|
||||
def test_changed_quest_source_rejects_old_outputs(self):
|
||||
source = self.root / 'tools/quest/kgsl_compat.c'
|
||||
source.parent.mkdir(parents=True)
|
||||
|
||||
Reference in new issue
Block a user