[CLEANUP] Remove F-Droid build variant

This commit is contained in:
Hossain Khan
2025-06-28 17:08:28 -04:00
parent 417b250fc1
commit bc9db7ecfb
13 changed files with 28 additions and 220 deletions
+2 -2
View File
@@ -38,7 +38,7 @@ jobs:
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > keystore/trmnl-app-release.keystore
- name: Build Release APK
run: ./gradlew assembleStandardRelease
run: ./gradlew assembleRelease
env:
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
@@ -53,7 +53,7 @@ jobs:
- name: Rename APK
run: |
mkdir -p artifact
cp app/build/outputs/apk/standard/release/app-standard-release.apk artifact/trmnl-mirror-v${{ steps.version.outputs.VERSION }}.apk
cp app/build/outputs/apk/release/app-release.apk artifact/trmnl-mirror-v${{ steps.version.outputs.VERSION }}.apk
- name: Upload Release APK
uses: actions/upload-artifact@v4
-61
View File
@@ -1,61 +0,0 @@
name: F-Droid Build
# Builds a signed F-Droid APK using the production keystore.
# F-Droid will verify the signature during their reproducible build process.
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# This allows manual triggering of the workflow, which results in making a signed F-Droid APK build
# Go to the "Actions" tab the repository, select this workflow, and click the "Run workflow" button to run it manually.
workflow_dispatch:
jobs:
build-fdroid:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: '23'
distribution: 'temurin'
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Decode keystore from base64
run: |
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > keystore/trmnl-app-release.keystore
- name: Build F-Droid APK
run: ./gradlew buildFDroid
env:
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
- name: Extract version name
id: version
run: |
VERSION_NAME=$(grep -o 'versionName = "[^"]*"' app/build.gradle.kts | cut -d'"' -f2)
echo "VERSION=$VERSION_NAME" >> $GITHUB_OUTPUT
echo "App version name extracted: $VERSION_NAME"
- name: Rename APK
run: |
mkdir -p artifact
cp app/build/outputs/apk/fdroid/release/app-fdroid-release.apk artifact/trmnl-mirror-fdroid-v${{ steps.version.outputs.VERSION }}.apk
- name: Upload F-Droid APK
uses: actions/upload-artifact@v4
with:
name: trmnl-mirror-fdroid-signed
path: artifact/trmnl-mirror-fdroid-v${{ steps.version.outputs.VERSION }}.apk
# Use maximum allowed retention period
# https://github.com/actions/upload-artifact?tab=readme-ov-file#retention-period
retention-days: 90
-63
View File
@@ -1,63 +0,0 @@
# Building for F-Droid
This document outlines the steps required to build the TRMNL Display Mirror app for F-Droid submission.
## F-Droid Specific Build Configuration
The app includes specific configurations for F-Droid compatibility:
1. A dedicated `fdroid` product flavor that excludes Google Fonts
2. A specific `fdroidRelease` build type
3. System fonts are used instead of Google Fonts for the F-Droid version
4. The F-Droid build is **signed** with the production keystore for consistency across all distribution channels
## Building the F-Droid Version
To build the F-Droid version locally:
```bash
./gradlew assembleFdroidRelease
```
This will generate a signed APK in `app/build/outputs/apk/fdroid/release/` using the production keystore. The F-Droid build variant now uses the same signing configuration as the standard release build, ensuring consistency across all distribution channels.
> **Note**: F-Droid's reproducible build process will verify that the APK can be rebuilt with the same signature, ensuring the integrity of the build process.
Alternatively, you can use the convenience task:
```bash
./gradlew buildFDroid
```
## F-Droid Metadata
The F-Droid specific metadata is located in:
- `fastlane/metadata/android/en-US/` - Contains descriptions, changelogs and screenshots
- `metadata/` - Contains F-Droid specific YAML configuration
## Dependencies
The F-Droid build variant avoids the following proprietary dependencies:
- Google Fonts (replaced with system fonts)
## Testing the F-Droid Build
After building the F-Droid variant, verify that:
1. The app installs and runs correctly
2. All functionality works without Google dependencies
3. The UI appears correctly with system fonts
## Submitting to F-Droid
The app can be submitted to F-Droid through:
1. The [F-Droid submission form](https://gitlab.com/fdroid/fdroiddata/-/issues/new?issuable_template=App_Submission)
2. A merge request to the F-Droid data repository
Ensure the following are available:
- Source code is publicly accessible on GitHub: https://github.com/usetrmnl/trmnl-android
- The app is licensed under the MIT license
- F-Droid metadata is complete
- The app builds successfully with the F-Droid build system
Note that F-Droid will build and sign the app themselves using their own signing key. Our build process intentionally does not include a signing configuration for the F-Droid variant (as implemented in [PR #106](https://github.com/usetrmnl/trmnl-android/pull/106)).
+3 -10
View File
@@ -78,18 +78,11 @@ The app supports multiple build variants:
To build specific variants:
```bash
# Build the standard release variant
./gradlew buildStandard
# Build the F-Droid release variant
./gradlew buildFDroid
# Build all variants
./gradlew buildAllFlavors
# Build the release variant
./gradlew assembleRelease
```
For more details on the F-Droid build process, see [BUILD_FDROID.md](BUILD_FDROID.md). This document provides guidelines and instructions to help you contribute effectively.
This command builds a single, signed APK that works both locally (with debug keystore fallback) and in CI (with production keystore).
### Release Process
+3 -3
View File
@@ -55,8 +55,8 @@ After the version management workflow has completed:
2. **Verify the build works with the new version**:
```bash
# Build both variants to ensure they work
./gradlew buildStandard buildFDroid
# Build release variant to ensure it works
./gradlew assembleRelease
```
3. **Create a GitHub release**:
@@ -64,7 +64,7 @@ After the version management workflow has completed:
- Select the tag created by the workflow
- Title: "TRMNL Android v{VERSION_NAME}"
- Description: Copy content from the changelog file
- Attach the built APKs
- Attach the built APK
## Troubleshooting
+10 -24
View File
@@ -71,6 +71,16 @@ android {
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
)
// Sign release builds with production keystore in CI, fallback to debug keystore locally
signingConfig = if (signingConfigs.getByName("release").storeFile?.exists() == true &&
signingConfigs.getByName("release").storePassword != null &&
signingConfigs.getByName("release").keyAlias != null) {
signingConfigs.getByName("release")
} else {
println("⚠️ Production keystore not available, falling back to debug keystore for release build")
signingConfigs.getByName("debug")
}
}
debug {
@@ -82,30 +92,6 @@ android {
}
}
// Add product flavors for F-Droid compatibility
flavorDimensions += "store"
productFlavors {
create("standard") {
dimension = "store"
// Standard flavor with all features
buildConfigField("Boolean", "FDROID_BUILD", "false")
// Apply signing only for standard flavor
signingConfig = signingConfigs.getByName("release")
}
create("fdroid") {
dimension = "store"
// F-Droid specific configuration
// No non-free dependencies
buildConfigField("Boolean", "FDROID_BUILD", "true")
// ️ Also sign the F-Droid build with the release keystore
// F-Droid will use reproducible builds process to validate authenticity
signingConfig = signingConfigs.getByName("release")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
View File
-5
View File
@@ -1,5 +0,0 @@
## F-Droid Variant
This variant is for building the app for F-Droid, an open-source app store for Android.
It is designed to be built with the `fdroid` flavor.
Right now there is no difference between the `fdroid` and `standard` flavors, but this may change in the future.
@@ -1,9 +0,0 @@
package ink.trmnl.android.ui.theme
/**
* F-Droid build variant no longer needs special handling for typography
* since we're now bundling the fonts directly in the app package.
*/
object FdroidTypographyHelper {
// Empty helper class preserved for compatibility
}
-32
View File
@@ -29,35 +29,3 @@ plugins {
// Also see: https://github.com/ZacSweers/anvil/blob/main/FORK.md
alias(libs.plugins.anvil) apply false
}
// Task to build F-Droid APK
tasks.register("buildFDroid") {
description = "Builds the F-Droid APK variant"
dependsOn(":app:assembleFdroidRelease")
doLast {
println("F-Droid APK built successfully at: app/build/outputs/apk/fdroid/release/")
}
}
// Task to build standard APK for GitHub workflows
tasks.register("buildStandard") {
description = "Builds the standard APK variant"
dependsOn(":app:assembleStandardRelease")
doLast {
println("Standard APK built successfully at: app/build/outputs/apk/standard/release/")
}
}
// Task to verify all flavors build correctly
tasks.register("buildAllFlavors") {
description = "Builds all flavor variants (Standard and F-Droid)"
dependsOn("buildStandard", "buildFDroid")
doLast {
println("All flavor variants built successfully")
println("Standard APK: app/build/outputs/apk/standard/release/")
println("F-Droid APK: app/build/outputs/apk/fdroid/release/")
}
}
+2 -3
View File
@@ -40,10 +40,9 @@ The following GitHub Actions secrets are required:
### CI/CD Workflows Using Production Keystore
- **`android-release.yml`**: Builds and signs standard release APKs
- **`fdroid-build.yml`**: Builds and signs F-Droid release APKs
- **`android-release.yml`**: Builds and signs release APKs using the production keystore in CI, with debug keystore fallback for local builds
Both workflows decode the keystore from the base64 secret and provide the necessary environment variables for signing.
The workflow decodes the keystore from the base64 secret and provides the necessary environment variables for signing.
## Related Resources
- https://developer.android.com/studio/publish/app-signing
+8 -8
View File
@@ -19,15 +19,15 @@ echo " - Version Code: $VERSION_CODE"
echo " - Version Name: $VERSION_NAME"
echo
# Extract version from F-Droid metadata
# Extract version from metadata (optional)
if [ -f "$ROOT_DIR/metadata/ink.trmnl.android.yml" ]; then
echo "🤖 From F-Droid metadata:"
FDROID_VERSION=$(grep -o 'CurrentVersion: .*' "$ROOT_DIR/metadata/ink.trmnl.android.yml" | awk '{print $2}')
FDROID_CODE=$(grep -o 'CurrentVersionCode: [0-9]*' "$ROOT_DIR/metadata/ink.trmnl.android.yml" | awk '{print $2}')
FDROID_TAG=$(grep -o 'commit: .*' "$ROOT_DIR/metadata/ink.trmnl.android.yml" | awk '{print $2}')
echo " - Version Code: $FDROID_CODE"
echo " - Version Name: $FDROID_VERSION"
echo " - Git Tag: $FDROID_TAG"
echo "📄 From metadata/ink.trmnl.android.yml:"
METADATA_VERSION=$(grep -o 'CurrentVersion: .*' "$ROOT_DIR/metadata/ink.trmnl.android.yml" | awk '{print $2}' || echo "N/A")
METADATA_CODE=$(grep -o 'CurrentVersionCode: [0-9]*' "$ROOT_DIR/metadata/ink.trmnl.android.yml" | awk '{print $2}' || echo "N/A")
METADATA_TAG=$(grep -o 'commit: .*' "$ROOT_DIR/metadata/ink.trmnl.android.yml" | awk '{print $2}' || echo "N/A")
echo " - Version Code: $METADATA_CODE"
echo " - Version Name: $METADATA_VERSION"
echo " - Git Tag: $METADATA_TAG"
echo
fi