-
Notifications
You must be signed in to change notification settings - Fork 0
154 lines (136 loc) · 6.86 KB
/
develop.yml
File metadata and controls
154 lines (136 loc) · 6.86 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
146
147
148
149
150
151
152
153
154
name: Develop Build & Deploy
# 개발 빌드: develop 브랜치 → 개발 서버 (dev.taba.asia)
# Android: APK → Artifact
# iOS: IPA → TestFlight
on:
push:
branches: [develop]
workflow_dispatch:
jobs:
build-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.24.5'
channel: 'stable'
- run: flutter pub get
- name: Calculate Build Number
id: build_number
run: |
# 디벨롭 빌드 번호: 2001~3000 범위
BUILD_NUMBER=$((2000 + (${{ github.run_number }} % 1000)))
echo "build_number=$BUILD_NUMBER" >> $GITHUB_OUTPUT
echo "📦 디벨롭 빌드 번호: $BUILD_NUMBER (범위: 2001~3000)"
- run: |
echo "🔧 개발 빌드 (서버: https://dev.taba.asia/api/v1)"
flutter build apk --release \
--build-name=1.0.0-dev \
--build-number=${{ steps.build_number.outputs.build_number }} \
--dart-define=API_ENV=dev
- uses: actions/upload-artifact@v4
with:
name: android-dev-apk
path: build/app/outputs/flutter-apk/app-release.apk
retention-days: 30
build-ios:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.24.5'
channel: 'stable'
- run: flutter pub get
- name: Install CocoaPods dependencies
run: |
cd ios
# Retry logic for pod install (network issues with GitHub)
for i in {1..3}; do
echo "Attempting pod install (attempt $i/3)..."
if pod install --repo-update; then
echo "Pod install succeeded"
exit 0
else
echo "Pod install failed, retrying in 10 seconds..."
sleep 10
fi
done
echo "Pod install failed after 3 attempts"
exit 1
- name: Setup Certificates
if: env.APPLE_CERTIFICATE_BASE64 != ''
env:
APPLE_CERTIFICATE_BASE64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_PROVISIONING_PROFILE_BASE64: ${{ secrets.APPLE_PROVISIONING_PROFILE_BASE64 }}
run: |
security create-keychain -p "" build.keychain || true
security default-keychain -s build.keychain
security unlock-keychain -p "" build.keychain
security set-keychain-settings -t 3600 -u build.keychain
echo "$APPLE_CERTIFICATE_BASE64" | base64 -d > cert.p12
security import cert.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign || exit 1
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "" build.keychain || true
if [ -n "$APPLE_PROVISIONING_PROFILE_BASE64" ]; then
echo "$APPLE_PROVISIONING_PROFILE_BASE64" | base64 -d > profile.mobileprovision
TEMP_PLIST=$(mktemp)
security cms -D -i profile.mobileprovision > "$TEMP_PLIST"
PROFILE_UUID=$(/usr/libexec/PlistBuddy -c "Print UUID" "$TEMP_PLIST")
PROFILE_NAME=$(/usr/libexec/PlistBuddy -c "Print Name" "$TEMP_PLIST" 2>/dev/null || echo "")
PROFILE_TEAM_ID=$(/usr/libexec/PlistBuddy -c "Print TeamIdentifier:0" "$TEMP_PLIST" 2>/dev/null || echo "")
rm -f "$TEMP_PLIST"
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp profile.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$PROFILE_UUID.mobileprovision
chmod 644 ~/Library/MobileDevice/Provisioning\ Profiles/$PROFILE_UUID.mobileprovision
/usr/libexec/PlistBuddy -c "Delete :provisioningProfiles" ios/ExportOptions-dev.plist 2>/dev/null || true
/usr/libexec/PlistBuddy -c "Add :provisioningProfiles dict" ios/ExportOptions-dev.plist
/usr/libexec/PlistBuddy -c "Add :provisioningProfiles:com.coby.taba string $PROFILE_UUID" ios/ExportOptions-dev.plist
/usr/libexec/PlistBuddy -c "Set :signingStyle manual" ios/ExportOptions-dev.plist 2>/dev/null || \
/usr/libexec/PlistBuddy -c "Add :signingStyle string manual" ios/ExportOptions-dev.plist
/usr/libexec/PlistBuddy -c "Set :teamID $PROFILE_TEAM_ID" ios/ExportOptions-dev.plist 2>/dev/null || \
/usr/libexec/PlistBuddy -c "Add :teamID string $PROFILE_TEAM_ID" ios/ExportOptions-dev.plist
sed -i '' 's/CODE_SIGN_STYLE = Automatic;/CODE_SIGN_STYLE = Manual;/g' ios/Runner.xcodeproj/project.pbxproj || true
sed -i '' 's/CODE_SIGN_IDENTITY = "Apple Development";/CODE_SIGN_IDENTITY = "Apple Distribution";/g' ios/Runner.xcodeproj/project.pbxproj || true
sed -i '' "s/PROVISIONING_PROFILE_SPECIFIER = \"\";/PROVISIONING_PROFILE_SPECIFIER = \"$PROFILE_NAME\";/g" ios/Runner.xcodeproj/project.pbxproj || true
echo "$PROFILE_UUID" > /tmp/profile_uuid.txt
fi
- name: Calculate Build Number
id: build_number
run: |
# 디벨롭 빌드 번호: 2001~3000 범위
BUILD_NUMBER=$((2000 + (${{ github.run_number }} % 1000)))
echo "build_number=$BUILD_NUMBER" >> $GITHUB_OUTPUT
echo "📦 디벨롭 빌드 번호: $BUILD_NUMBER (범위: 2001~3000)"
- name: Build IPA
run: |
echo "🔧 개발 빌드 (서버: https://dev.taba.asia/api/v1)"
flutter build ipa --release \
--build-name=1.0.0-dev \
--build-number=${{ steps.build_number.outputs.build_number }} \
--dart-define=API_ENV=dev \
--export-options-plist=ios/ExportOptions-dev.plist
- uses: actions/upload-artifact@v4
with:
name: ios-dev-ipa
path: build/ios/ipa/*.ipa
retention-days: 30
- name: Upload to TestFlight
if: success() && env.APP_STORE_CONNECT_API_KEY_ID != ''
env:
APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
APP_STORE_CONNECT_API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }}
run: |
mkdir -p ~/private_keys
echo "$APP_STORE_CONNECT_API_KEY" > ~/private_keys/AuthKey_$APP_STORE_CONNECT_API_KEY_ID.p8
chmod 600 ~/private_keys/AuthKey_$APP_STORE_CONNECT_API_KEY_ID.p8
IPA_FILE=$(find build/ios/ipa -name "*.ipa" | head -1)
xcrun altool --upload-app --type ios --file "$IPA_FILE" \
--apiKey $APP_STORE_CONNECT_API_KEY_ID \
--apiIssuer $APP_STORE_CONNECT_ISSUER_ID || echo "⚠️ Upload failed, IPA saved as artifact"