From cf79c325d2439ba50a1a188fe23b62611bea9d00 Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 15 Jan 2026 04:13:52 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20release=20=EB=B8=8C=EB=9E=9C?= =?UTF-8?q?=EC=B9=98=EC=97=90=EC=84=9C=20=EB=B0=9C=ED=96=89=ED=95=9C=20pr?= =?UTF-8?q?=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=EB=A7=8C=20Assemble=20APK=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 907b672d..5dd2c81b 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -70,22 +70,39 @@ jobs: run: chmod +x gradlew - name: Assemble Debug APK + if: > + github.event_name == 'pull_request' && + github.event.action == 'opened' && + startsWith(github.event.pull_request.head.ref, 'release/') run: ./gradlew assembleDebug - name: Assemble Release APK + if: > + github.event_name == 'pull_request' && + github.event.action == 'opened' && + startsWith(github.event.pull_request.head.ref, 'release/') run: ./gradlew assembleRelease - name: Upload Debug APK artifact + if: > + github.event_name == 'pull_request' && + github.event.action == 'opened' && + startsWith(github.event.pull_request.head.ref, 'release/') uses: actions/upload-artifact@v4 with: name: debug-apk path: app/build/outputs/apk/debug/*.apk - name: Upload Release APK artifact + if: > + github.event_name == 'pull_request' && + github.event.action == 'opened' && + startsWith(github.event.pull_request.head.ref, 'release/') uses: actions/upload-artifact@v4 with: name: release-apk path: app/build/outputs/apk/release/*.apk + - name: Install Firebase CLI if: > github.event_name == 'pull_request' && From 69b967877546cd7756f15cc4f943e02c983838b5 Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 15 Jan 2026 04:16:46 +0900 Subject: [PATCH 2/6] =?UTF-8?q?test:=20CI=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=9C=20=EC=9E=84=EC=8B=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 5dd2c81b..30bc5614 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -15,7 +15,7 @@ jobs: github.event_name == 'push' || ( github.event_name == 'pull_request' && - startsWith(github.event.pull_request.head.ref, 'release/') + startsWith(github.event.pull_request.head.ref, 'feat/') ) runs-on: ubuntu-latest @@ -73,21 +73,21 @@ jobs: if: > github.event_name == 'pull_request' && github.event.action == 'opened' && - startsWith(github.event.pull_request.head.ref, 'release/') + startsWith(github.event.pull_request.head.ref, 'feat/') run: ./gradlew assembleDebug - name: Assemble Release APK if: > github.event_name == 'pull_request' && github.event.action == 'opened' && - startsWith(github.event.pull_request.head.ref, 'release/') + startsWith(github.event.pull_request.head.ref, 'feat/') run: ./gradlew assembleRelease - name: Upload Debug APK artifact if: > github.event_name == 'pull_request' && github.event.action == 'opened' && - startsWith(github.event.pull_request.head.ref, 'release/') + startsWith(github.event.pull_request.head.ref, 'feat/') uses: actions/upload-artifact@v4 with: name: debug-apk @@ -97,7 +97,7 @@ jobs: if: > github.event_name == 'pull_request' && github.event.action == 'opened' && - startsWith(github.event.pull_request.head.ref, 'release/') + startsWith(github.event.pull_request.head.ref, 'feat/') uses: actions/upload-artifact@v4 with: name: release-apk @@ -107,7 +107,7 @@ jobs: if: > github.event_name == 'pull_request' && github.event.action == 'opened' && - startsWith(github.event.pull_request.head.ref, 'release/') + startsWith(github.event.pull_request.head.ref, 'feat/') run: | npm i -g firebase-tools @@ -115,7 +115,7 @@ jobs: if: > github.event_name == 'pull_request' && github.event.action == 'opened' && - startsWith(github.event.pull_request.head.ref, 'release/') + startsWith(github.event.pull_request.head.ref, 'feat/') env: FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }} @@ -130,7 +130,7 @@ jobs: if: > github.event_name == 'pull_request' && github.event.action == 'opened' && - startsWith(github.event.pull_request.head.ref, 'release/') + startsWith(github.event.pull_request.head.ref, 'feat/') env: FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }} From 206c3a1e985046213547959d63f9ea057967378d Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 15 Jan 2026 04:33:44 +0900 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20github.event.action=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 30bc5614..f43edf44 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -72,21 +72,21 @@ jobs: - name: Assemble Debug APK if: > github.event_name == 'pull_request' && - github.event.action == 'opened' && + github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') startsWith(github.event.pull_request.head.ref, 'feat/') run: ./gradlew assembleDebug - name: Assemble Release APK if: > github.event_name == 'pull_request' && - github.event.action == 'opened' && + github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') startsWith(github.event.pull_request.head.ref, 'feat/') run: ./gradlew assembleRelease - name: Upload Debug APK artifact if: > github.event_name == 'pull_request' && - github.event.action == 'opened' && + github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') startsWith(github.event.pull_request.head.ref, 'feat/') uses: actions/upload-artifact@v4 with: @@ -96,7 +96,7 @@ jobs: - name: Upload Release APK artifact if: > github.event_name == 'pull_request' && - github.event.action == 'opened' && + github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') startsWith(github.event.pull_request.head.ref, 'feat/') uses: actions/upload-artifact@v4 with: @@ -106,7 +106,7 @@ jobs: - name: Install Firebase CLI if: > github.event_name == 'pull_request' && - github.event.action == 'opened' && + github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') startsWith(github.event.pull_request.head.ref, 'feat/') run: | npm i -g firebase-tools @@ -114,8 +114,7 @@ jobs: - name: Distribute Debug APK to Firebase App Distribution if: > github.event_name == 'pull_request' && - github.event.action == 'opened' && - startsWith(github.event.pull_request.head.ref, 'feat/') + github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') env: FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }} @@ -129,7 +128,7 @@ jobs: - name: Distribute Release APK to Firebase App Distribution if: > github.event_name == 'pull_request' && - github.event.action == 'opened' && + github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') startsWith(github.event.pull_request.head.ref, 'feat/') env: FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} From 8181ee9fccb12fd0ba531ebd26c36d48b955d642 Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 15 Jan 2026 04:40:54 +0900 Subject: [PATCH 4/6] =?UTF-8?q?feat:=20Debug=EB=8A=94=20Artifact=EB=A1=9C?= =?UTF-8?q?=EB=A7=8C=20=EA=B3=B5=EC=9C=A0,=20Release=EB=A7=8C=20Firebase?= =?UTF-8?q?=20=EB=B0=B0=ED=8F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android.yml | 75 ++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index f43edf44..a7334792 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -8,6 +8,10 @@ on: branches: - develop +permissions: + contents: read + pull-requests: write + jobs: build: # develop push는 허용, develop으로의 PR 중 release/* 브랜치에서 온 PR만 허용 @@ -72,64 +76,44 @@ jobs: - name: Assemble Debug APK if: > github.event_name == 'pull_request' && - github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') - startsWith(github.event.pull_request.head.ref, 'feat/') + (github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened') run: ./gradlew assembleDebug - - name: Assemble Release APK - if: > - github.event_name == 'pull_request' && - github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') - startsWith(github.event.pull_request.head.ref, 'feat/') - run: ./gradlew assembleRelease - - name: Upload Debug APK artifact if: > github.event_name == 'pull_request' && - github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') - startsWith(github.event.pull_request.head.ref, 'feat/') + (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' && + (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' && - github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') - startsWith(github.event.pull_request.head.ref, 'feat/') + (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' && - github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') - startsWith(github.event.pull_request.head.ref, 'feat/') - run: | - npm i -g firebase-tools - - - name: Distribute Debug APK to Firebase App Distribution - if: > - github.event_name == 'pull_request' && - github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') - env: - FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} - FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }} - run: | - firebase appdistribution:distribute app/build/outputs/apk/debug/*.apk \ - --app "$FIREBASE_APP_ID" \ - --groups "eat-ssu-android-qa" \ - --release-notes "Debug | PR #${{ github.event.pull_request.number }}: ${{ github.event.pull_request.title }}" \ - --token "$FIREBASE_TOKEN" + (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' && - github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.action == 'reopened' startsWith(github.event.pull_request.head.ref, 'feat/') - startsWith(github.event.pull_request.head.ref, 'feat/') + (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 }} @@ -139,3 +123,28 @@ jobs: --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' && + (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, + }); From 0535371dcc99b58618321f4c1d171f1fe653c7dd Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 15 Jan 2026 04:52:04 +0900 Subject: [PATCH 5/6] =?UTF-8?q?feat:=20CI=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=9C=20=EC=88=98=EC=A0=95=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9B=90=EB=B3=B5=20(release=20=EB=B8=8C=EB=9E=9C?= =?UTF-8?q?=EC=B9=98=EC=97=90=EC=84=9C=EB=A7=8C=20=EC=8B=A4=ED=96=89?= =?UTF-8?q?=EB=90=98=EB=8F=84=EB=A1=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index a7334792..ebc9c681 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -19,7 +19,7 @@ jobs: github.event_name == 'push' || ( github.event_name == 'pull_request' && - startsWith(github.event.pull_request.head.ref, 'feat/') + startsWith(github.event.pull_request.head.ref, 'release/') ) runs-on: ubuntu-latest @@ -76,12 +76,14 @@ jobs: - 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: @@ -91,12 +93,14 @@ jobs: - 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: @@ -107,12 +111,14 @@ jobs: - 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 }} @@ -129,6 +135,7 @@ jobs: - 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: From 3a6d1ae625ea090b8535906d57c68856b07d7c38 Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 15 Jan 2026 05:00:28 +0900 Subject: [PATCH 6/6] =?UTF-8?q?feat:=20job=20=EC=8B=A4=ED=96=89=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index ebc9c681..5a0e9572 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -16,11 +16,7 @@ jobs: build: # develop push는 허용, develop으로의 PR 중 release/* 브랜치에서 온 PR만 허용 if: > - github.event_name == 'push' || - ( - github.event_name == 'pull_request' && - startsWith(github.event.pull_request.head.ref, 'release/') - ) + github.event_name == 'push' || github.event_name == 'pull_request' runs-on: ubuntu-latest steps: