From 5c91a83ea3ef7247ef9e5a639748660dca40ddcc Mon Sep 17 00:00:00 2001 From: JUNWON LEE Date: Wed, 23 Oct 2024 13:42:28 +0900 Subject: [PATCH] =?UTF-8?q?An/develop=20=EC=97=90=20release1.0.3=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20(#393)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * build: version up * feat: drop DB * feat: 임시 방편으로 프로세스 실행시 테이블 드롭하고 Room 다시 생성 * fix: Intro -> Home으로 갈때 Activity Stack 전부 비우기 * fix: warmUp 에서 예외 발생시 예외 처리 * feat: Android Release CD * build: CD, CI main 에 돌리기 * fix: 명령어에 $ 추가 * fix: keystore 경로 추가 * fix: work directory 설정 * build: version 으로 tag 생성해서 release 노트 만듬 * build: Release CI, CD 분리 * build: PR closed 될때 머지되도록 수정 * fix: 브랜치 이름으로 버전 추출하도록 변경 * add release folder * tag_name, release_name 삭제해보자 * tag 일때만 동작하도록 * style ktformat * feat: dataBase Drop 삭제 --- .github/workflows/Android_Develop_PR_CD.yml | 15 --- .github/workflows/Android_Release_CD.yml | 99 +++++++++++++++++++ .github/workflows/Android_Release_CI.yml | 84 ++++++++++++++++ .../splash/PokemonIntroActivity.kt | 5 +- .../splash/PokemonIntroViewModel.kt | 3 +- android/gradle/libs.versions.toml | 4 +- .../helper/local/db/PokeRogueDatabase.kt | 8 ++ 7 files changed, 197 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/Android_Release_CD.yml create mode 100644 .github/workflows/Android_Release_CI.yml diff --git a/.github/workflows/Android_Develop_PR_CD.yml b/.github/workflows/Android_Develop_PR_CD.yml index 1980dba1..dc880e98 100644 --- a/.github/workflows/Android_Develop_PR_CD.yml +++ b/.github/workflows/Android_Develop_PR_CD.yml @@ -121,23 +121,8 @@ jobs: - name: Access Local Properties env: POKE_BASE_URL: ${{ secrets.POKE_BASE_URL }} - # POKE_RELEASE_URL: ${{ secrets.HOST_RELEASE_URI }} - # KEYSTORE_PATH: ${{ secrets.KEYSTORE_PATH }} - # STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} - # KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - # KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - # STORE_FILE: ${{ secrets.STORE_FILE }} run: | echo POKE_BASE_URL=\"${{ secrets.POKE_BASE_URL }}\" >> local.properties - # echo STORE_PASSWORD= $STORE_PASSWORD >> local.properties - # echo KEY_PASSWORD= $KEY_PASSWORD >> local.properties - # echo KEY_ALIAS= $KEY_ALIAS >> local.properties - # echo STORE_FILE= $STORE_FILE >> local.properties - # - name: Create Key Store - # env: - # KEY_STORE_BASE_64: ${{secrets.KEY_STORE_BASE_64}} - # run: | - # echo "$KEY_STORE_BASE_64" | base64 -d > ./funch_key_store.jks - name: Grant execute permission for gradlew run: chmod +x gradlew diff --git a/.github/workflows/Android_Release_CD.yml b/.github/workflows/Android_Release_CD.yml new file mode 100644 index 00000000..702fc51d --- /dev/null +++ b/.github/workflows/Android_Release_CD.yml @@ -0,0 +1,99 @@ +name: Android PR Builder + +on: + push: + tags: + - "v*.*.*" + +jobs: + build: + name: CD Release Builder + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: show github pull request + run: echo ${{ github.event.pull_request.title }} + + - name: Gradle cache + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: 17 + + - name: Create Google-Services.json + env: + GOOGLE_SERVICES_ALPHA: ${{ secrets.GOOGLE_SERVICES_ALPHA }} + GOOGLE_SERVICES_BETA: ${{ secrets.GOOGLE_SERVICES_BETA }} + GOOGLE_SERVICES: ${{ secrets.GOOGLE_SERVICES }} + run: | + touch ./app/src/debug/google-services.json + touch ./app/src/alpha/google-services.json + touch ./app/src/beta/google-services.json + mkdir ./app/src/release + touch ./app/src/release/google-services.json + echo $GOOGLE_SERVICES_ALPHA >> ./app/src/debug/google-services.json + echo $GOOGLE_SERVICES_ALPHA >> ./app/src/alpha/google-services.json + echo $GOOGLE_SERVICES_BETA >> ./app/src/beta/google-services.json + echo $GOOGLE_SERVICES >> ./app/src/release/google-services.json + cat ./app/src/debug/google-services.json + working-directory: android + + - name: Create Local Properties + run: touch local.properties + working-directory: android + + - name: Access Local Properties + env: + POKE_BASE_URL: ${{ secrets.POKE_BASE_URL }} + # POKE_DEV_BASE_URL: ${{ secrets.HOST_RELEASE_URI }} + STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + run: | + echo POKE_BASE_URL=\"${{ secrets.POKE_BASE_URL }}\" >> local.properties + echo STORE_PASSWORD= $STORE_PASSWORD >> local.properties + echo KEY_PASSWORD= $KEY_PASSWORD >> local.properties + echo KEY_ALIAS= $KEY_ALIAS >> local.properties + working-directory: android + + - name: Create RELEASE Key Store + env: + KEY_STORE: ${{secrets.RELEASE_KEY_STORE}} + run: | + touch ./keystore/poke_key.jks + echo "$KEY_STORE" | base64 -d > ./keystore/poke_key.jks + working-directory: android + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + working-directory: android + + - name: Build Release APK + run: ./gradlew assembleRelease + working-directory: android + + - name: Upload Release Build to Artifacts + uses: actions/upload-artifact@v3 + with: + name: release-artifacts + path: android/app/build/outputs/apk/release/ + if-no-files-found: error + + - name: Create Github Release + uses: softprops/action-gh-release@v1 + with: + generate_release_notes: true + files: | + android/app/build/outputs/apk/release/app-release.apk diff --git a/.github/workflows/Android_Release_CI.yml b/.github/workflows/Android_Release_CI.yml new file mode 100644 index 00000000..4d6bb734 --- /dev/null +++ b/.github/workflows/Android_Release_CI.yml @@ -0,0 +1,84 @@ +name: Android PR Builder + +on: + push: + branches: [ "an/release*" ] +jobs: + build: + name: CI Release Builder + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Gradle cache + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: 17 + + - name: Create Google-Services.json + env: + GOOGLE_SERVICES_ALPHA: ${{ secrets.GOOGLE_SERVICES_ALPHA }} + GOOGLE_SERVICES_BETA: ${{ secrets.GOOGLE_SERVICES_BETA }} + GOOGLE_SERVICES: ${{ secrets.GOOGLE_SERVICES }} + run: | + touch ./app/src/debug/google-services.json + touch ./app/src/alpha/google-services.json + touch ./app/src/beta/google-services.json + mkdir ./app/src/release + touch ./app/src/release/google-services.json + echo $GOOGLE_SERVICES_ALPHA >> ./app/src/debug/google-services.json + echo $GOOGLE_SERVICES_ALPHA >> ./app/src/alpha/google-services.json + echo $GOOGLE_SERVICES_BETA >> ./app/src/beta/google-services.json + echo $GOOGLE_SERVICES >> ./app/src/release/google-services.json + cat ./app/src/debug/google-services.json + working-directory: android + + - name: Create Local Properties + run: touch local.properties + working-directory: android + + - name: Access Local Properties + env: + POKE_BASE_URL: ${{ secrets.POKE_BASE_URL }} + # POKE_DEV_BASE_URL: ${{ secrets.HOST_RELEASE_URI }} + STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + run: | + echo POKE_BASE_URL=\"${{ secrets.POKE_BASE_URL }}\" >> local.properties + echo STORE_PASSWORD= $STORE_PASSWORD >> local.properties + echo KEY_PASSWORD= $KEY_PASSWORD >> local.properties + echo KEY_ALIAS= $KEY_ALIAS >> local.properties + working-directory: android + + - name: Create RELEASE Key Store + env: + KEY_STORE: ${{secrets.RELEASE_KEY_STORE}} + run: | + touch ./keystore/poke_key.jks + echo "$KEY_STORE" | base64 -d > ./keystore/poke_key.jks + working-directory: android + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + working-directory: android + + - name: KT Lint + run: ./gradlew ktlintCheck + working-directory: android + + - name: Unit Test Release + run: ./gradlew testReleaseUnitTest + working-directory: android diff --git a/android/app/src/main/java/poke/rogue/helper/presentation/splash/PokemonIntroActivity.kt b/android/app/src/main/java/poke/rogue/helper/presentation/splash/PokemonIntroActivity.kt index 76128a83..0b60152d 100644 --- a/android/app/src/main/java/poke/rogue/helper/presentation/splash/PokemonIntroActivity.kt +++ b/android/app/src/main/java/poke/rogue/helper/presentation/splash/PokemonIntroActivity.kt @@ -14,13 +14,14 @@ import poke.rogue.helper.presentation.home.HomeActivity import poke.rogue.helper.presentation.util.context.startActivity import poke.rogue.helper.presentation.util.repeatOnStarted -class PokemonIntroActivity() : +class PokemonIntroActivity : ErrorHandleActivity(R.layout.activity_pokemon_intro) { private val viewModel by viewModels { PokemonIntroViewModel.factory(DefaultDexRepository.instance(), analyticsLogger()) } override val errorViewModel: ErrorHandleViewModel get() = viewModel + override val toolbar: Toolbar? = null override fun onCreate(savedInstanceState: Bundle?) { @@ -28,7 +29,7 @@ class PokemonIntroActivity() : super.onCreate(savedInstanceState) repeatOnStarted { viewModel.navigationToHomeEvent.collect { - finish() + finishAffinity() startActivity() } } diff --git a/android/app/src/main/java/poke/rogue/helper/presentation/splash/PokemonIntroViewModel.kt b/android/app/src/main/java/poke/rogue/helper/presentation/splash/PokemonIntroViewModel.kt index 5e4ae172..250400d9 100644 --- a/android/app/src/main/java/poke/rogue/helper/presentation/splash/PokemonIntroViewModel.kt +++ b/android/app/src/main/java/poke/rogue/helper/presentation/splash/PokemonIntroViewModel.kt @@ -15,7 +15,6 @@ import poke.rogue.helper.presentation.base.BaseViewModelFactory import poke.rogue.helper.presentation.base.error.ErrorHandleViewModel import poke.rogue.helper.presentation.util.event.MutableEventFlow import poke.rogue.helper.presentation.util.event.asEventFlow -import timber.log.Timber class PokemonIntroViewModel( private val pokemonRepository: DexRepository, @@ -36,7 +35,7 @@ class PokemonIntroViewModel( launch { getKoin().get().warmUp() } } } catch (e: Exception) { - Timber.e(e) + handlePokemonError(e) } finally { _navigationToHomeEvent.emit(Unit) } diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml index 708719dd..fb7c038a 100644 --- a/android/gradle/libs.versions.toml +++ b/android/gradle/libs.versions.toml @@ -5,8 +5,8 @@ koin = "4.0.0" minSdk = "26" robolectric = "4.13" targetSdk = "34" -appVersion = "1.0.1" -versionCode = "10001" +appVersion = "1.0.3" +versionCode = "10003" agp = "8.3.2" # kotlin diff --git a/android/local/src/main/java/poke/rogue/helper/local/db/PokeRogueDatabase.kt b/android/local/src/main/java/poke/rogue/helper/local/db/PokeRogueDatabase.kt index a995a9f6..dcf95955 100644 --- a/android/local/src/main/java/poke/rogue/helper/local/db/PokeRogueDatabase.kt +++ b/android/local/src/main/java/poke/rogue/helper/local/db/PokeRogueDatabase.kt @@ -33,5 +33,13 @@ abstract class PokeRogueDatabase : RoomDatabase() { .build().also { instance = it } } } + + fun dropDatabase(context: Context) { + synchronized(this) { + instance?.close() + instance = null + context.deleteDatabase(DATABASE_NAME) + } + } } }