From b86ef2e8320ffdda079aa86ba870d1e30a0f4e97 Mon Sep 17 00:00:00 2001 From: Jonatan Wincent Date: Sat, 4 Oct 2025 11:32:39 +0200 Subject: [PATCH 1/3] Build debug APK workflow --- .github/workflows/android.yml | 26 -------------- .github/workflows/build-debug.yml | 58 +++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 26 deletions(-) delete mode 100644 .github/workflows/android.yml create mode 100644 .github/workflows/build-debug.yml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml deleted file mode 100644 index 17cc605..0000000 --- a/.github/workflows/android.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Android CI - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - name: set up JDK 24 - uses: actions/setup-java@v4 - with: - java-version: '24' - distribution: 'temurin' - cache: gradle - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - name: Build with Gradle - run: ./gradlew build diff --git a/.github/workflows/build-debug.yml b/.github/workflows/build-debug.yml new file mode 100644 index 0000000..de1cd79 --- /dev/null +++ b/.github/workflows/build-debug.yml @@ -0,0 +1,58 @@ +name: Build Debug APK + +on: + push: + branches: + - main + + pull_request: + branches: + - main + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + test: + name: Unit Tests + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup JDK + uses: actions/setup-java@v4 + with: + distribution: "temurin" + java-version: 24 + cache: "gradle" + + - name: Run unit tests + run: ./gradlew clean testDebug + + build-debug: + name: Build Debug APK + needs: test + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup JDK + uses: actions/setup-java@v4 + with: + distribution: "temurin" + java-version: 24 + cache: "gradle" + + - name: Setup Gradle cache + uses: gradle/gradle-build-action@v4 + + - name: Build debug APK + run: ./gradlew assembleDebug + + - name: Upload APK + uses: actions/upload-artifact@v4 + with: + name: debug-apk + path: app/build/outputs/apk/debug/app-debug.apk From 3bc32ec13323c3472fcc3978bd89577316ff0850 Mon Sep 17 00:00:00 2001 From: Jonatan Wincent Date: Sat, 4 Oct 2025 11:38:37 +0200 Subject: [PATCH 2/3] Fix duplicate gradle cache setup --- .github/workflows/build-debug.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/build-debug.yml b/.github/workflows/build-debug.yml index de1cd79..599ffcc 100644 --- a/.github/workflows/build-debug.yml +++ b/.github/workflows/build-debug.yml @@ -45,9 +45,6 @@ jobs: java-version: 24 cache: "gradle" - - name: Setup Gradle cache - uses: gradle/gradle-build-action@v4 - - name: Build debug APK run: ./gradlew assembleDebug From 196677675a728adad9af06abecafb203896650c7 Mon Sep 17 00:00:00 2001 From: Jonatan Wincent Date: Sat, 4 Oct 2025 13:54:58 +0200 Subject: [PATCH 3/3] Add release workflow --- .github/workflows/release.yml | 74 +++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..82f9b10 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,74 @@ +name: Build and Release + +on: + push: + tags: + - 'v*.*.*' + +jobs: + test: + name: Unit Tests + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup JDK + uses: actions/setup-java@v4 + with: + distribution: "temurin" + java-version: 24 + cache: "gradle" + + - name: Run unit tests + run: ./gradlew clean testDebug + + build: + name: Build Release APK + needs: test + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup JDK + uses: actions/setup-java@v4 + with: + distribution: "temurin" + java-version: 24 + cache: "gradle" + + - name: Build release APK + run: ./gradlew assembleRelease + + - name: Decode keystore + run: echo "${{ secrets.ANDROID_KEYSTORE }}" | base64 -d > my-release-key.jks + + - name: Sign APK + run: | + jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 \ + -keystore my-release-key.jks -storepass ${{ secrets.KEYSTORE_PASSWORD }} \ + -keypass ${{ secrets.GARAGE_LOG_ALIAS_PASSWORD }} \ + app/build/outputs/apk/release/app-release-unsigned.apk ${{ secrets.GARAGE_LOG_ALIAS }} + + - name: Verify signature + run: jarsigner -verify -verbose -certs app/build/outputs/apk/release/app-release-unsigned.apk + + - name: Align APK + run: | + $ANDROID_HOME/build-tools/34.0.0/zipalign -v 4 \ + app/build/outputs/apk/release/app-release-unsigned.apk \ + app/build/outputs/apk/release/app-release.apk + + release: + name: Release APK + needs: build + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Release + uses: softprops/action-gh-release@v2 + with: + files: app/build/outputs/apk/release/app-release.apk