Build and Release #137
This file contains hidden or 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 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 |