release: prepare mobile app deployment#19
Conversation
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (5)
Walkthrough이 PR은 Expo 기반 React Native 앱의 Android/iOS 배포 파이프라인을 완성합니다. GitHub Actions 워크플로우(Android Check, Android Release), Fastlane 기반 자동 빌드/배포, Expo config 플러그인, 완성된 iOS 네이티브 프로젝트 파일, Xcode Cloud 부트스트랩 스크립트, 포괄적인 CI/CD 문서를 추가합니다. ChangesCI/CD 파이프라인 및 배포 자동화
iOS 프로젝트 구조 및 네이티브 통합
프로젝트 전체 정리
Sequence Diagram(s)sequenceDiagram
participant GitHub as GitHub Actions
participant Fastlane as Fastlane
participant Gradle as Gradle
participant PlayStore as Google Play
GitHub->>Fastlane: android release 워크플로우 트리거<br/>(prod push 또는 수동 선택)
Fastlane->>Fastlane: 시크릿/환경변수 검증
Fastlane->>Gradle: Expo prebuild + Gradle properties 주입
Gradle->>Gradle: ./gradlew bundleRelease 실행
Gradle-->>Fastlane: app-release.aab 생성
Fastlane->>PlayStore: upload_to_play_store<br/>(internal 또는 production draft)
PlayStore-->>GitHub: 배포 완료
sequenceDiagram
participant XcodeCloud as Xcode Cloud
participant PostClone as ci_post_clone.sh
participant AppDelegate as AppDelegate
participant RN as React Native
XcodeCloud->>PostClone: 체크아웃 후 post-clone 실행
PostClone->>PostClone: npm ci + 의존성 설치
PostClone->>PostClone: GoogleService-Info.plist 복원
PostClone->>PostClone: .env 생성 (BASE_URL, WEBVIEW_URL, MIXPANEL)
PostClone->>PostClone: PlistBuddy로 aps-environment 설정
PostClone->>PostClone: pod install 실행
PostClone-->>XcodeCloud: 완료
XcodeCloud->>AppDelegate: 앱 시작
AppDelegate->>AppDelegate: ReactNativeDelegate + Factory 생성
AppDelegate->>AppDelegate: FirebaseApp.configure()
AppDelegate->>RN: 모듈 "main" 시작
RN-->>AppDelegate: 부트스트랩 완료
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🧹 Nitpick comments (2)
Gemfile (1)
3-3: ⚡ Quick winGemfile.lock을 커밋해 fastlane의 정확한 버전을 고정하세요.
현재는 버전 범위만 지정되어 있어 CI 실행 시점에 따라 설치되는 버전이 달라질 수 있습니다. Gemfile.lock을 함께 관리하면 릴리스 파이프라인의 재현성과 안정성을 높일 수 있습니다.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Gemfile` at line 3, Gemfile에 fastlane의 범위(gem "fastlane", ">= 2.228", "< 3.0")만 지정되어 있어 CI마다 다른 버전이 설치될 수 있으니 Gemfile.lock을 생성하여 커밋해 정확한 fastlane 버전을 고정하세요; 로컬에서 bundle install 또는 bundle lock을 실행해 Gemfile.lock을 생성한 뒤 해당 Gemfile.lock을 저장소에 추가하고 푸시하여 릴리스 파이프라인 재현성을 확보하도록 합니다.plugins/withAndroidReleaseSigning.js (1)
137-141: 💤 Low value콜백 매개변수가 외부
config를 섀도잉합니다.Line 138의 콜백 매개변수
config가 외부 함수의config매개변수를 섀도잉합니다. 코드는 정상 작동하지만, 명확성을 위해 다른 이름을 사용하는 것이 좋습니다.♻️ 매개변수 이름 변경 제안
module.exports = function withAndroidReleaseSigning(config) { - return withAppBuildGradle(config, (config) => { - config.modResults.contents = addAndroidReleaseSigning(config.modResults.contents); - return config; + return withAppBuildGradle(config, (modConfig) => { + modConfig.modResults.contents = addAndroidReleaseSigning(modConfig.modResults.contents); + return modConfig; }); };🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/withAndroidReleaseSigning.js` around lines 137 - 141, The inner callback parameter in withAndroidReleaseSigning is shadowing the outer config; rename the callback argument passed to withAppBuildGradle (e.g., from "config" to "appBuildGradleConfig" or "params") so you update references inside the callback (config.modResults.contents -> appBuildGradleConfig.modResults.contents) while keeping the outer "config" intact; ensure withAppBuildGradle callback returns the renamed variable after calling addAndroidReleaseSigning on its modResults.contents.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@AGENTS.md`:
- Around line 29-39: Add a language tag to the markdown code fence for the
file-tree block to satisfy lint rule MD040; edit the fenced block starting with
the triple backticks and change it to include a language (e.g., use "text" so
the block becomes ```text) that wraps the lines listing app/_layout.tsx,
(tabs)/index.tsx, club/[id].tsx, clubDetail/[id].tsx, webview/[slug].tsx, and
modal.tsx.
In `@ci_scripts/ci_post_clone.sh`:
- Line 13: The single-line decode command uses GNU-only `--decode` and fails on
macOS; update the decoding pipeline that writes GoogleService-Info.plist (the
line using "printf ... | base64 --decode > GoogleService-Info.plist") to be
portable by trying BSD's `-D` or openssl as a fallback (e.g. attempt `base64
--decode` or `base64 -D` or `openssl base64 -d`) so the post-clone step works on
both Linux and macOS.
In `@docs/cicd.md`:
- Line 40: Update the paragraph that states `.gitignore` contains `/ios` so it
matches the final policy that removes the `/ios` ignore rule; specifically,
revise the sentence referencing `/ios` (the current description) to reflect the
final decision (remove `/ios` from the ignored entries) and ensure the
`.gitignore` summary and the policy section about removing `/ios` are
consistent, keeping references to `.env`, `google-services.json`,
`GoogleService-Info.plist`, and the Android prebuild policy unchanged.
In `@ios/app.xcodeproj/xcshareddata/xcschemes/app.xcscheme`:
- Around line 31-39: 스킴의 TestableReference 블록이 존재하지 않는 테스트 타깃을 가리키고 있어(xcscheme의
TestableReference / BuildableReference, 특히 BlueprintName="appTests" 및 해당
BlueprintIdentifier) xcodebuild 테스트가 실패할 수 있습니다; 해결하려면 실제로 존재하는 테스트 타깃
이름/식별자(프로젝트의 타깃 정의와 일치하는 BlueprintName 및 BlueprintIdentifier)로
BuildableReference 값을 갱신하거나, 테스트 타깃을 추가하지 않을 경우 해당 TestableReference 블록 전체를 스킴의
Testables에서 제거하여 스킴과 타깃 정의를 일치시키세요.
---
Nitpick comments:
In `@Gemfile`:
- Line 3: Gemfile에 fastlane의 범위(gem "fastlane", ">= 2.228", "< 3.0")만 지정되어 있어
CI마다 다른 버전이 설치될 수 있으니 Gemfile.lock을 생성하여 커밋해 정확한 fastlane 버전을 고정하세요; 로컬에서 bundle
install 또는 bundle lock을 실행해 Gemfile.lock을 생성한 뒤 해당 Gemfile.lock을 저장소에 추가하고 푸시하여
릴리스 파이프라인 재현성을 확보하도록 합니다.
In `@plugins/withAndroidReleaseSigning.js`:
- Around line 137-141: The inner callback parameter in withAndroidReleaseSigning
is shadowing the outer config; rename the callback argument passed to
withAppBuildGradle (e.g., from "config" to "appBuildGradleConfig" or "params")
so you update references inside the callback (config.modResults.contents ->
appBuildGradleConfig.modResults.contents) while keeping the outer "config"
intact; ensure withAppBuildGradle callback returns the renamed variable after
calling addAndroidReleaseSigning on its modResults.contents.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 635be36f-957b-4c3b-88cb-398e7d284a3c
⛔ Files ignored due to path filters (4)
ios/app/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.pngis excluded by!**/*.pngios/app/Images.xcassets/SplashScreenLogo.imageset/image.pngis excluded by!**/*.pngios/app/Images.xcassets/SplashScreenLogo.imageset/image@2x.pngis excluded by!**/*.pngios/app/Images.xcassets/SplashScreenLogo.imageset/image@3x.pngis excluded by!**/*.png
📒 Files selected for processing (30)
.env.example.github/workflows/android-check.yml.github/workflows/android-release.yml.gitignoreAGENTS.mdGemfileapp.config.jsapp.jsonci_scripts/ci_post_clone.shdocs/cicd.mdfastlane/Appfilefastlane/Fastfileios/.gitignoreios/.xcode.envios/Podfileios/Podfile.properties.jsonios/app.xcodeproj/project.pbxprojios/app.xcodeproj/xcshareddata/xcschemes/app.xcschemeios/app/AppDelegate.swiftios/app/Images.xcassets/AppIcon.appiconset/Contents.jsonios/app/Images.xcassets/Contents.jsonios/app/Images.xcassets/SplashScreenBackground.colorset/Contents.jsonios/app/Images.xcassets/SplashScreenLogo.imageset/Contents.jsonios/app/Info.plistios/app/SplashScreen.storyboardios/app/Supporting/Expo.plistios/app/app-Bridging-Header.hios/app/app.entitlementsplugins/withAndroidReleaseSigning.jsui/home/components/banner.tsx
💤 Files with no reviewable changes (1)
- ui/home/components/banner.tsx
Summary
Validation
git diff --checkSummary by CodeRabbit
릴리스 노트
문서
버전 업데이트
기타 개선