Build for Android #372
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build for Android | |
on: | |
# Enable manual run | |
workflow_dispatch: | |
push: | |
tags: | |
- '**' | |
jobs: | |
get-version: | |
name: Get version | |
runs-on: ubuntu-latest | |
timeout-minutes: 1 | |
outputs: | |
buildName: ${{ steps.get_version.outputs.buildName }} | |
buildNumber: ${{ steps.get_version.outputs.buildNumber }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Get version | |
id: get_version | |
run: | | |
# get buildName from lib/data/version.dart | |
buildName=$(grep -oP "(?<=buildName = ').*(?=')" lib/data/version.dart) | |
echo "buildName=$buildName" >> $GITHUB_OUTPUT | |
# get buildNumber from lib/data/version.dart | |
buildNumber=$(grep -oP '(?<=buildNumber = ).*(?=;)' lib/data/version.dart) | |
echo "buildNumber=$buildNumber" >> $GITHUB_OUTPUT | |
build-apk: | |
name: Build APK | |
runs-on: ubuntu-latest | |
needs: get-version | |
permissions: | |
contents: write | |
timeout-minutes: 20 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Remove unneeded files | |
run: | | |
rm -rf appimage | |
rm -rf assets_raw | |
rm -rf flatpak | |
rm -rf installers | |
rm -rf integration_test | |
rm -rf ios | |
rm -rf linux | |
rm -rf macos | |
rm -rf metadata | |
rm -rf snap | |
rm -rf submodules | |
rm -rf test | |
rm -rf windows | |
- name: Setup cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
build | |
key: ${{ runner.OS }}-saber-${{ hashFiles('**/pubspec.lock') }}-${{ hashFiles('**/*.dart') }} | |
restore-keys: | | |
${{ runner.OS }}-saber- | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: stable | |
cache: true | |
cache-key: 'flutter-:os:-:channel:-:version:-:arch:' | |
- run: flutter pub get | |
- name: Build apk | |
run: | | |
flutter build apk \ | |
--dart-define=DIRTY=$DIRTY | |
env: | |
DIRTY: ${{ !startsWith(github.ref, 'refs/tags/') }} | |
- name: Move unsigned apk | |
run: | | |
mkdir -p output | |
mv build/app/outputs/flutter-apk/app-release.apk output/ | |
- name: Sign apk | |
uses: ilharp/sign-android-release@v1 | |
id: sign_app | |
with: | |
releaseDir: output | |
signingKey: ${{ secrets.SIGNING_KEY }} | |
keyAlias: ${{ secrets.ALIAS }} | |
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} | |
keyPassword: ${{ secrets.KEY_PASSWORD }} | |
- name: Rename signed apk | |
id: rename_apk | |
run: | | |
apkName="Saber_v${{ needs.get-version.outputs.buildName }}.apk" | |
mv ${{ steps.sign_app.outputs.signedFile }} output/$apkName | |
echo "apkName=$apkName" >> $GITHUB_OUTPUT | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Saber-Android | |
path: output/${{ steps.rename_apk.outputs.apkName }} | |
- name: Upload to GitHub release | |
uses: svenstaro/upload-release-action@v2 | |
if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: output/${{ steps.rename_apk.outputs.apkName }} | |
build-foss-apk: | |
name: Build FOSS APK | |
runs-on: ubuntu-latest | |
needs: get-version | |
permissions: | |
contents: write | |
timeout-minutes: 20 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Remove unneeded files | |
run: | | |
rm -rf appimage | |
rm -rf assets_raw | |
rm -rf flatpak | |
rm -rf installers | |
rm -rf integration_test | |
rm -rf ios | |
rm -rf linux | |
rm -rf macos | |
rm -rf metadata | |
rm -rf packages/onyxsdk_pen | |
rm -rf snap | |
rm -rf submodules | |
rm -rf test | |
rm -rf windows | |
- name: Setup cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
build | |
key: ${{ runner.OS }}-saberfoss-${{ hashFiles('**/pubspec.lock') }}-${{ hashFiles('**/*.dart') }} | |
restore-keys: | | |
${{ runner.OS }}-saberfoss- | |
- name: Remove proprietary dependencies | |
run: ./patches/remove_proprietary_dependencies.sh | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: stable | |
cache: true | |
cache-key: 'flutter-:os:-:channel:-:version:-:arch:' | |
- run: flutter pub get | |
- name: Build apk | |
run: | | |
flutter build apk \ | |
--dart-define=DIRTY=$DIRTY | |
env: | |
DIRTY: ${{ !startsWith(github.ref, 'refs/tags/') }} | |
- name: Move unsigned apk | |
run: | | |
mkdir -p output | |
mv build/app/outputs/flutter-apk/app-release.apk output/ | |
- name: Sign apk | |
uses: ilharp/sign-android-release@v1 | |
id: sign_app | |
with: | |
releaseDir: output | |
signingKey: ${{ secrets.SIGNING_KEY }} | |
keyAlias: ${{ secrets.ALIAS }} | |
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} | |
keyPassword: ${{ secrets.KEY_PASSWORD }} | |
- name: Rename signed apk | |
id: rename_apk | |
run: | | |
apkName="Saber_FOSS_v${{ needs.get-version.outputs.buildName }}.apk" | |
mv ${{ steps.sign_app.outputs.signedFile }} output/$apkName | |
echo "apkName=$apkName" >> $GITHUB_OUTPUT | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Saber-Android-FOSS | |
path: output/${{ steps.rename_apk.outputs.apkName }} | |
- name: Upload to GitHub release | |
uses: svenstaro/upload-release-action@v2 | |
if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: output/${{ steps.rename_apk.outputs.apkName }} | |
build-foss-alt-apk: | |
name: Build FOSS APK with alternate package name | |
runs-on: ubuntu-latest | |
needs: get-version | |
timeout-minutes: 20 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Remove unneeded files | |
run: | | |
rm -rf appimage | |
rm -rf assets_raw | |
rm -rf flatpak | |
rm -rf installers | |
rm -rf integration_test | |
rm -rf ios | |
rm -rf linux | |
rm -rf macos | |
rm -rf metadata | |
rm -rf packages/onyxsdk_pen | |
rm -rf snap | |
rm -rf submodules | |
rm -rf test | |
rm -rf windows | |
- name: Setup cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
build | |
key: ${{ runner.OS }}-saberfoss-${{ hashFiles('**/pubspec.lock') }}-${{ hashFiles('**/*.dart') }} | |
restore-keys: | | |
${{ runner.OS }}-saberfoss- | |
- name: Remove proprietary dependencies | |
run: ./patches/remove_proprietary_dependencies.sh | |
- name: Patch package name | |
run: ./patches/alt_package_name.sh | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: stable | |
cache: true | |
cache-key: 'flutter-:os:-:channel:-:version:-:arch:' | |
- run: flutter pub get | |
- name: Build apk | |
run: | | |
flutter build apk \ | |
--dart-define=DIRTY=$DIRTY | |
env: | |
DIRTY: ${{ !startsWith(github.ref, 'refs/tags/') }} | |
- name: Move unsigned apk | |
run: | | |
mkdir -p output | |
mv build/app/outputs/flutter-apk/app-release.apk output/ | |
- name: Sign apk | |
uses: ilharp/sign-android-release@v1 | |
id: sign_app | |
with: | |
releaseDir: output | |
signingKey: ${{ secrets.SIGNING_KEY }} | |
keyAlias: ${{ secrets.ALIAS }} | |
keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} | |
keyPassword: ${{ secrets.KEY_PASSWORD }} | |
- name: Rename signed apk | |
id: rename_apk | |
run: | | |
apkName="Saber_FOSS_alt_v${{ needs.get-version.outputs.buildName }}.apk" | |
mv ${{ steps.sign_app.outputs.signedFile }} output/$apkName | |
echo "apkName=$apkName" >> $GITHUB_OUTPUT | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Saber-Android-FOSS-Alt | |
path: output/${{ steps.rename_apk.outputs.apkName }} | |
- name: Upload to GitHub release | |
uses: svenstaro/upload-release-action@v2 | |
if: false | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: output/${{ steps.rename_apk.outputs.apkName }} |