Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions .github/workflows/cd_release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: Android CD Release

on:
push:
branches:
- master # master 브랜치에 push 될 때 실행

jobs:
release:
runs-on: ubuntu-latest

# Secrets를 환경 변수로 정의하여 run 스크립트에서 $변수 형태로 사용 가능
env:
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}

steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'

- name: Make gradlew executable
run: chmod +x ./gradlew

# Secrets에서 Base64 문자열을 디코딩하여 app/keystore.jks 파일로 저장
- name: Decode Keystore File
# base64 -d 명령어를 사용하여 복호화
run: echo "$KEYSTORE_BASE64" | base64 -d > app/keystore.jks

# 서명에 필요한 비밀번호와 별칭 정보를 signing.properties 파일로 생성
- name: Set up Signing Properties
run: |
echo "storeFile=keystore.jks" > ./signing.properties
echo "storePassword=$KEYSTORE_PASSWORD" >> ./signing.properties
echo "keyAlias=$KEY_ALIAS" >> ./signing.properties
echo "keyPassword=$KEY_PASSWORD" >> ./signing.properties

# 릴리즈 AAB 빌드 실행
- name: Build Release AAB
# 프로젝트 설정을 통해 서명된다
run: ./gradlew bundleRelease

# GitHub Release 생성 및 고정 메시지 적용
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
# Git Tag가 푸시될 때만 Release를 생성 (예: v1.0.0)
if: startsWith(github.ref, 'refs/tags/')
with:
# 빌드된 AAB 파일 업로드
files: app/build/outputs/bundle/release/app-release.aab
name: Release ${{ github.ref_name }}
body: |
더 나은 모멘토를 위해 버그를 수정하고, 사용성을 개선했어요
54 changes: 54 additions & 0 deletions .github/workflows/ci_build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Android CI Build

on:
push:
branches:
- develop # develop 브랜치에 push 될 때 실행
pull_request:
branches:
- develop # develop 브랜치로 PR이 열리거나 업데이트 될 때 실행


jobs:
build:
runs-on: ubuntu-latest # 워크플로우를 실행할 가상 환경

env:
GOOGLE_SERVICES_BASE64: ${{ secrets.GOOGLE_SERVICES_BASE64 }}
KAKAO_NATIVE_APP_KEY: ${{ secrets.KAKAO_NATIVE_APP_KEY }}
NAVER_CLIENT_ID: ${{ secrets.NAVER_CLIENT_ID }}
NAVER_CLIENT_SECRET: ${{ secrets.NAVER_CLIENT_SECRET }}

steps:
- name: Checkout Code
uses: actions/checkout@v4 # GitHub 저장소 코드를 워크스페이스로 가져오기

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'

- name: Make gradlew executable
run: chmod +x ./gradlew # gradlew 파일에 실행 권한 부여

- name: Decode Google Services File
run: echo "$GOOGLE_SERVICES_BASE64" | base64 -d > app/google-services.json

# Secrets를 사용하여 local.properties 파일 생성
- name: Create local.properties for CI
run: |
echo "kakao.native.app.key=$KAKAO_NATIVE_APP_KEY" > local.properties
echo "naver.client.id=$NAVER_CLIENT_ID" >> local.properties
echo "naver.client.secret=$NAVER_CLIENT_SECRET" >> local.properties

- name: Build Debug APK
run: ./gradlew assembleDebug # 디버그 APK 빌드 명령어 실행

# 빌드된 APK 아티팩트 저장
- name: Upload APK Artifact
uses: actions/upload-artifact@v4
with:
name: dngo-app-debug
path: app/build/outputs/apk/debug/app-debug.apk
retention-days: 90
25 changes: 22 additions & 3 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ if (propertiesFile.exists()) {
propertiesFile.inputStream().use { properties.load(it) }
}

// CI/CD 서명 설정 파일 로드
val signingProps = Properties()
val signingPropsFile = project.rootProject.file("signing.properties")
if (signingPropsFile.exists()) {
signingPropsFile.inputStream().use { signingProps.load(it) }
}

plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
Expand Down Expand Up @@ -49,21 +56,33 @@ android {
buildConfigField("String", "NAVER_CLIENT_SECRET", "\"${naverClientSecret}\"")
}

// CI/CD 서명 설정
signingConfigs {
create("release") {
storeFile = if (signingProps.containsKey("storeFile")) file("app/${signingProps["storeFile"] as String}") else null
storePassword = signingProps["storePassword"] as String?
keyAlias = signingProps["keyAlias"] as String?
keyPassword = signingProps["keyPassword"] as String?
}
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
// release 빌드 타입에 서명 설정 적용
signingConfig = signingConfigs.getByName("release")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "11"
jvmTarget = "17"
}
buildFeatures {
compose = true
Expand Down