[Fix] 토큰 재발급 미동작 해결 및 로직 전면 리팩토링 (#453) #964
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Android CI | |
| on: | |
| push: | |
| branches: | |
| - develop | |
| pull_request: | |
| branches: | |
| - develop | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| jobs: | |
| build: | |
| # develop push는 허용, develop으로의 PR 중 release/* 브랜치에서 온 PR만 허용 | |
| if: > | |
| github.event_name == 'push' || github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Cache Gradle packages | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.gradle/caches | |
| ~/.gradle/wrapper | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', '**/buildSrc/**/*.kt') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle- | |
| - name: set up JDK 17 | |
| uses: actions/setup-java@v3 | |
| with: | |
| java-version: '17' | |
| distribution: 'temurin' | |
| cache: gradle | |
| - name: Create Local Properties | |
| run: touch local.properties | |
| - name: Access Local Properties | |
| env: | |
| DEV_BASE_URL: ${{ secrets.DEV_BASE_URL }} | |
| PROD_BASE_URL: ${{ secrets.PROD_BASE_URL }} | |
| KAKAO_NATIVE_APP_KEY: ${{ secrets.KAKAO_NATIVE_APP_KEY }} | |
| NAVER_MAPS_CLIENT_ID: ${{ secrets.NAVER_MAPS_CLIENT_ID }} | |
| POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }} | |
| POSTHOG_HOST: ${{ secrets.POSTHOG_HOST }} | |
| run: | | |
| echo DEV_BASE_URL=\"$DEV_BASE_URL\" >> local.properties | |
| echo PROD_BASE_URL=\"$PROD_BASE_URL\" >> local.properties | |
| echo KAKAO_NATIVE_APP_KEY=$KAKAO_NATIVE_APP_KEY >> local.properties | |
| echo NAVER_MAPS_CLIENT_ID=$NAVER_MAPS_CLIENT_ID >> local.properties | |
| echo POSTHOG_API_KEY=$POSTHOG_API_KEY >> local.properties | |
| echo POSTHOG_HOST=$POSTHOG_HOST >> local.properties | |
| - name: Generate google-services.json | |
| run: | | |
| echo "$GOOGLE_SERVICE" > app/google-services.json.b64 | |
| base64 -d -i app/google-services.json.b64 > app/google-services.json | |
| env: | |
| GOOGLE_SERVICE: ${{ secrets.GOOGLE_SERVICE }} | |
| - name: Grant execute permission for gradlew | |
| run: chmod +x gradlew | |
| - name: Assemble Debug APK | |
| if: > | |
| github.event_name == 'pull_request' && | |
| startsWith(github.event.pull_request.head.ref, 'release/') && | |
| (github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened') | |
| run: ./gradlew assembleDebug | |
| - name: Upload Debug APK artifact | |
| if: > | |
| github.event_name == 'pull_request' && | |
| startsWith(github.event.pull_request.head.ref, 'release/') && | |
| (github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened') | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: debug-apk | |
| path: app/build/outputs/apk/debug/*.apk | |
| - name: Assemble Release APK | |
| if: > | |
| github.event_name == 'pull_request' && | |
| startsWith(github.event.pull_request.head.ref, 'release/') && | |
| (github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened') | |
| run: ./gradlew assembleRelease | |
| - name: Upload Release APK artifact | |
| if: > | |
| github.event_name == 'pull_request' && | |
| startsWith(github.event.pull_request.head.ref, 'release/') && | |
| (github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened') | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: release-apk | |
| path: app/build/outputs/apk/release/*.apk | |
| # Release만 Firebase 배포 | |
| - name: Install Firebase CLI | |
| if: > | |
| github.event_name == 'pull_request' && | |
| startsWith(github.event.pull_request.head.ref, 'release/') && | |
| (github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened') | |
| run: npm i -g firebase-tools | |
| - name: Distribute Release APK to Firebase App Distribution | |
| if: > | |
| github.event_name == 'pull_request' && | |
| startsWith(github.event.pull_request.head.ref, 'release/') && | |
| (github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened') | |
| env: | |
| FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} | |
| FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }} | |
| run: | | |
| firebase appdistribution:distribute app/build/outputs/apk/release/*.apk \ | |
| --app "$FIREBASE_APP_ID" \ | |
| --groups "eat-ssu-android-qa" \ | |
| --release-notes "Release | PR #${{ github.event.pull_request.number }}: ${{ github.event.pull_request.title }}" \ | |
| --token "$FIREBASE_TOKEN" | |
| # Debug는 Artifact로만 공유 + PR 코멘트 | |
| - name: Comment PR with artifact download 안내 | |
| if: > | |
| github.event_name == 'pull_request' && | |
| startsWith(github.event.pull_request.head.ref, 'release/') && | |
| (github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened') | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const runUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`; | |
| const body = | |
| [ | |
| `✅ CI 완료`, | |
| ``, | |
| `- Debug APK: GitHub Actions Artifacts에서 다운로드 (run 링크: ${runUrl})`, | |
| `- Release APK: Firebase App Distribution으로 배포됨 (그룹: eat-ssu-android-qa)`, | |
| ].join('\n'); | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.payload.pull_request.number, | |
| body, | |
| }); |