Skip to content

Flutter Build Release #276

Flutter Build Release

Flutter Build Release #276

name: Flutter Build Release
on:
push:
branches:
- dev
tags:
- '*'
env:
FLUTTER_VERSION: '3.22.0'
IS_PRERELEASE: ${{ startsWith(github.ref, 'refs/tags/') && 'false' || 'true' }}
RELEASE_TAG: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || 'latest' }}
jobs:
cancel:
name: Cancel Previous Runs
runs-on: ubuntu-latest
steps:
- uses: styfle/cancel-workflow-action@0.9.1
with:
access_token: ${{ github.token }}
android:
needs: cancel
name: Build APK
runs-on: ubuntu-latest
env:
FLUTTER_KEY_ALIAS: ${{ secrets.FLUTTER_KEY_ALIAS }}
FLUTTER_KEY_PASSWORD: ${{ secrets.FLUTTER_KEY_PASSWORD }}
FLUTTER_STORE_PASSWORD: ${{ secrets.FLUTTER_STORE_PASSWORD }}
steps:
- name: Checkout Repository
uses: actions/checkout@v3
with:
submodules: recursive
- name: Cache Flutter SDK and dependencies
uses: actions/cache@v2
with:
path: |
~/.pub-cache
~/.flutter
key: ${{ runner.os }}-flutter-${{ env.FLUTTER_VERSION }}-${{ hashFiles('**/pubspec.yaml') }}
restore-keys: |
${{ runner.os }}-flutter-${{ env.FLUTTER_VERSION }}-
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
- name: Decode Keystore
run: echo "${{ secrets.FLUTTER_STORE_FILE }}" | base64 -d > android/app/release-key.jks
- name: Install Dependencies
run: flutter pub get
- name: Build APK
run: |
flutter build apk --release
- name: Rename APK
run: mv build/app/outputs/flutter-apk/app-release.apk build/app/outputs/flutter-apk/InnerBreeze.apk
- name: Upload APKs as Artifact
uses: actions/upload-artifact@v2
with:
name: apk-artifacts
path: |
build/app/outputs/flutter-apk/InnerBreeze.apk
ios:
needs: cancel
name: Build iOS
runs-on: macos-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Cache Flutter SDK and dependencies
uses: actions/cache@v2
with:
path: |
~/.pub-cache
~/Library/Caches/com.google.dart.tools.sdk
~/.flutter
key: ${{ runner.os }}-flutter-${{ env.FLUTTER_VERSION }}-${{ hashFiles('**/pubspec.yaml') }}
restore-keys: |
${{ runner.os }}-flutter-${{ env.FLUTTER_VERSION }}-
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
- name: Install Dependencies
run: flutter pub get
- name: Build iOS
run: flutter build ios --release --no-codesign
- name: Archive iOS app
run: tar -czf build/ios/iphoneos/ios_unsigned.app.tar.gz build/ios/iphoneos/Runner.app
- name: Upload iOS app as Artifact
uses: actions/upload-artifact@v2
with:
name: ios-artifact
path: build/ios/iphoneos/ios_unsigned.app.tar.gz
linux:
needs: cancel
name: Build Linux
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Cache Flutter SDK
uses: actions/cache@v2
with:
path: |
~/.pub-cache
~/.flutter
key: ${{ runner.os }}-flutter-${{ env.FLUTTER_VERSION }}-${{ hashFiles('**/pubspec.yaml') }}
restore-keys: |
${{ runner.os }}-flutter-${{ env.FLUTTER_VERSION }}-
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
clang \
cmake \
ninja-build \
pkg-config \
libgtk-3-dev \
libunwind-dev \
liborc-dev \
liblzma-dev \
gstreamer1.0-plugins-base \
gstreamer1.0-libav \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libpangocairo-1.0-0 \
libpango-1.0-0 \
libharfbuzz0b \
libatk1.0-0 \
libcairo-gobject2 \
libcairo2
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
- name: Install Dependencies
run: flutter pub get
- name: Build Linux Executable
run: |
flutter build linux --release
- name: Create AppImage
run: |
sudo apt-get update
sudo apt-get install -y libfuse2
# Download appimagetool from GitHub
wget "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
chmod a+x appimagetool-x86_64.AppImage
# Make Appdir
cp -r build/linux/x64/release/bundle InnerBreeze.AppDir
# Add the AppRun script
echo -e '#!/bin/bash\ncurrent_dir="$(dirname "$(readlink -f "$0")")"\n"$current_dir/inner_breeze"' > InnerBreeze.AppDir/AppRun
chmod +x InnerBreeze.AppDir/AppRun
cat > InnerBreeze.AppDir/InnerBreeze.desktop <<EOF
[Desktop Entry]
Type=Application
Name=InnerBreeze
Comment=A dedicated meditation app to guide and track your Wim Hof Breathing practice.
Exec=AppRun
Icon=InnerBreeze
Terminal=false
Version=1.5
Categories=Utility;Education;
Keywords=Meditation;Breathing;Relaxation;Focus;Wellness;
StartupNotify=true
EOF
cp InnerBreeze.AppDir/data/flutter_assets/assets/images/logo.png InnerBreeze.AppDir/InnerBreeze.png
./appimagetool-x86_64.AppImage InnerBreeze.AppDir
- name: Archive Linux executable
run: |
mkdir -p organized_output/InnerBreeze-x86_64/
mv build/linux/x64/release/bundle/* organized_output/InnerBreeze-x86_64/
cp -r metadata organized_output/InnerBreeze-x86_64/
cp -r snap organized_output/InnerBreeze-x86_64/
cd organized_output
tar -czf ../InnerBreeze-Linux-x86_64.tar.gz InnerBreeze-x86_64/
- name: Upload Linux Artifacts
uses: actions/upload-artifact@v2
with:
name: linux-artifacts
path: |
InnerBreeze-Linux-x86_64.tar.gz
InnerBreeze-x86_64.AppImage
snap:
needs: cancel
name: Build Snap
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: snapcore/action-build@v1
id: build
- uses: snapcore/action-publish@v1
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }}
with:
snap: ${{ steps.build.outputs.snap }}
release: ${{ startsWith(github.ref, 'refs/tags/') && 'stable' || 'beta' }}
windows:
needs: cancel
name: Build Windows
runs-on: windows-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Cache Flutter SDK
uses: actions/cache@v2
with:
path: |
~\AppData\Local\Pub\Cache
~\AppData\Local\Flutter
key: ${{ runner.os }}-flutter-${{ env.FLUTTER_VERSION }}-${{ hashFiles('**/pubspec.yaml') }}
restore-keys: |
${{ runner.os }}-flutter-${{ env.FLUTTER_VERSION }}-
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
- name: Install Dependencies
run: flutter pub get
- name: Build Windows Executable
run: flutter build windows --release
- name: Reorganize Windows Directory
run: |
mkdir -p organized_output/windows/
cp -r build/windows/x64/runner/Release/* organized_output/windows/
- name: Archive Windows executable
run: 7z a build/InnerBreeze-Windows-x86_64.zip organized_output/windows/
- name: Upload Windows executable as Artifact
uses: actions/upload-artifact@v2
with:
name: windows-artifact
path: build/InnerBreeze-Windows-x86_64.zip
release:
name: Release Builds
needs: [android, ios, linux, windows, snap]
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Download APK Artifact
uses: actions/download-artifact@v2
with:
name: apk-artifacts
path: build/app/outputs/flutter-apk/
- name: Download iOS Artifact
uses: actions/download-artifact@v2
with:
name: ios-artifact
path: build/ios/iphoneos/
- name: Download Linux Artifacts
uses: actions/download-artifact@v2
with:
name: linux-artifacts
path: build/linux/
- name: Download Windows Artifact
uses: actions/download-artifact@v2
with:
name: windows-artifact
path: build/windows/
- name: Create Release and Upload Builds
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "${{ env.RELEASE_TAG }}"
prerelease: "${{ env.IS_PRERELEASE }}"
title: "${{ env.RELEASE_TAG }}"
files: |
build/app/outputs/flutter-apk/InnerBreeze.apk
build/ios/iphoneos/ios_unsigned.app.tar.gz
build/linux/InnerBreeze-Linux-x86_64.tar.gz
build/linux/InnerBreeze-x86_64.AppImage
build/windows/InnerBreeze-Windows-x86_64.zip