Skip to content

Build

Build #142

Workflow file for this run

name: Build
on:
push:
tags:
- "v*"
workflow_dispatch:
permissions:
contents: write
jobs:
get-flutter-version:
runs-on: ubuntu-latest
outputs:
flutter-version: ${{ steps.get-flutter-version.outputs.version }}
steps:
- uses: actions/checkout@v4
- name: Get Flutter version from .fvmrc
id: get-flutter-version
run: >
echo version=$(grep flutter .fvmrc | cut -d ':' -f 2 | cut -d '"' -f 2)
>> $GITHUB_OUTPUT
build-apk:
runs-on: ubuntu-latest
needs: get-flutter-version
env:
APK_BUILD_DIR: /tmp/build
steps:
- uses: actions/checkout@v4
- name: Copy files to env.APK_BUILD_DIR
run: |
mkdir -p $APK_BUILD_DIR
cp -r . $APK_BUILD_DIR
- name: Install Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: ${{ needs.get-flutter-version.outputs.flutter-version }}
cache: true
- name: Get dependencies
working-directory: ${{ env.APK_BUILD_DIR }}
run: flutter pub get
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 17
cache: gradle
- name: Dump keystore
uses: timheuer/base64-to-file@v1
with:
fileName: upload.keystore
fileDir: ${{ env.APK_BUILD_DIR }}/android/app/
encodedString: ${{ secrets.UPLOAD_KEYSTORE }}
- name: Move Rust toolchain to /tmp
run: mv $HOME/.cargo /tmp
- name: Build APK
working-directory: ${{ env.APK_BUILD_DIR }}
env:
HOME: /tmp
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }}
run: flutter build apk --split-per-abi
- name: Rename APK
working-directory: ${{ env.APK_BUILD_DIR }}/build/app/outputs/apk/release
run: |
mv app-armeabi-v7a-release.apk aria-${{ github.ref_name }}-armeabi-v7a.apk
mv app-arm64-v8a-release.apk aria-${{ github.ref_name }}-arm64-v8a.apk
mv app-x86_64-release.apk aria-${{ github.ref_name }}-x86_64.apk
- name: Upload APK
uses: actions/upload-artifact@v4
with:
name: APK
path: |
${{ env.APK_BUILD_DIR }}/build/app/outputs/apk/release/aria-${{ github.ref_name }}-armeabi-v7a.apk
${{ env.APK_BUILD_DIR }}/build/app/outputs/apk/release/aria-${{ github.ref_name }}-arm64-v8a.apk
${{ env.APK_BUILD_DIR }}/build/app/outputs/apk/release/aria-${{ github.ref_name }}-x86_64.apk
- name: Release APK
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: |
${{ env.APK_BUILD_DIR }}/build/app/outputs/apk/release/aria-${{ github.ref_name }}-armeabi-v7a.apk
${{ env.APK_BUILD_DIR }}/build/app/outputs/apk/release/aria-${{ github.ref_name }}-arm64-v8a.apk
${{ env.APK_BUILD_DIR }}/build/app/outputs/apk/release/aria-${{ github.ref_name }}-x86_64.apk
draft: true
build-appbundle:
runs-on: ubuntu-latest
needs: get-flutter-version
steps:
- uses: actions/checkout@v4
- name: Install Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: ${{ needs.get-flutter-version.outputs.flutter-version }}
cache: true
- name: Get dependencies
run: flutter pub get
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 17
cache: gradle
- name: Dump keystore
uses: timheuer/base64-to-file@v1
with:
fileName: upload.keystore
fileDir: android/app/
encodedString: ${{ secrets.UPLOAD_KEYSTORE }}
- name: Get build number
id: get-build-number
run: |
build_number=$(grep version pubspec.yaml | cut -d '+' -f 2)
echo build-number=$build_number >> $GITHUB_OUTPUT
- name: Build App Bundle
env:
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }}
run: >
flutter build appbundle
--build-number ${{ steps.get-build-number.outputs.build-number }}3
- name: Upload App Bundle
uses: actions/upload-artifact@v4
with:
name: App Bundle
path: build/app/outputs/bundle/release/app-release.aab
build-ios:
runs-on: macos-latest
needs: get-flutter-version
env:
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
APP_STORE_CONNECT_KEY_IDENTIFIER: ${{ secrets.APP_STORE_CONNECT_KEY_IDENTIFIER }}
APP_STORE_CONNECT_PRIVATE_KEY: ${{ secrets.APP_STORE_CONNECT_PRIVATE_KEY }}
CERTIFICATE_PRIVATE_KEY: ${{ secrets.CERTIFICATE_PRIVATE_KEY }}
steps:
- uses: actions/checkout@v4
- name: Install Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: ${{ needs.get-flutter-version.outputs.flutter-version }}
cache: true
- name: Get dependencies
run: flutter pub get
- name: Get build name
id: get-build-name
run: |
build_name=$(grep version pubspec.yaml | sed 's/[^0-9]*\([0-9.]*\).*/\1/')
echo build-name=$build_name >> $GITHUB_OUTPUT
- name: Build for iOS
run: >
flutter build ios
--no-codesign
--build-name ${{ steps.get-build-name.outputs.build-name }}
- name: Copy Runner.app
run: |
mkdir Payload
cp -R build/ios/iphoneos/Runner.app Payload
- name: Create IPA (Unsigned)
run: zip -r aria-${{ github.ref_name }}.ipa Payload
- name: Upload IPA (Unsigned)
uses: actions/upload-artifact@v4
with:
name: IPA
path: aria-${{ github.ref_name }}.ipa
- name: Release IPA (Unsigned)
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: aria-${{ github.ref_name }}.ipa
draft: true
- name: Install codemagic-cli-tools
run: pip install codemagic-cli-tools
- name: Fetch signing files
run: |
app-store-connect certificates get ${{ secrets.CERTIFICATE_ID }} --save
app-store-connect profiles get ${{ secrets.APP_PROFILE_ID }} --save
app-store-connect profiles get ${{ secrets.SHARE_EXTENSION_PROFILE_ID }} --save
- name: Set up keychain
run: keychain initialize
- name: Add certificates
run: keychain add-certificates
- name: Create xcarchive
# if: startsWith(github.ref, 'refs/tags/')
working-directory: ios
run: >
xcodebuild archive
-workspace Runner.xcworkspace
-scheme Runner
-configuration Release
-archivePath Runner.xcarchive
-allowProvisioningUpdates
- name: Create IPA
if: startsWith(github.ref, 'refs/tags/')
working-directory: ios
run: >
xcodebuild
-exportArchive
-archivePath Runner.xcarchive
-exportOptionsPlist ExportOptions.plist
-allowProvisioningUpdates
build-windows-x64:
runs-on: windows-latest
needs: get-flutter-version
steps:
- uses: actions/checkout@v4
- name: Install Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: ${{ needs.get-flutter-version.outputs.flutter-version }}
cache: true
- name: Get dependencies
run: flutter pub get
- name: Build for Windows
run: flutter build windows
- name: Create ZIP
run: >
Compress-Archive
-Path build/windows/x64/runner/Release/*
-DestinationPath aria-${{ github.ref_name }}-windows-x64.zip
- name: Upload ZIP
uses: actions/upload-artifact@v4
with:
name: Windows ZIP
path: aria-${{ github.ref_name }}-windows-x64.zip
- name: Release ZIP
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: aria-${{ github.ref_name }}-windows-x64.zip
draft: true
- name: Trim version
id: trim-version
shell: bash
run: >
echo version=$(echo ${{ github.ref_name }} | cut -c 2-)
>> $GITHUB_OUTPUT
- name: Compile Installer
env:
VERSION: ${{ steps.trim-version.outputs.version }}
run: iscc windows/setup.iss
- name: Upload installer
uses: actions/upload-artifact@v4
with:
name: Windows Installer
path: windows/Output/aria-v${{ steps.trim-version.outputs.version }}-windows-x64.exe
- name: Release installer
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: windows/Output/aria-v${{ steps.trim-version.outputs.version }}-windows-x64.exe
draft: true
build-macos:
runs-on: macos-latest
needs: get-flutter-version
env:
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
APP_STORE_CONNECT_KEY_IDENTIFIER: ${{ secrets.APP_STORE_CONNECT_KEY_IDENTIFIER }}
APP_STORE_CONNECT_PRIVATE_KEY: ${{ secrets.APP_STORE_CONNECT_PRIVATE_KEY }}
CERTIFICATE_PRIVATE_KEY: ${{ secrets.CERTIFICATE_PRIVATE_KEY }}
steps:
- uses: actions/checkout@v4
- name: Install codemagic-cli-tools
run: pip install codemagic-cli-tools
- name: Fetch signing files
run: >
app-store-connect fetch-signing-files com.poppingmoon.aria
--platform MAC_OS
--type MAC_APP_STORE
--create
- name: Fetch certificates
run: >
app-store-connect certificates list
--type MAC_INSTALLER_DISTRIBUTION
--save
- name: Set up keychain
run: keychain initialize
- name: Add certificates
run: keychain add-certificates
- name: Update Xcode project settings
run: xcode-project use-profiles
- name: Install Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: ${{ needs.get-flutter-version.outputs.flutter-version }}
cache: true
- name: Get dependencies
run: flutter pub get
- name: Get build name
id: get-build-name
run: |
build_name=$(grep version pubspec.yaml | sed 's/[^0-9]*\([0-9.]*\).*/\1/')
echo build-name=$build_name >> $GITHUB_OUTPUT
- name: Build for macOS
run: flutter build macos --build-name ${{ steps.get-build-name.outputs.build-name }}
- name: Install create-dmg
run: brew install create-dmg
- name: Create DMG
run: >
create-dmg
--window-pos 200 120
--window-size 800 400
--icon aria.app 200 185
--app-drop-link 600 185
aria-${{ github.ref_name }}.dmg
build/macos/Build/Products/Release/aria.app
- name: Upload DMG
uses: actions/upload-artifact@v4
with:
name: DMG
path: aria-${{ github.ref_name }}.dmg
- name: Release DMG
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: aria-${{ github.ref_name }}.dmg
draft: true
- name: Create package
run: |
xcrun productbuild \
--component build/macos/Build/Products/Release/aria.app \
/Applications/ unsigned.pkg
INSTALLER_CERT_NAME=$(keychain list-certificates \
| jq '[.[]
| select(.common_name
| contains("Mac Developer Installer"))
| .common_name][0]' \
| xargs)
xcrun productsign \
--sign "$INSTALLER_CERT_NAME" \
unsigned.pkg \
aria-${{ github.ref_name }}.app.pkg
- name: Publish package
if: startsWith(github.ref, 'refs/tags/')
run: app-store-connect publish --path aria-${{ github.ref_name }}.app.pkg
build-linux-arm64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: linux/arm64
- name: Build Docker image
run: docker build --platform linux/arm64 -t flutter .
- name: Build for Linux
run: >
docker run
-v $PWD:$PWD
-w $PWD
flutter
bash -c
"fvm install
&& fvm flutter pub get
&& fvm flutter build linux"
- name: Create TAR
working-directory: build/linux/arm64/release/bundle
run: tar -czvf ../../../../../aria-${{ github.ref_name }}-linux-arm64.tar.gz *
- name: Upload TAR
uses: actions/upload-artifact@v4
with:
name: Linux arm64 TAR
path: aria-${{ github.ref_name }}-linux-arm64.tar.gz
- name: Release TAR
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: aria-${{ github.ref_name }}-linux-arm64.tar.gz
draft: true
build-linux-x64:
runs-on: ubuntu-latest
needs: get-flutter-version
steps:
- uses: actions/checkout@v4
- name: Install Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: ${{ needs.get-flutter-version.outputs.flutter-version }}
cache: true
- name: Get dependencies
run: flutter pub get
- name: Install packages
run: |
sudo apt-get update
sudo apt-get install -y \
ninja-build libgtk-3-dev liblzma-dev libstdc++-12-dev \
libsecret-1-dev
- name: Build for Linux
run: flutter build linux
- name: Create TAR
working-directory: build/linux/x64/release/bundle
run: tar -czvf ../../../../../aria-${{ github.ref_name }}-linux-x64.tar.gz *
- name: Upload TAR
uses: actions/upload-artifact@v4
with:
name: Linux x64 TAR
path: aria-${{ github.ref_name }}-linux-x64.tar.gz
- name: Release TAR
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: aria-${{ github.ref_name }}-linux-x64.tar.gz
draft: true