From a79d8018be5c410c9435ab14fe1930059eb66460 Mon Sep 17 00:00:00 2001 From: PeraSite Date: Tue, 9 Sep 2025 12:24:42 +0900 Subject: [PATCH 1/7] =?UTF-8?q?fix:=20upload-artifact=20v4=EB=A1=9C=20?= =?UTF-8?q?=EC=97=85=EA=B7=B8=EB=A0=88=EC=9D=B4=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa_apk.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa_apk.yml b/.github/workflows/qa_apk.yml index 0e85b215e..1cf0e4322 100644 --- a/.github/workflows/qa_apk.yml +++ b/.github/workflows/qa_apk.yml @@ -63,7 +63,7 @@ jobs: run: ./gradlew assembleDebug --stacktrace - name: Upload APK - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: app path: app/build/outputs/apk/debug/app-debug.apk From c0329598914af7605f2617f8cf41161688e3511b Mon Sep 17 00:00:00 2001 From: PeraSite Date: Tue, 9 Sep 2025 12:27:18 +0900 Subject: [PATCH 2/7] =?UTF-8?q?fix:=20NAVER=5FMAPS=5FCLIENT=5FID=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa_apk.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/qa_apk.yml b/.github/workflows/qa_apk.yml index 1cf0e4322..8b40cdda5 100644 --- a/.github/workflows/qa_apk.yml +++ b/.github/workflows/qa_apk.yml @@ -44,10 +44,13 @@ jobs: DEV_BASE_URL: ${{ secrets.DEV_BASE_URL }} PROD_BASE_URL: ${{ secrets.PROD_BASE_URL }} KAKAO_APP_KEY: ${{ secrets.KAKAO_NATIVE_APP_KEY }} + NAVER_MAPS_CLIENT_ID: ${{ secrets.NAVER_MAPS_CLIENT_ID }} + 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_APP_KEY >> local.properties + echo KAKAO_NATIVE_APP_KEY=$KAKAO_NATIVE_APP_KEY >> local.properties + echo NAVER_MAPS_CLIENT_ID=$NAVER_MAPS_CLIENT_ID >> local.properties - name: Generate google-services.json run: | From 879098bb8eca21dc040b72d4db6397b40fcde68e Mon Sep 17 00:00:00 2001 From: PeraSite Date: Tue, 9 Sep 2025 12:46:27 +0900 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20Build=20Variant,=20Branch=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa_apk.yml | 42 +++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/.github/workflows/qa_apk.yml b/.github/workflows/qa_apk.yml index 8b40cdda5..65c54b6e2 100644 --- a/.github/workflows/qa_apk.yml +++ b/.github/workflows/qa_apk.yml @@ -3,21 +3,30 @@ name: Android APK Build and Slack Upload on: workflow_dispatch: # 버튼을 누를 시 실행되도록 설정 inputs: - environment: - description: 'Select environment' + buildVariant: + description: 'Build Variant' required: true - default: 'qa' + default: 'debug' type: choice options: - - qa - - production + - debug + - release + branch: + description: '빌드할 브랜치' + required: true + default: 'develop' + type: string jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.branch }} + fetch-depth: 0 - name: Cache Gradle packages uses: actions/cache@v4 @@ -62,14 +71,23 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Build Debug APK - run: ./gradlew assembleDebug --stacktrace + - name: Set Distribution Target + id: set-target + run: | + if [[ "${{ github.event.inputs.buildVariant }}" == "debug" ]]; then + echo "VARIANT=Debug" >> $GITHUB_ENV + else + echo "VARIANT=Release" >> $GITHUB_ENV + fi + + - name: Build APK + run: ./gradlew assemble${{ env.VARIANT }} - name: Upload APK uses: actions/upload-artifact@v4 with: name: app - path: app/build/outputs/apk/debug/app-debug.apk + path: app/build/outputs/apk/${{ github.event.inputs.buildVariant }}/app-${{ github.event.inputs.buildVariant }}.apk - name: Slack - Send Msg uses: 8398a7/action-slack@v3 @@ -85,7 +103,7 @@ jobs: with: slack_token: ${{ secrets.SLACK_TOKEN }} channel_id: ${{ secrets.SLACK_CHANNEL }} - initial_comment: 'APK 빌드가 완료되었습니다.' + initial_comment: '${{ github.event.inputs.branch }} 브랜치의 ${{ github.event.inputs.buildVariant }} Variant APK 빌드가 완료되었습니다.' file_type: 'apk' - file_name: 'app-debug.apk' - file_path: './app/build/outputs/apk/debug/app-debug.apk' + file_name: 'app-${{ github.event.inputs.buildVariant }}.apk' + file_path: './app/build/outputs/apk/${{ github.event.inputs.buildVariant }}/app-${{ github.event.inputs.buildVariant }}.apk' From 248497ded2eebd4ad7fa8f12990a0ce85c2a293f Mon Sep 17 00:00:00 2001 From: PeraSite Date: Tue, 9 Sep 2025 12:47:05 +0900 Subject: [PATCH 4/7] =?UTF-8?q?style:=20Indent=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa_apk.yml | 118 +++++++++++++++++------------------ 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/.github/workflows/qa_apk.yml b/.github/workflows/qa_apk.yml index 65c54b6e2..78758c68d 100644 --- a/.github/workflows/qa_apk.yml +++ b/.github/workflows/qa_apk.yml @@ -1,7 +1,7 @@ name: Android APK Build and Slack Upload on: - workflow_dispatch: # 버튼을 누를 시 실행되도록 설정 + workflow_dispatch: # 버튼을 누를 시 실행되도록 설정 inputs: buildVariant: description: 'Build Variant' @@ -28,48 +28,48 @@ jobs: ref: ${{ github.event.inputs.branch }} fetch-depth: 0 - - 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: 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: 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: 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_APP_KEY: ${{ secrets.KAKAO_NATIVE_APP_KEY }} - NAVER_MAPS_CLIENT_ID: ${{ secrets.NAVER_MAPS_CLIENT_ID }} + - name: Access Local Properties + env: + DEV_BASE_URL: ${{ secrets.DEV_BASE_URL }} + PROD_BASE_URL: ${{ secrets.PROD_BASE_URL }} + KAKAO_APP_KEY: ${{ secrets.KAKAO_NATIVE_APP_KEY }} + NAVER_MAPS_CLIENT_ID: ${{ secrets.NAVER_MAPS_CLIENT_ID }} - 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 + 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 - - 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: 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: Grant execute permission for gradlew + run: chmod +x gradlew - name: Set Distribution Target id: set-target @@ -83,27 +83,27 @@ jobs: - name: Build APK run: ./gradlew assemble${{ env.VARIANT }} - - name: Upload APK - uses: actions/upload-artifact@v4 - with: - name: app - path: app/build/outputs/apk/${{ github.event.inputs.buildVariant }}/app-${{ github.event.inputs.buildVariant }}.apk + - name: Upload APK + uses: actions/upload-artifact@v4 + with: + name: app + path: app/build/outputs/apk/${{ github.event.inputs.buildVariant }}/app-${{ github.event.inputs.buildVariant }}.apk - - name: Slack - Send Msg - uses: 8398a7/action-slack@v3 - with: - status: ${{ job.status }} - fields: workflow,commit,repo,author,job,ref,took - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + - name: Slack - Send Msg + uses: 8398a7/action-slack@v3 + with: + status: ${{ job.status }} + fields: workflow,commit,repo,author,job,ref,took + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} - - name: Slack - Upload APK - if: github.event_name == 'workflow_dispatch' - uses: MeilCli/slack-upload-file@v4 - with: - slack_token: ${{ secrets.SLACK_TOKEN }} - channel_id: ${{ secrets.SLACK_CHANNEL }} - initial_comment: '${{ github.event.inputs.branch }} 브랜치의 ${{ github.event.inputs.buildVariant }} Variant APK 빌드가 완료되었습니다.' - file_type: 'apk' - file_name: 'app-${{ github.event.inputs.buildVariant }}.apk' - file_path: './app/build/outputs/apk/${{ github.event.inputs.buildVariant }}/app-${{ github.event.inputs.buildVariant }}.apk' + - name: Slack - Upload APK + if: github.event_name == 'workflow_dispatch' + uses: MeilCli/slack-upload-file@v4 + with: + slack_token: ${{ secrets.SLACK_TOKEN }} + channel_id: ${{ secrets.SLACK_CHANNEL }} + initial_comment: '${{ github.event.inputs.branch }} 브랜치의 ${{ github.event.inputs.buildVariant }} Variant APK 빌드가 완료되었습니다.' + file_type: 'apk' + file_name: 'app-${{ github.event.inputs.buildVariant }}.apk' + file_path: './app/build/outputs/apk/${{ github.event.inputs.buildVariant }}/app-${{ github.event.inputs.buildVariant }}.apk' From 0103b33bc35b418e4e754602c9de77a4b2b3e627 Mon Sep 17 00:00:00 2001 From: PeraSite Date: Tue, 9 Sep 2025 13:13:02 +0900 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20build.gradle.kts=EC=97=90=20release?= =?UTF-8?q?=20signingConfig=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++-- app/build.gradle.kts | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 55db79b45..fe0f13770 100644 --- a/.gitignore +++ b/.gitignore @@ -63,8 +63,8 @@ captures/ # Keystore files # Uncomment the following lines if you do not want to check your keystore files in. -#*.jks -#*.keystore +*.jks +*.keystore # External native build folder generated in Android Studio 2.2 and later .externalNativeBuild diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8f1526d4c..250865803 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -36,6 +36,18 @@ android { compose = true } + signingConfigs { + val p = Properties() + p.load(project.rootProject.file("local.properties").reader()) + + create("release") { + keyAlias = p.getProperty("KEY_ALIAS") + keyPassword = p.getProperty("KEY_PASSWORD") + storeFile = file(p.getProperty("KEYSTORE_FILE")) + storePassword = p.getProperty("KEYSTORE_PASSWORD") + } + } + buildTypes { release { val p = Properties() @@ -55,6 +67,8 @@ android { isShrinkResources = false isMinifyEnabled = false proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + + signingConfig = signingConfigs["release"] } debug { From c8ad96efbc898a7efe5eece967d2378290b34209 Mon Sep 17 00:00:00 2001 From: PeraSite Date: Tue, 9 Sep 2025 13:13:30 +0900 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20Github=20Action=EC=97=90=EC=84=9C?= =?UTF-8?q?=20release=20signingConfig=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa_apk.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/qa_apk.yml b/.github/workflows/qa_apk.yml index 78758c68d..5280a5fdc 100644 --- a/.github/workflows/qa_apk.yml +++ b/.github/workflows/qa_apk.yml @@ -55,11 +55,20 @@ jobs: KAKAO_APP_KEY: ${{ secrets.KAKAO_NATIVE_APP_KEY }} NAVER_MAPS_CLIENT_ID: ${{ secrets.NAVER_MAPS_CLIENT_ID }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + 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 KEY_ALIAS=$KEY_ALIAS >> local.properties + echo KEY_PASSWORD=$KEY_PASSWORD >> local.properties + echo KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD >> local.properties + echo KEYSTORE_FILE=eatssu.keystore >> local.properties - name: Generate google-services.json run: | @@ -68,6 +77,13 @@ jobs: env: GOOGLE_SERVICE: ${{ secrets.GOOGLE_SERVICE }} + - name: Generate eatssu.keystore + env: + KEYSTORE_CONTENT: ${{ secrets.KEYSTORE_CONTENT }} + run: | + echo "$KEYSTORE_CONTENT" > app/eatssu.keystore.b64 + base64 -d -i app/eatssu.keystore.b64 > app/eatssu.keystore + - name: Grant execute permission for gradlew run: chmod +x gradlew From 3e6be9dc3b28f87ebbc91e5e4efb823a83222752 Mon Sep 17 00:00:00 2001 From: PeraSite Date: Wed, 10 Sep 2025 15:40:14 +0900 Subject: [PATCH 7/7] =?UTF-8?q?fix:=20=EA=B8=B0=EC=A1=B4=20android=20CI?= =?UTF-8?q?=EB=8F=84=20Keystore=20=EA=B4=80=EB=A0=A8=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EC=9D=84=20=EB=B6=88=EB=9F=AC=EC=98=A4=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=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 | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 48da04aaa..2e65e5c93 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -23,7 +23,7 @@ jobs: 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: @@ -41,12 +41,21 @@ jobs: KAKAO_APP_KEY: ${{ secrets.KAKAO_NATIVE_APP_KEY }} NAVER_MAPS_CLIENT_ID: ${{ secrets.NAVER_MAPS_CLIENT_ID }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + 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 KEY_ALIAS=$KEY_ALIAS >> local.properties + echo KEY_PASSWORD=$KEY_PASSWORD >> local.properties + echo KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD >> local.properties + echo KEYSTORE_FILE=eatssu.keystore >> local.properties + - name: Generate google-services.json run: | echo "$GOOGLE_SERVICE" > app/google-services.json.b64 @@ -54,6 +63,13 @@ jobs: env: GOOGLE_SERVICE: ${{ secrets.GOOGLE_SERVICE }} + - name: Generate eatssu.keystore + env: + KEYSTORE_CONTENT: ${{ secrets.KEYSTORE_CONTENT }} + run: | + echo "$KEYSTORE_CONTENT" > app/eatssu.keystore.b64 + base64 -d -i app/eatssu.keystore.b64 > app/eatssu.keystore + - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle