Skip to content

Package

Package #9

Workflow file for this run

name: Package
on:
workflow_dispatch:
env:
LLVM_VERSION: '10.0'
RUST_TOOLCHAIN: nightly-2024-09-04
NDK_VERSION: 25.2.9519653
FLUTTER_VERSION: '3.24.2'
FLUTTER_CHANNEL: 'stable'
jobs:
ci-pass:
name: CI is green
runs-on: ubuntu-latest
needs:
- build_release_assets
steps:
- run: exit 0
build_release_assets:
name: Build release assets
strategy:
fail-fast: false
matrix:
config:
- target: linux
host: ubuntu-latest
- target: windows
host: windows-latest
- target: macos
host: macos-latest
- target: ios
host: macos-latest
- target: android-arm64
host: ubuntu-latest
runs-on: ${{ matrix.config.host }}
env:
TARGET: ${{ matrix.config.target }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
path: 'kobi'
- name: Cargo cache
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
key: ${{ runner.os }}-cargo-
- name: Install rust toolchain
uses: actions-rs/toolchain@v1
with:
components: rustfmt
toolchain: ${{ env.RUST_TOOLCHAIN }}
override: true
- name: Cargo ci build cache
uses: actions/cache@v3
with:
path: |
kobi/ci/target/
key: ${{ runner.os }}-cargo-ci_target
- name: Cache Flutter dependencies (Linux/Android)
if: true && ( matrix.config.target == 'android-arm32' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-x86_64' || matrix.config.target == 'linux' )
uses: actions/cache@v3
with:
path: /opt/hostedtoolcache/flutter
key: ${{ runner.os }}-flutter
- name: Setup flutter
if: true
uses: subosito/flutter-action@v2
with:
channel: ${{ env.FLUTTER_CHANNEL }}
flutter-version: ${{ env.FLUTTER_VERSION }}
architecture: x64
- name: Install LLVM and Clang (Linux/Android)
if: true && ( matrix.config.target == 'android-arm32' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-x86_64' || matrix.config.target == 'linux' )
run: |
sudo apt update
sudo apt install -y libclang-dev
- name: Install libfuse2 (Linux)
if: true && matrix.config.target == 'linux'
run: |
sudo apt update
sudo apt install -y libfuse2
- name: Install cargo tools (non-android)
if: true && ( matrix.config.target == 'macos' || matrix.config.target == 'windows' || matrix.config.target == 'linux' )
run: |
cargo install cbindgen
- name: Install cargo tools (Android)
if: true && ( matrix.config.target == 'android-arm32' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-x86_64' )
run: |
cargo install cargo-ndk
- name: Setup java (Android)
if: true && ( matrix.config.target == 'android-arm32' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-x86_64' )
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
- name: Setup android tools (Android)
if: true && ( matrix.config.target == 'android-arm32' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-x86_64' )
uses: android-actions/setup-android@v3
with:
cmdline-tools-version: 8512546
packages: 'platform-tools platforms;android-32 build-tools;30.0.2 ndk;23.1.7779620'
- name: Set-Version (All)
if: true
run: |
cd kobi/ci
cp version.code.txt ../lib/assets/version.txt
- name: Cargo native build cache
if: true
uses: actions/cache@v3
with:
path: |
kobi/native/target/
key: ${{ runner.os }}-cargo-native_target-${{ matrix.config.target }}
- name: Install rust target and build (ios)
if: true && ( matrix.config.target == 'ios')
run: |
rustup target install aarch64-apple-ios
cd kobi
flutter pub get
flutter build ios --no-simulator --no-codesign --release
cd build
rm -rf Payload
mkdir Payload
mv ios/iphoneos/Runner.app Payload/
sh ../scripts/thin-payload.sh Payload
zip -r -9 nosign.ipa Payload
cd ..
- name: Upload Asset (All)
if: true && ( matrix.config.target == 'ios')
uses: actions/upload-artifact@v4
with:
name: 'nosign.ipa'
path: 'kobi/build/nosign.ipa'
retention-days: 3
- name: Run (ios-sim)
if: true && ( matrix.config.target == 'ios-sim')
run: |
rustup target install aarch64-apple-ios-sim
rustup target install x86_64-apple-ios
cd kobi
flutter pub get
flutter run
- name: Install rust target and build (Android-arm64)
if: true && ( matrix.config.target == 'android-arm64')
run: |
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/${{ env.NDK_VERSION }}
rustup target install aarch64-linux-android
cd kobi
flutter build apk --target-platform android-arm64
- name: Sign APK (Android)
if: true && ( matrix.config.target == 'android-arm32' || matrix.config.target == 'android-arm64' || matrix.config.target == 'android-x86_64' )
env:
ANDROID_JKS_BASE64: ${{ secrets.ANDROID_JKS_BASE64 }}
ANDROID_JKS_PASSWORD: ${{ secrets.ANDROID_JKS_PASSWORD }}
run: |
cd kobi
echo $ANDROID_JKS_BASE64 > key.jks.base64
base64 -d key.jks.base64 > key.jks
echo $ANDROID_JKS_PASSWORD | $ANDROID_HOME/build-tools/30.0.2/apksigner sign --ks key.jks build/app/outputs/flutter-apk/app-release.apk
- name: Upload Asset (Android-arm64)
if: true && ( matrix.config.target == 'android-arm64')
uses: actions/upload-artifact@v4
with:
name: 'app-release.apk'
path: 'kobi/build/app/outputs/flutter-apk/app-release.apk'
retention-days: 3
- name: Install dependencies and build (Linux)
if: true && matrix.config.target == 'linux'
run: |
sudo apt-get update
sudo apt install -y ninja-build liblzma-dev libgtk-3-dev libgl1-mesa-dev xorg-dev
curl -JOL https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
chmod a+x appimagetool-x86_64.AppImage
mv appimagetool-x86_64.AppImage appimagetool
cd kobi
flutter pub get
flutter config --enable-linux-desktop
flutter build linux --release
mv build/linux/x64/release/bundle/{kobi,AppRun}
cp linux/appimage/* build/linux/x64/release/bundle/
../appimagetool build/linux/x64/release/bundle/
mv *.AppImage build/linux.AppImage
- name: Upload Asset (linux)
if: true && ( matrix.config.target == 'linux')
uses: actions/upload-artifact@v4
with:
name: 'build.AppImage'
path: 'kobi/build/build.AppImage'
retention-days: 3
- name: build (windows)
if: true && matrix.config.target == 'windows'
run: |
cd kobi
flutter pub get
flutter config --enable-windows-desktop
flutter build windows
cd build/windows/x64/runner/Release
Compress-Archive * ../../../../../build/windows.zip
cd ../../../../..
- name: Upload Asset (windows)
if: true && ( matrix.config.target == 'windows')
uses: actions/upload-artifact@v4
with:
name: 'windows.zip'
path: 'kobi/build/windows.zip'
retention-days: 3
- name: Build (macos)
if: true && matrix.config.target == 'macos'
run: |
cd kobi
flutter pub get
rustup target install x86_64-apple-darwin
rustup target install aarch64-apple-darwin
flutter config --enable-macos-desktop
flutter build macos
cd build
mkdir appimage
mv macos/Build/Products/Release/kobi.app appimage/
ln -sf /Applications appimage/
hdiutil create -volname kobi -srcfolder appimage -ov -format UDBZ macos.dmg
cd ..
- name: Upload Asset (macos)
if: true && ( matrix.config.target == 'macos')
uses: actions/upload-artifact@v4
with:
name: 'macos.dmg'
path: 'kobi/build/macos.dmg'
retention-days: 3