mirror of
				https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
				synced 2025-10-31 00:48:09 +01:00 
			
		
		
		
	Merge Reproducible Builds
This commit makes release builds reproducible. This will help folks update the app from F-Droid when it's released there.
This commit is contained in:
		| @@ -2,6 +2,7 @@ steps: | |||||||
|   build: |   build: | ||||||
|     image: alvrme/alpine-android:android-33-jdk11 |     image: alvrme/alpine-android:android-33-jdk11 | ||||||
|     commands: |     commands: | ||||||
|  |       - apk add --no-cache python3 | ||||||
|       - ./gradlew :app:assembleRelease |       - ./gradlew :app:assembleRelease | ||||||
|     when: |     when: | ||||||
|       path: [ app/**, build.gradle ] |       path: [ app/**, build.gradle ] | ||||||
|   | |||||||
| @@ -8,6 +8,7 @@ steps: | |||||||
|   build: |   build: | ||||||
|     image: alvrme/alpine-android:android-33-jdk11 |     image: alvrme/alpine-android:android-33-jdk11 | ||||||
|     commands: |     commands: | ||||||
|  |       - apk add --no-cache python3 | ||||||
|       - ./gradlew :app:assembleNightly |       - ./gradlew :app:assembleNightly | ||||||
|   sign: |   sign: | ||||||
|     image: alvrme/alpine-android:android-33-jdk11 |     image: alvrme/alpine-android:android-33-jdk11 | ||||||
|   | |||||||
| @@ -98,6 +98,30 @@ android { | |||||||
|         doNotStrip '**/*.so' |         doNotStrip '**/*.so' | ||||||
|     } |     } | ||||||
|     namespace 'eu.toldi.infinityforlemmy' |     namespace 'eu.toldi.infinityforlemmy' | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     task rearrangeClass(type: Exec) { | ||||||
|  |         commandLine 'python', '../scripts/fixEventBus.py' | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     applicationVariants.all { variant -> | ||||||
|  |         if (variant.name == 'release') { | ||||||
|  |             task("compileSingleFile${variant.name.capitalize()}", type: JavaCompile, dependsOn: rearrangeClass) { | ||||||
|  |                 def filePath = project.rootDir.absolutePath + '/app/build/generated/ap_generated_sources/release/out/eu/toldi/infinityforlemmy/' | ||||||
|  |                 source = files(filePath) | ||||||
|  |                 includes = ["**/EventBusIndex.java"] | ||||||
|  |                 classpath = variant.getCompileClasspath() + files(project.rootDir.absolutePath + '/app/build/intermediates/javac/release/classes') | ||||||
|  |                 destinationDir = file("$buildDir/intermediates/javac/release/classes") | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             tasks.withType(JavaCompile).all { task -> | ||||||
|  |                 if (task.name == 'compileReleaseJavaWithJavac') { | ||||||
|  |                     task.finalizedBy "compileSingleFile${variant.name.capitalize()}" | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
| @@ -246,3 +270,34 @@ dependencies { | |||||||
|     //debugImplementation 'com.squareup.leakcanary:leakcanary-android:x.y' |     //debugImplementation 'com.squareup.leakcanary:leakcanary-android:x.y' | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // NB: Android Studio can't find the imports; this does not affect the | ||||||
|  | // actual build since Gradle can find them just fine. | ||||||
|  |  | ||||||
|  | import com.android.tools.profgen.ArtProfileKt | ||||||
|  | import com.android.tools.profgen.ArtProfileSerializer | ||||||
|  | import com.android.tools.profgen.DexFile | ||||||
|  |  | ||||||
|  | project.afterEvaluate { | ||||||
|  |     tasks.each { task -> | ||||||
|  |         if (task.name.startsWith("compile") && task.name.endsWith("ReleaseArtProfile")) { | ||||||
|  |             task.doLast { | ||||||
|  |                 outputs.files.each { file -> | ||||||
|  |                     if (file.name.endsWith(".profm")) { | ||||||
|  |                         println("Sorting ${file} ...") | ||||||
|  |                         def version = ArtProfileSerializer.valueOf("METADATA_0_0_2") | ||||||
|  |                         def profile = ArtProfileKt.ArtProfile(file) | ||||||
|  |                         def keys = new ArrayList(profile.profileData.keySet()) | ||||||
|  |                         def sortedData = new LinkedHashMap() | ||||||
|  |                         Collections.sort keys, new DexFile.Companion() | ||||||
|  |                         keys.each { key -> sortedData[key] = profile.profileData[key] } | ||||||
|  |                         new FileOutputStream(file).with { | ||||||
|  |                             write(version.magicBytes$profgen) | ||||||
|  |                             write(version.versionBytes$profgen) | ||||||
|  |                             version.write$profgen(it, sortedData, "") | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -25,7 +25,3 @@ allprojects { | |||||||
|         jcenter() |         jcenter() | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| task clean(type: Delete) { |  | ||||||
|     delete rootProject.buildDir |  | ||||||
| } |  | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								scripts/fixEventBus.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								scripts/fixEventBus.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | import re | ||||||
|  | import sys | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def rearrange(filename): | ||||||
|  |     with open(filename, 'r') as file: | ||||||
|  |         content = file.read() | ||||||
|  |  | ||||||
|  |     # Regex to find the blocks of code to rearrange | ||||||
|  |     pattern = re.compile(r'(putIndex\(new SimpleSubscriberInfo\(.*?\)\);)', re.DOTALL) | ||||||
|  |     blocks = pattern.findall(content) | ||||||
|  |  | ||||||
|  |     # Sort blocks based on the class names mentioned in SimpleSubscriberInfo instances | ||||||
|  |     sorted_blocks = sorted(blocks, key=lambda x: re.search(r'SimpleSubscriberInfo\((.*?),', x).group(1)) | ||||||
|  |  | ||||||
|  |     # Replace the original blocks with the sorted blocks | ||||||
|  |     sorted_content = pattern.sub(lambda match: sorted_blocks.pop(0), content) | ||||||
|  |  | ||||||
|  |     with open(filename, 'w') as file: | ||||||
|  |         file.write(sorted_content) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Project root relative to the script | ||||||
|  | project_root = __file__[:-len('/scripts/fixEventBus.py')] | ||||||
|  |  | ||||||
|  | path = './build/generated/ap_generated_sources/release/out/eu/toldi/infinityforlemmy/EventBusIndex.java' | ||||||
|  |  | ||||||
|  | # Print the path to the file to stderr | ||||||
|  | print(path, file=sys.stderr) | ||||||
|  |  | ||||||
|  | # Call the function with the path to EventBusIndex.java | ||||||
|  | rearrange(path) | ||||||
		Reference in New Issue
	
	Block a user