diff --git a/.github/workflows/ci-android.yml b/.github/workflows/ci-android.yml index 9d098a3..40a550c 100644 --- a/.github/workflows/ci-android.yml +++ b/.github/workflows/ci-android.yml @@ -1,4 +1,4 @@ -name: Build APK and root module (and create nightly release) +name: Android CI on: push: @@ -6,95 +6,74 @@ on: - '*' paths: - 'android/**' - workflow_dispatch: - inputs: - release: - description: 'Create a nightly release' - required: true - type: boolean - default: false - custom_notes: - description: 'Custom updates to add to What''s Changed section' - required: false - type: string workflow_call: jobs: - build-debug-apk: + build: runs-on: ubuntu-latest + outputs: + short_sha: ${{ steps.vars.outputs.short_sha }} steps: - uses: actions/checkout@v4 with: submodules: true - uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: zulu java-version: 21 - uses: gradle/actions/setup-gradle@v4 - - name: Build debug APK - run: ./gradlew assembleDebug + - name: Decode keystore + run: echo "${{ secrets.RELEASE_KEYSTORE_FILE }}" | base64 --decode > android/release.keystore + - name: Create local.properties + run: | + cat < android/local.properties + RELEASE_STORE_FILE=release.keystore + RELEASE_STORE_PASSWORD=${{ secrets.RELEASE_STORE_PASSWORD }} + RELEASE_KEY_ALIAS=${{ secrets.RELEASE_KEY_ALIAS }} + RELEASE_KEY_PASSWORD=${{ secrets.RELEASE_KEY_PASSWORD }} + EOF + - name: Build + run: ./gradlew packageReleaseArtifacts working-directory: android - - name: Upload artifact - uses: actions/upload-artifact@v4 + - id: vars + run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + - uses: actions/upload-artifact@v4 with: - name: Debug APK - path: android/app/build/outputs/apk/**/*.apk - nightly-release: + name: release-artifacts + path: release/* + + release: runs-on: ubuntu-latest - if: github.event_name == 'push' && github.ref == 'refs/heads/release-nightly' || github.event_name == 'workflow_dispatch' && github.event.inputs.release == 'true' - needs: build-debug-apk + needs: build permissions: contents: write steps: - uses: actions/checkout@v4 - uses: actions/download-artifact@v4 - - name: Export APK_NAME for later use - run: echo "APK_NAME=LibrePods-$(echo ${{ github.sha }} | cut -c1-7).apk" >> $GITHUB_ENV - - name: Rename .apk file - run: mv "./Debug APK/debug/"*.apk "./$APK_NAME" - - name: Decode keystore file - run: echo "${{ secrets.DEBUG_KEYSTORE_FILE }}" | base64 --decode > debug.keystore - - name: Install apksigner - run: sudo apt-get update && sudo apt-get install -y apksigner - - name: Sign APK + with: + name: release-artifacts + path: artifacts + - id: prev run: | - apksigner sign --ks debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android --key-pass pass:android "./$APK_NAME" - - name: Verify APK - run: apksigner verify "./$APK_NAME" - - name: Fetch the latest non-nightly release tag - id: fetch-tag - run: echo "::set-output name=tag::$(git describe --tags $(git rev-list --tags --max-count=1))" - - name: Retrieve commits since the last release - id: get-commits + TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") + echo "tag=$TAG" >> $GITHUB_OUTPUT + - id: changelog run: | - COMMITS=$(git log ${{ steps.fetch-tag.outputs.tag }}..HEAD --pretty=format:"- %s (%h)" --abbrev-commit) - echo "::set-output name=commits::${COMMITS}" - - name: Prepare release notes - id: release-notes - run: | - # Create a temporary file for release notes - NOTES_FILE=$(mktemp) - - # Process custom notes if they exist - if [ "${{ github.event_name }}" == "workflow_dispatch" ] && [ -n "${{ github.event.inputs.custom_notes }}" ]; then - CUSTOM_NOTES="${{ github.event.inputs.custom_notes }}" - - # Check if custom notes already have bullet points or GitHub-style formatting - if echo "$CUSTOM_NOTES" | grep -q "^\*\|^- \|http.*commit\|in #[0-9]\+"; then - # Already formatted, use as is - echo "$CUSTOM_NOTES" > "$NOTES_FILE" - else - # Add bullet point formatting - echo "- $CUSTOM_NOTES" > "$NOTES_FILE" - fi + if [ -z "${{ steps.prev.outputs.tag }}" ]; then + NOTES=$(git log --pretty=format:"- %s (%h)") + else + NOTES=$(git log ${{ steps.prev.outputs.tag }}..HEAD --pretty=format:"- %s (%h)") fi - - echo "notes_file=$NOTES_FILE" >> $GITHUB_OUTPUT - - name: Zip root-module directory - run: sh ./build-magisk-module.sh - - name: Delete release if exist then create release - env: + echo "notes<> $GITHUB_OUTPUT + echo "$NOTES" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + - id: tag + run: echo "tag=nightly-${{ needs.build.outputs.short_sha }}" >> $GITHUB_OUTPUT + - env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - gh release view "nightly" && gh release delete "nightly" -y --cleanup-tag - gh release create "nightly" "./$APK_NAME" "./btl2capfix.zip" -p -t "Nightly Release" --notes-file "${{ steps.release-notes.outputs.notes_file }}" --generate-notes + gh release create "${{ steps.tag.outputs.tag }}" \ + artifacts/* \ + -t "Nightly ${{ needs.build.outputs.short_sha }}" \ + --notes "${{ steps.changelog.outputs.notes }}" \ + --prerelease