diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..e5586d7 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +[*.{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, Test diff --git a/.github/ISSUE_TEMPLATE/issue-template.md b/.github/ISSUE_TEMPLATE/issue-template.md new file mode 100644 index 0000000..affd72b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue-template.md @@ -0,0 +1,5 @@ + +## Description +- [ ] task1 +- [ ] task2 +- [ ] task3 diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..b012081 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,11 @@ +- closed #issue number + +## Description + +- task1 +- task2 +- task3 + + +## To Reviewers + diff --git a/.github/workflows/pull_request_ci.yml b/.github/workflows/pull_request_ci.yml new file mode 100644 index 0000000..b2dea84 --- /dev/null +++ b/.github/workflows/pull_request_ci.yml @@ -0,0 +1,58 @@ +name: Misik Android PR Checker + +on: + pull_request: + branches: [ develop, main ] + +defaults: + run: + shell: bash + working-directory: . + +jobs: + build: + name: PR Checker + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Cache Gradle packages + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: 17 + + - name: Setup Android SDK + uses: android-actions/setup-android@v2 + + - name: Grant execute permission for gradlew + run: chmod +x ./gradlew + + - name: Add Local Properties + + - name: Build debug APK + run: ./gradlew assembleDebug --stacktrace + + - name: Run ktlint + run: ./gradlew ktlintCheck + + - name: Notify in Slack + uses: 8398a7/action-slack@v3 + with: + status: ${{job.status}} + fields: repo,message,commit,author,action,eventName,ref,workflow + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + if: always() diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 542b41a..c0eddf9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,14 +1,15 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.jetbrains.kotlin.android) + alias(libs.plugins.ktlint) } android { - namespace = "com.nexters.misik_android" + namespace = "com.nexters.misik" compileSdk = 35 defaultConfig { - applicationId = "com.nexters.misik_android" + applicationId = "com.nexters.misik" minSdk = 24 targetSdk = 35 versionCode = 1 @@ -25,7 +26,7 @@ android { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" + "proguard-rules.pro", ) } } @@ -66,4 +67,4 @@ dependencies { androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) -} \ No newline at end of file +} diff --git a/app/src/androidTest/java/com/nexters/misik_android/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/nexters/misik/ExampleInstrumentedTest.kt similarity index 90% rename from app/src/androidTest/java/com/nexters/misik_android/ExampleInstrumentedTest.kt rename to app/src/androidTest/java/com/nexters/misik/ExampleInstrumentedTest.kt index 7ab38b8..dc4d481 100644 --- a/app/src/androidTest/java/com/nexters/misik_android/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/nexters/misik/ExampleInstrumentedTest.kt @@ -1,13 +1,11 @@ -package com.nexters.misik_android +package com.nexters.misik -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - /** * Instrumented test, which will execute on an Android device. * @@ -21,4 +19,4 @@ class ExampleInstrumentedTest { val appContext = InstrumentationRegistry.getInstrumentation().targetContext assertEquals("com.nexters.misik_android", appContext.packageName) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/nexters/misik_android/MainActivity.kt b/app/src/main/java/com/nexters/misik/MainActivity.kt similarity index 86% rename from app/src/main/java/com/nexters/misik_android/MainActivity.kt rename to app/src/main/java/com/nexters/misik/MainActivity.kt index e53e2f8..e39968c 100644 --- a/app/src/main/java/com/nexters/misik_android/MainActivity.kt +++ b/app/src/main/java/com/nexters/misik/MainActivity.kt @@ -1,4 +1,4 @@ -package com.nexters.misik_android +package com.nexters.misik import android.os.Bundle import androidx.activity.ComponentActivity @@ -11,7 +11,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview -import com.nexters.misik_android.ui.theme.MisikAndroidTheme +import com.nexters.misik.ui.theme.MisikAndroidTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -22,7 +22,7 @@ class MainActivity : ComponentActivity() { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Greeting( name = "Android", - modifier = Modifier.padding(innerPadding) + modifier = Modifier.padding(innerPadding), ) } } @@ -31,10 +31,13 @@ class MainActivity : ComponentActivity() { } @Composable -fun Greeting(name: String, modifier: Modifier = Modifier) { +fun Greeting( + name: String, + modifier: Modifier = Modifier, +) { Text( text = "Hello $name!", - modifier = modifier + modifier = modifier, ) } @@ -44,4 +47,4 @@ fun GreetingPreview() { MisikAndroidTheme { Greeting("Android") } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/nexters/misik_android/ui/theme/Color.kt b/app/src/main/java/com/nexters/misik/ui/theme/Color.kt similarity index 74% rename from app/src/main/java/com/nexters/misik_android/ui/theme/Color.kt rename to app/src/main/java/com/nexters/misik/ui/theme/Color.kt index 0aed12e..707812d 100644 --- a/app/src/main/java/com/nexters/misik_android/ui/theme/Color.kt +++ b/app/src/main/java/com/nexters/misik/ui/theme/Color.kt @@ -1,4 +1,4 @@ -package com.nexters.misik_android.ui.theme +package com.nexters.misik.ui.theme import androidx.compose.ui.graphics.Color @@ -8,4 +8,4 @@ val Pink80 = Color(0xFFEFB8C8) val Purple40 = Color(0xFF6650a4) val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) \ No newline at end of file +val Pink40 = Color(0xFF7D5260) diff --git a/app/src/main/java/com/nexters/misik_android/ui/theme/Theme.kt b/app/src/main/java/com/nexters/misik/ui/theme/Theme.kt similarity index 56% rename from app/src/main/java/com/nexters/misik_android/ui/theme/Theme.kt rename to app/src/main/java/com/nexters/misik/ui/theme/Theme.kt index cbfe393..fd1c739 100644 --- a/app/src/main/java/com/nexters/misik_android/ui/theme/Theme.kt +++ b/app/src/main/java/com/nexters/misik/ui/theme/Theme.kt @@ -1,6 +1,5 @@ -package com.nexters.misik_android.ui.theme +package com.nexters.misik.ui.theme -import android.app.Activity import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialTheme @@ -11,17 +10,18 @@ import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext -private val DarkColorScheme = darkColorScheme( - primary = Purple80, - secondary = PurpleGrey80, - tertiary = Pink80 -) - -private val LightColorScheme = lightColorScheme( - primary = Purple40, - secondary = PurpleGrey40, - tertiary = Pink40 +private val DarkColorScheme = + darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80, + ) +private val LightColorScheme = + lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40, /* Other default colors to override background = Color(0xFFFFFBFE), surface = Color(0xFFFFFBFE), @@ -30,29 +30,30 @@ private val LightColorScheme = lightColorScheme( onTertiary = Color.White, onBackground = Color(0xFF1C1B1F), onSurface = Color(0xFF1C1B1F), - */ -) + */ + ) @Composable fun MisikAndroidTheme( darkTheme: Boolean = isSystemInDarkTheme(), // Dynamic color is available on Android 12+ dynamicColor: Boolean = true, - content: @Composable () -> Unit + content: @Composable () -> Unit, ) { - val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } + val colorScheme = + when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } - darkTheme -> DarkColorScheme - else -> LightColorScheme - } + darkTheme -> DarkColorScheme + else -> LightColorScheme + } MaterialTheme( colorScheme = colorScheme, typography = Typography, - content = content + content = content, ) -} \ No newline at end of file +} diff --git a/app/src/main/java/com/nexters/misik_android/ui/theme/Type.kt b/app/src/main/java/com/nexters/misik/ui/theme/Type.kt similarity index 67% rename from app/src/main/java/com/nexters/misik_android/ui/theme/Type.kt rename to app/src/main/java/com/nexters/misik/ui/theme/Type.kt index a11b9a9..6b763b5 100644 --- a/app/src/main/java/com/nexters/misik_android/ui/theme/Type.kt +++ b/app/src/main/java/com/nexters/misik/ui/theme/Type.kt @@ -1,4 +1,4 @@ -package com.nexters.misik_android.ui.theme +package com.nexters.misik.ui.theme import androidx.compose.material3.Typography import androidx.compose.ui.text.TextStyle @@ -7,14 +7,16 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp // 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 - ) +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, @@ -30,5 +32,5 @@ val Typography = Typography( lineHeight = 16.sp, letterSpacing = 0.5.sp ) - */ -) \ No newline at end of file + */ + ) diff --git a/app/src/test/java/com/nexters/misik_android/ExampleUnitTest.kt b/app/src/test/java/com/nexters/misik/ExampleUnitTest.kt similarity index 81% rename from app/src/test/java/com/nexters/misik_android/ExampleUnitTest.kt rename to app/src/test/java/com/nexters/misik/ExampleUnitTest.kt index 0d1e1f1..dba0f4d 100644 --- a/app/src/test/java/com/nexters/misik_android/ExampleUnitTest.kt +++ b/app/src/test/java/com/nexters/misik/ExampleUnitTest.kt @@ -1,9 +1,8 @@ -package com.nexters.misik_android +package com.nexters.misik +import org.junit.Assert.assertEquals import org.junit.Test -import org.junit.Assert.* - /** * Example local unit test, which will execute on the development machine (host). * @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cb29075..b91237f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,6 +9,9 @@ lifecycleRuntimeKtx = "2.8.7" activityCompose = "1.9.3" composeBom = "2024.04.01" +# third-party +ktlint = "12.1.0" + [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } junit = { group = "junit", name = "junit", version.ref = "junit" } @@ -28,4 +31,4 @@ androidx-material3 = { group = "androidx.compose.material3", name = "material3" [plugins] android-application = { id = "com.android.application", version.ref = "agp" } jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } - +ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" }