Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
197 commits
Select commit Hold shift + click to select a range
a7913b0
chore: 이미지 분석 로그 추가
komodgn Dec 11, 2025
286e88d
chore: 로컬 서버 사용을 위해 서버 주소 임시 변경
komodgn Dec 11, 2025
2ad69bf
docs: update README.md
komodgn Dec 11, 2025
2a688de
chore: update .gitignore
komodgn Dec 11, 2025
42f30b6
chore: CI 초기 파일 추가
komodgn Dec 13, 2025
7f4b9dd
chore: 코드 포맷, 정적 분석을 위한 설정 파일 추가
komodgn Dec 13, 2025
03b3ec1
chore: update .gitignore
komodgn Dec 13, 2025
c450a0b
feat: build-logic 모듈 추가 및 컨벤션 플러그인 적용
komodgn Dec 13, 2025
a27e070
feat: 데이터, 네트워크 관리를 위한 모듈 추가
komodgn Dec 13, 2025
f7af777
chore: 멀티모듈에 Ktlint/Detekt 정적 분석 환경 구축 (#3)
komodgn Dec 13, 2025
5f3771d
fix: ktlintCheck가 통과하도록 수정
komodgn Dec 13, 2025
9160fe4
fix: CI 리뷰 생성 오류 해결
komodgn Dec 13, 2025
13ed5b0
Merge pull request #4 from komodgn/chore/#3
komodgn Dec 13, 2025
75ae3f4
docs: Update README.md
komodgn Dec 13, 2025
f015b71
feat: 피쳐 모듈 추가 (#5)
komodgn Dec 14, 2025
3d3b6fb
feat: 코어 모듈 추가 (#5)
komodgn Dec 14, 2025
bc17216
Merge pull request #6 from komodgn/refactor/#5
komodgn Dec 14, 2025
ac90eea
feat: Device ID 저장을 위한 DataStore 기반 DataSource 구현 및 DI 설정 (#7)
komodgn Dec 15, 2025
df9b8a2
chore: 파일 이름 규칙 비활성화 (#7)
komodgn Dec 15, 2025
4c0d024
feat: Unique DB 이름 생성을 위한 DatabaseNameRepository 구현 (#7)
komodgn Dec 15, 2025
ee70be8
test: 디바이스 고유 ID 저장 및 DB 이름 생성 비즈니스 로직에 대한 유닛 테스트 추가 (#7)
komodgn Dec 15, 2025
d9fb80c
Merge pull request #8 from komodgn/refactor/#7
komodgn Dec 15, 2025
dd6ef86
feat: 엔티티 및 DAO 인터페이스 정의 (#9)
komodgn Dec 15, 2025
69e45c6
feat: 분석된 이미지 관리를 위한 Dao 인터페이스 추가 (#9)
komodgn Dec 15, 2025
d345b14
feat: AppDatabase 구현 및 Hilt 주입 모듈 설정 (#9)
komodgn Dec 15, 2025
6d48172
test: PersonDao 테스트 작성 (#9)
komodgn Dec 15, 2025
620ecec
Merge pull request #10 from komodgn/refactor/#9
komodgn Dec 15, 2025
970a814
feat: 메인 탭 바에서 사용할 기본 스크린 등록 (#12)
komodgn Dec 16, 2025
69d7f2d
chore: update .gitignore
komodgn Dec 16, 2025
f769612
design: 공통으로 사용할 Scaffold 컴포넌트 정의 (#12)
komodgn Dec 16, 2025
76da66a
design: Color, Radius, Border 디자인 시스템 등록 (#12)
komodgn Dec 16, 2025
137bff3
feat: 메인 액티비티 위치 변경 (#12)
komodgn Dec 16, 2025
2afde89
design: 커스텀 테마 설정 추가 (#12)
komodgn Dec 16, 2025
c6c3302
chore: 미리보기 어노테이션 추가 (#12)
komodgn Dec 16, 2025
51ce37b
feat: 메인 바텀 바 컴포넌트 추가 (#12)
komodgn Dec 16, 2025
8e0804a
feat: 메인 바텀 바 스크린 이동 구현 (#12)
komodgn Dec 16, 2025
67c953d
feat: 네트워크 서비스 파일 분리 (#13)
komodgn Dec 17, 2025
7211b0e
Merge pull request #14 from komodgn/refactor/#13
komodgn Dec 17, 2025
c5043d3
refactor: 사용하지 않는 파일 제거 및 리소스 파일 이동 (#12) (#16)
komodgn Dec 18, 2025
9d312a8
fix: 바텀 바 아이콘 색상 참조 경로 변경 (#12)
komodgn Dec 18, 2025
04826a0
refactor: 애플리케이션 이름 변경 (#12) (#16)
komodgn Dec 18, 2025
90ac239
refactor: 시스템 컨트롤러 의존성 변경 (#12)
komodgn Dec 18, 2025
d451b11
refactor: 스플래시 스크린 이동 처리 함수 분리 (#16)
komodgn Dec 18, 2025
eb676c1
refactor: ktlintCheck가 통과하도록 코드 변경
komodgn Dec 18, 2025
57b1b52
chore(designsystem): 색상 추가
komodgn Dec 18, 2025
45f91b2
fix: optimize imports
komodgn Dec 18, 2025
b3f5a47
fix: optimize imports
komodgn Dec 18, 2025
c09440f
Merge pull request #17 from komodgn/refactor/#12
komodgn Dec 18, 2025
2b5e69f
feat: 포커싱 검색 비즈니스 로직 작성 (#15)
komodgn Dec 19, 2025
76bcd26
fix: 누락된 suspend 키워드 추가 (#15)
komodgn Dec 19, 2025
27539f1
feat: 자연어 검색 비즈니스 로직 작성 (#15)
komodgn Dec 19, 2025
dc48021
chore: OpenAI API KEY 환경 변수 추가
komodgn Dec 19, 2025
c38bd04
feat: 사이퍼쿼리 생성 객체 추가
komodgn Dec 19, 2025
08614fe
refactor: ai, web 서비스 콜백 제거 (#15)
komodgn Dec 19, 2025
b3ab9c1
feat: 갤러리 이미지 유틸 객체 추가
komodgn Dec 19, 2025
b3a8dd2
fix: ktlintFormat 적용
komodgn Dec 19, 2025
d4c2a96
fix: ktlintFormat 적용
komodgn Dec 19, 2025
9a65da6
fix: ktlintFormat 적용
komodgn Dec 19, 2025
5292e2f
fix: 누락된 모듈 의존성 추가
komodgn Dec 19, 2025
dc0a5c3
Merge pull request #18 from komodgn/refactor/#15
komodgn Dec 19, 2025
dad6861
feat: 권한 요청 로직 추가 (#20)
komodgn Dec 20, 2025
6b2bcff
design: 커스텀 토스트 및 로딩 컴포넌트 추가
komodgn Dec 20, 2025
e0bb468
refactor: 의존성 주입 로직 개선
komodgn Dec 20, 2025
3176aef
feat: 홈 화면에 표시할 데이터 관리 로직 추가 (#20)
komodgn Dec 20, 2025
81d167f
feat: 홈 화면 생성
komodgn Dec 20, 2025
d649286
feat: 자연어 검색 화면 구현
komodgn Dec 21, 2025
64aa34c
feat: 사진 상세 화면 추가
komodgn Dec 21, 2025
8a0c406
feat: 그래프 데이터 관리 로직 추가 (#20)
komodgn Dec 21, 2025
9492d2d
feat: 그래프 상세 화면 추가
komodgn Dec 21, 2025
c41dcc0
feat: 전체 그래프 화면 추가
komodgn Dec 21, 2025
972af7d
refactor: 서버에서 온 파일명을 기기 내 URI로 매핑하는 로직 수정 (#20)
komodgn Dec 21, 2025
8085510
feat: 포커싱 검색 화면 추가
komodgn Dec 21, 2025
ea91a94
refactor: ktlintCheck 통과를 위한 코드 리팩토링
komodgn Dec 21, 2025
a23018a
chore: 모듈 의존성 확인을 위한 라이브러리 추가
komodgn Dec 21, 2025
60b69c8
Merge pull request #21 from komodgn/feature/#20
komodgn Dec 21, 2025
57ba1eb
chore: 사용하지 않는 테스트 파일 삭제
komodgn Dec 22, 2025
37145c7
feat: 그래프 웹뷰 출력
komodgn Dec 22, 2025
5b597a3
fix: 웹뷰 URL 오타 수정
komodgn Dec 22, 2025
874e239
feat: 개별 그래프 웹뷰 출력
komodgn Dec 22, 2025
4210ac3
feat: 분석 완료 알림을 위한 Notifier 및 DI 설정 추가 (#22)
komodgn Dec 22, 2025
6a1457f
feat: 이미지 분석을 위한 비즈니스 로직 추가 (#22)
komodgn Dec 22, 2025
beffb24
feat: 인물 엔티티에 이름 필드 추가 (#22)
komodgn Dec 22, 2025
e16a79a
feat(home): 이미지 분석 기능 추가 (#22)
komodgn Dec 22, 2025
991a9b2
refactor: ktlintFormat 적용
komodgn Dec 22, 2025
660a7fb
chore: 필요한 의존성 추가
komodgn Dec 22, 2025
8a6c843
refactor: ktlintFormat 적용
komodgn Dec 22, 2025
ca36e3e
Merge pull request #24 from komodgn/feature/#22
komodgn Dec 22, 2025
f1a521b
refactor: 기본 프롬프트 수정 ( #25 )
komodgn Dec 23, 2025
00f5db6
docs: update README.md
komodgn Dec 23, 2025
e13d967
feat: AI 서비스에 기본 응답 객체 지정 (#27)
komodgn Dec 24, 2025
f8e8cbe
refactor: 인물 도메인 모델 수정 (#27)
komodgn Dec 24, 2025
bdea5ef
refactor: 이미지 업로드 응답 객체 수정 (#27)
komodgn Dec 24, 2025
1bd58fb
feat: 인물 저장 및 조회 레포지토리 구현 (#27)
komodgn Dec 24, 2025
3c85418
fix: unexpected end of stream 오류 해결 (#27)
komodgn Dec 24, 2025
55a8226
feat: 인물 데이터 청크 단위 저장 로직 구현 (#27)
komodgn Dec 24, 2025
34a545e
refactor: 인물 도메인 모델 변경으로 인한 홈 화면 수정 (#27)
komodgn Dec 24, 2025
2e98419
feat: 인물 목록 화면 구현 및 검색 기능 추가 (#27)
komodgn Dec 24, 2025
6eb3b9b
refactor: ktlintFormat 적용 및 detekt 검사 통과 실패 해결 (#27)
komodgn Dec 24, 2025
7e60e61
Merge pull request #29 from komodgn/feature/#27
komodgn Dec 24, 2025
f736df5
fix: 인물 사진 깜빡임 해결
komodgn Dec 25, 2025
c2b9146
feat: 인물 상세 화면 구현 (#30)
komodgn Dec 25, 2025
c55aa7d
refactor: ktlintFormat
komodgn Dec 25, 2025
1628950
Merge pull request #31 from komodgn/feature/#30
komodgn Dec 25, 2025
0a222d3
docs: update README.md
komodgn Dec 25, 2025
6bffe27
feat: 분석된 인물 삭제하는 기능 추가 (#32)
komodgn Dec 26, 2025
b244d4e
fix: 자연어 검색 화면 로딩 아이콘 밀림 수정
komodgn Dec 26, 2025
842eec6
feat: 인물 엔티티에 필드 추가 (#32)
komodgn Dec 27, 2025
dfbbbfc
feat: 인물 정보 업데이트에 필요한 레포지토리 구현 (#32)
komodgn Dec 27, 2025
e4014a4
feat: 인물 정보 업데이트 기능 추가 (#32)
komodgn Dec 27, 2025
0bdfe2d
design: 홈 화면 토글 아이콘 변경
komodgn Dec 27, 2025
eef824a
feat: 홈 화면 상단 인물 목록 빈 상태 처리
komodgn Dec 27, 2025
3b27cdd
design: 자잘한 수정 포함
komodgn Dec 27, 2025
2e26117
fix: 서비스 이름 변경
komodgn Dec 27, 2025
81b4a4a
Merge pull request #37 from komodgn/feature/#32
komodgn Dec 27, 2025
207fad2
fix: 분석 요청 시점 수정 (#36) (#28)
komodgn Dec 28, 2025
a86ecc9
docs: update project dependency graph image in README.md
komodgn Dec 28, 2025
0273ce4
docs: update search section in README.md with new gif
komodgn Dec 29, 2025
2eaa82c
refactor: 포커싱 검색 좌표 전송 방식 정규화
komodgn Dec 29, 2025
56bd569
refactor: 가독성 개선을 위한 코드 위치 이동 (#39)
komodgn Dec 29, 2025
219fc4b
Merge pull request #40 from komodgn/refactor/#39
komodgn Dec 29, 2025
1fb6e69
refactor: 실기기 대응을 위한 이미지 분석 및 전송 로직 개선 (#41)
komodgn Dec 30, 2025
3fba345
refactor: 사용하지 않는 서비스 코드 제거
komodgn Dec 30, 2025
6410cbb
Merge pull request #43 from komodgn/refactor/#41
komodgn Dec 30, 2025
113b0d8
refactor: 사용하지 않는 함수 제거
komodgn Dec 30, 2025
46a6c37
feat: 인물 이름 중복 확인 다이얼로그 추가 (#46)
komodgn Dec 31, 2025
caa6748
feat: 인물 통합 기능 및 대표 사진 변경 로직 개선 (#46)
komodgn Dec 31, 2025
eddd2cd
design: 인물 삭제 확인 다이얼로그 메시지 변경
komodgn Dec 31, 2025
d302cfc
refactor: 인물 목록 및 홈 화면에 대표 사진 표시 로직 적용 (#46)
komodgn Dec 31, 2025
941be9b
chore: 미리보기 화면에 인물 삭제 확인 다이얼로그 출력
komodgn Dec 31, 2025
af5e453
Merge pull request #47 from komodgn/feature/#46
komodgn Dec 31, 2025
6735658
feat: 인물 식별자 관리를 위한 누적 인덱스(lastIndex) 저장소 구현 (#50)
komodgn Jan 2, 2026
085c141
feat: 서버 식별자(imageName) 기반 인물 매핑 로직 구현 (#50)
komodgn Jan 2, 2026
fd768ef
fix: 이미지 분석 마지막 단계에 서버-앱 인물명 동기화 추가 (#50)
komodgn Jan 2, 2026
f427a28
feat: 인물 합치기 후, 해당 인물 화면으로 이동하도록 구현 (#50)
komodgn Jan 2, 2026
a0774f3
Merge pull request #51 from komodgn/refactor/#50
komodgn Jan 2, 2026
2ec7445
feat: 기본 디자인을 적용한 공통 이미지 컴포넌트 생성 (#53)
komodgn Jan 3, 2026
5c5973e
delete: 사용하지 않는 코드 삭제
komodgn Jan 3, 2026
a6a38e4
refactor: 공통 컴포넌트 적용하여 코드 중복 제거 (#53)
komodgn Jan 3, 2026
b5c0f08
fix: optimize imports
komodgn Jan 3, 2026
2f3738e
refactor: 인물 화면에 공통 이미지 컴포넌트 적용 (#53)
komodgn Jan 3, 2026
0e08cd9
Merge pull request #54 from komodgn/feature/#53
komodgn Jan 3, 2026
535007a
docs: Enhance README with new features and sections
komodgn Jan 3, 2026
ee4c94f
docs: add Kotlin version badge to README.md
komodgn Jan 4, 2026
6440c86
fix: 파일명 기반 삭제 요청으로 수정 (#56)
komodgn Jan 4, 2026
4312063
feat: 웹 서비스에 이미지 삭제 요청 객체 추가 (#56)
komodgn Jan 4, 2026
22abae9
refactor: AI 서비스 이미지 삭제 요청에서 중복 이름 지정 제거 (#56)
komodgn Jan 4, 2026
78f0440
fix: 이미지 삭제 요청에서 파일명 다르게 처리 (#57)
komodgn Jan 4, 2026
ff381a4
Merge pull request #57 from komodgn/fix/#56
komodgn Jan 4, 2026
8b2e171
docs: enhance README.md with demo videos and features
komodgn Jan 4, 2026
586e3a8
feat: 파일명 필드 추가 및 마이그레이션 코드 작성 (#56)
komodgn Jan 6, 2026
a6a925e
fix: 무한 삭제 루프 해결 (#56)
komodgn Jan 6, 2026
3df5ee6
Merge pull request #58 from komodgn/fix/#56
komodgn Jan 6, 2026
eb4b0fe
delete: 사용하지 않는 파일 삭제
komodgn Jan 6, 2026
e007442
refactor: 인물 통합 후 페이지 이동하는 로직 제거
komodgn Jan 6, 2026
ed08373
fix: 파일 삭제로 누락된 앱 이름 추가
komodgn Jan 6, 2026
0cb9144
fix: 인물 상세 화면 내비게이션 스택 버그 해결 (#59)
komodgn Jan 6, 2026
7234b52
Merge pull request #60 from komodgn/fix/#59
komodgn Jan 6, 2026
fe39ff6
build(ci): 테스트 단계 추가 (#61)
komodgn Jan 7, 2026
9aa837c
feat: 인물 삭제 로직 병렬화 및 Dispatcher 주입 설정 (#62)
komodgn Jan 7, 2026
2b51815
test: 인물 삭제 테스트 추가 (#62)
komodgn Jan 7, 2026
a6afe5a
Merge pull request #63 from komodgn/refactor/#62
komodgn Jan 7, 2026
57d9892
feat: 구분선 공통 컴포넌트 추가 (#64)
komodgn Jan 7, 2026
25a8bf3
refactor: 공통 구분선 컴포넌트를 적용하여 중복 코드 제거 (#64)
komodgn Jan 7, 2026
35aafc7
Merge pull request #65 from komodgn/refactor/#64
komodgn Jan 7, 2026
935a8a9
feat: PersonRepository에 runSuspendCatching 적용
komodgn Jan 7, 2026
9dbbd82
chore: 포커싱 검색 문자열 리소스 추가
komodgn Jan 7, 2026
527a1e5
feat: 갤러리 이미지 모델 추가 (#66)
komodgn Jan 7, 2026
6293752
feat: GalleryPagingSource 추가 및 데이터 레이어 구현 (#66)
komodgn Jan 7, 2026
ce182f4
feat: 홈 화면 갤러리 목록에 페이징 적용 (#66)
komodgn Jan 7, 2026
1bab8ad
fix: ktlintFormat 적용
komodgn Jan 7, 2026
400a9a3
docs: update README.md (#66)
komodgn Jan 7, 2026
e4d430f
fix: 문자열 리소스 이름 수정
komodgn Jan 7, 2026
d29a32e
Merge pull request #67 from komodgn/feature/#66
komodgn Jan 7, 2026
b29a30b
feat: 전역 예외 핸들링 기능 구현 (#68)
komodgn Jan 8, 2026
ee50b73
refactor: 가독성을 위한 공통 다이얼로그 컴포넌트 속성 변경
komodgn Jan 8, 2026
14323f0
feat: 인물 삭제 기능에 예외 핸들링 적용 (#68)
komodgn Jan 8, 2026
0cf0771
chore(common): Retrofit 의존성 추가 (#68)
komodgn Jan 8, 2026
0a45bdc
Merge pull request #69 from komodgn/feature/#68
komodgn Jan 8, 2026
e382ef9
feat: SearchRepository 병렬 처리 도입 (#70)
komodgn Jan 8, 2026
2dd7354
feat: 포커싱 검색 에러 처리 개선 (#70)
komodgn Jan 8, 2026
6d9888b
feat: 자연어 검색 에러 처리 개선 (#70)
komodgn Jan 8, 2026
32a7c80
feat: 자연어 검색 정확도 개선 (#70)
komodgn Jan 8, 2026
a935434
refactor: toFile 확장 함수 위치 및 파일 이름 변경
komodgn Jan 8, 2026
fc5f171
feat: 중복 검색 방지 처리 추가 (#70)
komodgn Jan 8, 2026
9a95550
fix: ktlintFormat
komodgn Jan 8, 2026
ae08f26
Merge pull request #71 from komodgn/feature/#70
komodgn Jan 8, 2026
257a342
feat: AI 기반 이미지 설명 기능 추가 (#72)
komodgn Jan 12, 2026
886638d
delete: 필요없는 코드 삭제
komodgn Jan 12, 2026
32c7c04
Merge pull request #73 from komodgn/feature/#72
komodgn Jan 12, 2026
efab3e3
build(cd): cd 스크립트 작성 (#74)
komodgn Jan 12, 2026
bbdcadd
chore: 패키지명 변경 (#75)
komodgn Jan 12, 2026
832e3c2
chore: update .gitignore (#74)
komodgn Jan 12, 2026
985c786
chore: 버전 업데이트 v2.0.0 (#75)
komodgn Jan 12, 2026
3ae4170
Merge pull request #76 from komodgn/feature/#75
komodgn Jan 12, 2026
210cb8c
release: v2.0.0
komodgn Jan 12, 2026
4e2ff6d
Revert "release: v2.0.0"
komodgn Jan 12, 2026
e6ca0ec
Merge pull request #79 from komodgn/revert-77-main (#78)
komodgn Jan 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 15 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
root = true

[*]
charset = utf-8
indent_size = 4
indent_style = space
max_line_length = 150
insert_final_newline = true
trim_trailing_whitespace = true

[*.{kt,kts}]
ij_kotlin_allow_trailing_comma = true
ij_kotlin_allow_trailing_comma_on_call_site = true
ktlint_function_naming_ignore_when_annotated_with = Composable
ktlint_standard_filename = disabled
105 changes: 105 additions & 0 deletions .github/workflows/android-cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: Android CD

on:
push:
branches:
- main

jobs:
cd-build:

runs-on: ubuntu-latest

permissions:
contents: write

outputs:
version_tag: ${{ steps.extract_version_name.outputs.version }}
release_notes: ${{ steps.release_note_content.outputs.notes }}

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle

- name: Setup Android SDK
uses: android-actions/setup-android@v2

- name: Generate local.properties
run: echo '${{ secrets.LOCAL_PROPERTIES }}' | base64 -d > ./local.properties

- name: Generate keystore.properties
run: echo '${{ secrets.KEYSTORE_PROPERTIES }}' | base64 -d > ./keystore.properties

- name: Generate metasearch.jks
run: echo '${{ secrets.JAVA_KEY_STORE }}' | base64 -d > ./metasearch.jks

- name: Extract Version Name from libs.versions.toml
id: extract_version_name
run: |
set -euo pipefail
VERSION=$(grep "versionName" gradle/libs.versions.toml | sed -E 's/.*versionName\s*=\s*"([^"]+)".*/\1/')
if [[ -z "$VERSION" ]]; then
echo "Error: Not Found versionName" >&2
exit 1
fi
echo "version=v${VERSION}" >> "$GITHUB_OUTPUT"
echo "Version extracted from toml: v${VERSION}"

- name: Generate Simple Release Note
id: release_note_content
run: |
set -euo pipefail
RELEASE_COMMIT_SHA=$(git log -n 1 --grep="^release:" --pretty=format:%H)

if [[ -z "$RELEASE_COMMIT_SHA" ]]; then
echo "Error: 'release:' prefix commit not found." >&2
exit 1
else
NOTES=$(git log -1 --format=%b $RELEASE_COMMIT_SHA | sed -e '/^\s*$/d' -e 's/^[[:space:]]*//')
echo "Release commit SHA: $RELEASE_COMMIT_SHA"
fi

echo "notes<<EOF" >> $GITHUB_OUTPUT
echo -e "$NOTES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build Release AAB
run: ./gradlew :app:bundleRelease

- name: Upload AAB
uses: actions/upload-artifact@v4
with:
name: app-release.aab
path: app/build/outputs/bundle/release/app-release.aab
if-no-files-found: error

deploy:
needs: cd-build
runs-on: ubuntu-latest
steps:
- name: Download AAB
uses: actions/download-artifact@v4
with:
name: app-release.aab
path: app/build/outputs/bundle/release/

- name: Create Github Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.cd-build.outputs.version_tag }}
release_name: ${{ needs.cd-build.outputs.version_tag }}
body: ${{ needs.cd-build.outputs.release_notes }}
files: app/build/outputs/bundle/release/app-release.aab
generate_release_notes: true
151 changes: 151 additions & 0 deletions .github/workflows/android-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
name: Android CI

on:
pull_request:

permissions:
contents: read
pull-requests: write

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:
ci-build:

runs-on: ubuntu-latest

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

- name: Setup JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle

- name: Setup Android SDK
uses: android-actions/setup-android@v2

- name: Cache Gradle Wrapper
uses: actions/cache@v4
with:
path: ~/.gradle/wrapper
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-wrapper-

- name: Cache Build Cache
uses: actions/cache@v4
with:
path: ~/.gradle/caches/build-cache-1
key: ${{ runner.os }}-build-cache-${{ hashFiles('**/build.gradle*', '**/gradle-wrapper.properties') }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-build-cache-${{ hashFiles('**/build.gradle*', '**/gradle-wrapper.properties') }}
${{ runner.os }}-build-cache-

- name: Generate local.properties
run: echo '${{ secrets.LOCAL_PROPERTIES }}' | base64 -d > ./local.properties

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Code Style Check
id: ktlint
run: |
start=$(date +%s)
./gradlew ktlintCheck detekt --parallel
end=$(date +%s)
echo "time=$((end-start))" >> $GITHUB_OUTPUT

- name: Unit Test
id: test
run: |
start=$(date +%s)
./gradlew testDebugUnitTest --parallel
end=$(date +%s)
echo "time=$((end-start))" >> $GITHUB_OUTPUT

- name: Debug Build with Gradle
id: assemble
run: |
start=$(date +%s)
./gradlew buildDebug --stacktrace --build-cache --parallel
end=$(date +%s)
echo "time=$((end-start))" >> $GITHUB_OUTPUT

- name: Create CI summary
if: always()
uses: actions/github-script@v7
with:
script: |
const results = {
test: {
status: '${{ steps.test.outcome }}',
name: 'Unit Test',
time: '${{ steps.test.outputs.time }}'
},
assemble: {
status: '${{ steps.assemble.outcome }}',
name: 'Debug Build',
time: '${{ steps.assemble.outputs.time }}'
},
ktlint: {
status: '${{ steps.ktlint.outcome }}',
name: 'Code Style Check',
time: '${{ steps.ktlint.outputs.time }}'
}
};

const emoji = {
success: '✅',
failure: '❌',
cancelled: '⚠️',
skipped: '⏭️'
};

const runUrl = `https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`;

function formatTime(seconds) {
seconds = parseInt(seconds || 0, 10);
if (seconds >= 60) {
const min = Math.floor(seconds / 60);
const sec = seconds % 60;
return `${min}m ${sec}s`;
}
return `${seconds}s`;
}

const totalTime = Object.values(results)
.reduce((acc, step) => acc + parseInt(step.time || 0), 0);

let body = `## 🤖 Android CI Summary\n\n**Step Results:**\n`;
for (const step of Object.values(results)) {
const statusEmoji = emoji[step.status] || step.status;
const statusText = step.status === 'success' ? 'Success' : (step.status === 'failure' ? 'Failure' : 'Skipped');
body += `- **${step.name}**: ${statusEmoji} ${statusText} (${formatTime(step.time)})\n`;
}

body += `\n**Total Time:** **${formatTime(totalTime)}**\n`;

const failedSteps = Object.values(results)
.filter(step => step.status !== 'success')
.map(step => step.name);

if (failedSteps.length > 0) {
body += `\n⚠️ **Warning:** The following steps failed: **${failedSteps.join(', ')}**\n`;
body += `See the [Actions Log](${runUrl}) for details.\n`;
} else {
body += `\n🎉 All steps completed successfully!`;
}

github.rest.pulls.createReview({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
event: 'COMMENT',
body
});
11 changes: 10 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
*.iml
.gradle
/local.properties
/.idea
/.idea/caches
/.idea/libraries
/.idea/modules.xml
Expand All @@ -12,4 +12,13 @@
/captures
.externalNativeBuild
.cxx

local.properties
keystore.properties
metasearch.jks

**/*.pro

/*/build
/*/*/build
/*/*/*/build
1 change: 0 additions & 1 deletion .idea/.name

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/compiler.xml

This file was deleted.

10 changes: 0 additions & 10 deletions .idea/deploymentTargetDropDown.xml

This file was deleted.

19 changes: 0 additions & 19 deletions .idea/gradle.xml

This file was deleted.

10 changes: 0 additions & 10 deletions .idea/migrations.xml

This file was deleted.

9 changes: 0 additions & 9 deletions .idea/misc.xml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/vcs.xml

This file was deleted.

Loading