Skip to content

Commit 402affa

Browse files
committed
Fix F-Droid reproducible build
1 parent 295362b commit 402affa

4 files changed

Lines changed: 44 additions & 14 deletions

File tree

.fdroid.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
Categories:
22
- Sports & Health
3+
- Workout
34
License: GPL-3.0-only
45
AuthorName: nyxar77
56
SourceCode: https://github.com/nyxar77/Pulse
@@ -10,15 +11,16 @@ AutoName: Pulse
1011

1112
RepoType: git
1213
Repo: https://github.com/nyxar77/Pulse.git
14+
Binaries: https://github.com/nyxar77/Pulse/releases/download/%v/Pulse-%v.apk
1315

1416
Builds:
1517
- versionName: 0.1.2
1618
versionCode: 3
17-
commit: 0.1.2
19+
commit: d0f4c8b40f9a744b376898184b79ff33db8a482d
1820
subdir: android/app
1921
sudo:
20-
- echo "deb https://deb.debian.org/debian trixie main" > /etc/apt/sources.list.d/trixie.list
21-
- echo "deb https://deb.debian.org/debian forky main" > /etc/apt/sources.list.d/forky.list
22+
- echo deb https://deb.debian.org/debian trixie main > /etc/apt/sources.list.d/trixie.list
23+
- echo deb https://deb.debian.org/debian forky main > /etc/apt/sources.list.d/forky.list
2224
- apt-get update
2325
- apt-get install -y -t forky golang-go make nodejs npm
2426
- apt-get install -y -t trixie openjdk-21-jdk-headless
@@ -31,6 +33,7 @@ Builds:
3133
prebuild:
3234
- cd ../..
3335
- npm ci
36+
- 'sed -i ''s/adapter: adapter(),/adapter: adapter(), version: { name: "0.1.2" },/'' svelte.config.js'
3437
- rm node_modules/@capacitor/cli/assets/android-template.tar.gz
3538
- rm node_modules/@capacitor/cli/assets/capacitor-cordova-ios-plugins.tar.gz
3639
- rm node_modules/@capacitor/cli/assets/ios-pods-template.tar.gz
@@ -50,6 +53,7 @@ Builds:
5053
- npx cap sync android
5154
- popd
5255

56+
AllowedAPKSigningKeys: ee3d16e34033a39c583cda01b6db00dd4fa4a6a5ad07023d3b7bfc877841ed65
5357
AutoUpdateMode: Version
5458
UpdateCheckMode: Tags ^[0-9]+\.[0-9]+\.[0-9]+$
5559
CurrentVersion: 0.1.2

.github/workflows/android-release.yml

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,18 @@ name: Android release
33
on:
44
release:
55
types: [published]
6+
workflow_dispatch:
7+
inputs:
8+
tag:
9+
description: Existing release tag to rebuild
10+
required: true
11+
type: string
612

713
permissions:
814
contents: write
915

1016
concurrency:
11-
group: android-release-${{ github.event.release.id }}
17+
group: android-release-${{ github.event.release.id || inputs.tag }}
1218
cancel-in-progress: false
1319

1420
jobs:
@@ -17,13 +23,20 @@ jobs:
1723
runs-on: ubuntu-24.04
1824
timeout-minutes: 30
1925
env:
20-
PULSE_RELEASE_TAG: ${{ github.event.release.tag_name }}
26+
PULSE_RELEASE_TAG: ${{ github.event.release.tag_name || inputs.tag }}
2127

2228
steps:
2329
- name: Check out release
2430
uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
2531
with:
26-
ref: ${{ github.event.release.tag_name }}
32+
ref: ${{ github.event.release.tag_name || inputs.tag }}
33+
34+
- name: Pin web build version
35+
shell: bash
36+
run: |
37+
if ! grep -q 'version:' svelte.config.js; then
38+
perl -0pi -e 's/adapter: adapter\(\),/adapter: adapter(),\n version: { name: "$ENV{PULSE_RELEASE_TAG}" },/' svelte.config.js
39+
fi
2740
2841
- name: Set up Bun
2942
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
@@ -63,6 +76,9 @@ jobs:
6376
working-directory: android
6477
run: ./gradlew assembleRelease --no-daemon
6578

79+
- name: Install reproducible signing tools
80+
run: sdkmanager "build-tools;34.0.0"
81+
6682
- name: Sign and verify APK
6783
id: sign
6884
env:
@@ -75,25 +91,26 @@ jobs:
7591
keystore="$RUNNER_TEMP/pulse-release.p12"
7692
printf '%s' "$PULSE_ANDROID_KEYSTORE_BASE64" | base64 --decode > "$keystore"
7793
78-
safe_tag="${GITHUB_REF_NAME//\//-}"
94+
safe_tag="${PULSE_RELEASE_TAG//\//-}"
7995
apk="$RUNNER_TEMP/Pulse-$safe_tag.apk"
8096
unsigned_apk="android/app/build/outputs/apk/release/app-release-unsigned.apk"
81-
build_tools="$ANDROID_HOME/build-tools/36.0.0"
97+
align_tools="$ANDROID_HOME/build-tools/36.0.0"
98+
sign_tools="$ANDROID_HOME/build-tools/34.0.0"
8299
83-
"$build_tools/zipalign" -f -p 4 "$unsigned_apk" "$apk"
84-
"$build_tools/apksigner" sign \
100+
"$align_tools/zipalign" -f -p 4 "$unsigned_apk" "$apk"
101+
"$sign_tools/apksigner" sign \
85102
--ks "$keystore" \
86103
--ks-type PKCS12 \
87104
--ks-key-alias pulse \
88105
--ks-pass env:PULSE_ANDROID_KEYSTORE_PASSWORD \
89106
--key-pass env:PULSE_ANDROID_KEYSTORE_PASSWORD \
90107
"$apk"
91-
"$build_tools/apksigner" verify --verbose --print-certs "$apk"
108+
"$sign_tools/apksigner" verify --verbose --print-certs "$apk"
92109
93110
echo "apk=$apk" >> "$GITHUB_OUTPUT"
94111
95112
- name: Attach APK to release
96113
env:
97114
GH_TOKEN: ${{ github.token }}
98115
APK_PATH: ${{ steps.sign.outputs.apk }}
99-
run: gh release upload "$GITHUB_REF_NAME" "$APK_PATH" --clobber
116+
run: gh release upload "$PULSE_RELEASE_TAG" "$APK_PATH" --clobber

scripts/check-release.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,11 @@ const fdroidCommit = fdroid.match(/^\s+commit:\s*(\S+)$/m)?.[1];
4040
if (
4141
fdroidBuildVersion !== versionName ||
4242
fdroidBuildCode !== versionCodeText ||
43-
fdroidCommit !== versionName
43+
!fdroidCommit ||
44+
!/^[0-9a-f]{40}$/.test(fdroidCommit)
4445
) {
4546
fail(
46-
`.fdroid.yml build must use version ${versionName}, code ${versionCode}, and commit ${versionName}`,
47+
`.fdroid.yml build must use version ${versionName}, code ${versionCode}, and a full commit hash`,
4748
);
4849
}
4950

svelte.config.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
import adapter from "@sveltejs/adapter-static";
2+
import { readFileSync } from "node:fs";
3+
4+
const packageVersion = JSON.parse(
5+
readFileSync(new URL("./package.json", import.meta.url), "utf8"),
6+
).version;
27

38
/** @type {import('@sveltejs/kit').Config} */
49
const config = {
510
kit: {
611
adapter: adapter(),
12+
version: {
13+
name: packageVersion,
14+
},
715
},
816
};
917

0 commit comments

Comments
 (0)