Conversation
Walkthrough이 변경사항은 프로젝트의 빌드 및 코드 품질 관리를 위한 기본 설정을 도입합니다. 버전 카탈로그, 컨벤션 플러그인, CI 워크플로우, 코드 스타일 및 정적 분석 도구(ktlint, detekt) 구성이 포함되어 있으며, 일부 예제 테스트 파일이 제거되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant Developer
participant GitHub Actions
participant Gradle
participant Detekt/Ktlint
Developer->>GitHub Actions: PR 생성 또는 업데이트
GitHub Actions->>Gradle: 프로젝트 체크아웃, JDK/SDK 설정
GitHub Actions->>Gradle: Gradle 빌드 및 의존성 캐시 구성
GitHub Actions->>Detekt/Ktlint: 코드 스타일 및 정적 분석 실행
Detekt/Ktlint-->>GitHub Actions: 분석 결과 반환
GitHub Actions->>Gradle: Debug 빌드 실행
Gradle-->>GitHub Actions: 빌드 결과 반환
Assessment against linked issues
Assessment against linked issues: Out-of-scope changes
Poem
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 10
♻️ Duplicate comments (1)
build-logic/src/main/java/AndroidLibraryComposeConventionPlugin.kt (1)
1-8: 패키지 선언 누락
루트 패키지 사용 문제는 앞서 언급한 내용과 동일합니다. 동일한 방식으로 수정 필요합니다.
🧹 Nitpick comments (8)
build-logic/src/main/java/AndroidFeatureConventionPlugin.kt (1)
15-17: 빈dependencies {}블록 제거 권장현재 블록 안에 선언이 없으므로 Gradle 스크립트 가독성 관점에서 삭제하는 편이 좋습니다.
- dependencies { - - }build-logic/src/main/java/com/ninecraft/booket/convention/Compose.kt (1)
14-19: Compose 빌드 기능 활성화 누락의존성만 추가되고
buildFeatures.compose = true및composeOptions.kotlinCompilerExtensionVersion설정이 보이지 않습니다. 다른 곳에서 설정한다면 무시해도 되지만, 이 함수에서 함께 처리하면 일관성이 높아집니다.extension.apply { + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = libs.versions.androidx.compose.compiler.get() + } dependencies {build-logic/src/main/java/com/ninecraft/booket/convention/Extentions.kt (1)
1-13: 타이포: ‘Extentions’ → ‘Extensions’
파일명과 클래스명(없지만) 모두 오타가 있습니다. 팀원 검색성과 IDE 자동완성을 위해 올바른 철자로 교정하는 것이 좋습니다.-// 파일명: Extentions.kt +// 파일명: Extensions.ktbuild-logic/src/main/java/JvmLibraryConventionPlugin.kt (1)
30-33: 정적 분석 플러그인 의존성 스코프 검토
detekt-formatting의존성을implementation으로 두면 라이브러리 소비자에게도 전달될 수 있습니다. 빌드 전용 도구이므로detektPlugins(AGP 8) 또는configurations.detektPlugins(stand-alone) 스코프 사용을 검토해 주세요.build.gradle.kts (1)
20-24: 플러그인 자동 적용 조건식 개선 제안
excludeModules?.split(",")?.contains(project.name) != true는 가독성이 떨어집니다.if (excludeModules ?.split(',') ?.contains(project.name) .not() == true) { ... }혹은 별도 헬퍼 함수로 추출하면 의도가 더 명확해집니다.
build-logic/build.gradle.kts (2)
13-13: 버전 카탈로그 JAR 주입 방식 확인 필요
implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))구문은
libs객체가 위치한 런타임 JAR를 classpath에 넣는 통상적인 패턴이지만,
libs가org.gradle.accessors.dm.LibrariesForLibs의 동적 프록시인 경우superclass가null일 수 있습니다.
Gradle 8.x 에서는libs.javaClass.protectionDomain.codeSource.location만으로도 충분하니 간단히 바꿀 수 있는지 검토 바랍니다.
45-52: 확장 함수의 가시성 범위 제한 권장
NamedDomainObjectContainer<PluginDeclaration>.pluginRegister는 빌드 스크립트 전역에 공개됩니다.
build-logic모듈 내부 전용 유틸이므로private fun또는internal fun으로 한정하면
오용을 방지하고 오토컴플리션 잡음을 줄일 수 있습니다.-fun NamedDomainObjectContainer<PluginDeclaration>.pluginRegister(...) +private fun NamedDomainObjectContainer<PluginDeclaration>.pluginRegister(...)build-logic/src/main/java/com/ninecraft/booket/convention/Dependencies.kt (1)
6-40: 경량 인라인 함수로 변경해 오버헤드 최소화모든 의존성 추가 함수는 단순 위임만 수행하므로
inline키워드를 붙이면 람다 캡쳐 비용이 제거됩니다.-fun DependencyHandler.implementation(dependencyNotation: Any): Dependency? { - return add("implementation", dependencyNotation) -} +inline fun DependencyHandler.implementation(dependencyNotation: Any) = + add("implementation", dependencyNotation)다른 함수들도 동일하게 적용하면 코드가 짧아지고 퍼포먼스도 미세하게 개선됩니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (23)
.editorconfig(1 hunks).github/workflows/android-ci.yml(1 hunks)app/build.gradle.kts(3 hunks)build-logic/build.gradle.kts(1 hunks)build-logic/settings.gradle.kts(1 hunks)build-logic/src/main/java/AndroidApplicationComposeConvention.kt(1 hunks)build-logic/src/main/java/AndroidApplicationConventionPlugin.kt(1 hunks)build-logic/src/main/java/AndroidFeatureConventionPlugin.kt(1 hunks)build-logic/src/main/java/AndroidHiltConventionPlugin.kt(1 hunks)build-logic/src/main/java/AndroidLibraryComposeConventionPlugin.kt(1 hunks)build-logic/src/main/java/AndroidLibraryConventionPlugin.kt(1 hunks)build-logic/src/main/java/JvmLibraryConventionPlugin.kt(1 hunks)build-logic/src/main/java/KotlinLibrarySerializationConventionPlugin.kt(1 hunks)build-logic/src/main/java/com/ninecraft/booket/convention/Android.kt(1 hunks)build-logic/src/main/java/com/ninecraft/booket/convention/ApplicationConstants.kt(1 hunks)build-logic/src/main/java/com/ninecraft/booket/convention/Compose.kt(1 hunks)build-logic/src/main/java/com/ninecraft/booket/convention/Dependencies.kt(1 hunks)build-logic/src/main/java/com/ninecraft/booket/convention/Extentions.kt(1 hunks)build-logic/src/main/java/com/ninecraft/booket/convention/Plugins.kt(1 hunks)build.gradle.kts(1 hunks)detekt-config.yml(1 hunks)gradle/libs.versions.toml(1 hunks)settings.gradle.kts(1 hunks)
🧰 Additional context used
🪛 actionlint (1.7.7)
.github/workflows/android-ci.yml
25-25: the runner of "actions/setup-java@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue
(action)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: ci-build
🔇 Additional comments (30)
.editorconfig (3)
1-1: 루트 설정(root = true) 활성화 확인
최상위 디렉터리에서.editorconfig가 적용되도록root = true가 올바르게 설정되었습니다.
3-10: 일반 코딩 스타일 규칙 검토
UTF-8 인코딩, 4칸 스페이스, 최대 150자 라인 길이, 파일 말미 개행 및 트레일링 공백 제거 등 주요 형식 규칙이 Detekt/Ktlint 설정과 일관됩니다.
11-13: Kotlin 파일 전용 설정 확인
Kotlin(*.kt,*.kts)에서 콤마 트레일링 허용 설정이 Detekt 포맷팅 규칙과 상호 보완적으로 구성되었습니다.build-logic/src/main/java/com/ninecraft/booket/convention/ApplicationConstants.kt (2)
1-4: 패키지 및 임포트 구조 적절
com.ninecraft.booket.convention패키지와JavaVersion임포트가 명확하며 convention 플러그인 사용과 일관됩니다.
5-13: 버전 및 SDK 상수 중앙화
SDK 버전, 애플리케이션 버전, Java 버전 상수가 한곳에 모여 있어 모든 convention 플러그인에서 일관되게 참조할 수 있습니다.detekt-config.yml (5)
1-14: 복잡도 규칙 설정 검토
LongMethod,CyclomaticComplexMethod임계값과@Composable무시 규칙이 적절하게 구성되어 있습니다.
15-18: 성능 규칙 설정 검토
SpreadOperator비활성화는 성능에 민감한 코드에서 의도치 않은 오버헤드를 방지합니다.
19-51: 포맷팅 및 스타일 규칙 검토
TrailingCommaOnCallSite/DeclarationSite활성화와 불필요한 규칙 비활성화(ImportOrdering 등)가.editorconfig와 잘 호환됩니다.
52-70: 스타일 검사 규칙 적절성
MagicNumber비활성화,UnusedPrivateMember예외 지정 등 실무 요구사항에 맞게 조정되었습니다.
71-82: 네이밍 규칙 설정 검토
상수, 패키지, 함수 네이밍 패턴이 프로젝트 표준에 부합하며 Detekt 자동 검증을 지원합니다.build-logic/settings.gradle.kts (3)
1-6: 의존성 리포지토리 설정 검토
Google, Maven Central, Gradle Plugin Portal이 모두 포함되어 외부 플러그인 및 라이브러리 해석에 필요한 저장소가 확보되었습니다.
7-11: 버전 카탈로그 정의 검토
libs카탈로그가../gradle/libs.versions.toml을 참조하도록 정확히 구성되어 있습니다.
14-14: 프로젝트 명 지정 확인
rootProject.name = "build-logic"으로 명확한 프로젝트 식별이 가능합니다.settings.gradle.kts (3)
1-1:TYPESAFE_PROJECT_ACCESSORS기능 활성화
타입 세이프 액세서블 프로젝트 기능을 활성화하여 버전 카탈로그 의존성 사용 시 IDE 지원이 향상됩니다.
4-4:build-logic모듈 포함 검토
includeBuild("build-logic")로 convention 플러그인 빌드 로직을 메인 빌드에 통합했습니다.
6-8: 플러그인 리포지토리 설정 검토
google(),mavenCentral(),gradlePluginPortal()순서가 표준 관례에 부합하며 정상 동작을 보장합니다.build-logic/src/main/java/AndroidFeatureConventionPlugin.kt (1)
9-13: 적절한 플러그인 합성👍라이브러리·Hilt·Compose 세 플러그인을 한 번에 적용하도록 합성한 접근은 모듈 적용 시 실수를 줄이고, 설정 일관성을 보장합니다.
build-logic/src/main/java/AndroidLibraryConventionPlugin.kt (2)
12-15: 플러그인 ID 상수화로 오타 위험 감소👍
Plugins.ANDROID_LIBRARY,Plugins.KOTLIN_ANDROID상수 사용으로 문자열 오타를 방지하고 IDE 자동완성 이점을 살렸습니다.
17-19:configureAndroid호출 위치 적절
LibraryExtension에 대한 설정을 한곳에 모으는 패턴이 잘 유지되고 있습니다. 추가 설정이 필요할 때도 이 위치만 보면 되므로 유지보수성이 높습니다.build-logic/src/main/java/AndroidApplicationConventionPlugin.kt (1)
21-25:applicationId누락 가능성 확인 요청
defaultConfig에서targetSdk,versionName,versionCode만 설정되어 있습니다.applicationId는 각 애플리케이션 모듈에서 별도로 지정한다는 가정이지만, 실수로 빠지면 빌드 실패가 발생합니다.
필요 시 다음과 같이 추가를 고려해 주세요.defaultConfig { applicationId = ApplicationConstants.applicationId }build-logic/src/main/java/AndroidApplicationComposeConvention.kt (1)
12-18: Kotlin Android 플러그인 미적용 여부 확인
applyPlugins에Plugins.ANDROID_APPLICATION만 전달되고Plugins.KOTLIN_ANDROID는 누락되었습니다. 만약 상위(또는 별도) convention plugin에서 이미 Kotlin Android가 적용된다면 문제없지만, 그렇지 않을 경우 Compose 모듈에서 Kotlin 소스가 컴파일되지 않습니다. 적용 스택을 다시 한 번 점검해주세요.build-logic/src/main/java/KotlinLibrarySerializationConventionPlugin.kt (1)
12-18: Kotlin 플러그인 선행 적용 확인 필요
KOTLINX_SERIALIZATION플러그인은 Kotlin JVM/Multiplatform 플러그인 이후에 적용되어야 정상 작동합니다. 본 convention plugin을 단독으로 사용한다면 컴파일 에러가 발생할 수 있으므로, 사용처에서 Kotlin 플러그인이 먼저 적용되는지 검증 바랍니다.build-logic/src/main/java/AndroidLibraryComposeConventionPlugin.kt (1)
12-18: Kotlin Android 적용 여부 재확인
라이브러리 모듈도 Compose를 사용하려면org.jetbrains.kotlin.android플러그인이 필요합니다. 적용 순서를 다시 확인해 주세요.build-logic/src/main/java/com/ninecraft/booket/convention/Plugins.kt (1)
3-16: 플러그인 ID 상수화 👍
중앙 집중식으로 플러그인 ID를 관리하는 접근은 유지보수성과 오타 방지를 모두 향상시킵니다. 추가적으로 enum class로 감싸거나 Gradle Version Catalog의 alias와 1:1로 매핑하는 헬퍼를 두면 IDE-level 자동완성이 더 풍부해질 수 있으니 참고만 해주세요.build-logic/src/main/java/com/ninecraft/booket/convention/Android.kt (1)
22-24: JVM Toolchain 버전 상수화 👍
jvmToolchain(ApplicationConstants.javaVersionInt)로 툴체인을 고정한 점 좋습니다. 다만 하위 모듈에서 중복 설정되지 않도록 convention 플러그인 레벨에서 한 번만 호출되는지 확인 바랍니다..github/workflows/android-ci.yml (1)
46-47: Gradle Task 명칭 확인 필요
buildDebug태스크는 일반적으로 존재하지 않습니다. 보통assembleDebug혹은build입니다. CI 실패 가능성을 방지하려면 태스크명을 재확인해 주세요.app/build.gradle.kts (2)
2-5: 컨벤션 플러그인 적용 확인 완료
booket프리픽스의 커스텀 플러그인으로 교체되어 모듈 설정이 간결해졌습니다. 별다른 문제점 없이 동작할 것으로 보입니다.
30-40: Compose BOM 사용 👍
Compose 의존성을 BOM + 개별 라이브러리 조합으로 선언하여 버전 일관성을 확보한 점 우수합니다.build-logic/src/main/java/com/ninecraft/booket/convention/Dependencies.kt (1)
42-52:project()확장 함수 이름 충돌 주의Gradle 기본 DSL에도
DependencyHandler.project(map)오버로드가 존재합니다.
같은 시그니처(매개변수 타입만 다름)의 확장 함수를 추가하면 타입 추론 상황에 따라 모호성 오류가 날 수 있습니다.
안전하게projectDependency()같이 별도 네이밍을 사용하는 방안을 고려해 주세요.gradle/libs.versions.toml (1)
15-17: Compose BOM 버전 확인 필요
androidx-compose-bom = "2025.06.00"은 아직 공식 릴리스되지 않은 미래 버전으로 보입니다.
실제 사용 가능한 안정 버전인지 확인 후, 존재하지 않을 경우 최신 안정 BOM으로 교체해 주세요.
| dependencies { | ||
| implementation(libs.hilt.android) | ||
| ksp(libs.hilt.compiler) | ||
| } |
There was a problem hiding this comment.
🛠️ Refactor suggestion
테스트 소스셋용 KSP/의존성 추가 검토
Hilt 컴파일러가 androidTest·test 소스셋에서도 필요할 수 있습니다. 누락 시 테스트 코드 내 @HiltAndroidTest 등이 실패합니다.
dependencies {
implementation(libs.hilt.android)
- ksp(libs.hilt.compiler)
+ ksp(libs.hilt.compiler)
+ kspAndroidTest(libs.hilt.compiler)
+ kspTest(libs.hilt.compiler)
}🤖 Prompt for AI Agents
In build-logic/src/main/java/AndroidHiltConventionPlugin.kt around lines 18 to
21, the current dependencies only include Hilt for the main source set. To fix
the issue, add the Hilt compiler KSP and Hilt Android implementation
dependencies also to the `androidTest` and `test` source sets to ensure
annotations like @HiltAndroidTest work correctly in test code.
| import com.android.build.api.dsl.ApplicationExtension | ||
| import com.ninecraft.booket.convention.Plugins | ||
| import com.ninecraft.booket.convention.applyPlugins | ||
| import com.ninecraft.booket.convention.configureCompose | ||
| import org.gradle.api.Plugin | ||
| import org.gradle.api.Project | ||
| import org.gradle.kotlin.dsl.configure | ||
|
|
There was a problem hiding this comment.
🛠️ Refactor suggestion
패키지 선언 누락 – 기본 패키지 사용은 피해주세요
현재 파일에 package 선언이 없습니다. 기본 패키지(루트 패키지)에 클래스를 두면 Gradle plugin ID 매핑·리플렉션 시 FQN 충돌 가능성이 높고, 다른 convention 파일과도 구조적으로 일관성이 떨어집니다. 모든 plugin 클래스는 명시적 패키지(예: com.ninecraft.booket.convention) 아래에 두는 것이 안전합니다.
+package com.ninecraft.booket.convention
+
import com.android.build.api.dsl.ApplicationExtension
...🤖 Prompt for AI Agents
In build-logic/src/main/java/AndroidApplicationComposeConvention.kt at the top
of the file before imports, add an explicit package declaration such as 'package
com.ninecraft.booket.convention' to avoid using the default root package. This
ensures proper Gradle plugin ID mapping, prevents FQN conflicts, and maintains
structural consistency with other convention files.
| import com.ninecraft.booket.convention.Plugins | ||
| import com.ninecraft.booket.convention.applyPlugins | ||
| import com.ninecraft.booket.convention.implementation | ||
| import com.ninecraft.booket.convention.libs | ||
| import org.gradle.api.Plugin | ||
| import org.gradle.api.Project | ||
| import org.gradle.kotlin.dsl.dependencies | ||
|
|
There was a problem hiding this comment.
🛠️ Refactor suggestion
패키지 선언 누락
이 파일도 루트 패키지에 위치해 있습니다. 다른 convention 플러그인과 동일한 패키지 네이밍을 적용해 주세요.
🤖 Prompt for AI Agents
In build-logic/src/main/java/KotlinLibrarySerializationConventionPlugin.kt at
the top of the file before the imports, add the appropriate package declaration
matching the root package used by other convention plugins to ensure consistent
package naming across the project.
| import com.ninecraft.booket.convention.ApplicationConstants | ||
| import com.ninecraft.booket.convention.Plugins | ||
| import com.ninecraft.booket.convention.applyPlugins | ||
| import com.ninecraft.booket.convention.implementation | ||
| import com.ninecraft.booket.convention.libs | ||
| import org.gradle.api.Plugin | ||
| import org.gradle.api.Project | ||
| import org.gradle.api.plugins.JavaPluginExtension |
There was a problem hiding this comment.
🛠️ Refactor suggestion
패키지 선언 누락
다른 convention 플러그인들과 동일한 패키지로 이동해 주세요.
🤖 Prompt for AI Agents
In build-logic/src/main/java/JvmLibraryConventionPlugin.kt at the top of the
file (lines 1 to 8), add the appropriate package declaration to match the
package used by other convention plugins. This involves inserting the correct
package statement before the import statements to ensure consistency and proper
organization within the project.
| dependencies { | ||
| detektPlugins(libs.detekt.formatting) | ||
| } |
There was a problem hiding this comment.
libs 접근자가 빌드 로직 자바(코틀린) 소스에서 바로 사용 불가
libs.detekt.formatting 은 스크립트(예: build.gradle.kts)에서는 자동 생성되지만, 자바/코틀린 소스에는 주입되지 않아 컴파일 오류가 납니다.
- dependencies {
- detektPlugins(libs.detekt.formatting)
- }
+ dependencies {
+ val libs = extensions
+ .getByType(org.gradle.accessors.dm.LibrariesForLibs::class.java)
+ add("detektPlugins", libs.getLibrary("detekt-formatting").get())
+ }또는 VersionCatalogsExtension 을 통해 named("libs") 로 접근해 주세요.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| dependencies { | |
| detektPlugins(libs.detekt.formatting) | |
| } | |
| dependencies { | |
| val libs = extensions | |
| .getByType(org.gradle.accessors.dm.LibrariesForLibs::class.java) | |
| add("detektPlugins", libs.getLibrary("detekt-formatting").get()) | |
| } |
🤖 Prompt for AI Agents
In build-logic/src/main/java/com/ninecraft/booket/convention/Android.kt around
lines 26 to 28, the direct usage of libs.detekt.formatting causes a compile
error because the libs accessor is not injected into Java/Kotlin build logic
sources. To fix this, retrieve the version catalog via the
VersionCatalogsExtension using named("libs") and then access the
detekt.formatting dependency from it before passing it to detektPlugins.
| toolVersion = libs.versions.kotlin.detekt.get() | ||
| config.setFrom(files("$rootDir/detekt-config.yml")) | ||
| } | ||
|
|
||
| extensions.configure<KtlintExtension> { | ||
| version.set(rootProject.libs.versions.kotlin.ktlint.source.get()) | ||
| android.set(true) | ||
| verbose.set(true) | ||
| } |
There was a problem hiding this comment.
Version Catalog 경로 오타로 인한 컴파일 오류
libs.versions.kotlin.ktlint.source.get() 와 kotlin.detekt 는 기본적으로 생성되지 않는 accessor 경로입니다.
- toolVersion = libs.versions.kotlin.detekt.get()
+ toolVersion = libs.versions.detekt.get()
- version.set(rootProject.libs.versions.kotlin.ktlint.source.get())
+ version.set(rootProject.libs.versions.ktlint.get())libs.versions.<version-name> 형태로만 접근 가능하니 catalog toml 의 키 이름과 맞춰 수정해 주세요.
🤖 Prompt for AI Agents
In build.gradle.kts around lines 30 to 38, the version catalog accessors for
ktlint and detekt are incorrectly referenced as
libs.versions.kotlin.ktlint.source.get() and libs.versions.kotlin.detekt.get(),
which do not exist. To fix this, update these references to match the exact keys
defined in the version catalog toml file, using the format
libs.versions.<version-name>.get() where <version-name> corresponds to the key
name in the catalog.
| val conventionPluginClasses = listOf( | ||
| "android.application" to "AndroidApplicationConventionPlugin", | ||
| "android.application.compose" to "AndroidApplicationComposeConventionPlugin", | ||
| "android.library" to "AndroidLibraryConventionPlugin", | ||
| "android.library.compose" to "AndroidLibraryComposeConventionPlugin", | ||
| "android.feature" to "AndroidFeatureConventionPlugin", | ||
| "android.hilt" to "AndroidHiltConventionPlugin", | ||
| "jvm-library" to "JvmLibraryConventionPlugin", | ||
| "kotlin-library-serialization" to "KotlinLibrarySerializationConventionPlugin", | ||
| ) |
There was a problem hiding this comment.
플러그인 구현 클래스는 FQCN(풀 패키지 경로)로 지정해야 합니다
implementationClass에는 패키지명이 포함된 완전한 클래스명을 써야 Gradle Plugin-Classpath에서 올바르게 찾아집니다.
현재 "AndroidApplicationConventionPlugin" 등 단순 클래스명만 전달하여, 패키지를 가진 실제 클래스(com.ninecraft.booket.convention.AndroidApplicationConventionPlugin 등)를 찾지 못해 플러그인 로딩 실패가 발생할 수 있습니다.
- "android.application" to "AndroidApplicationConventionPlugin",
+ "android.application" to "com.ninecraft.booket.convention.AndroidApplicationConventionPlugin",같은 방식으로 목록 전반을 수정해 주세요.
🤖 Prompt for AI Agents
In build-logic/build.gradle.kts around lines 17 to 26, the plugin implementation
class names are specified without their full package paths, which causes Gradle
to fail to locate them. Update each class name in the conventionPluginClasses
list to use the fully qualified class name (including the package), such as
"com.ninecraft.booket.convention.AndroidApplicationConventionPlugin" instead of
just "AndroidApplicationConventionPlugin", for all entries to ensure proper
plugin loading.
| hilt = "2.56.2" | ||
| hilt-compiler = "2.51" | ||
| hilt-navigation-compose = "1.2.0" |
There was a problem hiding this comment.
Hilt 런타임-컴파일러 버전 불일치
hilt = "2.56.2" vs hilt-compiler = "2.51" 로 선언되어 있습니다.
Hilt는 런타임·컴파일러 동일 버전을 요구하므로 빌드 시
AGP : Found version mismatch 오류가 발생할 가능성이 큽니다.
두 항목을 동일한 최신 버전으로 맞춰 주세요.
🤖 Prompt for AI Agents
In gradle/libs.versions.toml around lines 31 to 33, the versions for hilt and
hilt-compiler are mismatched (2.56.2 vs 2.51), which can cause build errors.
Update the hilt-compiler version to match the hilt version by setting both to
the same latest version, for example, both to 2.56.2.
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (1)
.coderabbit.yaml(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: ci-build
🔇 Additional comments (3)
.coderabbit.yaml (3)
1-2: 언어 및 얼리 액세스 설정이 스키마를 준수합니다.
language: "ko-KR"와early_access: false모두 유효한 ISO 코드 및 불리언 값으로 올바르게 설정되었습니다.
10-12: 자동 리뷰 설정이 스키마에 부합합니다.
auto_review.enabled: true및auto_review.drafts: false설정이 올바르게 구성되었습니다.
13-15: 채팅 자동 응답 설정이 스키마에 부합합니다.
chat.auto_reply: true로 자동 응답이 활성화되어 있습니다.
| reviews: | ||
| profile: "assertive" | ||
| request_changes_workflow: true | ||
| high_level_summary: true | ||
| poem: false | ||
| review_status: true | ||
| collapse_walkthrough: true |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
리뷰 섹션 기본 설정은 유효하지만, commit_status 명시를 권장합니다.
현재 reviews 아래 commit_status가 빠져있어 기본값(true)이 적용됩니다. CI 파이프라인 상태 관리를 명확히 하기 위해 commit_status: true를 추가하는 것을 고려해 보세요.
🤖 Prompt for AI Agents
In the .coderabbit.yaml file around lines 3 to 9, the reviews section is missing
the explicit commit_status setting. To clearly manage CI pipeline status, add
the line commit_status: true under the reviews section to explicitly enable
commit status reporting instead of relying on the default value.
There was a problem hiding this comment.
Actionable comments posted: 6
♻️ Duplicate comments (1)
gradle/libs.versions.toml (1)
20-22: 크리티컬: KSP 버전 호환성 불일치
Kotlin2.1.21에 대응하는 KSP 버전은2.1.21-1.0.21형식이어야 합니다. 현재2.1.21-2.0.1로 지정되어 있어 호환 경고가 발생할 수 있습니다.-[versions] -ksp = "2.1.21-2.0.1" +ksp = "2.1.21-1.0.21"
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (9)
.github/workflows/android-ci.yml(1 hunks)app/src/androidTest/java/com/ninecraft/booket/ExampleInstrumentedTest.kt(0 hunks)app/src/main/kotlin/com/ninecraft/booket/MainActivity.kt(2 hunks)app/src/main/kotlin/com/ninecraft/booket/ui/theme/Color.kt(1 hunks)app/src/main/kotlin/com/ninecraft/booket/ui/theme/Theme.kt(2 hunks)app/src/main/kotlin/com/ninecraft/booket/ui/theme/Type.kt(1 hunks)app/src/test/java/com/ninecraft/booket/ExampleUnitTest.kt(0 hunks)build-logic/src/main/java/AndroidApplicationComposeConventionPlugin.kt(1 hunks)gradle/libs.versions.toml(1 hunks)
💤 Files with no reviewable changes (2)
- app/src/androidTest/java/com/ninecraft/booket/ExampleInstrumentedTest.kt
- app/src/test/java/com/ninecraft/booket/ExampleUnitTest.kt
🧰 Additional context used
🪛 YAMLlint (1.37.1)
.github/workflows/android-ci.yml
[warning] 7-7: truthy value should be one of [false, true]
(truthy)
[error] 21-21: too many spaces after hyphen
(hyphens)
[error] 24-24: too many spaces after hyphen
(hyphens)
[error] 30-30: too many spaces after hyphen
(hyphens)
[error] 33-33: too many spaces after hyphen
(hyphens)
[error] 38-38: too many spaces after hyphen
(hyphens)
[error] 42-42: too many spaces after hyphen
(hyphens)
[error] 46-46: too many spaces after hyphen
(hyphens)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: ci-build
🔇 Additional comments (18)
app/src/main/kotlin/com/ninecraft/booket/MainActivity.kt (2)
25-25: 트레일링 콤마 적용으로 일관된 코드 스타일 유지
.editorconfig에 정의된 Kotlin 콜 사이트 트레일링 콤마 규칙이 잘 반영되었습니다.
37-37: 트레일링 콤마 적용으로 일관된 코드 스타일 유지
Text컴포저블 호출에서도 동일하게 트레일링 콤마가 적용되어 코드 스타일이 일관됩니다..github/workflows/android-ci.yml (1)
10-12: Concurrency 그룹 키에 슬래시가 포함될 수 있습니다.
${{ github.ref }}는refs/heads/feature/foo형태여서/가 그대로 들어가면 실행이 병렬 그룹화되지 않을 수 있습니다.
보통github.ref_name(브랜치명) 이나github.sha를 사용하거나,replace함수로 슬래시를 제거합니다.group: build-${{ github.ref_name }}app/src/main/kotlin/com/ninecraft/booket/ui/theme/Color.kt (1)
11-12: 마지막 개행 추가 👍Ktlint 규칙 준수를 위해 EOF 개행을 넣은 변경 사항 확인했습니다.
app/src/main/kotlin/com/ninecraft/booket/ui/theme/Theme.kt (1)
41-57: Trailing comma 적용 확인 완료호출부와 선언부 모두 trailing comma 규칙을 일관성 있게 반영했습니다.
build-logic/src/main/java/AndroidApplicationComposeConventionPlugin.kt (1)
9-21: 잘못된 glob 옵션으로 인해 properties 파일을 찾지 못했습니다. 다음 스크립트로build-logic모듈의 플러그인 등록 파일 존재 여부를 다시 확인해주세요.#!/bin/bash # build-logic 모듈의 META-INF/gradle-plugins 경로 확인 및 implementation-class 검색 PLUGIN_DIR="build-logic/src/main/resources/META-INF/gradle-plugins" if [ -d "$PLUGIN_DIR" ]; then find "$PLUGIN_DIR" -type f -name "*.properties" -print -exec grep -H "implementation-class" {} \; else echo "경로가 존재하지 않습니다: $PLUGIN_DIR" figradle/libs.versions.toml (12)
2-14: 라이브러리 버전(AGP 및 AndroidX) 선언 확인
이 구간의 Android Gradle Plugin 및 AndroidX 버전 선언은 최신이고 일관성이 있습니다.
17-18: 코일 컴포즈 버전 선언 검토
coil-compose버전이 최신이며 의도대로 설정되었습니다.
23-29: 코틀린 코루틴 및 시리얼라이제이션 버전 선언 검토
kotlin,kotlinx-coroutines,kotlinx-serialization-json,kotlinx-datetime,kotlinx-collections-immutable버전이 적절히 지정되어 있습니다.
30-37: Hilt 및 네트워크 라이브러리 버전 선언 검토
Hilt(hilt,hilt-navigation-compose)와 네트워크(okhttp,retrofit) 버전이 일관되게 지정되어 있습니다.
38-40: 로깅 라이브러리 버전 선언 검토
logger버전이 최신이며 문제 없습니다.
42-46: 확장 라이브러리 버전 선언 검토
gradle-dependency-handler-extensions및compose-extensions버전이 올바르게 설정되었습니다.
47-50: 정적 분석 도구 버전 선언 검토
detekt,ktlint관련 버전 선언이 적절하며, Detekt와 Ktlint 플러그인에서 사용됩니다.
52-54: 테스트 라이브러리 버전 선언 검토
junit및androidx-junit버전이 올바르게 지정되어 있습니다.
57-95: 모듈별 라이브러리 종속성 선언 검토
androidx-core-ktx,androidx-compose-*,hilt-*,retrofit-*,kotlinx-*,detekt-formatting등 모든 라이브러리가 버전 카탈로그에 맞게 정확히 선언되었습니다.
100-114: 플러그인 알리아스 선언 검토
android-application,android-library,kotlin-android등 Gradle 및 Kotlin 플러그인 알리아스가 의도대로 설정되어 있습니다.
116-123: 확인 요청: 프로젝트 정의 컨벤션 플러그인 버전 관리 전략
booket-*플러그인이version = "unspecified"로 선언되어 있는데, 이는 포함된 빌드(build-logic)로 관리되는 구조인지, 버전 카탈로그로 분리 관리해야 하는지 의도한 전략인지 확인 부탁드립니다.
126-133: 번들 구성 검토
androidx-compose번들이 Compose 관련 라이브러리를 잘 묶고 있어 사용 편의성을 높입니다.
| run: | | ||
| echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties | ||
|
|
There was a problem hiding this comment.
Secrets가 문자열 그대로 출력됩니다 – 따옴표를 제거하세요.
echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties
작업 스크립트 내부에서 단일 따옴표로 감싸면 GitHub Actions 템플릿 치환이 일어나지 않아 파일에 리터럴 \${{ secrets.LOCAL_PROPERTIES }} 문자열이 기록됩니다.
빌드 시 local.properties 가 제대로 주입되지 않아 CI 전부가 실패할 수 있습니다.
-echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties
+echo "${{ secrets.LOCAL_PROPERTIES }}" > ./local.properties• 따옴표를 이중 따옴표로 바꾸고 > 를 사용해 불필요한 중복 추가를 방지하세요.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| run: | | |
| echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties | |
| run: | | |
| - echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties | |
| + echo "${{ secrets.LOCAL_PROPERTIES }}" > ./local.properties |
🤖 Prompt for AI Agents
In .github/workflows/android-ci.yml around lines 39 to 41, the secret
LOCAL_PROPERTIES is enclosed in single quotes, causing the literal string '${{
secrets.LOCAL_PROPERTIES }}' to be written instead of its value. Replace the
single quotes with double quotes and use a single '>' redirection operator to
write the secret's actual content to local.properties without appending
duplicates.
| - name: Checkout | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: Setup JDK 17 | ||
| uses: actions/setup-java@v4 | ||
| with: | ||
| distribution: 'corretto' | ||
| java-version: 17 | ||
|
|
||
| - name: Setup Android SDK | ||
| uses: android-actions/setup-android@v2 | ||
|
|
||
| - name: Setup Gradle | ||
| uses: gradle/gradle-build-action@v2 | ||
| with: | ||
| gradle-home-cache-cleanup: true | ||
|
|
||
| - name: Generate local.properties | ||
| run: | | ||
| echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties | ||
|
|
||
| - name: Code style checks | ||
| run: | | ||
| ./gradlew ktlintCheck detekt | ||
|
|
||
| - name: Run build |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
YAML 스타일: - 뒤 공백을 한 칸으로 줄여 가독성을 높이세요.
- name: 처럼 하이픈 뒤에 3 칸 이상 공백이 있어 YAMLlint 오류가 발생합니다. 표준 예시:
- - name: Checkout
+ - name: Checkout모든 step‐블록에 동일하게 적용해 경고를 제거할 수 있습니다.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'corretto' | |
| java-version: 17 | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v2 | |
| - name: Setup Gradle | |
| uses: gradle/gradle-build-action@v2 | |
| with: | |
| gradle-home-cache-cleanup: true | |
| - name: Generate local.properties | |
| run: | | |
| echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties | |
| - name: Code style checks | |
| run: | | |
| ./gradlew ktlintCheck detekt | |
| - name: Run build | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'corretto' | |
| java-version: 17 | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v2 | |
| - name: Setup Gradle | |
| uses: gradle/gradle-build-action@v2 | |
| with: | |
| gradle-home-cache-cleanup: true | |
| - name: Generate local.properties | |
| run: | | |
| echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties | |
| - name: Code style checks | |
| run: | | |
| ./gradlew ktlintCheck detekt | |
| - name: Run build |
🧰 Tools
🪛 YAMLlint (1.37.1)
[error] 21-21: too many spaces after hyphen
(hyphens)
[error] 24-24: too many spaces after hyphen
(hyphens)
[error] 30-30: too many spaces after hyphen
(hyphens)
[error] 33-33: too many spaces after hyphen
(hyphens)
[error] 38-38: too many spaces after hyphen
(hyphens)
[error] 42-42: too many spaces after hyphen
(hyphens)
[error] 46-46: too many spaces after hyphen
(hyphens)
🤖 Prompt for AI Agents
In .github/workflows/android-ci.yml from lines 21 to 46, the YAML syntax uses
multiple spaces after the dash in step definitions (e.g., '- name:'), causing
YAML lint errors. Fix this by reducing the spaces after each dash to exactly one
space (e.g., '- name:') for all steps to improve readability and comply with
YAML standards.
| /* | ||
| * Other default colors to override | ||
| * background = Color(0xFFFFFBFE), | ||
| * surface = Color(0xFFFFFBFE), | ||
| * onPrimary = Color.White, | ||
| * onSecondary = Color.White, | ||
| * onTertiary = Color.White, | ||
| * onBackground = Color(0xFF1C1B1F), | ||
| * onSurface = Color(0xFF1C1B1F), | ||
| */ |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
주석 블록이 Theme 객체 외부로 밀려 있습니다.
/* ... */ 주석이 컬러스킴 파라미터 블록과 동일한 들여쓰기로 유지되면 가독성이 조금 더 좋습니다. 코드 동작에는 영향 없지만 살짝 정렬해 두면 ktlint warning 을 방지할 수 있습니다.
🤖 Prompt for AI Agents
In app/src/main/kotlin/com/ninecraft/booket/ui/theme/Theme.kt around lines 24 to
33, the block comment containing default color overrides is indented outside the
Theme object or color scheme parameter block. Adjust the indentation of the /*
... */ comment block to align with the surrounding color scheme parameters to
improve readability and prevent ktlint warnings, ensuring the comment is
visually grouped with the related code.
| // Set of Material typography styles to start with | ||
| val Typography = Typography( | ||
| bodyLarge = TextStyle( | ||
| fontFamily = FontFamily.Default, | ||
| fontWeight = FontWeight.Normal, | ||
| fontSize = 16.sp, | ||
| lineHeight = 24.sp, | ||
| letterSpacing = 0.5.sp, | ||
| ), | ||
| /* | ||
| * Other default text styles to override | ||
| * titleLarge = TextStyle( | ||
| * fontFamily = FontFamily.Default, | ||
| * fontWeight = FontWeight.Normal, | ||
| * fontSize = 22.sp, | ||
| * lineHeight = 28.sp, | ||
| * letterSpacing = 0.sp, | ||
| * ), | ||
| * labelSmall = TextStyle( | ||
| * fontFamily = FontFamily.Default, | ||
| * fontWeight = FontWeight.Medium, | ||
| * fontSize = 11.sp, | ||
| * lineHeight = 16.sp, | ||
| * letterSpacing = 0.5.sp, | ||
| * ) | ||
| */ | ||
| ) |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
기본 Typography 정의 추가 확인
Compose 기본 서체를 그대로 사용하므로 향후 브랜드 폰트로 교체하는 TODO 남겨두면 좋겠습니다. 기능적으로 문제 없습니다.
🤖 Prompt for AI Agents
In app/src/main/kotlin/com/ninecraft/booket/ui/theme/Type.kt around lines 9 to
35, add a TODO comment indicating that the current Typography uses the default
Compose font and should be replaced with the brand font in the future. This will
help track the planned font update while keeping the current functionality
unchanged.
| androidx-compose-bom = "2025.06.00" | ||
| androidx-compose-material3 = "1.3.2" |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
Compose BOM 사용 시 개별 라이브러리 버전 중복 지정 제거 제안
Compose BOM(androidx-compose-bom)을 활용하고 있으므로 androidx-compose-material3의 개별 버전 선언을 제거하거나 BOM에 맞추어 관리하는 방안을 고려해 보세요.
# [versions] 섹션에서 개별 material3 버전 선언 제거
-[versions]
-androidx-compose-material3 = "1.3.2"
# [libraries] 섹션에서 버전 레퍼런스 삭제 (BOM 적용)
-context:
-androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "androidx-compose-material3" }
+androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In gradle/libs.versions.toml at lines 15 to 16, the Compose BOM is declared but
the individual version for androidx-compose-material3 is also specified, causing
redundancy. Remove the explicit version declaration for
androidx-compose-material3 so that its version is managed solely by the Compose
BOM, ensuring consistent and centralized version control.
There was a problem hiding this comment.
Actionable comments posted: 8
♻️ Duplicate comments (1)
gradle/libs.versions.toml (1)
21-25: KSP 버전이 Kotlin 버전과 호환되지 않습니다.
kotlin = 2.1.21일 때 권장 KSP 버전 형식은2.1.21-1.0.xx입니다.
현재2.1.21-2.0.1는 호환 경고 및 컴파일 오류를 발생시킬 수 있습니다.-ksp = "2.1.21-2.0.1" +ksp = "2.1.21-1.0.21"
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (9)
.github/workflows/android-ci.yml(1 hunks)app/src/androidTest/java/com/ninecraft/booket/ExampleInstrumentedTest.kt(0 hunks)app/src/main/kotlin/com/ninecraft/booket/MainActivity.kt(2 hunks)app/src/main/kotlin/com/ninecraft/booket/ui/theme/Color.kt(1 hunks)app/src/main/kotlin/com/ninecraft/booket/ui/theme/Theme.kt(2 hunks)app/src/main/kotlin/com/ninecraft/booket/ui/theme/Type.kt(1 hunks)app/src/test/java/com/ninecraft/booket/ExampleUnitTest.kt(0 hunks)build-logic/src/main/java/AndroidApplicationComposeConventionPlugin.kt(1 hunks)gradle/libs.versions.toml(1 hunks)
💤 Files with no reviewable changes (2)
- app/src/androidTest/java/com/ninecraft/booket/ExampleInstrumentedTest.kt
- app/src/test/java/com/ninecraft/booket/ExampleUnitTest.kt
🧰 Additional context used
🪛 YAMLlint (1.37.1)
.github/workflows/android-ci.yml
[warning] 7-7: truthy value should be one of [false, true]
(truthy)
[error] 21-21: too many spaces after hyphen
(hyphens)
[error] 24-24: too many spaces after hyphen
(hyphens)
[error] 30-30: too many spaces after hyphen
(hyphens)
[error] 33-33: too many spaces after hyphen
(hyphens)
[error] 38-38: too many spaces after hyphen
(hyphens)
[error] 42-42: too many spaces after hyphen
(hyphens)
[error] 46-46: too many spaces after hyphen
(hyphens)
🔇 Additional comments (7)
gradle/libs.versions.toml (1)
15-18: Compose BOM 버전이 실존하지 않는 번호로 보입니다.
2025.06.00은 아직 릴리스되지 않은 미래 버전입니다.
의도치 않은 해상 실패를 막기 위해 최신 안정 버전(ex.2024.06.00)으로 교체를 권장합니다.app/src/main/kotlin/com/ninecraft/booket/ui/theme/Color.kt (1)
11-11: 마침표 없는 개행 추가 👍파일 EOF 개행이 추가되어 POSIX 호환성을 확보했습니다.
app/src/main/kotlin/com/ninecraft/booket/MainActivity.kt (1)
24-38: 트레일링 콤마 적용으로 코드 일관성 향상 👍
.editorconfig정책에 맞춰 호출부에 트레일링 콤마를 적용한 점 확인했습니다.app/src/main/kotlin/com/ninecraft/booket/ui/theme/Theme.kt (4)
13-17: DarkColorScheme에tertiary컬러 추가 승인
tertiary = Pink80을 추가하여 다크 테마에서도 3차 색상을 일관되게 지원한 점이 적절합니다.
19-23: LightColorScheme에tertiary컬러 추가 승인
tertiary = Pink40을 추가하여 라이트 테마에서도 일관성 있게 3차 색상을 지원한 점이 훌륭합니다.
41-41:BooketAndroidTheme파라미터 콤마 처리 확인
content: @Composable () -> Unit,에 트레일링 콤마를 추가해 EditorConfig 규칙에 맞춘 포맷 일관성을 잘 유지하셨습니다.
56-56:MaterialTheme호출 트레일링 콤마 확인콜백 인자
content = content,에 콤마를 추가하여 멀티라인 호출 스타일이 일관되게 유지되었습니다.
| import com.android.build.api.dsl.ApplicationExtension | ||
| import com.ninecraft.booket.convention.Plugins | ||
| import com.ninecraft.booket.convention.applyPlugins | ||
| import com.ninecraft.booket.convention.configureCompose |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
패키지 선언이 누락되어 플러그인 식별에 혼선을 줄 수 있습니다.
다른 컨벤션 플러그인들은 com.ninecraft.booket.convention 패키지에 위치해 있는데, 해당 파일만 default package에 두면
- FQCN 충돌 가능성
implementationClass지정 시 불명확성- IDE-/Gradle-자동 리팩터링 시 누락
등의 문제가 발생할 수 있습니다. 동일한 패키지로 맞추는 편이 안전합니다.
+package com.ninecraft.booket.convention
+
import com.android.build.api.dsl.ApplicationExtension
import com.ninecraft.booket.convention.Plugins
import com.ninecraft.booket.convention.applyPlugins
import com.ninecraft.booket.convention.configureCompose📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| import com.android.build.api.dsl.ApplicationExtension | |
| import com.ninecraft.booket.convention.Plugins | |
| import com.ninecraft.booket.convention.applyPlugins | |
| import com.ninecraft.booket.convention.configureCompose | |
| package com.ninecraft.booket.convention | |
| import com.android.build.api.dsl.ApplicationExtension | |
| import com.ninecraft.booket.convention.Plugins | |
| import com.ninecraft.booket.convention.applyPlugins | |
| import com.ninecraft.booket.convention.configureCompose |
🤖 Prompt for AI Agents
In build-logic/src/main/java/AndroidApplicationComposeConventionPlugin.kt at the
top of the file (lines 1 to 4), add the package declaration `package
com.ninecraft.booket.convention` to match other convention plugins. This
prevents fully qualified class name conflicts, clarifies the implementationClass
reference, and ensures IDE and Gradle refactoring tools work correctly.
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: Setup JDK 17 | ||
| uses: actions/setup-java@v4 | ||
| with: | ||
| distribution: 'corretto' | ||
| java-version: 17 | ||
|
|
||
| - name: Setup Android SDK | ||
| uses: android-actions/setup-android@v2 | ||
|
|
||
| - name: Setup Gradle | ||
| uses: gradle/gradle-build-action@v2 | ||
| with: | ||
| gradle-home-cache-cleanup: true | ||
|
|
There was a problem hiding this comment.
🧹 Nitpick (assertive)
들여쓰기 후 하이픈 뒤 공백이 3칸(- )으로 lint 오류 발생
YAML 스펙에는 문제없지만 actionlint / yamllint 경고가 계속 출력됩니다.
전반적으로 - 한 칸으로 맞추면 경고를 깔끔하게 제거할 수 있습니다.
🧰 Tools
🪛 YAMLlint (1.37.1)
[error] 21-21: too many spaces after hyphen
(hyphens)
[error] 24-24: too many spaces after hyphen
(hyphens)
[error] 30-30: too many spaces after hyphen
(hyphens)
[error] 33-33: too many spaces after hyphen
(hyphens)
🤖 Prompt for AI Agents
In .github/workflows/android-ci.yml between lines 20 and 37, the indentation
after hyphens uses three spaces which triggers lint warnings from actionlint and
yamllint. To fix this, adjust all list item hyphens to be followed by a single
space instead of three spaces throughout these lines to comply with linting
rules and remove the warnings.
| - name: Generate local.properties | ||
| run: | | ||
| echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties | ||
|
|
There was a problem hiding this comment.
🧹 Nitpick (assertive)
local.properties 생성 시 >> 대신 > 사용 권장
>> 는 파일이 이미 존재할 경우 뒤에 덧붙여 중복 키를 만들 수 있습니다.
한 번만 작성되는 CI 컨텍스트라면 단순 > 로 덮어쓰는 편이 안전합니다.
- echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties
+ echo '${{ secrets.LOCAL_PROPERTIES }}' > ./local.properties📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - name: Generate local.properties | |
| run: | | |
| echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties | |
| - name: Generate local.properties | |
| run: | | |
| echo '${{ secrets.LOCAL_PROPERTIES }}' > ./local.properties |
🧰 Tools
🪛 YAMLlint (1.37.1)
[error] 38-38: too many spaces after hyphen
(hyphens)
🤖 Prompt for AI Agents
In .github/workflows/android-ci.yml around lines 38 to 41, the script uses '>>'
to append to local.properties, which can cause duplicate entries if the file
exists. Replace '>>' with '>' to overwrite the file instead, ensuring
local.properties is created cleanly each time without duplicate keys.
| - name: Run build | ||
| run: ./gradlew buildDebug --stacktrace |
There was a problem hiding this comment.
buildDebug 태스크는 존재하지 않을 가능성이 높습니다.
AGP 기본 태스크는 assembleDebug / bundleDebug 또는 상위 build 입니다.
./gradlew buildDebug 는 실패하여 CI 전체가 RED 로 끝날 수 있으니 확인 바랍니다.
- - name: Run build
- run: ./gradlew buildDebug --stacktrace
+ - name: Assemble debug APK
+ run: ./gradlew assembleDebug --stacktrace📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - name: Run build | |
| run: ./gradlew buildDebug --stacktrace | |
| - name: Assemble debug APK | |
| run: ./gradlew assembleDebug --stacktrace |
🧰 Tools
🪛 YAMLlint (1.37.1)
[error] 46-46: too many spaces after hyphen
(hyphens)
🤖 Prompt for AI Agents
In .github/workflows/android-ci.yml at lines 46 to 47, the current Gradle task
'buildDebug' likely does not exist and may cause the CI to fail. Replace
'buildDebug' with a valid task such as 'assembleDebug', 'bundleDebug', or simply
'build' to ensure the build step runs successfully without errors.
| /* | ||
| * Other default text styles to override | ||
| * titleLarge = TextStyle( | ||
| * fontFamily = FontFamily.Default, | ||
| * fontWeight = FontWeight.Normal, | ||
| * fontSize = 22.sp, | ||
| * lineHeight = 28.sp, | ||
| * letterSpacing = 0.sp, | ||
| * ), | ||
| * labelSmall = TextStyle( | ||
| * fontFamily = FontFamily.Default, | ||
| * fontWeight = FontWeight.Medium, | ||
| * fontSize = 11.sp, | ||
| * lineHeight = 16.sp, | ||
| * letterSpacing = 0.5.sp, | ||
| * ) | ||
| */ |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
주석 처리된 텍스트 스타일 블록 관리 제안
향후 커스터마이징을 위해 남겨두신 템플릿 코드입니다만, 현재 사용되지 않는다면 TODO 주석 추가 혹은 별도 템플릿 파일로 이동하여 코드베이스를 간결하게 유지하는 것을 권장합니다.
🤖 Prompt for AI Agents
In app/src/main/kotlin/com/ninecraft/booket/ui/theme/Type.kt around lines 18 to
34, the commented-out text style block is currently unused. To keep the codebase
clean and maintainable, either add a TODO comment indicating it is a placeholder
for future customization or move this template code to a separate file dedicated
to style templates.
| val Typography = Typography( | ||
| bodyLarge = TextStyle( | ||
| fontFamily = FontFamily.Default, | ||
| fontWeight = FontWeight.Normal, | ||
| fontSize = 16.sp, | ||
| lineHeight = 24.sp, | ||
| letterSpacing = 0.5.sp, | ||
| ), |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
변수명 컨벤션: Typography 대신 lowerCamelCase 사용 권장
Kotlin 최상위 프로퍼티는 대체로 소문자로 시작하므로 val Typography는 타입과 혼동될 수 있습니다. val booketTypography 또는 val typography 등의 네이밍 변경을 고려하세요.
🤖 Prompt for AI Agents
In app/src/main/kotlin/com/ninecraft/booket/ui/theme/Type.kt around lines 10 to
17, the variable name 'Typography' uses an uppercase first letter which can be
confused with a type name. Rename this variable to follow Kotlin's
lowerCamelCase convention, such as 'typography' or 'booketTypography', to
clearly distinguish it from types and adhere to Kotlin naming standards.
| /* | ||
| * Other default colors to override | ||
| * background = Color(0xFFFFFBFE), | ||
| * surface = Color(0xFFFFFBFE), | ||
| * onPrimary = Color.White, | ||
| * onSecondary = Color.White, | ||
| * onTertiary = Color.White, | ||
| * onBackground = Color(0xFF1C1B1F), | ||
| * onSurface = Color(0xFF1C1B1F), | ||
| */ |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
사용되지 않는 색상 주석 블록 관리 제안
현재 주석으로 남긴 override 컬러 목록은 초기 템플릿 용도입니다. 실제 사용되지 않는다면 제거하거나 TODO로 관리하여 코드 가독성을 높이세요.
🤖 Prompt for AI Agents
In app/src/main/kotlin/com/ninecraft/booket/ui/theme/Theme.kt around lines 24 to
33, there is a commented-out block of default color overrides that are not
currently used. To improve code readability, either remove this unused comment
block or convert it into a TODO comment indicating it is a placeholder for
potential future overrides.
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (2)
build-logic/src/main/java/JvmLibraryConventionPlugin.kt (1)
1-8: 패키지 선언 누락으로 컴파일 오류 발생다른 컨벤션 플러그인과 동일한
com.ninecraft.booket.convention패키지를 추가해야 합니다.+package com.ninecraft.booket.convention + import com.ninecraft.booket.convention.ApplicationConstantsbuild-logic/src/main/java/com/ninecraft/booket/convention/Android.kt (1)
26-28:libs.detekt.formatting직접 사용 시 컴파일 오류 가능이전 리뷰에서 동일 지적이 있었습니다. 카탈로그 accessor가 주입되지 않으면
detektPlugins(libs.detekt.formatting)호출은 실패합니다.
제안했던VersionCatalogsExtension활용 방식을 적용했는지 확인 바랍니다.
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (4)
build-logic/src/main/java/AndroidApplicationConventionPlugin.kt(1 hunks)build-logic/src/main/java/JvmLibraryConventionPlugin.kt(1 hunks)build-logic/src/main/java/com/ninecraft/booket/convention/Android.kt(1 hunks)build-logic/src/main/java/com/ninecraft/booket/convention/ApplicationConstants.kt(1 hunks)
🧰 Additional context used
🪛 detekt (1.23.8)
build-logic/src/main/java/JvmLibraryConventionPlugin.kt
[warning] 1-36: The file does not contain a package declaration.
(detekt.potential-bugs.MissingPackageDeclaration)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: ci-build
🔇 Additional comments (2)
build-logic/src/main/java/com/ninecraft/booket/convention/ApplicationConstants.kt (1)
7-8: API 35 지정 전 빌드 환경 호환성 점검 필요
TARGET_SDK/COMPILE_SDK값이 35(안드로이드 15 Preview)로 고정돼 있습니다. CI 또는 로컬 환경이 아직 해당 SDK·AGP 버전을 지원하지 않으면 전 구간 빌드가 실패할 수 있습니다.
• AGP 8.5+ / Android 15 Preview SDK 설치 여부 확인
• 정식 API(34)로 일시 다운그레이드하거나,gradle.properties에android.previewSdk=35옵션을 추가하는 방법 검토build-logic/src/main/java/JvmLibraryConventionPlugin.kt (1)
30-32:libs접근자 사용 시 타입-세이프 카탈로그 주입 여부 재확인
libs.detekt.formatting은 빌드 로직 소스에서 기본으로 제공되지 않습니다.
VersionCatalogsExtension또는 별도 helper property를 통해 주입하고 있는지 점검해 주세요. 누락 시 컴파일 오류가 납니다.
필요하다면 다음과 같이 변경할 수 있습니다.dependencies { val libs = extensions .getByType<VersionCatalogsExtension>() .named("libs") add("implementation", libs.findLibrary("detekt-formatting").get()) }
| import com.android.build.api.dsl.ApplicationExtension | ||
| import com.ninecraft.booket.convention.ApplicationConstants | ||
| import com.ninecraft.booket.convention.Plugins | ||
| import com.ninecraft.booket.convention.applyPlugins | ||
| import com.ninecraft.booket.convention.configureAndroid | ||
| import org.gradle.api.Plugin | ||
| import org.gradle.api.Project | ||
| import org.gradle.kotlin.dsl.configure | ||
|
|
There was a problem hiding this comment.
패키지 선언 누락으로 컴파일 오류 발생
다른 파일과 동일한 패키지를 추가해 주세요.
+package com.ninecraft.booket.convention
+
import com.android.build.api.dsl.ApplicationExtension🤖 Prompt for AI Agents
In build-logic/src/main/java/AndroidApplicationConventionPlugin.kt at the
beginning of the file (lines 1 to 9), add the missing package declaration
matching the package used in other files to resolve the compilation error caused
by the missing package statement.
There was a problem hiding this comment.
Actionable comments posted: 3
♻️ Duplicate comments (1)
gradle/libs.versions.toml (1)
15-17: Compose BOM 사용 시 material3 개별 버전 선언 중복지난 리뷰에서 제안드렸던 사항이 그대로 남아있습니다. BOM(
androidx-compose-bom)으로 버전을 통제하고 있으므로
androidx-compose-material3의 독립 버전(1.3.2) 선언은 제거하거나 BOM 의존에 맞춰 관리하는 편이 안전합니다.Also applies to: 76-77
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (4)
.github/PULL_REQUEST_TEMPLATE.md(3 hunks).github/labeler.yml(1 hunks)build-logic/src/main/java/com/ninecraft/booket/convention/Extensions.kt(1 hunks)gradle/libs.versions.toml(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: ci-build
🔇 Additional comments (3)
.github/PULL_REQUEST_TEMPLATE.md (1)
2-4: PR 제목 가이드라인 업데이트 — 콜론 형식 일관성 확보
새로운 형식(라벨: 작업 요약)이.github/labeler.yml의 패턴(^feat:,^fix:등)과 잘 일치합니다..github/labeler.yml (1)
6-34: 제목 기반 라벨 매칭 적용 확인
^feat:,^fix:등 PR 제목 시작 부분만 매칭하도록 패턴을 엄격히 제한하고,scope: title을 지정해 본문 매칭을 방지한 것은 적절합니다.build-logic/src/main/java/com/ninecraft/booket/convention/Extensions.kt (1)
7-12:Project.libs·applyPlugins()확장 정의, 깔끔합니다
the<LibrariesForLibs>()활용으로 타입 안전성 확보했고,applyPlugins(*ids)로직도 간단·명료합니다. 별다른 문제점 없이 재사용성까지 좋아 보입니다.
| ## 💬 추가 설명 or 리뷰 포인트 (선택) | ||
| <!-- 리뷰어가 중점적으로 봐야 할 부분이나 설명이 필요한 내용을 자유롭게 작성해주세요 --> | ||
| - | ||
| - |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
추가 설명 placeholder 개선 제안
-만 남아 있어 사용 시 템플릿이 다소 모호해질 수 있습니다.
- <추가 설명> 또는 내용을 입력해주세요 등 구체적 placeholder 문구로 변경하면 가독성이 향상됩니다.
🤖 Prompt for AI Agents
In .github/PULL_REQUEST_TEMPLATE.md at line 29, the placeholder currently shows
only a dash '-', which is vague. Replace this dash with a more descriptive
placeholder such as '- <추가 설명>' or '내용을 입력해주세요' to improve clarity and
readability when users fill out the template.
| '✨ feat': | ||
| include: | ||
| - '\bfeat\b' | ||
| - pattern: '^feat:' | ||
| scope: title | ||
|
|
||
| '🐞 fix': | ||
| include: | ||
| - '\bfix\b' | ||
| - pattern: '^fix:' | ||
| scope: title |
There was a problem hiding this comment.
🧹 Nitpick (assertive)
대소문자 및 커밋 스코프 확장 고려
현재 패턴이 소문자 접두사만 매칭하므로 Feat:나 feat(scope): 형식은 라벨링 대상에서 제외될 수 있습니다.
필요 시 (?i)^feat: 같은 대소문자 무시 옵션 또는 ^feat(\([^)]+\))?: 형태의 패턴 확장을 검토하세요.
🤖 Prompt for AI Agents
In .github/labeler.yml around lines 6 to 14, the current regex patterns only
match lowercase prefixes like 'feat:' and 'fix:', missing variations like
'Feat:' or 'feat(scope):'. Update the patterns to be case-insensitive by adding
the (?i) flag and expand them to optionally include scopes by using a pattern
like '(?i)^feat(\([^)]+\))?:' to ensure all relevant commit messages are
correctly labeled.
| ksp = "2.1.21-2.0.1" | ||
|
|
||
| ## Kotlin | ||
| kotlin = "2.1.21" |
There was a problem hiding this comment.
KSP 버전-코틀린 불일치 – 빌드 실패 위험
kotlin = "2.1.21"에 대응하는 KSP 호환 버전은 2.1.21-1.0.21 형식입니다.
현재 ksp = "2.1.21-2.0.1"로 지정되어 있어 Gradle 동적 검사에서 경고·실패가 발생할 수 있습니다.
- ksp = "2.1.21-2.0.1"
+ ksp = "2.1.21-1.0.21"동시에 [plugins] 섹션의 alias도 자동으로 동일 버전을 참조하므로 별도 수정 필요 없습니다.
Also applies to: 113-114
🤖 Prompt for AI Agents
In gradle/libs.versions.toml around lines 21 to 24, the KSP version
"2.1.21-2.0.1" does not match the Kotlin version "2.1.21", which can cause build
failures. Update the KSP version to the compatible format "2.1.21-1.0.21" to
align with the Kotlin version. No changes are needed in the [plugins] section as
it references the same version automatically.
There was a problem hiding this comment.
Actionable comments posted: 0
♻️ Duplicate comments (1)
gradle/libs.versions.toml (1)
20-21: KSP 버전 불일치로 인한 빌드 실패 위험
버전2.1.21-2.0.1은 Kotlin2.1.21에 대응하는 호환 버전이 아니므로 Gradle 동적 검사에서 오류가 발생할 수 있습니다. 다음과 같이 수정을 권장합니다.- ksp = "2.1.21-2.0.1" + ksp = "2.1.21-1.0.21"
🧹 Nitpick comments (2)
gradle/libs.versions.toml (2)
15-16: Compose BOM 사용 시 개별 Material3 버전 중복 관리 제안
Compose BOM(androidx-compose-bom)을 활용하고 있으므로androidx-compose-material3의 명시적 버전 선언을 BOM에 위임하면 일관적입니다. 다음과 같이 버전 선언과 참조를 제거해 보세요.[versions] - androidx-compose-material3 = "1.4.0-alpha15" [libraries] - androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "androidx-compose-material3" } + androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }Also applies to: 76-76
50-50: 미사용 버전(alias) 선언 제거 제안
kotlin-ktlint-source버전이 [libraries]에서 참조되지 않고 있습니다. 불필요하다면 제거해 클린업을 고려해 보세요.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
gradle/libs.versions.toml(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: ci-build
🔇 Additional comments (3)
gradle/libs.versions.toml (3)
54-54: AndroidX Test JUnit 버전 확인 필요
junit-version = "1.2.1"이androidx.test.ext:junit의 실제 최신 안정화 버전(1.1.x)과 불일치할 가능성이 있습니다. 사용하려는 버전을 검증해 주세요.
24-24: Kotlin Gradle 플러그인 버전 검증 요청
kotlin = "2.1.21"이 공식 릴리스된 Kotlin 버전인지 확인이 필요합니다. Gradle 플러그인과 매칭되는 올바른 Kotlin 버전인지 검토해 주세요.
18-18: Coil Compose 라이브러리 선언 확인 요청
coil-compose버전 alias는 있으나, [libraries]에io.coil-kt:coil-compose선언이 없습니다. 사용 의도를 확인하고 라이브러리 항목을 추가하거나 제거해 주세요.

🔗 관련 이슈
📙 작업 설명
💬 추가 설명 or 리뷰 포인트 (선택)
Summary by CodeRabbit
새로운 기능
리팩터링/스타일
테스트
문서 및 설정