From 4ec22048364aca3478702ff908693e70fd9fbdda Mon Sep 17 00:00:00 2001 From: "Cuong M. Tran" Date: Thu, 25 Jan 2024 09:21:06 +0700 Subject: [PATCH] update Github workflow scripts --- .github/workflows/build_check.yml | 2 +- .github/workflows/build_preview.yml | 160 +++++++++++++++++++++++ .github/workflows/build_push.yml | 100 +++++++++++--- .github/workflows/build_push_preview.yml | 6 +- .github/workflows/issue_moderator.yml | 2 +- 5 files changed, 244 insertions(+), 26 deletions(-) create mode 100644 .github/workflows/build_preview.yml diff --git a/.github/workflows/build_check.yml b/.github/workflows/build_check.yml index d8f537d4d..d150c65de 100644 --- a/.github/workflows/build_check.yml +++ b/.github/workflows/build_check.yml @@ -40,5 +40,5 @@ jobs: - name: Upload APK uses: actions/upload-artifact@v3 with: - name: TachiyomiSY-${{ github.sha }}.apk + name: Komikku-${{ github.sha }}.apk path: app/build/outputs/apk/dev/debug/app-dev-debug.apk diff --git a/.github/workflows/build_preview.yml b/.github/workflows/build_preview.yml new file mode 100644 index 000000000..0821dd400 --- /dev/null +++ b/.github/workflows/build_preview.yml @@ -0,0 +1,160 @@ +name: Preview Builder +on: + push: + branches: + - master + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + name: Build preview app + runs-on: ubuntu-latest + + steps: + - name: Clone repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Prepare build + run: | + set -e + + git fetch --tags + + prev_release_sha=$(git log --oneline --decorate --tags --no-walk --pretty='%C(auto)%h' | head -n 1) + echo "PREV_RELEASE_SHA=$prev_release_sha" >> $GITHUB_ENV + + current_sha=$(git log -1 --pretty='%C(auto)%h' | head -n 1) + echo "CURRENT_SHA=$current_sha" >> $GITHUB_ENV + + echo "COMMIT_LOGS<<{delimiter} + $(curl -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/repos/cuong-tran/komikku/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: Set CHANGELOG + run: | + changelog="$(git log ${{ env.PREV_RELEASE_SHA }}..${{ env.CURRENT_SHA }} --pretty=format:'{{changelogtext}}%s (@%an){{!changelogtext}}')" + changelog="${changelog//$'%'/%25}" + changelog="${changelog//$'\n'/}" + changelog="${changelog//$'\r'/}" + changelog="${changelog//$'<'/}" + changelog="${changelog//$'>'/}" + changelog="${changelog//$'&'/}" + changelog="$(echo $changelog | sed -e 's/{{changelogtext}}//g')" + changelog="$(echo $changelog | sed -e 's/{{!changelogtext}}/<\/changelogtext>/g')" + changelog="$changelog" + echo "CHANGELOG=$changelog" >> $GITHUB_ENV + + - name: Setup Android SDK + run: | + ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "build-tools;29.0.3" + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: adopt + + - name: Write Version.kt + uses: DamianReeves/write-file-action@v1.2 + with: + path: app/src/main/java/exh/Version.kt + contents: 'package exh const val syDebugVersion: String = "${{ github.run_number }}"' + write-mode: overwrite + + - name: Write changelog_debug.xml + uses: DamianReeves/write-file-action@v1.2 + with: + path: app/src/main/res/raw/changelog_debug.xml + contents: "${{ env.CHANGELOG }}" + write-mode: overwrite + + - name: Write google-services.json + uses: DamianReeves/write-file-action@v1.2 + with: + path: app/google-services.json + contents: ${{ secrets.GOOGLE_SERVICES_TEXT }} + write-mode: overwrite + + - name: Build app + if: ${{ ! startsWith(github.ref, 'refs/tags/') && github.repository == 'cuong-tran/komikku' }} + uses: gradle/gradle-command-action@v2 + with: + arguments: assembleStandardRelease -x ktlintFormat --stacktrace + + - name: Sign Android Release + if: ${{ ! startsWith(github.ref, 'refs/tags/') && github.repository == 'cuong-tran/komikku' }} + uses: r0adkll/sign-android-release@v1 + with: + releaseDirectory: app/build/outputs/apk/standard/release + signingKeyBase64: ${{ secrets.SIGNING_KEY }} + alias: ${{ secrets.ALIAS }} + keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} + keyPassword: ${{ secrets.KEY_PASSWORD }} + + - name: Clean up build artifacts + if: ${{ ! startsWith(github.ref, 'refs/tags/') && github.repository == 'cuong-tran/komikku' }} + run: | + set -e + + mv app/build/outputs/apk/standard/release/app-standard-universal-release-unsigned-signed.apk Komikku-pre-${{ github.run_number }}.apk + sha=`sha256sum Komikku-pre-${{ github.run_number }}.apk | awk '{ print $1 }'` + echo "APK_UNIVERSAL_SHA=$sha" >> $GITHUB_ENV + + cp app/build/outputs/apk/standard/release/app-standard-arm64-v8a-release-unsigned-signed.apk Komikku-arm64-v8a-pre-${{ github.run_number }}.apk + sha=`sha256sum Komikku-arm64-v8a-pre-${{ github.run_number }}.apk | awk '{ print $1 }'` + echo "APK_ARM64_V8A_SHA=$sha" >> $GITHUB_ENV + + cp app/build/outputs/apk/standard/release/app-standard-armeabi-v7a-release-unsigned-signed.apk Komikku-armeabi-v7a-pre-${{ github.run_number }}.apk + sha=`sha256sum Komikku-armeabi-v7a-pre-${{ github.run_number }}.apk | awk '{ print $1 }'` + echo "APK_ARMEABI_V7A_SHA=$sha" >> $GITHUB_ENV + + cp app/build/outputs/apk/standard/release/app-standard-x86-release-unsigned-signed.apk Komikku-x86-pre-${{ github.run_number }}.apk + sha=`sha256sum Komikku-x86-pre-${{ github.run_number }}.apk | awk '{ print $1 }'` + echo "APK_X86_SHA=$sha" >> $GITHUB_ENV + + cp app/build/outputs/apk/standard/release/app-standard-x86_64-release-unsigned-signed.apk Komikku-x86_64-pre-${{ github.run_number }}.apk + sha=`sha256sum Komikku-x86_64-pre-${{ github.run_number }}.apk | awk '{ print $1 }'` + echo "APK_X86_64_SHA=$sha" >> $GITHUB_ENV + + - name: Create release + if: ${{ ! startsWith(github.ref, 'refs/tags/') && github.repository == 'cuong-tran/komikku' }} + uses: softprops/action-gh-release@v1 + with: + tag_name: pre-release + name: Komikku Preview Build ${{ github.run_number }} + body: | + ### Commits + + https://github.com/cuongtran/komikku/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 }} | + files: | + Komikku-pre-${{ github.run_number }}.apk + Komikku-arm64-v8a-pre-${{ github.run_number }}.apk + Komikku-armeabi-v7a-pre-${{ github.run_number }}.apk + Komikku-x86-pre-${{ github.run_number }}.apk + Komikku-x86_64-pre-${{ github.run_number }}.apk + draft: false + prerelease: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/build_push.yml b/.github/workflows/build_push.yml index 1700707e3..e5f26860f 100644 --- a/.github/workflows/build_push.yml +++ b/.github/workflows/build_push.yml @@ -1,13 +1,13 @@ name: Release Builder on: push: - branches: - - 'release' + tags: + - v* concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true - + jobs: build: name: Build release app @@ -16,6 +16,41 @@ jobs: steps: - name: Clone repo uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Prepare build + run: | + set -e + + git fetch --tags + + prev_release_sha=$(git log --oneline --decorate --tags --no-walk --pretty='%C(auto)%h' | head -n 2 | tail -1) + echo "PREV_RELEASE_SHA=$prev_release_sha" >> $GITHUB_ENV + + current_sha=$(git log --oneline --decorate --tags --no-walk --pretty='%C(auto)%h' | head -n 1) + echo "CURRENT_SHA=$current_sha" >> $GITHUB_ENV + + echo "COMMIT_LOGS<<{delimiter} + $(curl -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/repos/cuong-tran/komikku/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: Set CHANGELOG + run: | + changelog="$(git log ${{ env.PREV_RELEASE_SHA }}..${{ env.CURRENT_SHA }} --pretty=format:'{{changelogtext}}%s (@%an){{!changelogtext}}')" + changelog="${changelog//$'%'/%25}" + changelog="${changelog//$'\n'/}" + changelog="${changelog//$'\r'/}" + changelog="${changelog//$'<'/}" + changelog="${changelog//$'>'/}" + changelog="${changelog//$'&'/}" + changelog="$(echo $changelog | sed -e 's/{{changelogtext}}//g')" + changelog="$(echo $changelog | sed -e 's/{{!changelogtext}}/<\/changelogtext>/g')" + changelog="$changelog" + echo "CHANGELOG=$changelog" >> $GITHUB_ENV - name: Validate Gradle Wrapper uses: gradle/wrapper-validation-action@v1 @@ -40,11 +75,20 @@ jobs: # SY --> - name: Build app and run unit tests + if: startsWith(github.ref, 'refs/tags/') && github.repository == 'cuong-tran/komikku' uses: gradle/gradle-command-action@v2 with: arguments: assembleStandardRelease testStandardReleaseUnitTest --stacktrace + # Sign APK and create release for tags + - name: Get tag name + if: startsWith(github.ref, 'refs/tags/') && github.repository == 'cuong-tran/komikku' + run: | + set -x + echo "VERSION_TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV + - name: Sign APK + if: startsWith(github.ref, 'refs/tags/') && github.repository == 'cuong-tran/komikku' uses: r0adkll/sign-android-release@v1 with: releaseDirectory: app/build/outputs/apk/standard/release @@ -54,35 +98,47 @@ jobs: keyPassword: ${{ secrets.KEY_PASSWORD }} - name: Clean up build artifacts + if: startsWith(github.ref, 'refs/tags/') && github.repository == 'cuong-tran/komikku' run: | set -e - mv app/build/outputs/apk/standard/release/app-standard-universal-release-unsigned-signed.apk TachiyomiSY.apk - sha=`sha256sum TachiyomiSY.apk | awk '{ print $1 }'` + mv app/build/outputs/apk/standard/release/app-standard-universal-release-unsigned-signed.apk Komikku-${{ env.VERSION_TAG }}.apk + sha=`sha256sum Komikku-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'` echo "APK_UNIVERSAL_SHA=$sha" >> $GITHUB_ENV - cp app/build/outputs/apk/standard/release/app-standard-arm64-v8a-release-unsigned-signed.apk TachiyomiSY-arm64-v8a.apk - sha=`sha256sum TachiyomiSY-arm64-v8a.apk | awk '{ print $1 }'` + cp app/build/outputs/apk/standard/release/app-standard-arm64-v8a-release-unsigned-signed.apk Komikku-arm64-v8a-${{ env.VERSION_TAG }}.apk + sha=`sha256sum Komikku-arm64-v8a-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'` echo "APK_ARM64_V8A_SHA=$sha" >> $GITHUB_ENV - cp app/build/outputs/apk/standard/release/app-standard-armeabi-v7a-release-unsigned-signed.apk TachiyomiSY-armeabi-v7a.apk - sha=`sha256sum TachiyomiSY-armeabi-v7a.apk | awk '{ print $1 }'` + cp app/build/outputs/apk/standard/release/app-standard-armeabi-v7a-release-unsigned-signed.apk Komikku-armeabi-v7a-${{ env.VERSION_TAG }}.apk + sha=`sha256sum Komikku-armeabi-v7a-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'` echo "APK_ARMEABI_V7A_SHA=$sha" >> $GITHUB_ENV - cp app/build/outputs/apk/standard/release/app-standard-x86-release-unsigned-signed.apk TachiyomiSY-x86.apk - sha=`sha256sum TachiyomiSY-x86.apk | awk '{ print $1 }'` + cp app/build/outputs/apk/standard/release/app-standard-x86-release-unsigned-signed.apk Komikku-x86-${{ env.VERSION_TAG }}.apk + sha=`sha256sum Komikku-x86-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'` echo "APK_X86_SHA=$sha" >> $GITHUB_ENV - cp app/build/outputs/apk/standard/release/app-standard-x86_64-release-unsigned-signed.apk TachiyomiSY-x86_64.apk - sha=`sha256sum TachiyomiSY-x86_64.apk | awk '{ print $1 }'` + cp app/build/outputs/apk/standard/release/app-standard-x86_64-release-unsigned-signed.apk Komikku-x86_64-${{ env.VERSION_TAG }}.apk + sha=`sha256sum Komikku-x86_64-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'` echo "APK_X86_64_SHA=$sha" >> $GITHUB_ENV - name: Create release + if: startsWith(github.ref, 'refs/tags/') && github.repository == 'cuong-tran/komikku' uses: softprops/action-gh-release@v1 with: - tag_name: ${{ github.run_number }} - name: TachiyomiSY + tag_name: ${{ env.VERSION_TAG }} + name: Komikku ${{ env.VERSION_TAG }} body: | + Change logs: + + ${{ env.CHANGE_LOGS }} + + ### Commits + + https://github.com/cuongtran/komikku/compare/${{ env.PREV_RELEASE_SHA }}...${{ env.CURRENT_SHA }} + + ${{ env.COMMIT_LOGS }} + --- ### Checksums @@ -94,13 +150,15 @@ jobs: | armeabi-v7a | ${{ env.APK_ARMEABI_V7A_SHA }} | | x86 | ${{ env.APK_X86_SHA }} | | x86_64 | ${{ env.APK_X86_64_SHA }} | + + If you are unsure which version to choose then go with Komikku-${{ env.VERSION_TAG }}.apk files: | - TachiyomiSY.apk - TachiyomiSY-arm64-v8a.apk - TachiyomiSY-armeabi-v7a.apk - TachiyomiSY-x86.apk - TachiyomiSY-x86_64.apk - draft: true + Komikku-${{ env.VERSION_TAG }}.apk + Komikku-arm64-v8a-${{ env.VERSION_TAG }}.apk + Komikku-armeabi-v7a-${{ env.VERSION_TAG }}.apk + Komikku-x86-${{ env.VERSION_TAG }}.apk + Komikku-x86_64-${{ env.VERSION_TAG }}.apk + draft: false prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/build_push_preview.yml b/.github/workflows/build_push_preview.yml index 45fc0ae32..4bbddf056 100644 --- a/.github/workflows/build_push_preview.yml +++ b/.github/workflows/build_push_preview.yml @@ -3,12 +3,12 @@ name: Remote Dispatch Action Initiator on: push: branches: - - 'master' + - 'preview' jobs: trigger_preview_build: name: Trigger preview build - if: ${{ github.ref == 'refs/heads/master' }} + if: ${{ github.ref == 'refs/heads/preview' }} runs-on: ubuntu-latest steps: @@ -23,7 +23,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} WITH_V: true - RELEASE_BRANCHES: master + RELEASE_BRANCHES: preview DEFAULT_BUMP: patch - name: PING - Dispatch initiating repository event diff --git a/.github/workflows/issue_moderator.yml b/.github/workflows/issue_moderator.yml index 8e937956c..c5c6bf213 100644 --- a/.github/workflows/issue_moderator.yml +++ b/.github/workflows/issue_moderator.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Moderate issues - uses: tachiyomiorg/issue-moderator-action@v2 + uses: cuong-tran/issue-moderator-action@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} duplicate-label: Duplicate