Skip to content

fix: 웹에서 Firebase 초기화 건너뛰기 #58

fix: 웹에서 Firebase 초기화 건너뛰기

fix: 웹에서 Firebase 초기화 건너뛰기 #58

Workflow file for this run

name: Release Build & Deploy
# 프로덕션 빌드: release 브랜치 → 프로덕션 서버 (www.taba.asia)
# Android: AAB → Google Play Production
# iOS: IPA → App Store Connect
on:
push:
branches: [release]
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: Setup Keystore
run: |
echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > android/app/keystore.jks
- name: Calculate Build Number
id: build_number
run: |
# 릴리즈 빌드 번호: 1001~2000 범위
BUILD_NUMBER=$((1000 + (${{ github.run_number }} % 1000)))
echo "build_number=$BUILD_NUMBER" >> $GITHUB_OUTPUT
echo "📦 릴리즈 빌드 번호: $BUILD_NUMBER (범위: 1001~2000)"
- name: Build AAB
env:
KEYSTORE_PATH: keystore.jks
KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
run: |
echo "🚀 프로덕션 빌드 (서버: https://www.taba.asia/api/v1)"
cd android/app
flutter build appbundle --release \
--build-name=${{ github.ref_name }} \
--build-number=${{ steps.build_number.outputs.build_number }} \
--dart-define=API_ENV=prod
- uses: actions/upload-artifact@v4
with:
name: android-prod-aab
path: build/app/outputs/bundle/release/app-release.aab
retention-days: 90
- name: Upload to Google Play
if: success() && env.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON != ''
env:
GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
uses: r0adkll/upload-google-play@v1
continue-on-error: true
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
packageName: com.coby.taba
releaseFiles: build/app/outputs/bundle/release/app-release.aab
track: production
status: completed
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-prod.plist 2>/dev/null || true
/usr/libexec/PlistBuddy -c "Add :provisioningProfiles dict" ios/ExportOptions-prod.plist
/usr/libexec/PlistBuddy -c "Add :provisioningProfiles:com.coby.taba string $PROFILE_UUID" ios/ExportOptions-prod.plist
/usr/libexec/PlistBuddy -c "Set :signingStyle manual" ios/ExportOptions-prod.plist 2>/dev/null || \
/usr/libexec/PlistBuddy -c "Add :signingStyle string manual" ios/ExportOptions-prod.plist
/usr/libexec/PlistBuddy -c "Set :teamID $PROFILE_TEAM_ID" ios/ExportOptions-prod.plist 2>/dev/null || \
/usr/libexec/PlistBuddy -c "Add :teamID string $PROFILE_TEAM_ID" ios/ExportOptions-prod.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
fi
- name: Calculate Build Number
id: build_number
run: |
# 릴리즈 빌드 번호: 1001~2000 범위
BUILD_NUMBER=$((1000 + (${{ github.run_number }} % 1000)))
echo "build_number=$BUILD_NUMBER" >> $GITHUB_OUTPUT
echo "📦 릴리즈 빌드 번호: $BUILD_NUMBER (범위: 1001~2000)"
- name: Build IPA
run: |
echo "🚀 프로덕션 빌드 (서버: https://www.taba.asia/api/v1)"
flutter build ipa --release \
--build-name=${{ github.ref_name }} \
--build-number=${{ steps.build_number.outputs.build_number }} \
--dart-define=API_ENV=prod \
--export-options-plist=ios/ExportOptions-prod.plist
- uses: actions/upload-artifact@v4
with:
name: ios-prod-ipa
path: build/ios/ipa/*.ipa
retention-days: 90
- name: Upload to App Store Connect
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"