Skip to content

Commit 6d4238a

Browse files
authored
Merge pull request #230 from anywherelan/reproducible-build
ci: add reproducible builds for Android
2 parents 99305d9 + 1efc69f commit 6d4238a

6 files changed

Lines changed: 28 additions & 26 deletions

File tree

.github/workflows/build-manual.yml

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
name: Manual build release
22

33
on:
4+
push:
5+
tags:
6+
- 'v[0-9]+.[0-9]+.[0-9]+*'
47
workflow_dispatch:
58
inputs:
69
awl_ref:
@@ -30,13 +33,13 @@ jobs:
3033
uses: actions/checkout@v6
3134
with:
3235
fetch-depth: 0 # also fetch tags for 'git describe'
33-
ref: ${{ github.event.inputs.awl_ref }}
36+
ref: ${{ github.event.inputs.awl_ref || github.ref }}
3437
path: 'awl'
3538
- name: Checkout awl-flutter code
3639
uses: actions/checkout@v6
3740
with:
3841
repository: 'anywherelan/awl-flutter'
39-
ref: ${{ github.event.inputs.awl_flutter_ref }}
42+
ref: ${{ github.event.inputs.awl_flutter_ref || github.ref }}
4043
path: 'awl-flutter'
4144

4245
- name: Install Go
@@ -58,14 +61,7 @@ jobs:
5861
- run: flutter --version
5962
- name: Install ndk
6063
run: |
61-
echo "ls $ANDROID_HOME/"
62-
ls -lah $ANDROID_HOME/ || true
63-
echo "ls $ANDROID_HOME/tools/bin/"
64-
ls -lah $ANDROID_HOME/tools/bin/ || true
65-
echo "ls $ANDROID_HOME/cmdline-tools/latest/bin/"
66-
ls -lah $ANDROID_HOME/cmdline-tools/latest/bin/ || true
67-
echo "install ndk"
68-
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "ndk;27.0.12077973"
64+
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "ndk;27.3.13750724"
6965
- name: List available space
7066
run: |
7167
df -h
@@ -86,8 +82,9 @@ jobs:
8682

8783
- name: Build
8884
run: |
89-
export ANDROID_NDK_ROOT=$ANDROID_HOME/ndk-bundle
90-
unset ANDROID_NDK_HOME
85+
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/27.3.13750724
86+
unset ANDROID_NDK_ROOT
87+
export SOURCE_DATE_EPOCH=$(git -C awl-flutter log -1 --format=%ct)
9188
cd awl
9289
GOMOBILE_VERSION=$(go list -m -f '{{.Version}}' golang.org/x/mobile)
9390
go install golang.org/x/mobile/cmd/gomobile@$GOMOBILE_VERSION
@@ -96,10 +93,14 @@ jobs:
9693
cd cmd/awl-tray && go mod tidy -compat=1.26 && cd ../..
9794
echo "check go mod tidy and git dirty"
9895
test -z "$(git status --porcelain)" || (git status; git diff && false)
99-
echo "start building"
96+
cd ../awl-flutter && flutter pub get && cd ../awl
97+
echo "=== Patching flutter_zxing for reproducible builds ==="
98+
sed -i '1a add_link_options("LINKER:--build-id=none")' $HOME/.pub-cache/hosted/pub.dev/flutter_zxing-*/src/CMakeLists.txt
99+
echo "start building"
100100
./build.sh release
101101
echo "ls build"
102102
ls -lah build
103+
103104
- name: List available space
104105
run: |
105106
df -h

build.sh

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
awldir=$(pwd)
44
builddir="$awldir/build"
5+
mkdir -p "$builddir"
56
awlflutterdir="$awldir/../awl-flutter"
67
tempdir=$(dirname $(mktemp -u))
78

@@ -57,7 +58,7 @@ gobuild-linux() {
5758
for arch in 386 amd64 arm arm64 mips mipsle; do
5859
archive_name="$name-linux-$arch-$VERSION.tar.gz"
5960
filename="$name"
60-
CGO_ENABLED=0 GOOS=linux GOARCH=$arch go build -trimpath -ldflags "-s -w -X github.com/anywherelan/awl/config.Version=${VERSION}" -o "$filename"
61+
CGO_ENABLED=0 GOOS=linux GOARCH=$arch go build -trimpath -ldflags "-buildid= -s -w -X github.com/anywherelan/awl/config.Version=${VERSION}" -o "$filename"
6162
tar -czf "$archive_name" "$filename"
6263
rm "$filename"
6364
mv "$archive_name" "$builddir"
@@ -70,7 +71,7 @@ gobuild-macos() {
7071
for arch in amd64 arm64; do
7172
archive_name="$name-macos-$arch-$VERSION.zip"
7273
filename="$name"
73-
CGO_ENABLED=1 GOOS=darwin GOARCH=$arch go build -trimpath -ldflags "-s -w -X github.com/anywherelan/awl/config.Version=${VERSION}" -o "$filename"
74+
CGO_ENABLED=1 GOOS=darwin GOARCH=$arch go build -trimpath -ldflags "-buildid= -s -w -X github.com/anywherelan/awl/config.Version=${VERSION}" -o "$filename"
7475
zip "$archive_name" "$filename"
7576
rm "$filename"
7677
mv "$archive_name" "$builddir"
@@ -84,7 +85,7 @@ gobuild-windows() {
8485
install-wintun "$arch"
8586
archive_name="$name-windows-$arch-$VERSION.zip"
8687
filename="$name.exe"
87-
CGO_ENABLED=0 GOOS=windows GOARCH=$arch go build -trimpath -ldflags "-s -w -H windowsgui -X github.com/anywherelan/awl/config.Version=${VERSION}" -o "$filename"
88+
CGO_ENABLED=0 GOOS=windows GOARCH=$arch go build -trimpath -ldflags "-buildid= -s -w -H windowsgui -X github.com/anywherelan/awl/config.Version=${VERSION}" -o "$filename"
8889
zip "$archive_name" "$filename"
8990
rm "$filename"
9091
mv "$archive_name" "$builddir"
@@ -98,7 +99,7 @@ gobuild-windows7() {
9899
install-wintun "$arch"
99100
archive_name="$name-windows7-$arch-$VERSION.zip"
100101
filename="$name.exe"
101-
CGO_ENABLED=0 GOOS=windows GOARCH=$arch go build -trimpath -ldflags "-s -w -H windowsgui -X github.com/anywherelan/awl/config.Version=${VERSION} -X github.com/anywherelan/awl/config.IsWindows7=true" -o "$filename"
102+
CGO_ENABLED=0 GOOS=windows GOARCH=$arch go build -trimpath -ldflags "-buildid= -s -w -H windowsgui -X github.com/anywherelan/awl/config.Version=${VERSION} -X github.com/anywherelan/awl/config.IsWindows7=true" -o "$filename"
102103
zip "$archive_name" "$filename"
103104
rm "$filename"
104105
mv "$archive_name" "$builddir"
@@ -137,7 +138,7 @@ build-android-lib() {
137138
cd "$awldir/cmd/gomobile-lib"
138139
# about `-checklinkname=0` https://github.com/wlynxg/anet#how-to-build-with-go-1230-or-later
139140
gomobile bind -androidapi 24 -trimpath \
140-
-ldflags "-linkmode=external -extldflags=-Wl,-z,max-page-size=16384 -s -w -checklinkname=0 -X github.com/anywherelan/awl/config.Version=${VERSION}" \
141+
-ldflags "-buildid= -linkmode=external -extldflags=-Wl,-z,max-page-size=16384 -s -w -checklinkname=0 -X github.com/anywherelan/awl/config.Version=${VERSION}" \
141142
-o anywherelan.aar -target=android . || { echo "gomobile bind failed"; exit 1; }
142143
mkdir -p "$awlflutterdir/android/app/src/main/libs"
143144
mv anywherelan.aar "$awlflutterdir/android/app/src/main/libs/"
@@ -147,7 +148,7 @@ build-android-lib() {
147148
build-android-apk() {
148149
cd "$awlflutterdir"
149150
flutter build apk --release
150-
mv "$awlflutterdir/build/app/outputs/flutter-apk/app-release.apk" "$builddir/awl-android-$VERSION.apk"
151+
cp "$awlflutterdir/build/app/outputs/flutter-apk/app-release.apk" "$builddir/awl-android-$VERSION.apk"
151152
}
152153

153154
# build for android
@@ -184,7 +185,7 @@ build-awl-tray() {
184185
archive_name="$archive_name.tar.gz"
185186
fi
186187
cd "$awldir/cmd/awl-tray"
187-
CGO_ENABLED=0 go build -trimpath -ldflags "-s -w -X github.com/anywherelan/awl/config.Version=${VERSION}" -o "$filename"
188+
CGO_ENABLED=0 go build -trimpath -ldflags "-buildid= -s -w -X github.com/anywherelan/awl/config.Version=${VERSION}" -o "$filename"
188189
if [ "$goos" == "windows" ]; then
189190
zip "$archive_name" "$filename"
190191
elif [ "$goos" == "linux" ]; then

cmd/awl-tray/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ require (
7676
github.com/libp2p/go-cidranger v1.1.0 // indirect
7777
github.com/libp2p/go-flow-metrics v0.3.0 // indirect
7878
github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect
79-
github.com/libp2p/go-libp2p-kad-dht v0.39.0 // indirect
79+
github.com/libp2p/go-libp2p-kad-dht v0.39.1 // indirect
8080
github.com/libp2p/go-libp2p-kbucket v0.8.0 // indirect
8181
github.com/libp2p/go-libp2p-record v0.3.1 // indirect
8282
github.com/libp2p/go-libp2p-routing-helpers v0.7.5 // indirect

cmd/awl-tray/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,8 +326,8 @@ github.com/libp2p/go-libp2p v0.48.0 h1:h2BrLAgrj7X8bEN05K7qmrjpNHYA+6tnsGRdprjTn
326326
github.com/libp2p/go-libp2p v0.48.0/go.mod h1:Q1fBZNdmC2Hf82husCTfkKJVfHm2we5zk+NWmOGEmWk=
327327
github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94=
328328
github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8=
329-
github.com/libp2p/go-libp2p-kad-dht v0.39.0 h1:mww38eBYiUvdsu+Xl/GLlBC0Aa8M+5HAwvafkFOygAM=
330-
github.com/libp2p/go-libp2p-kad-dht v0.39.0/go.mod h1:Po2JugFEkDq9Vig/JXtc153ntOi0q58o4j7IuITCOVs=
329+
github.com/libp2p/go-libp2p-kad-dht v0.39.1 h1:9RzUBc7zywT4ZNamRSgEvPZmVlK3Y6xdlCYfXXvlR/Q=
330+
github.com/libp2p/go-libp2p-kad-dht v0.39.1/go.mod h1:Po2JugFEkDq9Vig/JXtc153ntOi0q58o4j7IuITCOVs=
331331
github.com/libp2p/go-libp2p-kbucket v0.8.0 h1:QAK7RzKJpYe+EuSEATAaaHYMYLkPDGC18m9jxPLnU8s=
332332
github.com/libp2p/go-libp2p-kbucket v0.8.0/go.mod h1:JMlxqcEyKwO6ox716eyC0hmiduSWZZl6JY93mGaaqc4=
333333
github.com/libp2p/go-libp2p-record v0.3.1 h1:cly48Xi5GjNw5Wq+7gmjfBiG9HCzQVkiZOUZ8kUl+Fg=

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ require (
1818
github.com/labstack/echo-contrib v0.50.1
1919
github.com/labstack/echo/v4 v4.15.1
2020
github.com/libp2p/go-libp2p v0.48.0
21-
github.com/libp2p/go-libp2p-kad-dht v0.39.0
21+
github.com/libp2p/go-libp2p-kad-dht v0.39.1
2222
github.com/libp2p/go-libp2p-kbucket v0.8.0
2323
github.com/marcopolo/simnet v0.0.6
2424
github.com/mdp/qrterminal/v3 v3.2.1

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,8 @@ github.com/libp2p/go-libp2p v0.48.0 h1:h2BrLAgrj7X8bEN05K7qmrjpNHYA+6tnsGRdprjTn
305305
github.com/libp2p/go-libp2p v0.48.0/go.mod h1:Q1fBZNdmC2Hf82husCTfkKJVfHm2we5zk+NWmOGEmWk=
306306
github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94=
307307
github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8=
308-
github.com/libp2p/go-libp2p-kad-dht v0.39.0 h1:mww38eBYiUvdsu+Xl/GLlBC0Aa8M+5HAwvafkFOygAM=
309-
github.com/libp2p/go-libp2p-kad-dht v0.39.0/go.mod h1:Po2JugFEkDq9Vig/JXtc153ntOi0q58o4j7IuITCOVs=
308+
github.com/libp2p/go-libp2p-kad-dht v0.39.1 h1:9RzUBc7zywT4ZNamRSgEvPZmVlK3Y6xdlCYfXXvlR/Q=
309+
github.com/libp2p/go-libp2p-kad-dht v0.39.1/go.mod h1:Po2JugFEkDq9Vig/JXtc153ntOi0q58o4j7IuITCOVs=
310310
github.com/libp2p/go-libp2p-kbucket v0.8.0 h1:QAK7RzKJpYe+EuSEATAaaHYMYLkPDGC18m9jxPLnU8s=
311311
github.com/libp2p/go-libp2p-kbucket v0.8.0/go.mod h1:JMlxqcEyKwO6ox716eyC0hmiduSWZZl6JY93mGaaqc4=
312312
github.com/libp2p/go-libp2p-record v0.3.1 h1:cly48Xi5GjNw5Wq+7gmjfBiG9HCzQVkiZOUZ8kUl+Fg=

0 commit comments

Comments
 (0)