name: Build job on: # Every Saturday at 21:00 UTC schedule: - cron: '0 21 * * 6' # Manual triggers workflow_dispatch: inputs: git-ref: description: Git Ref (Optional) required: false dry-run: description: Creates a draft release required: false jobs: build-app: runs-on: ubuntu-latest steps: - name: Clone Repository (Latest) uses: actions/checkout@v4 with: repository: 'mihonapp/mihon' fetch-depth: 0 if: github.event.inputs.git-ref == '' - name: Clone Repository (Custom Ref) uses: actions/checkout@v4 if: github.event.inputs.git-ref != '' with: repository: 'mihonapp/mihon' fetch-depth: 0 ref: ${{ github.event.inputs.git-ref }} - name: Set up JDK uses: actions/setup-java@v4 with: java-version: 17 distribution: adopt - name: Setup Android SDK run: | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "build-tools;29.0.3" - name: Get previous release id: last_release uses: InsonusK/get-latest-release@v1.1.0 with: myToken: ${{ github.token }} exclude_types: "draft|prerelease" view_top: 1 - name: Prepare build run: | set -e commit_count=$(git rev-list --count HEAD) echo "COMMIT_COUNT=$commit_count" >> $GITHUB_ENV current_sha=$(git rev-parse --short HEAD) echo "CURRENT_SHA=$current_sha" >> $GITHUB_ENV prev_commit_count=$(echo "${{ steps.last_release.outputs.tag_name }}" | sed -e "s/^r//") commit_count_diff=$(expr $commit_count - $prev_commit_count) prev_release_sha=$(git rev-parse --short HEAD~$commit_count_diff) echo "PREV_RELEASE_SHA=$prev_release_sha" >> $GITHUB_ENV echo "COMMIT_LOGS<<{delimiter} $(curl -H "Accept: application/vnd.github.v3+json" \ "https://api.github.com/repos/mihonapp/mihon/compare/$prev_release_sha...$current_sha" \ | jq '[.commits[]|{message:(.commit.message | split("\n")), username:.author.login}]' \ | jq -r '.[]|"- \(.message | first) (@\(.username))"') {delimiter}" >> $GITHUB_ENV - name: Build APK uses: gradle/gradle-command-action@v2 with: arguments: assembleStandardPreview - name: Sign APK uses: r0adkll/sign-android-release@v1 with: releaseDirectory: app/build/outputs/apk/standard/preview signingKeyBase64: ${{ secrets.SIGNING_KEY }} alias: ${{ secrets.ALIAS }} keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} keyPassword: ${{ secrets.KEY_PASSWORD }} - name: Clean up build artifacts run: | set -e cp app/build/outputs/apk/standard/preview/app-standard-universal-preview-signed.apk mihon-r${{ env.COMMIT_COUNT }}.apk sha=`sha256sum mihon-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'` echo "APK_UNIVERSAL_SHA=$sha" >> $GITHUB_ENV cp app/build/outputs/apk/standard/preview/app-standard-arm64-v8a-preview-signed.apk mihon-arm64-v8a-r${{ env.COMMIT_COUNT }}.apk sha=`sha256sum mihon-arm64-v8a-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'` echo "APK_ARM64_V8A_SHA=$sha" >> $GITHUB_ENV cp app/build/outputs/apk/standard/preview/app-standard-armeabi-v7a-preview-signed.apk mihon-armeabi-v7a-r${{ env.COMMIT_COUNT }}.apk sha=`sha256sum mihon-armeabi-v7a-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'` echo "APK_ARMEABI_V7A_SHA=$sha" >> $GITHUB_ENV cp app/build/outputs/apk/standard/preview/app-standard-x86-preview-signed.apk mihon-x86-r${{ env.COMMIT_COUNT }}.apk sha=`sha256sum mihon-x86-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'` echo "APK_X86_SHA=$sha" >> $GITHUB_ENV cp app/build/outputs/apk/standard/preview/app-standard-x86_64-preview-signed.apk mihon-x86_64-r${{ env.COMMIT_COUNT }}.apk sha=`sha256sum mihon-x86_64-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'` echo "APK_X86_64_SHA=$sha" >> $GITHUB_ENV - name: Create release uses: softprops/action-gh-release@v1 with: tag_name: r${{ env.COMMIT_COUNT }} name: Mihon Preview r${{ env.COMMIT_COUNT }} body: | ### Commits https://github.com/mihonapp/mihon/compare/${{ env.PREV_RELEASE_SHA }}...${{ env.CURRENT_SHA }} ${{ env.COMMIT_LOGS }} --- ### Checksums | Variant | SHA-256 | | ------- | ------- | | Universal | ${{ env.APK_UNIVERSAL_SHA }} | arm64-v8a | ${{ env.APK_ARM64_V8A_SHA }} | armeabi-v7a | ${{ env.APK_ARMEABI_V7A_SHA }} | x86 | ${{ env.APK_X86_SHA }} | | x86_64 | ${{ env.APK_X86_64_SHA }} | ## If you are unsure which apk to download then go with mihon-r${{ env.COMMIT_COUNT }}.apk files: | mihon-r${{ env.COMMIT_COUNT }}.apk mihon-arm64-v8a-r${{ env.COMMIT_COUNT }}.apk mihon-armeabi-v7a-r${{ env.COMMIT_COUNT }}.apk mihon-x86-r${{ env.COMMIT_COUNT }}.apk mihon-x86_64-r${{ env.COMMIT_COUNT }}.apk draft: ${{ github.event.inputs.dry-run != '' }} prerelease: false env: GITHUB_TOKEN: ${{ secrets.PAT }} - name: Prune old releases uses: dev-drprasad/delete-older-releases@v0.3.2 env: GITHUB_TOKEN: ${{ secrets.PAT }} with: keep_latest: 28 delete_tags: true