-
-
Notifications
You must be signed in to change notification settings - Fork 18
145 lines (125 loc) · 5.01 KB
/
Copy pathdeploy_beta.yml
File metadata and controls
145 lines (125 loc) · 5.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
name: Deploy Beta to TestFlight and Play Store
on:
workflow_dispatch:
release:
types: [ published ]
permissions:
contents: write
jobs:
deploy:
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- platform: ios
os: macos-26
- platform: android
os: ubuntu-latest
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Setup Ruby and install gems
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3'
working-directory: ${{ matrix.platform }}
bundler-cache: true
- if: matrix.platform == 'android'
uses: actions/setup-java@v3
with:
distribution: 'corretto'
java-version: '21'
cache: 'gradle'
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true
- if: matrix.platform == 'ios'
name: Cache CocoaPods
uses: actions/cache@v4
with:
path: |
ios/Pods
~/.cocoapods
key: ${{ runner.os }}-pods-${{ hashFiles('ios/Podfile.lock') }}
restore-keys: ${{ runner.os }}-pods-
- if: matrix.platform == 'ios'
name: Cache Xcode DerivedData (SPM + compiled pods)
uses: actions/cache@v4
with:
path: ios/DerivedData
key: ${{ runner.os }}-deriveddata-${{ hashFiles('ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved', 'ios/Podfile.lock') }}
restore-keys: ${{ runner.os }}-deriveddata-
- name: Install Flutter Packages
run: |
flutter config --no-analytics
flutter pub get
- if: matrix.platform == 'ios'
name: Install CocoaPods
run: cd ./ios && pod install
- if: matrix.platform == 'ios'
name: Patch FlutterGeneratedPluginSwiftPackage minimum iOS version
run: sed -i '' 's/.iOS("13.0")/.iOS("15.0")/g' ios/Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage/Package.swift
- if: matrix.platform == 'ios'
name: Add SSH Key
uses: webfactory/ssh-agent@v0.8.0
with:
ssh-private-key: ${{ secrets.MATCH_DEPLOY_KEY }}
- if: matrix.platform == 'ios' && github.event_name == 'release'
name: Build and Deploy With Release Notes to TestFlight
run: |
cd ./ios
bundle exec fastlane ios_beta
env:
APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.ASC_KEY_ID }}
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
APP_STORE_CONNECT_API_KEY_BASE64: ${{ secrets.ASC_PRIVATE_KEY }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 120
FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5
RELEASE_NOTES: ${{ github.event.release.body }}
- if: matrix.platform == 'ios' && github.event_name != 'release'
name: Build and Deploy to TestFlight
run: |
cd ./ios
bundle exec fastlane ios_beta
env:
APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.ASC_KEY_ID }}
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
APP_STORE_CONNECT_API_KEY_BASE64: ${{ secrets.ASC_PRIVATE_KEY }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 120
FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5
- if: matrix.platform == 'android'
name: Deserialize Keystore File
run: cd ./android/app && echo "$ANDROID_KEYSTORE_FILE" | base64 --decode > ./upload-keystore
env:
ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }}
- if: matrix.platform == 'android'
name: Deploy to Google Play Store
run: |
cd ./android
bundle exec fastlane android_beta
env:
GOOGLE_PLAY_SERVICE_ACCOUNT_KEY: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_KEY }}
ANDROID_KEYSTORE_FILE: ./upload-keystore
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
- if: matrix.platform == 'android' && github.event_name == 'release'
name: Build Release APK
run: |
cd ./android
bundle exec fastlane android_apk
env:
GOOGLE_PLAY_SERVICE_ACCOUNT_KEY: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_KEY }}
ANDROID_KEYSTORE_FILE: ./upload-keystore
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
- if: matrix.platform == 'android' && github.event_name == 'release'
name: Upload APK to Release Assets
run: gh release upload "${{ github.event.release.tag_name }}" build/app/outputs/flutter-apk/app-release.apk --clobber
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}