-
Notifications
You must be signed in to change notification settings - Fork 0
105 lines (88 loc) · 3.92 KB
/
release.yml
File metadata and controls
105 lines (88 loc) · 3.92 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
name: iOS Release CI
on:
push:
branches:
- release
concurrency:
group: build-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: macos-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
# 1. Xcode 버전 명시적 설정
- name: Select Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '26.2'
# 2. 깃허브 Secret에서 Release.xcconfig 파일 생성하기
- name: Create Release.xcconfig
run: |
mkdir -p Neki-iOS/APP/Sources/Resources
echo "${{ secrets.RELEASE_XCCONFIG }}" | base64 --decode > Neki-iOS/APP/Sources/Resources/Release.xcconfig
# 3. 깃허브 Secret에서 Firebase Plist 파일 생성하기
- name: Create Firebase Plist
run: |
mkdir -p Neki-iOS/APP/Sources/Resources/FirebaseConfig/Release
echo "${{ secrets.FIREBASE_PLIST_RELEASE }}" | base64 --decode > Neki-iOS/APP/Sources/Resources/FirebaseConfig/Release/GoogleService-Info.plist
# 4. SPM 매크로 지문 검증 우회
- name: Disable Macro Validation
run: |
defaults write com.apple.dt.Xcode IDESkipMacroFingerprintValidation -bool YES
defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidation -bool YES
# 5. SPM 의존성 사전 해결
- name: Resolve SPM Dependencies
run: xcodebuild -resolvePackageDependencies -project ./Neki-iOS.xcodeproj -scheme Neki-iOS
# 6. Match 인증서 저장소 접근을 위한 SSH 세팅
- name: Install SSH key for Match
uses: webfactory/ssh-agent@v0.8.0
with:
ssh-private-key: ${{ secrets.MATCH_SSH_KEY }}
# 7. Ruby 및 Fastlane 세팅 (Gemfile 활용)
- name: Setup Ruby and Install Gems
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2'
bundler-cache: true
# 8. Fastlane 배포 실행
- name: Run Fastlane Release
run: bundle exec fastlane release
env:
APP_IDENTIFIER: ${{ secrets.APP_IDENTIFIER }}
SHARE_EXTENSION_APP_IDENTIFIER: ${{ secrets.SHARE_EXTENSION_APP_IDENTIFIER }}
APPLE_ID: ${{ secrets.APPLE_ID }}
TEAM_ID: ${{ secrets.TEAM_ID }}
FASTLANE_ITC_TEAM_ID: ${{ secrets.FASTLANE_ITC_TEAM_ID }}
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
ASC_KEY_CONTENT: ${{ secrets.ASC_KEY_CONTENT }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
# 9. 배포 완료 후 서버로 최신 버전 정보 POST 요청 및 환경 변수 저장
- name: Send Version Update to Server
if: success()
run: |
APP_VERSION=$(xcodebuild -showBuildSettings -project ./Neki-iOS.xcodeproj -scheme Neki-iOS | grep " MARKETING_VERSION " | sed 's/[ ]*MARKETING_VERSION = //')
echo "추출된 최신 버전: $APP_VERSION"
echo "APP_VERSION=$APP_VERSION" >> $GITHUB_ENV
curl -X PATCH "${{ secrets.APP_VERSION_API_ADDRESS }}" \
-H "Content-Type: application/json" \
-d "{
\"minVersion\": \"1.0.0\",
\"currentVersion\": \"$APP_VERSION\"
}"
# 10. Discord 결과 알림 (성공 시 버전 정보 포함)
- name: Send Discord notification
if: always()
run: |
if [ "${{ job.status }}" == "success" ]; then
STATUS="✅ [Neki-iOS] release 브랜치 App Store Connect 배포 성공! (Version: ${{ env.APP_VERSION }}) 🚀"
else
STATUS="❌ [Neki-iOS] release 브랜치 App Store Connect 배포 실패 😭"
fi
PAYLOAD=$(jq -n --arg content "$STATUS (${{ github.repository }})" '{content: $content}')
curl -H "Content-Type: application/json" \
-X POST \
-d "$PAYLOAD" \
${{ secrets.DISCORD_WEBHOOK_URL }}