227 lines
9.4 KiB
YAML
227 lines
9.4 KiB
YAML
name: Preview Builder
|
|
# Manually build a preview on master
|
|
|
|
on:
|
|
# Dispatch or Manual triggers
|
|
workflow_dispatch:
|
|
|
|
# push:
|
|
# branches:
|
|
# - master
|
|
# paths:
|
|
# - '**'
|
|
# - '!**.md'
|
|
# - '!.github/**'
|
|
# - '.github/scripts/**'
|
|
# - '.github/workflows/**'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
prepare-build:
|
|
runs-on: 'ubuntu-24.04'
|
|
outputs:
|
|
VERSION_TAG: ${{ steps.get_tag.outputs.VERSION_TAG }}
|
|
CURRENT_SHA: ${{ steps.current_commit.outputs.CURRENT_SHA }}
|
|
PREV_RELEASE_SHA: ${{ steps.previous_commit.outputs.PREV_RELEASE_SHA }}
|
|
COMMIT_LOGS: ${{ steps.commit_logs.outputs.COMMIT_LOGS }}
|
|
ARTIFACTS_PREFIX: ${{ steps.prepare_env.outputs.ARTIFACTS_PREFIX }}
|
|
BUILD_TYPE_NAME: ${{ steps.prepare_env.outputs.BUILD_TYPE_NAME }}
|
|
TAG_NAME: ${{ steps.prepare_env.outputs.TAG_NAME }}
|
|
PREV_TAG_NAME: ${{ steps.previous_commit.outputs.PREV_TAG_NAME }}
|
|
steps:
|
|
- name: Get tag name (${{ github.ref }})
|
|
id: get_tag
|
|
run: |
|
|
version_tag=$(echo ${GITHUB_REF/refs\/heads\//} | sed -r 's/^refs\/(heads|tags)\///' | sed -r 's/[-\/]+/_/g')
|
|
echo "VERSION_TAG=$version_tag"
|
|
echo "VERSION_TAG=$version_tag" >> $GITHUB_OUTPUT
|
|
|
|
- name: Clone Repository (${{ steps.get_tag.outputs.VERSION_TAG }})
|
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Get previous release
|
|
id: last_release
|
|
uses: InsonusK/get-latest-release@7a9ff16c8c6b7ead5d71c0f1cc61f2703170eade # v1.1.0
|
|
with:
|
|
myToken: ${{ github.token }}
|
|
exclude_types: "draft"
|
|
view_top: 1
|
|
|
|
- name: Curren commit
|
|
id: current_commit
|
|
run: |
|
|
commit_count=$(git rev-list --count HEAD)
|
|
current_sha=$(git rev-parse --short HEAD)
|
|
echo "COMMIT_COUNT=$commit_count"
|
|
echo "COMMIT_COUNT=$commit_count" >> $GITHUB_OUTPUT
|
|
echo "CURRENT_SHA=$current_sha"
|
|
echo "CURRENT_SHA=$current_sha" >> $GITHUB_OUTPUT
|
|
|
|
- name: Previous commit
|
|
id: previous_commit
|
|
run: |
|
|
commit_count_diff=$(git rev-list --count "${{ steps.last_release.outputs.tag_name }}"..HEAD)
|
|
|
|
# Fake at least 1 commits (to avoid no changes)
|
|
if [ "${commit_count_diff}" -eq 0 ]; then
|
|
commit_count_diff=1
|
|
fi
|
|
|
|
echo "commit_count_diff=$commit_count_diff"
|
|
prev_release_sha=$(git rev-parse --short HEAD~$commit_count_diff)
|
|
echo "PREV_RELEASE_SHA=$prev_release_sha"
|
|
echo "PREV_RELEASE_SHA=$prev_release_sha" >> $GITHUB_OUTPUT
|
|
echo "PREV_TAG_NAME=${{ steps.last_release.outputs.tag_name }}"
|
|
echo "PREV_TAG_NAME=${{ steps.last_release.outputs.tag_name }}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Prepare env
|
|
id: prepare_env
|
|
run: |
|
|
tag_prefix=r
|
|
artifacts_prefix=preview/app
|
|
build_type_name=Preview
|
|
|
|
echo "TAG_NAME=${tag_prefix}${{ steps.current_commit.outputs.COMMIT_COUNT }}"
|
|
echo "TAG_NAME=${tag_prefix}${{ steps.current_commit.outputs.COMMIT_COUNT }}" >> $GITHUB_OUTPUT
|
|
echo "ARTIFACTS_PREFIX=$artifacts_prefix"
|
|
echo "ARTIFACTS_PREFIX=$artifacts_prefix" >> $GITHUB_OUTPUT
|
|
echo "BUILD_TYPE_NAME=$build_type_name"
|
|
echo "BUILD_TYPE_NAME=$build_type_name" >> $GITHUB_OUTPUT
|
|
|
|
- name: Create Tag '${{ steps.prepare_env.outputs.TAG_NAME }}'
|
|
if: ${{ github.ref }} == "refs/heads/master"
|
|
run: |
|
|
git tag "${{ steps.prepare_env.outputs.TAG_NAME }}"
|
|
git push origin "${{ steps.prepare_env.outputs.TAG_NAME }}"
|
|
echo "New tag created: ${{ steps.prepare_env.outputs.TAG_NAME }}"
|
|
|
|
- name: Commit logs
|
|
id: commit_logs
|
|
run: |
|
|
echo "COMMIT_LOGS<<{delimiter}
|
|
$(curl -H "Accept: application/vnd.github.v3+json" \
|
|
"https://api.github.com/repos/komikku-app/komikku/compare/${{ steps.previous_commit.outputs.PREV_RELEASE_SHA }}...${{ steps.current_commit.outputs.CURRENT_SHA }}" \
|
|
| jq '[.commits[]|{message:(.commit.message | split("\n")), username:.author.login}]' \
|
|
| jq -r '.[]|"- \(.message | first) (@\(.username))"')
|
|
{delimiter}" >> $GITHUB_OUTPUT
|
|
|
|
build-app:
|
|
runs-on: 'ubuntu-24.04'
|
|
needs: prepare-build
|
|
if: github.ref == 'refs/heads/master'
|
|
steps:
|
|
- name: Clone Repository (${{ needs.prepare-build.outputs.VERSION_TAG }} - ${{ needs.prepare-build.outputs.TAG_NAME }})
|
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Set up JDK
|
|
uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
|
|
with:
|
|
java-version: 17
|
|
distribution: temurin
|
|
|
|
- name: Write google-services.json
|
|
uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3
|
|
with:
|
|
path: app/google-services.json
|
|
contents: ${{ secrets.GOOGLE_SERVICES_JSON }}
|
|
write-mode: overwrite
|
|
|
|
- name: Write client_secrets.json
|
|
uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3
|
|
with:
|
|
path: app/src/main/assets/client_secrets.json
|
|
contents: ${{ secrets.GOOGLE_CLIENT_SECRETS_JSON }}
|
|
write-mode: overwrite
|
|
|
|
- name: Set up gradle
|
|
uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6
|
|
|
|
- name: Check code format
|
|
run: ./gradlew spotlessCheck
|
|
|
|
- name: Build app
|
|
run: ./gradlew assemblePreview -Pinclude-telemetry -Penable-updater
|
|
|
|
- name: Run unit tests
|
|
run: ./gradlew testReleaseUnitTest
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
path: "**/*.apk"
|
|
retention-days: 1
|
|
|
|
release-app:
|
|
runs-on: 'ubuntu-24.04'
|
|
needs:
|
|
- prepare-build
|
|
- build-app
|
|
steps:
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
with:
|
|
merge-multiple: true
|
|
|
|
- name: Sign APK
|
|
uses: r0adkll/sign-android-release@f30bdd30588842ac76044ecdbd4b6d0e3e813478
|
|
with:
|
|
releaseDirectory: app/build/outputs/apk/preview
|
|
signingKeyBase64: ${{ secrets.SIGNING_KEY }}
|
|
alias: ${{ secrets.ALIAS }}
|
|
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
|
|
keyPassword: ${{ secrets.KEY_PASSWORD }}
|
|
env:
|
|
BUILD_TOOLS_VERSION: '35.0.1'
|
|
|
|
- name: Get SHA & clean up build artifacts
|
|
id: get_sha
|
|
run: |
|
|
set -e
|
|
|
|
mv app/build/outputs/apk/${{ needs.prepare-build.outputs.ARTIFACTS_PREFIX }}-universal-preview-signed.apk Komikku-${{ needs.prepare-build.outputs.TAG_NAME }}.apk
|
|
mv app/build/outputs/apk/${{ needs.prepare-build.outputs.ARTIFACTS_PREFIX }}-arm64-v8a-preview-signed.apk Komikku-arm64-v8a-${{ needs.prepare-build.outputs.TAG_NAME }}.apk
|
|
mv app/build/outputs/apk/${{ needs.prepare-build.outputs.ARTIFACTS_PREFIX }}-armeabi-v7a-preview-signed.apk Komikku-armeabi-v7a-${{ needs.prepare-build.outputs.TAG_NAME }}.apk
|
|
mv app/build/outputs/apk/${{ needs.prepare-build.outputs.ARTIFACTS_PREFIX }}-x86-preview-signed.apk Komikku-x86-${{ needs.prepare-build.outputs.TAG_NAME }}.apk
|
|
mv app/build/outputs/apk/${{ needs.prepare-build.outputs.ARTIFACTS_PREFIX }}-x86_64-preview-signed.apk Komikku-x86_64-${{ needs.prepare-build.outputs.TAG_NAME }}.apk
|
|
|
|
- name: Create release
|
|
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
|
|
with:
|
|
tag_name: ${{ needs.prepare-build.outputs.TAG_NAME }}
|
|
name: Komikku Preview ${{ needs.prepare-build.outputs.TAG_NAME }} (${{ needs.prepare-build.outputs.VERSION_TAG }})
|
|
body: |
|
|
[](https://github.com/komikku-app/komikku/releases/${{ needs.prepare-build.outputs.TAG_NAME }})
|
|
#### What's Changed
|
|
##### New
|
|
|
|
##### Improve
|
|
|
|
##### Fix
|
|
|
|
${{ needs.prepare-build.outputs.COMMIT_LOGS }}
|
|
|
|
**Full Changelog**: [komikku-app/komikku@${{ needs.prepare-build.outputs.PREV_TAG_NAME }}...${{ needs.prepare-build.outputs.TAG_NAME }}](https://github.com/komikku-app/komikku/compare/${{ needs.prepare-build.outputs.PREV_TAG_NAME }}...${{ needs.prepare-build.outputs.TAG_NAME }})
|
|
|
|
<!-->
|
|
> [!TIP]
|
|
>
|
|
> ### If you are unsure which version to download then go with `Komikku-${{ needs.prepare-build.outputs.TAG_NAME }}.apk`
|
|
files: |
|
|
Komikku-${{ needs.prepare-build.outputs.TAG_NAME }}.apk
|
|
Komikku-arm64-v8a-${{ needs.prepare-build.outputs.TAG_NAME }}.apk
|
|
Komikku-armeabi-v7a-${{ needs.prepare-build.outputs.TAG_NAME }}.apk
|
|
Komikku-x86-${{ needs.prepare-build.outputs.TAG_NAME }}.apk
|
|
Komikku-x86_64-${{ needs.prepare-build.outputs.TAG_NAME }}.apk
|
|
draft: true
|
|
prerelease: true
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|