Skip to content

Conversation

@i-meant-to-be
Copy link
Contributor

@i-meant-to-be i-meant-to-be commented Aug 2, 2025

🚩 연관 이슈

closed #4

📝 작업 내용

네비게이션 기반 구현

  • 네비게이션 엔트리를 묘사할 수 있게 sealed class NavItem 구현
  • 네비게이션 호스트 MainNavHost 추가
  • 앱 진입점에 MainNavHost 추가

CI 개선

  • Slack 린팅 라이브러리 추가
  • CI 스크립트가 린팅 및 빌드까지 시도하도록 개선
  • CI 스크립트가 빌드, 린팅과 테스트를 하나의 태스크에서 실행하도록 개선
  • 린팅 결과가 GitHub Actions 아티팩트로 올라가도록 개선

그 외

  • AGP 업데이트
  • Material 3 Expressive 사용 가능하게 Jetpack Compose 버전 업

🏞️ 스크린샷 (선택)

없음

🗣️ 리뷰 요구사항 (선택)

없음

Summary by CodeRabbit

  • 신규 기능

    • 앱에 네비게이션 구조가 도입되어, 향후 여러 화면 간 이동이 가능해졌습니다.
    • 네비게이션을 위한 타입 안전 라우트 구조가 추가되었습니다.
  • 리팩터

    • 메인 화면이 정적 인사말에서 네비게이션 기반 UI로 변경되었습니다.
  • 기타

    • 빌드 도구와 라이브러리 버전이 최신으로 업데이트되었습니다.
    • 코드 품질 향상을 위한 린트 도구가 추가되었습니다.
    • CI 워크플로우에 린트 검사 및 디버그 빌드 단계가 추가되어 품질 관리가 강화되었습니다.

@i-meant-to-be i-meant-to-be self-assigned this Aug 2, 2025
@i-meant-to-be i-meant-to-be added chore 개발 외 작업 feat 새로운 기능 추가 labels Aug 2, 2025
@coderabbitai
Copy link

coderabbitai bot commented Aug 2, 2025

Warning

Rate limit exceeded

@i-meant-to-be has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 5 minutes and 4 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 59b6e26 and 96adc5d.

📒 Files selected for processing (1)
  • .github/workflows/CI.yml (1 hunks)

Walkthrough

네비게이션 기반 구조로의 전환을 위해, 기존의 정적 UI를 제거하고 Jetpack Compose Navigation을 도입했습니다. 네비게이션 아이템을 타입 세이프하게 관리하는 sealed class가 추가되었으며, 네비게이션 호스트와 관련 의존성, 빌드 설정이 반영되었습니다.

Changes

Cohort / File(s) Change Summary
빌드 및 라이브러리 버전 관리
app/build.gradle.kts, gradle/libs.versions.toml
Slack Compose Lint 체크 라이브러리 추가, AGP 및 material3 버전 명시, lint tool 버전 추가
MainActivity 리팩토링
app/src/main/java/com/debatetimer/app/MainActivity.kt
Compose UI의 Scaffold 및 Greeting 제거, 네비게이션 컨트롤러 및 MainNavHost로 초기화 방식 변경
네비게이션 호스트 추가
app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt
MainNavHost 컴포저블 신설, NavHostController로 네비게이션 구조 정의(초기 목적지: Login)
네비게이션 아이템 정의
app/src/main/java/com/debatetimer/app/navigation/NavItem.kt
NavItem sealed class 및 Home, Login 오브젝트로 네비게이션 목적지 타입 세이프하게 정의
CI 워크플로우 개선
.github/workflows/CI.yml
lint 검사 및 lint 결과 아티팩트 업로드, 디버그 빌드 추가

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant MainActivity
    participant NavController
    participant MainNavHost

    User->>MainActivity: 앱 실행
    MainActivity->>NavController: rememberNavController() 생성
    MainActivity->>MainNavHost: MainNavHost(navController)
    MainNavHost->>NavController: NavHost(startDestination=Login)
    Note right of MainNavHost: (현재 목적지는 Login, 목적지 추가 예정)
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Assessment against linked issues

Objective Addressed Explanation
네비게이션 기반 구현 (#4)

Assessment against linked issues: Out-of-scope changes

(해당 변경사항에서 요구사항과 무관한 기능적 코드 변경은 발견되지 않았습니다.)

Poem

🐇
네비게이션 길 따라 hop, hop, hop!
정적 인사 대신 화면을 swap!
Home과 Login, sealed class로 똑똑하게,
Compose와 함께 미래로 점프!
코드의 숲에서 토끼는 춤춘다—
새로운 길이 열렸구나!
🗺️✨

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/#4

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
app/src/main/java/com/debatetimer/app/navigation/NavItem.kt (1)

3-8: 네비게이션 아이템 구조가 잘 설계되었습니다.

sealed class를 사용한 타입 세이프한 네비게이션 라우트 관리가 좋습니다. 하지만 향후 확장성을 고려하여 다음과 같은 개선을 제안합니다:

 sealed class NavItem(
     val route: String,
 ) {
-    object Home : NavItem("home")
-    object Login : NavItem("login")
+    data object Home : NavItem("home")
+    data object Login : NavItem("login")
 }

data object를 사용하면 향후 인자가 있는 네비게이션 라우트 추가 시 일관성을 유지할 수 있습니다.

app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt (1)

7-7: 사용되지 않는 import를 제거해주세요.

LoginPage가 import되었지만 현재 사용되지 않고 있습니다.

-import com.debatetimer.app.ui.login.LoginPage
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 91f3f8b and d39c424.

📒 Files selected for processing (5)
  • app/build.gradle.kts (1 hunks)
  • app/src/main/java/com/debatetimer/app/MainActivity.kt (2 hunks)
  • app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt (1 hunks)
  • app/src/main/java/com/debatetimer/app/navigation/NavItem.kt (1 hunks)
  • gradle/libs.versions.toml (5 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
app/src/main/java/com/debatetimer/app/MainActivity.kt (2)
app/src/main/java/com/debatetimer/app/ui/theme/Theme.kt (1)
  • DebateTimerTheme (36-58)
app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt (1)
  • MainNavHost (9-16)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build_and_test
🔇 Additional comments (5)
gradle/libs.versions.toml (3)

3-3: AGP 버전 업데이트가 적절합니다.

8.12.0으로의 AGP 업데이트가 네비게이션 구현에 필요한 최신 기능들을 지원합니다.


12-12: 알파 버전 사용에 주의가 필요합니다.

Material 3 Expressive 컴포넌트의 알파 버전(1.5.0-alpha01)을 사용하고 있습니다. 프로덕션 환경에서는 안정성 이슈가 발생할 수 있으니 주의깊게 테스트해주세요.


21-21: Slack lint 도구 추가가 좋습니다.

Compose 관련 린트 검사를 강화하여 코드 품질 향상에 도움이 될 것입니다.

Also applies to: 48-48

app/build.gradle.kts (1)

86-86: Slack Compose 린트 체크 추가가 훌륭합니다.

Compose 코드의 품질과 일관성을 유지하는 데 도움이 될 것입니다.

app/src/main/java/com/debatetimer/app/MainActivity.kt (1)

8-9: 네비게이션 기반 구조로의 전환이 훌륭합니다.

기존 정적 UI에서 네비게이션 기반 구조로의 전환이 깔끔하게 구현되었습니다. rememberNavController()를 적절히 사용하고 MainNavHost에 올바르게 전달하고 있습니다.

Also applies to: 23-23, 26-26

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
.github/workflows/CI.yml (2)

30-35: Gradle 작업을 하나의 인보케이션으로 묶어 빌드-시간 최적화 제안

./gradlew test, ./gradlew lintDebug, ./gradlew assembleDebug 를 개별 호출하면
각 호출마다 Gradle configuration phase가 반복되어 CI 시간이 불필요하게 늘어납니다.

-      - name: Run Unit Tests
-        run: ./gradlew test
-
-      - name: Run lint checks
-        run: ./gradlew lintDebug
-
-      - name: Build the project
-        run: ./gradlew assembleDebug
+      - name: Run tests, lint, and build in one invocation
+        run: ./gradlew test lintDebug assembleDebug

이렇게 묶으면 캐시 재사용률이 높아지고 단계 수도 줄어듭니다.
필요 시 --continue 또는 -Pandroid.testInstrumentationRunnerArguments.notRunIgnoredTests=true 등을 추가해 실패 처리 정책을 조정할 수 있습니다.


43-44: assembleDebug 결과물을 활용하지 않음

assembleDebug 로 빌드한 APK/ AAB 가 워크플로 내에서 사용되거나 업로드되지 않습니다.
CI 시간만 증가시키고 가치가 없으므로 다음 중 하나를 고려하세요.

  • APK/AAB 를 actions/upload-artifact 로 업로드해 QA 다운로드용으로 활용
  • 필요 없다면 assembleDebug 단계 제거

작업 목적을 명확히 해 주세요.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d39c424 and 6a5901c.

📒 Files selected for processing (2)
  • .github/workflows/CI.yml (1 hunks)
  • app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: i-meant-to-be
PR: debate-timer/debate-timer-fe-android#11
File: app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt:10-14
Timestamp: 2025-08-02T07:20:07.945Z
Learning: In the debate-timer Android project, navigation destinations in MainNavHost.kt are being added incrementally during development, so an empty NavHost block in early stages is intentional and acceptable.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build_and_test
🔇 Additional comments (1)
.github/workflows/CI.yml (1)

36-42: Lint 리포트 업로드 경로 및 포맷 검증 필요

현재는 XML 파일 하나만 업로드하고 있습니다.

  1. lint-results-debug.xml 은 문제 없이 생성되는지 확인하세요.
    AGP 8.x부터 기본 경로가 lint-results-debug.xmllint-results-debug.xml 로 유지되지만, 빌드 스크립트에서 lint { xmlReport = false } 로 꺼두면 파일이 없습니다.
  2. 리뷰 편의를 위해 HTML 리포트(app/build/reports/lint-results-debug.html) 또는 전체 디렉터리(app/build/reports/) 업로드가 더 유용할 수 있습니다.
-          path: app/build/reports/lint-results-debug.xml
+          path: app/build/reports/lint-results-debug.*
# 또는
+#         path: app/build/reports/

리포트가 누락되면 업로드 단계가 실패하지 않고 빈 아티팩트가 생성되므로, 실제 파일 존재 여부를 한 번 더 점검하는 것이 좋습니다.

@i-meant-to-be i-meant-to-be changed the title [FEAT] 네비게이션 기반 구현 [FEAT] 네비게이션 기반 구현 및 CI 개선 Aug 2, 2025
@i-meant-to-be i-meant-to-be merged commit df522cb into develop Aug 2, 2025
2 checks passed
@i-meant-to-be i-meant-to-be deleted the feat/#4 branch August 2, 2025 07:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore 개발 외 작업 feat 새로운 기능 추가

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] 네비게이션 기반 구현

2 participants