diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 3ed5523..8252371 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -27,5 +27,12 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Run Unit Tests - run: ./gradlew test + - name: Run unit test, lint check and build + run: ./gradlew test lintDebug assembleDebug + + - name: Upload Lint Report Artifact + if: always() + uses: actions/upload-artifact@v4 + with: + name: lint-report + path: app/build/reports/lint-results-debug.html \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 32e694a..cc8948c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -83,4 +83,5 @@ dependencies { implementation(libs.squareup.retrofit2) implementation(libs.squareup.retrofit2.converter.gson) implementation(libs.google.gson) + lintChecks(libs.slack.lint) } \ No newline at end of file diff --git a/app/src/main/java/com/debatetimer/app/MainActivity.kt b/app/src/main/java/com/debatetimer/app/MainActivity.kt index 9969ac7..67e833e 100644 --- a/app/src/main/java/com/debatetimer/app/MainActivity.kt +++ b/app/src/main/java/com/debatetimer/app/MainActivity.kt @@ -5,13 +5,8 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview +import androidx.navigation.compose.rememberNavController +import com.debatetimer.app.navigation.MainNavHost import com.debatetimer.app.ui.theme.DebateTimerTheme import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.HiltAndroidApp @@ -25,30 +20,11 @@ class MainActivity : ComponentActivity() { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { + val navController = rememberNavController() + DebateTimerTheme { - Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> - Greeting( - name = "Android", - modifier = Modifier.padding(innerPadding) - ) - } + MainNavHost(navController = navController) } } } -} - -@Composable -fun Greeting(name: String, modifier: Modifier = Modifier) { - Text( - text = "Hello $name!", - modifier = modifier - ) -} - -@Preview(showBackground = true) -@Composable -fun GreetingPreview() { - DebateTimerTheme { - Greeting("Android") - } } \ No newline at end of file diff --git a/app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt b/app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt new file mode 100644 index 0000000..089f3f1 --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt @@ -0,0 +1,15 @@ +package com.debatetimer.app.navigation + +import androidx.compose.runtime.Composable +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable + +@Composable +fun MainNavHost(navController: NavHostController) { + NavHost( + navController = navController, + startDestination = NavItem.Login.route + ) { + } +} \ No newline at end of file diff --git a/app/src/main/java/com/debatetimer/app/navigation/NavItem.kt b/app/src/main/java/com/debatetimer/app/navigation/NavItem.kt new file mode 100644 index 0000000..32e5253 --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/navigation/NavItem.kt @@ -0,0 +1,8 @@ +package com.debatetimer.app.navigation + +sealed class NavItem( + val route: String, +) { + object Home : NavItem("home") + object Login : NavItem("login") +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2f3f2cd..1f60695 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] # Default -agp = "8.11.1" +agp = "8.12.0" kotlin = "2.2.0" coreKtx = "1.16.0" junit = "4.13.2" @@ -9,6 +9,7 @@ espressoCore = "3.7.0" lifecycleRuntimeKtx = "2.9.2" activityCompose = "1.10.1" composeBom = "2025.07.00" +material = "1.5.0-alpha01" # New icon = "1.7.8" ksp = "2.2.0-2.0.2" @@ -17,6 +18,7 @@ hilt = "2.57" androidxHilt = "1.2.0" retrofit2 = "3.0.0" gson = "2.13.1" +lint = "1.4.2" [libraries] # Default @@ -33,7 +35,7 @@ androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } -androidx-material3 = { group = "androidx.compose.material3", name = "material3" } +androidx-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "material" } # New androidx-material3-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended", version.ref = "icon" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation" } @@ -43,6 +45,7 @@ dagger-hilt-android-compiler = { group = "com.google.dagger", name = "hilt-andro squareup-retrofit2 = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit2" } squareup-retrofit2-converter-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit2" } google-gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" } +slack-lint = { group = "com.slack.lint.compose", name = "compose-lint-checks", version.ref = "lint" } [plugins] # Default