Skip to content

Commit

Permalink
Add automated build workflow for Android (#1656)
Browse files Browse the repository at this point in the history
* feat: add build workflow for Android

* misc: remove branch from triggering workflow

* feat: rename apk to correct name

* misc: remove branch from triggering workflow
  • Loading branch information
hjiangsu authored Jan 14, 2025
1 parent 9d850d1 commit fbfc278
Showing 1 changed file with 94 additions and 0 deletions.
94 changes: 94 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: release

on:
push:
tags:
- '*.*.*'
workflow_dispatch:
inputs:
dry_run:
type: boolean
description: Is this a dry run (do not generate draft release)?
default: true

jobs:
build_android:
runs-on: ubuntu-latest
environment: production

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: 'recursive'

- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.27.x' # When updating this, also update the corresponding f-droid metadata file
channel: 'stable'
cache: true

- name: Read pubspec.yaml version
id: extract-version
uses: NiklasLehnfeld/flutter-version-number-action@main
with:
file-path: pubspec.yaml

- name: Generate version information
id: generate-version-info
run: |
VERSION=${{ steps.extract-version.outputs.version-number }}
VERSION=$(echo "$VERSION" | cut -d '+' -f 1)
echo "version=$VERSION" >> $GITHUB_OUTPUT
PRERELEASE=false
if [[ "$VERSION" == *-* ]]; then
PRERELEASE=true
fi
echo "prerelease=$PRERELEASE" >> $GITHUB_OUTPUT
TAG="$VERSION"
echo "tag=$TAG" >> $GITHUB_OUTPUT
echo "Info: version=$VERSION | tag=${TAG} | prerelease=$PRERELEASE"
- name: Build Android APK (unsigned)
run: |
sed -i 's/signingConfig signingConfigs.release//g' android/app/build.gradle
flutter build apk --release --flavor production --no-tree-shake-icons
rm ./build/app/outputs/flutter-apk/*.sha1
ls -l ./build/app/outputs/flutter-apk/
- name: Sign Android APKs
env:
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
run: |
echo "${KEYSTORE_BASE64}" | base64 -d > apksign.keystore
for apk in ./build/app/outputs/flutter-apk/*-release*.apk; do
unsignedFn=${apk/-release/-unsigned}
mv "$apk" "$unsignedFn"
${ANDROID_HOME}/build-tools/$(ls ${ANDROID_HOME}/build-tools/ | tail -1)/apksigner sign --ks apksign.keystore --ks-pass pass:"${KEYSTORE_PASSWORD}" --out "${apk}" "${unsignedFn}"
echo "${apk} | $(shasum -a 256 ${apk} | cut -d " " -f 1)"
done
rm apksign.keystore
echo "Finished signing Android APKs"
- name: Rename Android APKs
run: |
for apk in ./build/app/outputs/flutter-apk/*-release*.apk; do
mv "$apk" "./build/app/outputs/flutter-apk/thunder-v${{ steps.generate-version-info.outputs.version }}.apk"
done
- uses: actions/upload-artifact@v4
with:
path: ./build/app/outputs/flutter-apk/

- name: Create draft release and upload artifacts
if: ${{ inputs.dry_run }} == 'false'
uses: ncipollo/release-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: "${{ steps.generate-version-info.outputs.tag }}"
prerelease: ${{ steps.generate-version-info.outputs.prerelease }}
draft: true
artifacts: ./build/app/outputs/flutter-apk/thunder-v*.apk
generateReleaseNotes: true

0 comments on commit fbfc278

Please sign in to comment.