diff --git a/reproduce.py b/reproduce.py index fa8cabfd4d1a1894dae78e7703de9f68b2a5d29d..7b1cb753bb0a4d508b8cdfd4cad5b078b996ea67 100755 --- a/reproduce.py +++ b/reproduce.py @@ -12,13 +12,28 @@ REPO_DIR = "briar" REFERENCE_APK_URL = 'https://briarproject.org/apk/briar-%s.apk' REFERENCE_JAR_URL = 'https://briarproject.org/jar/briar-headless-%s.jar' GRADLE_APK_TASK = "briar-android:assembleRelease" -GRADLE_JAR_TASK = "briar-headless:assemble" +GRADLE_JAR_TASK = "briar-headless:%s" APK_PATH = "briar-android/build/outputs/apk/official/release/" + \ "briar-android-official-release-unsigned.apk" OLD_APK_PATH = "briar-android/build/outputs/apk/release/briar-android-release-unsigned.apk" -JAR_PATH= "briar-headless/build/libs/briar-headless.jar" +JAR_PATH= "briar-headless/build/libs/briar-headless-%s.jar" BUILD_DIR = "briar-build" +JAR_FLAVOURS = [ + { + "task": "x86LinuxJar", + "file": "linux-x86_64" + }, + { + "task": "aarch64LinuxJar", + "file": "linux-aarch64" + }, + { + "task": "armhfLinuxJar", + "file": "linux-armhf" + } + ] + def main(): if len(sys.argv) > 2: @@ -34,10 +49,21 @@ def main(): reference_apk = "briar-%s.apk" % version check_call(['wget', '--no-verbose', apk_url, '-O', reference_apk]) - jar_url = REFERENCE_JAR_URL % version - reference_jar = "briar-headless-%s.jar" % version - if version >= "1.2.10": - check_call(['wget', '--no-verbose', jar_url, '-O', reference_jar]) + reference_jars = list() + if version >= "1.2.17": + for flavour in JAR_FLAVOURS: + suffix = flavour['file'] + "-" + version + jar_url = REFERENCE_JAR_URL % suffix + reference_jar = "briar-headless-%s.jar" % suffix + reference_jars.append(reference_jar) + if version >= "1.2.10": + check_call(['wget', '--no-verbose', jar_url, '-O', reference_jar]) + else: + jar_url = REFERENCE_JAR_URL % version + reference_jar = "briar-headless-%s.jar" % version + reference_jars.append(reference_jar) + if version >= "1.2.10": + check_call(['wget', '--no-verbose', jar_url, '-O', reference_jar]) # use non-deterministic file system for building the app to detect issues if not os.path.exists(BUILD_DIR): @@ -46,18 +72,32 @@ def main(): atexit.register(unmount) # build the app - check_call(["./gradlew", "--no-daemon", GRADLE_APK_TASK, GRADLE_JAR_TASK], cwd=BUILD_DIR) + if version >= "1.2.17": + tasks = list() + for flavour in JAR_FLAVOURS: + tasks.append(GRADLE_JAR_TASK % flavour["task"]) + check_call(["./gradlew", "--no-daemon", GRADLE_APK_TASK, *tasks], cwd=BUILD_DIR) + else: + gradle_jar_task = "briar-headless:assemble" + check_call(["./gradlew", "--no-daemon", GRADLE_APK_TASK, gradle_jar_task], cwd=BUILD_DIR) # check if both APKs match apk = os.path.join(BUILD_DIR, APK_PATH if version >= "1.1.0" else OLD_APK_PATH) if not verify_apk(reference_apk, apk): sys.exit(1) - # check if both jars match + # check if jars match pairwise if version >= "1.2.10": - jar = os.path.join(BUILD_DIR, JAR_PATH) - if not verify_jar(reference_jar, jar): - sys.exit(1) + if version >= "1.2.17": + for i in range(len(JAR_FLAVOURS)): + flavour = JAR_FLAVOURS[i] + jar = os.path.join(BUILD_DIR, JAR_PATH % flavour["file"]) + if not verify_jar(reference_jars[i], jar): + sys.exit(1) + else: + jar = os.path.join(BUILD_DIR, "briar-headless/build/libs/briar-headless.jar") + if not verify_jar(reference_jars[0], jar): + sys.exit(1) print("Version '%s' was built reproducible! :)" % tag)