Files
iiEsaywebUIapp/.github/workflows/release.yml

172 lines
4.7 KiB
YAML

name: Release
on:
push:
tags:
- 'v*'
concurrency:
group: release-${{ github.ref }}
cancel-in-progress: true
jobs:
build-android:
name: Build Android
runs-on: ubuntu-latest
steps:
#1 Checkout Repository
- name: Checkout Repository
uses: actions/checkout@v4
#2 Setup Java
- name: Set Up Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Setup Gradle and caching
uses: gradle/actions/setup-gradle@v3
#3 Setup Flutter
- name: Set Up Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
cache: true
#4 Install Dependencies
- name: Install Dependencies
run: flutter pub get --enforce-lockfile
- name: Generate code (build_runner)
run: dart run build_runner build --delete-conflicting-outputs -q
#5 Setup Keystore
- name: Create Keystore
run: |
echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 --decode > app/conduit-keystore.jks
echo "${{ secrets.ANDROID_KEY_PROPERTIES_BASE64 }}" | base64 --decode > key.properties
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
ANDROID_KEY_PROPERTIES_BASE64: ${{ secrets.ANDROID_KEY_PROPERTIES_BASE64 }}
working-directory: android
- name: Build APK
run: flutter build apk --split-per-abi --release
- name: Build appBundle
run: flutter build appbundle --release
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: Releases
path: |
build/app/outputs/flutter-apk/app-arm64-v8a-release.apk
build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk
build/app/outputs/flutter-apk/app-x86_64-release.apk
build/app/outputs/bundle/release/app-release.aab
- name: Create or Update Release
uses: ncipollo/release-action@v1
with:
artifacts: "build/app/outputs/flutter-apk/app-arm64-v8a-release.apk,build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk,build/app/outputs/flutter-apk/app-x86_64-release.apk,build/app/outputs/bundle/release/app-release.aab"
tag: ${{ github.ref_name }}
token: ${{ secrets.GITHUB_TOKEN }}
generateReleaseNotes: true
allowUpdates: true
makeLatest: true
build-ios:
name: Build iOS
runs-on: macos-latest
steps:
#1 Checkout Repository
- name: Checkout Repository
uses: actions/checkout@v4
#2 Setup Flutter
- name: Set Up Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
cache: true
#3 Install Dependencies
- name: Install Dependencies
run: flutter pub get --enforce-lockfile
- name: Generate code (build_runner)
run: dart run build_runner build --delete-conflicting-outputs -q
#4 Setup Xcode
- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
#5 Cache CocoaPods
- name: Cache CocoaPods
uses: actions/cache@v4
with:
path: |
ios/Pods
key: ${{ runner.os }}-pods-${{ hashFiles('ios/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Install CocoaPods
run: |
cd ios
pod install --verbose
#6 Cache Xcode DerivedData
- name: Cache Xcode DerivedData
uses: actions/cache@v4
with:
path: |
~/Library/Developer/Xcode/DerivedData
key: ${{ runner.os }}-xcode-${{ hashFiles('ios/Podfile.lock', 'ios/Runner.xcodeproj/project.pbxproj', 'pubspec.lock') }}
restore-keys: |
${{ runner.os }}-xcode-
- name: Build iOS App
run: |
flutter build ios --release --no-codesign
#7 Create IPA from App Bundle
- name: Create IPA
run: |
mkdir -p build/ios/ipa
cd build/ios/Release-iphoneos
mkdir Payload
cp -r Runner.app Payload/
zip -r ../ipa/conduit.ipa Payload
cd ../ipa
#8 Upload Artifacts
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: iOS-Release
path: |
build/ios/ipa/*.ipa
#9 Update Release
- name: Update Release with IPA
uses: ncipollo/release-action@v1
with:
artifacts: "build/ios/ipa/*.ipa"
tag: ${{ github.ref_name }}
token: ${{ secrets.GITHUB_TOKEN }}
allowUpdates: true
makeLatest: true