181 lines
5.0 KiB
YAML
181 lines
5.0 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
|
|
permissions:
|
|
contents: write
|
|
|
|
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
|
|
with:
|
|
cache-read-only: false
|
|
|
|
#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
|
|
|
|
|
|
|
|
#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: Android-Release
|
|
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
|
|
permissions:
|
|
contents: write
|
|
|
|
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
|
|
|
|
|
|
|
|
#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/conduit.ipa"
|
|
tag: ${{ github.ref_name }}
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
allowUpdates: true
|
|
makeLatest: true
|
|
omitBody: true
|
|
omitBodyDuringUpdate: true
|
|
omitNameDuringUpdate: true
|