chore(spotless): apply code style improvements and formatting (#2459)

Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
pull/2495/head
James Rich 2025-07-21 18:31:35 -05:00 zatwierdzone przez GitHub
rodzic df2b709b54
commit 024dc9ec34
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
4 zmienionych plików z 108 dodań i 46 usunięć

Wyświetl plik

@ -64,8 +64,8 @@ jobs:
- name: Expose Version Code as Environment Variable
run: echo "VERSION_CODE=${{ steps.calculate_version_code.outputs.versionCode }}" >> $GITHUB_ENV
- name: Run Detekt, Build, Lint, and Local Tests
run: ./gradlew :app:detekt :app:lintFdroidDebug :app:lintGoogleDebug :app:assembleDebug :app:testFdroidDebug :app:testGoogleDebug --configuration-cache --scan
- name: Run Spotless, Detekt, Build, Lint, and Local Tests
run: ./gradlew :app:spotlessCheck :app:detekt :app:lintFdroidDebug :app:lintGoogleDebug :app:assembleDebug :app:testFdroidDebug :app:testGoogleDebug --configuration-cache --scan
env:
VERSION_CODE: ${{ env.VERSION_CODE }}
- name: Upload F-Droid debug artifact
@ -82,11 +82,11 @@ jobs:
name: googleDebug
path: app/build/outputs/apk/google/debug/app-google-debug.apk
retention-days: 14
- name: Upload build and Detekt reports
- name: Upload reports
if: ${{ inputs.upload_artifacts }}
uses: actions/upload-artifact@v4
with:
name: build-and-detekt-reports
name: upload-reports
path: |
app/build/reports
**/build/reports/detekt

Wyświetl plik

@ -28,10 +28,12 @@ plugins {
alias(libs.plugins.protobuf)
alias(libs.plugins.devtools.ksp)
alias(libs.plugins.detekt)
alias(libs.plugins.spotless)
}
val keystorePropertiesFile = rootProject.file("keystore.properties")
val keystoreProperties = Properties()
if (keystorePropertiesFile.exists()) {
FileInputStream(keystorePropertiesFile).use { keystoreProperties.load(it) }
}
@ -52,42 +54,65 @@ android {
applicationId = Configs.APPLICATION_ID
minSdk = Configs.MIN_SDK_VERSION
targetSdk = Configs.TARGET_SDK
versionCode = System.getenv("VERSION_CODE")?.toIntOrNull()
?: 30630
versionCode = System.getenv("VERSION_CODE")?.toIntOrNull() ?: 30630
testInstrumentationRunner = "com.geeksville.mesh.TestRunner"
buildConfigField("String", "MIN_FW_VERSION", "\"${Configs.MIN_FW_VERSION}\"")
buildConfigField("String", "ABS_MIN_FW_VERSION", "\"${Configs.ABS_MIN_FW_VERSION}\"")
// per https://developer.android.com/studio/write/vector-asset-studio
vectorDrawables.useSupportLibrary = true
// We have to list all translated languages here, because some of our libs have bogus languages that google play
// We have to list all translated languages here,
// because some of our libs have bogus languages that google play
// doesn't like and we need to strip them (gr)
@Suppress("UnstableApiUsage")
androidResources.localeFilters.addAll(
listOf(
"bg", "ca", "cs", "de",
"el", "en", "es", "et",
"fi", "fr", "fr-rHT", "ga",
"gl", "hr", "hu", "is",
"it", "iw", "ja", "ko",
"lt", "nl", "nb", "pl",
"pt", "pt-rBR", "ro",
"ru", "sk", "sl", "sq",
"sr", "sv", "tr", "zh-rCN",
"zh-rTW", "uk"
"bg",
"ca",
"cs",
"de",
"el",
"en",
"es",
"et",
"fi",
"fr",
"fr-rHT",
"ga",
"gl",
"hr",
"hu",
"is",
"it",
"iw",
"ja",
"ko",
"lt",
"nl",
"nb",
"pl",
"pt",
"pt-rBR",
"ro",
"ru",
"sk",
"sl",
"sq",
"sr",
"sv",
"tr",
"zh-rCN",
"zh-rTW",
"uk",
)
)
ndk {
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
}
ndk { abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64") }
}
flavorDimensions.add("default")
productFlavors {
val versionCode = defaultConfig.versionCode
create("fdroid") {
dimension = "default"
dependenciesInfo {
includeInApk = false
}
dependenciesInfo { includeInApk = false }
versionName = "${Configs.VERSION_NAME_BASE} ($versionCode) fdroid"
}
create("google") {
@ -107,18 +132,12 @@ android {
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
"proguard-rules.pro",
)
}
named("debug") {
isPseudoLocalesEnabled = true
}
}
bundle {
language {
enableSplit = false
}
named("debug") { isPseudoLocalesEnabled = true }
}
bundle { language { enableSplit = false } }
buildFeatures {
viewBinding = true
compose = true
@ -142,16 +161,14 @@ kotlin {
"-opt-in=kotlin.RequiresOptIn",
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-Xcontext-receivers",
"-Xannotation-default-target=param-property"
"-Xannotation-default-target=param-property",
)
}
}
// per protobuf-gradle-plugin docs, this is recommended for android
protobuf {
protoc {
artifact = libs.protobuf.protoc.get().toString()
}
protoc { artifact = libs.protobuf.protoc.get().toString() }
generateProtoTasks {
all().forEach { task ->
task.builtins {
@ -167,9 +184,7 @@ androidComponents {
onVariants(selector().all()) { variant ->
project.afterEvaluate {
val capName = variant.name.replaceFirstChar { it.uppercase() }
tasks.named("ksp${capName}Kotlin") {
dependsOn("generate${capName}Proto")
}
tasks.named("ksp${capName}Kotlin") { dependsOn("generate${capName}Proto") }
}
}
}
@ -238,13 +253,11 @@ dependencies {
}
ksp {
// arg("room.generateKotlin", "true")
// arg("room.generateKotlin", "true")
arg("room.schemaLocation", "$projectDir/schemas")
}
repositories {
maven { url = uri("https://jitpack.io") }
}
repositories { maven { url = uri("https://jitpack.io") } }
detekt {
config.setFrom("../config/detekt/detekt.yml")
@ -252,13 +265,44 @@ detekt {
}
val googleServiceKeywords = listOf("crashlytics", "google")
tasks.configureEach {
if (
googleServiceKeywords.any {
name.contains(it, ignoreCase = true)
} && name.contains("fdroid", ignoreCase = true)
googleServiceKeywords.any { name.contains(it, ignoreCase = true) } &&
name.contains("fdroid", ignoreCase = true)
) {
project.logger.lifecycle("Disabling task for F-Droid: $name")
enabled = false
}
}
spotless {
ratchetFrom("origin/main")
kotlin {
target("src/*/kotlin/**/*.kt", "src/*/java/**/*.kt")
targetExclude("**/build/**/*.kt")
ktlint()
ktfmt().kotlinlangStyle()
licenseHeaderFile(rootProject.file("config/copyright.txt"))
}
kotlinGradle {
target("**/*.gradle.kts")
ktlint()
ktfmt().kotlinlangStyle()
}
}
tasks.register("createSpotlessPreCommitHook") {
val gitHooksDirectory = rootProject.file(".git/hooks")
if (!gitHooksDirectory.exists()) gitHooksDirectory.mkdirs()
val preCommitHook = rootProject.file(".git/hooks/pre-commit")
preCommitHook.writeText(
"""
#!/bin/bash
echo "Running spotless check"
./gradlew spotlessApply
"""
.trimIndent()
)
preCommitHook.setExecutable(true)
}

Wyświetl plik

@ -0,0 +1,16 @@
/*
* Copyright (c) 2025 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

Wyświetl plik

@ -47,6 +47,7 @@ usb-serial-android = "3.9.0"
work-runtime-ktx = "2.10.2"
zxing-android-embedded = "4.3.0"
zxing-core = "3.5.3"
spotless = "7.1.0"
[libraries]
agp = { group = "com.android.tools.build", name = "gradle", version.ref = "agp" }
@ -200,3 +201,4 @@ protobuf = { id = "com.google.protobuf" }
android-library = { id = "com.android.library" }
google-services = { id = "com.google.gms.google-services" }
firebase-crashlytics = { id = "com.google.firebase.crashlytics" }
spotless = { id = "com.diffplug.spotless", version .ref= "spotless" }