chore: roll up dependency updates to fix Gradle 9 build #131
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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 |