diff --git a/.github/workflows/build_benchmark.yml b/.github/workflows/build_benchmark.yml index 00b21eac9..5597dccaf 100644 --- a/.github/workflows/build_benchmark.yml +++ b/.github/workflows/build_benchmark.yml @@ -83,7 +83,7 @@ jobs: uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4 - name: Build Benchmark app and run unit tests - run: ./gradlew assembleDevBenchmark testDevBenchmarkUnitTest testReleaseUnitTest -Pandroid.signingConfig=debug --stacktrace + run: ./gradlew spotlessCheck assembleDevBenchmark testDevBenchmarkUnitTest testReleaseUnitTest -Pandroid.signingConfig=debug --stacktrace - name: Sign APK uses: r0adkll/sign-android-release@349ebdef58775b1e0d8099458af0816dc79b6407 # v1 diff --git a/.github/workflows/build_check.yml b/.github/workflows/build_check.yml index 97743b001..258c7fb8c 100644 --- a/.github/workflows/build_check.yml +++ b/.github/workflows/build_check.yml @@ -61,7 +61,7 @@ jobs: uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4 - name: Build app and run unit tests - run: ./gradlew assembleStandardPreview testStandardPreviewUnitTest testReleaseUnitTest --stacktrace + run: ./gradlew spotlessCheck assembleStandardPreview testStandardPreviewUnitTest testReleaseUnitTest --stacktrace - name: Sign APK uses: r0adkll/sign-android-release@349ebdef58775b1e0d8099458af0816dc79b6407 # v1 diff --git a/.github/workflows/build_preview.yml b/.github/workflows/build_preview.yml index 13fe210ae..58eb6cdd5 100644 --- a/.github/workflows/build_preview.yml +++ b/.github/workflows/build_preview.yml @@ -155,7 +155,7 @@ jobs: uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4 - name: Build Preview app and run unit tests - run: ./gradlew assembleStandardPreview testStandardPreviewUnitTest testReleaseUnitTest --stacktrace + run: ./gradlew spotlessCheck assembleStandardPreview testStandardPreviewUnitTest testReleaseUnitTest --stacktrace - name: Upload artifacts uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 diff --git a/.github/workflows/build_pull_request.yml b/.github/workflows/build_pull_request.yml index 01ff1fc3f..3f2d5971a 100644 --- a/.github/workflows/build_pull_request.yml +++ b/.github/workflows/build_pull_request.yml @@ -64,7 +64,7 @@ jobs: uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4 - name: Build app and run unit tests - run: ./gradlew assembleStandardPreview testStandardPreviewUnitTest testReleaseUnitTest --stacktrace + run: ./gradlew spotlessCheck assembleStandardPreview testStandardPreviewUnitTest testReleaseUnitTest --stacktrace - name: Sign APK uses: r0adkll/sign-android-release@349ebdef58775b1e0d8099458af0816dc79b6407 # v1 diff --git a/.github/workflows/build_pull_request_forked.yml b/.github/workflows/build_pull_request_forked.yml index cccebb83b..c3dbfdf82 100644 --- a/.github/workflows/build_pull_request_forked.yml +++ b/.github/workflows/build_pull_request_forked.yml @@ -50,7 +50,7 @@ jobs: uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4 - name: Build app and run unit tests - run: ./gradlew assembleDevDebug testDevDebugUnitTest testDebugUnitTest --stacktrace + run: ./gradlew spotlessCheck assembleDevDebug testDevDebugUnitTest testDebugUnitTest --stacktrace - name: Rename apk id: current_commit diff --git a/.github/workflows/build_release.yml b/.github/workflows/build_release.yml index 1c9c3a191..bfe5ca934 100644 --- a/.github/workflows/build_release.yml +++ b/.github/workflows/build_release.yml @@ -131,7 +131,7 @@ jobs: uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4 - name: Build app and run unit tests - run: ./gradlew assembleStandardRelease testStandardReleaseUnitTest testReleaseUnitTest --stacktrace + run: ./gradlew spotlessCheck assembleStandardRelease testStandardReleaseUnitTest testReleaseUnitTest --stacktrace - name: Upload artifacts uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index b825b4172..5ed94c26b 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -6,6 +6,7 @@ dependencies { implementation(androidx.gradle) implementation(kotlinx.gradle) implementation(kotlinx.compose.compiler.gradle) + implementation(libs.spotless.gradle) implementation(gradleApi()) implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) diff --git a/buildSrc/src/main/kotlin/mihon.android.application.compose.gradle.kts b/buildSrc/src/main/kotlin/mihon.android.application.compose.gradle.kts index 6b330b1d9..767f758cb 100644 --- a/buildSrc/src/main/kotlin/mihon.android.application.compose.gradle.kts +++ b/buildSrc/src/main/kotlin/mihon.android.application.compose.gradle.kts @@ -3,6 +3,8 @@ import mihon.buildlogic.configureCompose plugins { id("com.android.application") kotlin("android") + + id("mihon.code.lint") } android { diff --git a/buildSrc/src/main/kotlin/mihon.android.application.gradle.kts b/buildSrc/src/main/kotlin/mihon.android.application.gradle.kts index 7ba9c60fb..080f9ca64 100644 --- a/buildSrc/src/main/kotlin/mihon.android.application.gradle.kts +++ b/buildSrc/src/main/kotlin/mihon.android.application.gradle.kts @@ -5,6 +5,8 @@ import mihon.buildlogic.configureTest plugins { id("com.android.application") kotlin("android") + + id("mihon.code.lint") } android { diff --git a/buildSrc/src/main/kotlin/mihon.benchmark.gradle.kts b/buildSrc/src/main/kotlin/mihon.benchmark.gradle.kts index 3a43a2aa1..50c47f280 100644 --- a/buildSrc/src/main/kotlin/mihon.benchmark.gradle.kts +++ b/buildSrc/src/main/kotlin/mihon.benchmark.gradle.kts @@ -4,6 +4,8 @@ import mihon.buildlogic.configureTest plugins { id("com.android.test") kotlin("android") + + id("mihon.code.lint") } android { diff --git a/buildSrc/src/main/kotlin/mihon.code.lint.gradle.kts b/buildSrc/src/main/kotlin/mihon.code.lint.gradle.kts new file mode 100644 index 000000000..8ef7ed6d8 --- /dev/null +++ b/buildSrc/src/main/kotlin/mihon.code.lint.gradle.kts @@ -0,0 +1,34 @@ +import org.gradle.accessors.dm.LibrariesForLibs + +plugins { + id("com.diffplug.spotless") +} + +val libs = the() + +spotless { + kotlin { + target("**/*.kt", "**/*.kts") + targetExclude("**/build/**/*.kt") + ktlint(libs.ktlint.core.get().version) + .editorConfigOverride(mapOf( + "ktlint_function_naming_ignore_when_annotated_with" to "Composable", + "ktlint_standard_class-signature" to "disabled", + "ktlint_standard_discouraged-comment-location" to "disabled", + "ktlint_standard_function-expression-body" to "disabled", + "ktlint_standard_function-signature" to "disabled", + "ktlint_standard_max-line-length" to "disabled", + "ktlint_standard_type-argument-comment" to "disabled", + "ktlint_standard_value-argument-comment" to "disabled", + "ktlint_standard_value-parameter-comment" to "disabled", + )) + trimTrailingWhitespace() + endWithNewline() + } + format("xml") { + target("**/*.xml") + targetExclude("**/build/**/*.xml") + trimTrailingWhitespace() + endWithNewline() + } +} diff --git a/buildSrc/src/main/kotlin/mihon.library.compose.gradle.kts b/buildSrc/src/main/kotlin/mihon.library.compose.gradle.kts index 0c37a3256..7b377ce4c 100644 --- a/buildSrc/src/main/kotlin/mihon.library.compose.gradle.kts +++ b/buildSrc/src/main/kotlin/mihon.library.compose.gradle.kts @@ -2,6 +2,8 @@ import mihon.buildlogic.configureCompose plugins { id("com.android.library") + + id("mihon.code.lint") } android { diff --git a/buildSrc/src/main/kotlin/mihon.library.gradle.kts b/buildSrc/src/main/kotlin/mihon.library.gradle.kts index 743bf07e3..4cf5f6efc 100644 --- a/buildSrc/src/main/kotlin/mihon.library.gradle.kts +++ b/buildSrc/src/main/kotlin/mihon.library.gradle.kts @@ -3,6 +3,8 @@ import mihon.buildlogic.configureTest plugins { id("com.android.library") + + id("mihon.code.lint") } android { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 073bfadac..619ec084e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,6 +8,8 @@ shizuku_version = "12.2.0" sqldelight = "2.0.2" sqlite = "2.4.0" voyager = "1.0.0" +spotless = "6.25.0" +ktlint-core = "1.3.1" [libraries] desugar = "com.android.tools:desugar_jdk_libs:2.0.4" @@ -100,6 +102,9 @@ voyager-screenmodel = { module = "cafe.adriel.voyager:voyager-screenmodel", vers voyager-tab-navigator = { module = "cafe.adriel.voyager:voyager-tab-navigator", version.ref = "voyager" } voyager-transitions = { module = "cafe.adriel.voyager:voyager-transitions", version.ref = "voyager" } +spotless-gradle = { group = "com.diffplug.spotless", name = "spotless-plugin-gradle", version.ref = "spotless" } +ktlint-core = { module = "com.pinterest.ktlint:ktlint-cli", version.ref = "ktlint-core" } + [bundles] okhttp = ["okhttp-core", "okhttp-logging", "okhttp-brotli", "okhttp-dnsoverhttps"] js-engine = ["quickjs-android"]