Skip to content

chore: roll up dependency updates to fix Gradle 9 build #131

chore: roll up dependency updates to fix Gradle 9 build

chore: roll up dependency updates to fix Gradle 9 build #131

Workflow file for this run

# CI/CD Pipeline for Artifact Keeper Android
#
# Required GitHub Secrets:
# ANDROID_KEYSTORE_BASE64 - Base64-encoded release keystore (.jks)
# ANDROID_KEYSTORE_CRED - Keystore credential
# ANDROID_KEY_ALIAS - Key alias
# ANDROID_KEY_CRED - Key credential
# GOOGLE_PLAY_SERVICE_ACCOUNT_JSON - Google Play service account JSON (for automated upload, optional)
name: Android CI/CD
on:
push:
branches: [main]
tags: ["v*"]
pull_request:
branches: [main]
workflow_dispatch:
permissions:
contents: write
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
java-version: "17"
distribution: temurin
- name: Cache Gradle
uses: actions/cache@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts', 'gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Run lint
run: ./gradlew lint
build:
name: Build Debug
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
java-version: "17"
distribution: temurin
- name: Cache Gradle
uses: actions/cache@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts', 'gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build debug APK
run: ./gradlew assembleDebug
- name: Upload debug APK
uses: actions/upload-artifact@v7
with:
name: debug-apk
path: app/build/outputs/apk/debug/*.apk
test:
name: Test
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v6
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
java-version: "17"
distribution: temurin
- name: Cache Gradle
uses: actions/cache@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts', 'gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Run tests with coverage
run: ./gradlew testDebugUnitTest jacocoTestReport
- name: Upload coverage report
uses: actions/upload-artifact@v7
with:
name: coverage-report
path: app/build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml
sonarcloud:
name: SonarCloud Scan
runs-on: ubuntu-latest
continue-on-error: true
needs: [build, test]
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Download coverage report
uses: actions/download-artifact@v8
with:
name: coverage-report
path: app/build/reports/jacoco
- name: SonarCloud Scan
uses: SonarSource/sonarqube-scan-action@a31c9398be7ace6bbfaf30c0bd5d415f843d45e9 # v7.0.0
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
nightly:
name: Nightly Release
runs-on: ubuntu-latest
needs: [build, test]
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
steps:
- uses: actions/checkout@v6
- name: Download debug APK
uses: actions/download-artifact@v8
with:
name: debug-apk
path: apk
- name: Rename APK
run: |
APK=$(find apk -name "*.apk" | head -1)
cp "$APK" "ArtifactKeeper-debug.apk"
- name: Update nightly release
uses: softprops/action-gh-release@v2
with:
tag_name: nightly
name: "Nightly Build"
body: |
Latest development build from `main` branch.
**Android Debug APK** — sideload directly to your device.
> Updated on every push to main. Not a stable release.
prerelease: true
make_latest: false
files: ArtifactKeeper-debug.apk
release:
name: Release
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
steps:
- uses: actions/checkout@v6
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
java-version: "17"
distribution: temurin
- name: Cache Gradle
uses: actions/cache@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts', 'gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Decode signing keystore
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
run: echo "$ANDROID_KEYSTORE_BASE64" | base64 -d > app/release.jks
- name: Build release AAB
env:
ANDROID_KEYSTORE_PATH: release.jks
ANDROID_KEYSTORE_CRED: ${{ secrets.ANDROID_KEYSTORE_CRED }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_CRED: ${{ secrets.ANDROID_KEY_CRED }}
run: ./gradlew bundleRelease
- name: Build release APK
env:
ANDROID_KEYSTORE_PATH: release.jks
ANDROID_KEYSTORE_CRED: ${{ secrets.ANDROID_KEYSTORE_CRED }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_CRED: ${{ secrets.ANDROID_KEY_CRED }}
run: ./gradlew assembleRelease
- name: Upload release AAB
uses: actions/upload-artifact@v7
with:
name: release-aab
path: app/build/outputs/bundle/release/*.aab
- name: Upload release APK
uses: actions/upload-artifact@v7
with:
name: release-apk
path: app/build/outputs/apk/release/*.apk
- name: Upload to Google Play (internal track)
if: startsWith(github.ref, 'refs/tags/v')
uses: r0adkll/upload-google-play@v1
continue-on-error: true
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
packageName: com.artifactkeeper.android
releaseFiles: app/build/outputs/bundle/release/*.aab
track: internal
- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/v')
uses: softprops/action-gh-release@v2
with:
files: |
app/build/outputs/apk/release/*.apk
app/build/outputs/bundle/release/*.aab