Skip to content

Build and Release

Build and Release #137

Workflow file for this run

name: Build and Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
jobs:
android:
name: Android Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Prepare Android Signing
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
run: |
if [ -z "$ANDROID_KEYSTORE_BASE64" ]; then
echo "ANDROID_KEYSTORE_BASE64 secret missing; skipping signing setup."
exit 0
fi
printf "%s" "$ANDROID_KEYSTORE_BASE64" | base64 --decode > android/app/release-key.jks
cat <<EOF > android/key.properties
storeFile=app/release-key.jks
storePassword=$ANDROID_KEYSTORE_PASSWORD
keyAlias=$ANDROID_KEY_ALIAS
keyPassword=$ANDROID_KEY_PASSWORD
EOF
chmod 600 android/app/release-key.jks android/key.properties
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
- name: Get Dependencies
run: flutter pub get
- name: Build Universal APK
run: flutter build apk --release
- name: Rename Universal APK
run: mv build/app/outputs/flutter-apk/app-release.apk build/app/outputs/flutter-apk/KikoFlu-android-universe-release.apk
- name: Build Split APKs
run: flutter build apk --release --split-per-abi
- name: Rename Split APKs
run: |
mv build/app/outputs/flutter-apk/app-arm64-v8a-release.apk build/app/outputs/flutter-apk/KikoFlu-android-arm64-v8a-release.apk
mv build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk build/app/outputs/flutter-apk/KikoFlu-android-armeabi-v7a-release.apk
mv build/app/outputs/flutter-apk/app-x86_64-release.apk build/app/outputs/flutter-apk/KikoFlu-android-x86_64-release.apk
- name: Upload Android Artifacts
uses: actions/upload-artifact@v6
with:
name: android-release
path: |
build/app/outputs/flutter-apk/KikoFlu-android-universe-release.apk
build/app/outputs/flutter-apk/KikoFlu-android-arm64-v8a-release.apk
build/app/outputs/flutter-apk/KikoFlu-android-armeabi-v7a-release.apk
build/app/outputs/flutter-apk/KikoFlu-android-x86_64-release.apk
windows:
name: Windows Build
# windows-latest currently ships newer VS/CMake versions that break
# older native Flutter plugins used by this project.
runs-on: windows-2022
steps:
- uses: actions/checkout@v6
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
- name: Get Dependencies
run: flutter pub get
- name: Build Windows Release
run: flutter build windows --release
- name: Install Inno Setup
run: |
choco install innosetup --no-progress
echo "C:\Program Files (x86)\Inno Setup 6" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Get Version from Pubspec
id: get_version
shell: pwsh
run: |
$content = Get-Content pubspec.yaml -Raw
if ($content -match "version:\s*([0-9]+\.[0-9]+\.[0-9]+)") {
$version = $matches[1]
echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
Write-Host "Found version: $version"
} else {
Write-Error "Could not find version in pubspec.yaml"
exit 1
}
- name: Build Installer
run: iscc /DMyAppVersion="${{ steps.get_version.outputs.VERSION }}" installer_script.iss
- name: Create Zip
uses: thedoctor0/zip-release@0.7.6
with:
type: 'zip'
filename: 'KikoFlu-windows.zip'
directory: 'build/windows/x64/runner/Release'
- name: Upload Windows Artifacts
uses: actions/upload-artifact@v6
with:
name: windows-release
path: |
build/windows/x64/runner/Release/KikoFlu-windows.zip
Output/KikoFlu-windows-setup.exe
ios:
name: iOS Build (Unsigned)
runs-on: macos-latest
steps:
- uses: actions/checkout@v6
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
- name: Get Dependencies
run: flutter pub get
- name: Build iOS App (Unsigned)
run: flutter build ios --release --no-codesign
- name: Package IPA
run: |
mkdir -p build/Payload
cp -r build/ios/iphoneos/Runner.app build/Payload/
cd build
zip -qr KikoFlu-ios-unsigned.ipa Payload
- name: Upload iOS Artifact
uses: actions/upload-artifact@v6
with:
name: ios-unsigned-release
path: build/KikoFlu-ios-unsigned.ipa
macos:
name: macOS Build
runs-on: macos-latest
steps:
- uses: actions/checkout@v6
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
- name: Get Dependencies
run: flutter pub get
- name: Build macOS Release
run: flutter build macos --release
- name: Create DMG
run: |
mkdir -p build/dmg
cp -R build/macos/Build/Products/Release/KikoFlu.app build/dmg/
hdiutil create -volname "KikoFlu" \
-srcfolder build/dmg \
-ov -format UDZO \
KikoFlu-macos.dmg
- name: Upload macOS Artifact
uses: actions/upload-artifact@v6
with:
name: macos-release
path: KikoFlu-macos.dmg
linux:
name: Linux Build
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- name: Install Linux Dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
clang cmake ninja-build pkg-config \
libgtk-3-dev \
libmpv-dev \
libsqlite3-dev
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
- name: Get Dependencies
run: flutter pub get
- name: Build Linux Release
run: flutter build linux --release
- name: Create Archive
run: |
cd build/linux/x64/release/bundle
tar -czf "$GITHUB_WORKSPACE/KikoFlu-linux-x64.tar.gz" .
- name: Upload Linux Artifact
uses: actions/upload-artifact@v6
with:
name: linux-release
path: KikoFlu-linux-x64.tar.gz
linux-arm64:
name: Linux ARM64 Build
runs-on: ubuntu-22.04
if: github.event_name == 'workflow_dispatch'
steps:
- uses: actions/checkout@v6
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- name: Build in ARM64 Container
uses: uraimo/run-on-arch-action@v2
with:
arch: aarch64
distro: ubuntu22.04
githubToken: ${{ github.token }}
install: |
apt-get update
apt-get install -y \
curl git unzip xz-utils zip \
clang cmake ninja-build pkg-config \
libgtk-3-dev \
libmpv-dev \
libsqlite3-dev
# Install Flutter
git clone https://github.com/flutter/flutter.git -b stable /opt/flutter --depth 1
/opt/flutter/bin/flutter --version
run: |
export PATH="/opt/flutter/bin:$PATH"
flutter pub get
flutter build linux --release
cd build/linux/arm64/release/bundle
tar -czf "$GITHUB_WORKSPACE/KikoFlu-linux-arm64.tar.gz" .
- name: Upload Linux ARM64 Artifact
uses: actions/upload-artifact@v6
with:
name: linux-arm64-release
path: KikoFlu-linux-arm64.tar.gz