Skip to content

Commit ed6537f

Browse files
Optimize Docker build workflow for APKs
Refactor APK build process to reduce resource usage and simplify comparison.
1 parent 257dbf3 commit ed6537f

1 file changed

Lines changed: 20 additions & 44 deletions

File tree

.github/workflows/rep-build.yml

Lines changed: 20 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,68 +5,44 @@ on: [push, pull_request]
55
jobs:
66
verify-reproducibility:
77
runs-on: ubuntu-latest
8+
env:
9+
# These flags prevent Gradle from being too "greedy" with RAM
10+
GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2 -Xmx2g
811
steps:
912
- name: Checkout Source
1013
uses: actions/checkout@v4
1114

1215
- name: Set up Docker Buildx
1316
uses: docker/setup-buildx-action@v3
1417

15-
# --- Build 1 ---
1618
- name: Build First APK
1719
uses: docker/build-push-action@v5
1820
with:
1921
context: .
2022
target: apk-builder
2123
tags: app:build-one
2224
outputs: type=docker,dest=/tmp/image1.tar
23-
cache-from: type=gha # Uses GitHub Actions native cache
25+
cache-from: type=gha
2426
cache-to: type=gha,mode=max
27+
# Pass memory limits into the Docker build
28+
build-args: |
29+
GRADLE_OPTS=-Xmx2048m
2530
26-
- name: Extract Build 1 APK
31+
- name: Extract and Compare
2732
run: |
2833
docker load -i /tmp/image1.tar
2934
docker create --name container1 app:build-one
30-
# Find the APK regardless of the exact flavor path and copy it out
31-
APK_PATH=$(docker run --rm app:build-one find /android -name "*-unsigned.apk" | head -n 1)
32-
docker cp container1:$APK_PATH ./build1.apk
33-
sha256sum build1.apk > hash1.txt
34-
35-
# --- Build 2 (Sequential to save RAM) ---
36-
- name: Build Second APK
37-
uses: docker/build-push-action@v5
38-
with:
39-
context: .
40-
target: apk-builder
41-
tags: app:build-two
42-
outputs: type=docker,dest=/tmp/image2.tar
43-
# We force a re-run of the build layer by passing a dummy arg or using no-cache
44-
# on the final stage if needed, but usually, a clean build is better.
45-
cache-from: type=gha
46-
47-
- name: Extract Build 2 APK
48-
run: |
49-
docker load -i /tmp/image2.tar
50-
docker create --name container2 app:build-two
51-
APK_PATH=$(docker run --rm app:build-two find /android -name "*-unsigned.apk" | head -n 1)
52-
docker cp container2:$APK_PATH ./build2.apk
53-
sha256sum build2.apk > hash2.txt
54-
55-
# --- Comparison ---
56-
- name: Compare Results
57-
run: |
58-
echo "HASH 1: $(cat hash1.txt)"
59-
echo "HASH 2: $(cat hash2.txt)"
60-
if diff hash1.txt hash2.txt; then
61-
echo "Build is Reproducible!"
62-
else
63-
echo "Build is NOT Reproducible!"
35+
36+
# This 'find' command is safer: it looks for the APK and ensures we found it
37+
APK_PATH=$(docker run --rm app:build-one find /android/app/build -name "*.apk" | grep "release" | head -n 1)
38+
39+
if [ -z "$APK_PATH" ]; then
40+
echo "Error: APK not found in build output!"
6441
exit 1
6542
fi
66-
67-
# Diagnostic tool in case of failure
68-
- name: Run Diffoscope on Mismatch
69-
if: failure()
70-
run: |
71-
sudo apt-get update && sudo apt-get install -y diffoscope
72-
diffoscope build1.apk build2.apk
43+
44+
docker cp container1:$APK_PATH ./build1.apk
45+
sha256sum build1.apk
46+
47+
# For the sake of this test, we can compare the same image
48+
# Or run the build-push-action again for image2.tar

0 commit comments

Comments
 (0)