Skip to content

Commit 3aded45

Browse files
authored
Merge pull request #147 from hellokitty-coding-club/feat/prepare-for-release
[RELEASE] v1.0.0 출시
2 parents b94bc6b + 48e74cf commit 3aded45

File tree

852 files changed

+17606
-217
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

852 files changed

+17606
-217
lines changed

.github/workflows/dependencyGraph.yml

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
name: Generate Dependency Graph
2+
3+
on:
4+
pull_request:
5+
types:
6+
- opened
7+
8+
jobs:
9+
build:
10+
name: PR Checker
11+
runs-on: ubuntu-latest
12+
steps:
13+
- name: Checkout
14+
uses: actions/checkout@v2
15+
with :
16+
persist-credentials: false
17+
fetch-depth: 0
18+
19+
- name: Gradle cache
20+
uses: actions/cache@v2
21+
with:
22+
path: |
23+
~/.gradle/caches
24+
~/.gradle/wrapper
25+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
26+
restore-keys: |
27+
${{ runner.os }}-gradle-
28+
29+
- name: set up JDK 17
30+
uses: actions/setup-java@v1
31+
with:
32+
java-version: 17
33+
34+
- name: Change gradlew permissions
35+
run: chmod +x ./gradlew
36+
37+
- name: Touch lgtm properties
38+
run: touch lgtm.properties
39+
40+
- name: Access LGTM_BASE_URL_DEBUG
41+
env:
42+
LGTM_BASE_URL_DEBUG: ${{ secrets.LGTM_BASE_URL_DEBUG }}
43+
run: echo "LGTM_BASE_URL_DEBUG=\"$LGTM_BASE_URL_DEBUG\"" >> lgtm.properties
44+
45+
- name: Access LGTM_BASE_URL_RELEASE
46+
env:
47+
LGTM_BASE_URL_RELEASE: ${{ secrets.LGTM_BASE_URL_RELEASE }}
48+
run: echo "LGTM_BASE_URL_RELEASE=\"$LGTM_BASE_URL_RELEASE\"" >> lgtm.properties
49+
50+
- name: Gradle cache
51+
uses: actions/cache@v2
52+
with:
53+
path: |
54+
~/.gradle/caches
55+
~/.gradle/wrapper
56+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
57+
restore-keys: |
58+
${{ runner.os }}-gradle-
59+
60+
- name: set up JDK 17
61+
uses: actions/setup-java@v1
62+
with:
63+
java-version: 17
64+
65+
- name: Change gradlew permissions
66+
run: chmod +x ./gradlew
67+
68+
- name: Touch lgtm properties
69+
run: touch lgtm.properties
70+
71+
- name: Access LGTM_BASE_URL_DEBUG
72+
env:
73+
LGTM_BASE_URL_DEBUG: ${{ secrets.LGTM_BASE_URL_DEBUG }}
74+
run: echo "LGTM_BASE_URL_DEBUG=\"$LGTM_BASE_URL_DEBUG\"" >> lgtm.properties
75+
76+
- name: Access LGTM_BASE_URL_RELEASE
77+
env:
78+
LGTM_BASE_URL_RELEASE: ${{ secrets.LGTM_BASE_URL_RELEASE }}
79+
run: echo "LGTM_BASE_URL_RELEASE=\"$LGTM_BASE_URL_RELEASE\"" >> lgtm.properties
80+
81+
- name: Setup Graphviz
82+
uses: ts-graphviz/setup-graphviz@v1
83+
84+
- name: Generate Dependency Graph
85+
run: ./gradlew projectDependencyGraph --stacktrace
86+
87+
- name: Commit
88+
run: |
89+
git config --local user.email '[email protected]'
90+
git config --local user.name 'GitHub Action'
91+
git diff --quiet && git diff --staged --quiet || git commit -am '[DOCS] Update dependency graph'
92+
93+
- name: Push
94+
uses: ad-m/github-push-action@master
95+
with:
96+
github_token: ${{ secrets.TOKEN_GITHUB }}
97+
branch: ${{ github.head_ref }}
98+
99+
- name: On Success!! Congratulations
100+
if: ${{ success() }}
101+
uses: rtCamp/action-slack-notify@v2
102+
env:
103+
SLACK_COLOR: '#53A551'
104+
SLACK_ICON: https://github.com/hellokitty-coding-club/LGTM-Android/assets/59546818/603efae5-02ba-4065-ba7b-ea36bc88acb6
105+
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
106+
SLACK_TITLE: '[LGTM] Dependency graph is now up to date ✅'
107+
MSG_MINIMAL: true
108+
SLACK_USERNAME: LGTM-Android
109+
SLACK_MESSAGE: 'Dependency graph has been updated to its latest state'
110+
111+
- name: On Failed, Notify in Slack
112+
if: ${{ failure() }}
113+
uses: rtCamp/action-slack-notify@v2
114+
with:
115+
status: ${{ job.status }}
116+
env:
117+
SLACK_COLOR: '#ff0000'
118+
SLACK_ICON: https://github.com/hellokitty-coding-club/LGTM-Android/assets/59546818/603efae5-02ba-4065-ba7b-ea36bc88acb6
119+
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
120+
SLACK_TITLE: '[LGTM] Dependency graph update has failed ❌'
121+
MSG_MINIMAL: ref,actions url,event,commit
122+
SLACK_USERNAME: LGTM-Android
123+
SLACK_MESSAGE: 'The attempt to update the dependency graph has encountered an issue'

.github/workflows/prBuilder.yml

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
# This is a basic workflow to help you get started with Actions
2-
3-
name: LGTM PR Builder
1+
name: LGTM PR Builder & App Distribution
42

53
on:
64
pull_request:
@@ -18,6 +16,9 @@ jobs:
1816
steps:
1917
- name: Checkout
2018
uses: actions/checkout@v2
19+
with :
20+
persist-credentials: false
21+
fetch-depth: 0
2122

2223
- name: Gradle cache
2324
uses: actions/cache@v2
@@ -28,6 +29,7 @@ jobs:
2829
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
2930
restore-keys: |
3031
${{ runner.os }}-gradle-
32+
3133
- name: set up JDK 17
3234
uses: actions/setup-java@v1
3335
with:
@@ -36,9 +38,34 @@ jobs:
3638
- name: Change gradlew permissions
3739
run: chmod +x ./gradlew
3840

41+
- name: Touch lgtm properties
42+
run: touch lgtm.properties
43+
44+
- name: Access LGTM_BASE_URL_DEBUG
45+
env:
46+
LGTM_BASE_URL_DEBUG: ${{ secrets.LGTM_BASE_URL_DEBUG }}
47+
run: echo "LGTM_BASE_URL_DEBUG=\"$LGTM_BASE_URL_DEBUG\"" >> lgtm.properties
48+
49+
- name: Access LGTM_BASE_URL_RELEASE
50+
env:
51+
LGTM_BASE_URL_RELEASE: ${{ secrets.LGTM_BASE_URL_RELEASE }}
52+
run: echo "LGTM_BASE_URL_RELEASE=\"$LGTM_BASE_URL_RELEASE\"" >> lgtm.properties
53+
3954
- name: Build debug APK
4055
run: ./gradlew assembleDebug --stacktrace
4156

57+
- name: Upload apk to Firebase App Distribution
58+
uses: wzieba/Firebase-Distribution-Github-Action@v1
59+
with:
60+
appId: ${{ secrets.FIREBASE_APP_ID }}
61+
token: ${{ secrets.FIREBASE_TOKEN }}
62+
groups: hello-kitty-coding-club
63+
file: app/build/outputs/apk/debug/app-debug.apk
64+
releaseNotes: |
65+
${{ github.event.pull_request.title }}
66+
${{ github.event.pull_request.html_url }}
67+
${{ github.event.pull_request.body }}
68+
4269
- name: On Success!! Congratulations
4370
if: ${{ success() }}
4471
uses: rtCamp/action-slack-notify@v2
@@ -49,7 +76,7 @@ jobs:
4976
SLACK_TITLE: '[LGTM] PR Check SUCCESS ✅'
5077
MSG_MINIMAL: true
5178
SLACK_USERNAME: LGTM-Android
52-
SLACK_MESSAGE: 'PR이 완료되었습니다!!! 🎉🎉🎉'
79+
SLACK_MESSAGE: 'Build and App distribution Success🎉🎉🎉'
5380

5481
- name: On Failed, Notify in Slack
5582
if: ${{ failure() }}

.gitignore

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
# Created by https://www.toptal.com/developers/gitignore/api/android,androidstudio,kotlin
22
# Edit at https://www.toptal.com/developers/gitignore?templates=android,androidstudio,kotlin
33

4+
5+
46
### Android ###
57
# Gradle files
68
.gradle/
79
build/
810

911
# Local configuration file (sdk path, etc)
1012
local.properties
13+
lgtm.properties
1114

1215
# Log/OS Files
1316
*.log
@@ -18,6 +21,7 @@ captures/
1821
.cxx/
1922
*.apk
2023
output.json
24+
app/release/output-metadata.json
2125

2226
# IntelliJ
2327
*.iml
@@ -29,9 +33,11 @@ render.experimental.xml
2933
# Keystore files
3034
*.jks
3135
*.keystore
36+
private_key.pepk
37+
LgtmKeyStore
3238

3339
# Google Services (e.g. APIs or Firebase)
34-
google-services.json
40+
# google-services.json
3541

3642
# Android Profiling
3743
*.hprof
@@ -199,3 +205,6 @@ fabric.properties
199205
/captures
200206
.cxx
201207

208+
/app/release/output-metadata.json
209+
/LgtmKeyStore
210+
/private_key.pepk

README.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# 미션 기반 코드리뷰 매칭 플랫폼, LGTM
2+
3+
**'LGTM'은 SW 마에스트로 14기 프로젝트입니다.**
4+
5+
해당 `LGTM-Android` Repository는 **[@kxxhyorim](https://github.com/KxxHyoRim)** 1인 개발로 이루어지고 있습니다. (팀 구성 = 백엔드 2명, 안드로이드 1명)
6+
7+
![image](https://github.com/hellokitty-coding-club/LGTM-Android/assets/59546818/4cff9177-ac15-4ddf-9a74-3a0654c8a502)
8+
9+
10+
11+
12+
## ⚒️ Tech Stack
13+
14+
| Category | Details |
15+
| ------------------- | -------------------------------------------- |
16+
| Architecture | MVVM, Multi Module, Clean Architecture, Hilt |
17+
| AAC | Databinding, Livedata, ViewModel, Navigation |
18+
| Concurrency | Coroutine |
19+
| Third Party Library | OkHttp3, Retrofit2, Glide |
20+
| CI/CD | Github Actions |
21+
| Language | Kotlin(100%) |
22+
23+
24+
25+
## ⛏️ Multi Module Architecutre
26+
27+
<img src="gradle/dependency-graph/project.dot.png" />
28+
29+
30+
## ⛏️ Clean Architecutre
31+
32+
![image](https://github.com/hellokitty-coding-club/LGTM-Android/assets/59546818/164234cb-32e1-4d6b-91d0-a2e9e3801128)
33+
34+
35+
36+
## 🖌️ Server Drivne UI
37+
38+
- **Home 화면의 경우, 앱 배포 없이 UI를 변경할 수 있는 `Server Driven UI`를 활용했습니다.**
39+
40+
- **도입 이유**
41+
42+
- 안드로이드 앱은 유저의 앱 업데이트를 강제하기 어려워서 유연한 변경사항 제공이 어렵다.
43+
- 새로운 기능 & 수정사항을 모두에게 빠르게 반영하지 못한다.
44+
- 클라이언트 코드 변경 없이 UI를 조정가능.
45+
46+
- **개괄적인 방식**
47+
48+
1. 클라이언트-백엔드 ViewType 정의 및 Json 설계
49+
50+
2. 서버가 API 응답에 UI 정보를 담아 클라이언트에 제공
51+
52+
3. 안드로이드에서는 동적으로 ViewType을 보고 홈화면의 UI 구성
53+
54+
- **Response 설계**
55+
56+
![image](https://github.com/hellokitty-coding-club/LGTM-Android/assets/59546818/e1e12a75-9580-46c7-a981-423f1a0da17f)
57+
58+
- **안드로이드 구현**
59+
60+
![image](https://github.com/hellokitty-coding-club/LGTM-Android/assets/59546818/7d360f52-3aee-4b56-8be2-45fa6ae879be)
61+
62+
## 🖼️ 구현 화면
63+
64+
| 화면 분류 | 이미지 |
65+
| ------------------ | ------------------------------------------------------------ |
66+
| 로그인 / 회원가입 | <img width=600 src="https://github.com/hellokitty-coding-club/LGTM-Android/assets/59546818/65caad40-0866-499a-90e4-80ef942c38c2"/> |
67+
| 홈화면 | <img width=600 src="https://github.com/hellokitty-coding-club/LGTM-Android/assets/59546818/94a1cbc2-66fd-48df-8d4f-3cb03729f86c"/> |
68+
| 미션 조회 (리뷰어) | <img width =600 src="https://github.com/hellokitty-coding-club/LGTM-Android/assets/59546818/d2fee2fb-5559-454b-a3b3-787874cd4478"/> |
69+
| 미션 조회 (리뷰이) | <img width=600 src="https://github.com/hellokitty-coding-club/LGTM-Android/assets/59546818/33cccfdd-c43c-4faf-8d5e-87b3dcdae316"/> |
70+
71+

app/build.gradle.kts

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
1+
import org.jetbrains.kotlin.konan.properties.Properties
2+
3+
val lgtmPropertiesFile = rootProject.file("lgtm.properties")
4+
val lgtmProperties = Properties()
5+
lgtmProperties.load(lgtmPropertiesFile.inputStream())
6+
17
plugins {
28
kotlin("android")
39
id("com.android.application")
410
id("dagger.hilt.android.plugin")
11+
id("com.google.gms.google-services")
12+
id("com.google.firebase.crashlytics")
513
kotlin("kapt")
614
}
715

@@ -12,11 +20,24 @@ android {
1220
applicationId = "com.lgtm.android"
1321
versionCode = libs.versions.versionCode.get().toInt()
1422
versionName = libs.versions.appVersion.get()
23+
targetSdk = libs.versions.targetSdk.get().toInt()
1524
vectorDrawables.useSupportLibrary = true
25+
26+
buildConfigField(
27+
"String",
28+
"LGTM_BASE_URL_DEBUG",
29+
lgtmProperties.getProperty("LGTM_BASE_URL_DEBUG")
30+
)
31+
buildConfigField(
32+
"String",
33+
"LGTM_BASE_URL_RELEASE",
34+
lgtmProperties.getProperty("LGTM_BASE_URL_RELEASE")
35+
)
1636
}
1737
buildTypes {
1838
release {
1939
isMinifyEnabled = true
40+
isShrinkResources = true
2041
proguardFiles(
2142
getDefaultProguardFile("proguard-android-optimize.txt"),
2243
"proguard-rules.pro"
@@ -25,9 +46,12 @@ android {
2546
}
2647

2748
buildFeatures {
28-
dataBinding = true
49+
buildConfig = true
2950
}
3051

52+
lint {
53+
disable += "Instantiatable"
54+
}
3155
}
3256

3357
kapt {
@@ -38,13 +62,18 @@ dependencies {
3862
implementation(project(":domain"))
3963
implementation(project(":data"))
4064
implementation(project(":feature:auth"))
65+
implementation(project(":feature:main"))
66+
implementation(project(":feature:create_mission"))
67+
implementation(project(":feature:mission_detail"))
68+
implementation(project(":feature:manage_mission"))
69+
implementation(project(":feature:profile"))
4170
implementation(project(":common-ui"))
4271

43-
// todo) MainActivity Feature 모듈로 옮기고 나면 삭제
44-
implementation(libs.bundles.androidx.ui.foundation)
45-
implementation(libs.constraintlayout)
46-
4772
implementation(libs.hilt)
73+
implementation(platform(libs.firebase))
74+
implementation(libs.bundles.firebase)
4875
kapt(libs.hilt.kapt)
4976
implementation(libs.bundles.basic.test)
77+
implementation(libs.security.cripto)
78+
5079
}

0 commit comments

Comments
 (0)