diff --git a/.github/workflows/check-toolchain.yml b/.github/workflows/check-toolchain.yml new file mode 100644 index 00000000..c8d4b396 --- /dev/null +++ b/.github/workflows/check-toolchain.yml @@ -0,0 +1,46 @@ +name: Check toolchain + +# Fails a pull request that drifts off the standard plugin toolchain +# (ADFA-4907). The standard itself lives in scripts/check-toolchain.sh — it is +# deliberately not restated here, so there is only one copy of the numbers. +# +# This is the only workflow here that runs automatically on pull requests. +# "Build plugin artifacts" and "Update libs from CodeOnTheGo" are both +# workflow_dispatch-only, which is why toolchain drift previously reached +# main with no CI signal at all. +# +# It is pure text inspection — no JDK, no Gradle, no network — so it costs a +# few seconds and is safe to make a required check. + +on: + pull_request: + push: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + +jobs: + check-toolchain: + name: Toolchain versions + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Check toolchain versions + run: ./scripts/check-toolchain.sh + + - name: Report declared versions + # Runs even when the check above fails, so the run summary shows what + # every module actually declares next to the failure list. + if: always() + run: | + { + echo '### Declared toolchain versions' + echo + echo '```' + ./scripts/check-toolchain.sh --list + echo '```' + } >> "$GITHUB_STEP_SUMMARY" diff --git a/Beepy/build.gradle.kts b/Beepy/build.gradle.kts index 8460e150..81315a26 100644 --- a/Beepy/build.gradle.kts +++ b/Beepy/build.gradle.kts @@ -12,12 +12,12 @@ pluginBuilder { android { namespace = "com.example.beepy" - compileSdk = 33 + compileSdk = 36 defaultConfig { applicationId = "com.example.beepy" minSdk = 28 - targetSdk = 33 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/ai-assistant/build.gradle.kts b/ai-assistant/build.gradle.kts index dcc50233..398554b3 100644 --- a/ai-assistant/build.gradle.kts +++ b/ai-assistant/build.gradle.kts @@ -10,12 +10,12 @@ pluginBuilder { android { namespace = "com.itsaky.androidide.plugins.aiassistant" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "com.itsaky.androidide.plugins.aiassistant" minSdk = 33 - targetSdk = 34 + targetSdk = 36 versionCode = 2 versionName = "1.1.0" } @@ -71,7 +71,7 @@ dependencies { // resource attributes and resolve xmlns declarations. This is standard across all CoGo plugins // with XML layouts (random-xkcd, sketch-to-ui-plugin, Beepy). See investigation in Task 4. implementation("androidx.appcompat:appcompat:1.6.1") - implementation("androidx.fragment:fragment-ktx:1.6.2") + implementation("androidx.fragment:fragment-ktx:1.8.8") implementation("com.google.android.material:material:1.10.0") implementation("androidx.recyclerview:recyclerview:1.3.2") implementation("androidx.constraintlayout:constraintlayout:2.1.4") @@ -85,7 +85,7 @@ dependencies { testImplementation(files("../libs/plugin-api.jar")) testImplementation("junit:junit:4.13.2") testImplementation("io.mockk:mockk:1.13.8") - testImplementation("org.json:json:20231013") - testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3") + testImplementation("org.json:json:20240303") + testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.1") testImplementation("androidx.arch.core:core-testing:2.2.0") } diff --git a/ai-assistant/gradle/wrapper/gradle-wrapper.properties b/ai-assistant/gradle/wrapper/gradle-wrapper.properties index 692c2dc2..42f0071e 100644 --- a/ai-assistant/gradle/wrapper/gradle-wrapper.properties +++ b/ai-assistant/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/ai-assistant/settings.gradle.kts b/ai-assistant/settings.gradle.kts index de2975f0..a529bf5f 100644 --- a/ai-assistant/settings.gradle.kts +++ b/ai-assistant/settings.gradle.kts @@ -18,7 +18,7 @@ buildscript { dependencies { classpath(files("../libs/plugin-api.jar")) classpath(files("../libs/gradle-plugin.jar")) - classpath("com.android.tools.build:gradle:8.13.2") + classpath("com.android.tools.build:gradle:8.11.0") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.0") } } diff --git a/ai-core/build.gradle.kts b/ai-core/build.gradle.kts index 0f532019..eb6b0431 100644 --- a/ai-core/build.gradle.kts +++ b/ai-core/build.gradle.kts @@ -10,12 +10,12 @@ pluginBuilder { android { namespace = "com.itsaky.androidide.plugins.aicore" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "com.itsaky.androidide.plugins.aicore" minSdk = 33 - targetSdk = 34 + targetSdk = 36 versionCode = 2 versionName = "1.1.0" } @@ -63,7 +63,7 @@ dependencies { implementation("androidx.appcompat:appcompat:1.6.1") implementation("org.jetbrains.kotlin:kotlin-stdlib:2.3.0") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1") testImplementation(files("../libs/plugin-api.jar")) testImplementation("junit:junit:4.13.2") diff --git a/ai-core/gradle/libs.versions.toml b/ai-core/gradle/libs.versions.toml index 802507a0..671a05c4 100644 --- a/ai-core/gradle/libs.versions.toml +++ b/ai-core/gradle/libs.versions.toml @@ -1,334 +1,39 @@ +# Version catalog for ai-core and its subprojects. +# +# This file was originally copied wholesale from the CodeOnTheGo app repo and +# carried 281 entries, of which 4 were ever referenced. The dead bulk had drifted +# into self-contradiction (androidx.core:core-ktx declared at three different +# versions, appcompat at two, gson at two) and was actively misleading, because +# it is the number a reader greps for. It has been pruned to what is actually +# used -- ADFA-4907. +# +# Only ai-core/llama-api and ai-core/llama-impl consume this catalog, and +# ai-core/settings.gradle.kts includes them only when the llama.cpp submodule is +# checked out. ai-core's own build.gradle.kts uses literals, not aliases. +# +# agp/kotlin must match the classpath pinned in settings.gradle.kts; that +# agreement is enforced by scripts/check-toolchain.sh. + [versions] -activityKtx = "1.8.2" -agp = "8.13.2" -agp-tooling = "8.11.0" -androidx-sqlite = "2.6.2" -appcompatVersion = "1.7.1" -bcprovJdk18on = "1.80" -colorpickerview = "2.3.0" -commonsCompress = "1.27.1" -tukaaniXz = "1.9" -commonsText = "1.11.0" -commonsTextVersion = "1.14.0" -constraintlayout = "2.1.4" -coreKtx = "1.12.0" -coreKtxVersion = "1.17.0" -desugar_jdk_libs = "2.1.5" -googleGenai = "1.16.0" -fragment = "1.8.8" -gradle-tooling = "8.6" -gson = "2.10.1" -junit-jupiter = "5.10.2" -anroidx-test-core = "2.2.0" -koinAndroid = "4.1.1" +agp = "8.11.0" kotlin = "2.3.0" -kotlin-coroutines = "1.9.0" -kotlinxCoroutinesCore = "1.10.2" -kotlinxSerializationJson = "1.9.0" -lifecycleViewmodelKtx = "2.7.0" -paletteKtx = "1.0.0" -playServicesOssLicenses = "17.1.0" -preferenceKtxVersion = "1.2.1" -recyclerview = "1.3.2" -securityCrypto = "1.1.0" -tree-sitter = "4.3.2" -editor = "0.23.6" -glide = "4.16.0" -androidx-vectordrawable = "1.2.0" -androidx-navigation = "2.7.7" -ksp = "2.3.6" -antlr4 = "4.13.1" -androidx-work = "2.10.0" -androidx-espresso = "3.5.1" -retrofit = "2.11.0" -markwon = "4.6.2" -maven-publish-plugin = "0.27.0" -logback = "1.5.3" -room = "2.8.4" -utilcodex = "1.31.1" -viewpager2 = "1.1.0-beta02" -zoomage = "1.3.1" -monitor = "1.6.1" -monitorVersion = "1.7.2" -sentry = "8.29.0" -sentry-gradle-plugin = "5.12.2" -mockk = "1.14.5" -firebase-bom = "33.7.0" -google-services = "4.4.2" - -rikka-hidden-api = "4.4.0" -rikka-refine = "4.4.0" -rikkax-parcelablelist = "2.0.1" -libsu-core = "6.0.0" - -## IMPORTANT! -## When updating this value, please manually compile libbrotli.so from Brotli4j for Android and -## put it in app/src/main/jniLibs -brotli4j = "1.18.0" -spotless = "7.2.1" -fragmentKtx = "1.8.8" - -protobuf = "4.32.1" -protobuf-plugin = "0.9.5" -protoc-gen-kotlin-ext = "1.1.0" -sonarqube = "7.0.0.6105" +# appcompat tracks the repo majority (21 modules) and matches the literal in +# ai-core/build.gradle.kts. Declaring 1.7.1 here while the parent module pinned +# 1.6.1 put two versions of one library in a single build. +appcompat = "1.6.1" +coreKtx = "1.13.1" -compose-bom = "2024.02.00" -compose-compiler = "2.1.21" - -leakcanary = "2.14" - -pebble = "4.1.1" +# One version for the whole kotlinx-coroutines family. llama-api pulled +# coroutines-core 1.10.2 while ai-core/build.gradle.kts pulled +# coroutines-android 1.8.1 -- the two artifacts are released as a set and must +# not be split across one build. +coroutines = "1.8.1" +slf4j = "2.0.12" [libraries] - -# Dependencies in composite build -androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "activityKtx" } -androidx-appcompat-v171 = { module = "androidx.appcompat:appcompat", version.ref = "appcompatVersion" } -androidx-constraintlayout-v214 = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" } -androidx-core-ktx-v1120 = { module = "androidx.core:core-ktx", version.ref = "coreKtx" } -androidx-core-ktx-v1170 = { module = "androidx.core:core-ktx", version.ref = "coreKtxVersion" } -androidx-fragment = { module = "androidx.fragment:fragment", version.ref = "fragment" } -androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycleViewmodelKtx" } -androidx-lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "lifecycleViewmodelKtx" } -androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycleViewmodelKtx" } -androidx-palette-ktx = { module = "androidx.palette:palette-ktx", version.ref = "paletteKtx" } -androidx-preference-ktx = { module = "androidx.preference:preference-ktx", version.ref = "preferenceKtxVersion" } -androidx-recyclerview-v132 = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" } -androidx-security-crypto = { module = "androidx.security:security-crypto", version.ref = "securityCrypto" } -androidx-sqlite-ktx = { module = "androidx.sqlite:sqlite-ktx", version.ref = "androidx-sqlite" } -androidx-sqlite-framework = { module = "androidx.sqlite:sqlite-framework", version.ref = "androidx-sqlite" } -androidx-viewpager2-v110beta02 = { module = "androidx.viewpager2:viewpager2", version.ref = "viewpager2" } -bcpkix-jdk18on = { module = "org.bouncycastle:bcpkix-jdk18on", version.ref = "bcprovJdk18on" } -bcprov-jdk18on = { module = "org.bouncycastle:bcprov-jdk18on", version.ref = "bcprovJdk18on" } -colorpickerview = { module = "com.github.skydoves:colorpickerview", version.ref = "colorpickerview" } -commons-compress = { module = "org.apache.commons:commons-compress", version.ref = "commonsCompress" } -tukaani-xz = { module = "org.tukaani:xz", version.ref = "tukaaniXz" } -commons-text = { module = "org.apache.commons:commons-text", version.ref = "commonsText" } -commons-text-v1140 = { module = "org.apache.commons:commons-text", version.ref = "commonsTextVersion" } -composite-appintro = { module = "com.itsaky.androidide.build:appintro" } -composite-constants = { module = "com.itsaky.androidide.build:constants" } -composite-desugaringCore = { module = "com.itsaky.androidide.build:desugaring-core" } -composite-fuzzysearch = { module = "com.itsaky.androidide.build:fuzzysearch" } -composite-googleJavaFormat = { module = "com.itsaky.androidide.build:google-java-format" } -composite-javac = { module = "com.itsaky.androidide.build:javac" } -composite-javapoet = { module = "com.itsaky.androidide.build:javapoet" } -composite-jaxp = { module = "com.itsaky.androidide.build:jaxp" } -composite-jdt = { module = "com.itsaky.androidide.build:jdt" } -composite-layoutlibApi = { module = "com.itsaky.androidide.build:layoutlib-api" } -composite-treeview = { module = "com.itsaky.androidide.build:treeview" } - -# Room -desugar_jdk_libs-v215 = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar_jdk_libs" } -google-genai = { module = "com.google.genai:google-genai", version.ref = "googleGenai" } -gson-v2101 = { module = "com.google.code.gson:gson", version.ref = "gson" } -koin-android = { module = "io.insert-koin:koin-android", version.ref = "koinAndroid" } -kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutinesCore" } -kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" } -room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" } -room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" } - -# Compose -compose-bom = { module = "androidx.compose:compose-bom", version.ref = "compose-bom" } -compose-runtime = { module = "androidx.compose.runtime:runtime" } -compose-ui = { module = "androidx.compose.ui:ui" } -compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } -compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" } -compose-foundation = { module = "androidx.compose.foundation:foundation" } -compose-material3 = { module = "androidx.compose.material3:material3" } -compose-activity = { module = "androidx.activity:activity-compose", version = "1.8.2" } - -# Firebase -firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebase-bom" } -firebase-analytics = { module = "com.google.firebase:firebase-analytics-ktx" } - -# Sentry -sentry-core = { module = "io.sentry:sentry", version.ref = "sentry" } -sentry-android-core = { module = "io.sentry:sentry-android-core", version.ref = "sentry" } -sentry-android-replay = { module = "io.sentry:sentry-android-replay", version.ref = "sentry" } - -# AndroidIDE -androidide-ts = { module = "com.itsaky.androidide.treesitter:android-tree-sitter", version.ref = "tree-sitter" } -androidide-ts-java = { module = "com.itsaky.androidide.treesitter:tree-sitter-java", version.ref = "tree-sitter" } -androidide-ts-json = { module = "com.itsaky.androidide.treesitter:tree-sitter-json", version.ref = "tree-sitter" } -androidide-ts-kotlin = { module = "com.itsaky.androidide.treesitter:tree-sitter-kotlin", version.ref = "tree-sitter" } -androidide-ts-log = { module = "com.itsaky.androidide.treesitter:tree-sitter-log", version.ref = "tree-sitter" } -androidide-ts-xml = { module = "com.itsaky.androidide.treesitter:tree-sitter-xml", version.ref = "tree-sitter" } - -#Layout Editor -utilcodex = { module = "com.blankj:utilcodex", version.ref = "utilcodex" } -zoomage = { module = "com.jsibbold:zoomage", version.ref = "zoomage" } -sora-bom = { module = "io.github.Rosemoe.sora-editor:bom", version.ref = "editor" } -sora-language-textmate = { module = "io.github.Rosemoe.sora-editor:language-textmate" } - -# Common -common-editor = { module = "io.github.Rosemoe.sora-editor:editor" } -common-utilcode = { module = "com.blankj:utilcodex", version = "1.31.1" } -common-glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" } -common-glide_ap = { module = "com.github.bumptech.glide:compiler", version.ref = "glide" } -common-jsoup = { module = "org.jsoup:jsoup", version = "1.19.1" } -common-antlr4 = { module = "org.antlr:antlr4", version.ref = "antlr4" } -common-antlr4-runtime = { module = "org.antlr:antlr4-runtime", version.ref = "antlr4" } -common-javaparser = { module = "com.github.javaparser:javaparser-symbol-solver-core", version = "3.25.8" } -common-lang3 = { module = "org.apache.commons:commons-lang3", version = "3.14.0" } -common-io = { module = "commons-io:commons-io", version = "2.15.1" } -common-kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } -common-kotlin-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlin-coroutines" } -common-kotlin-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlin-coroutines" } -common-jkotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } -common-javapoet = { module = "com.squareup:javapoet", version = "1.13.0" } -common-ksp = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "ksp" } -common-jsonrpc = { module = "org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc", version = "0.22.0" } -common-lsp4j = { module = "org.eclipse.lsp4j:org.eclipse.lsp4j", version = "0.22.0" } -common-retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } -common-retrofit-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" } -common-leakcanary = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanary" } -common-markwon-core = { module = "io.noties.markwon:core", version.ref = "markwon" } -common-markwon-extStrikethrough = { module = "io.noties.markwon:ext-strikethrough", version.ref = "markwon" } -common-markwon-linkify = { module = "io.noties.markwon:linkify", version.ref = "markwon" } -common-markwon-recycler = { module = "io.noties.markwon:recycler", version.ref = "markwon" } -common-hiddenApiBypass = { module = "org.lsposed.hiddenapibypass:hiddenapibypass", version = "6.1" } -common-termuxAmLib = { module = "com.termux:termux-am-library", version = "v2.0.0" } -common-charts = { module = "com.github.AppDevNext:AndroidChart", version = "3.1.0.21" } -brotli4j = { module = "com.aayushatharva.brotli4j:brotli4j", version.ref = "brotli4j" } -brotli4j-linux-x64 = { module = "com.aayushatharva.brotli4j:native-linux-x86_64", version.ref = "brotli4j" } -brotli4j-linux-aarch64 = { module = "com.aayushatharva.brotli4j:native-linux-aarch64", version.ref = "brotli4j" } -brotli4j-windows-x64 = { module = "com.aayushatharva.brotli4j:native-windows-x86_64", version.ref = "brotli4j" } -brotli4j-windows-aarch64 = { module = "com.aayushatharva.brotli4j:native-windows-aarch64", version.ref = "brotli4j" } -brotli4j-osx-x64 = { module = "com.aayushatharva.brotli4j:native-osx-x86_64", version.ref = "brotli4j" } -brotli4j-osx-aarch64 = { module = "com.aayushatharva.brotli4j:native-osx-aarch64", version.ref = "brotli4j" } - -rikka-hidden-compat = { module = "dev.rikka.hidden:compat", version.ref = "rikka-hidden-api" } -rikka-hidden-stub = { module = "dev.rikka.hidden:stub", version.ref = "rikka-hidden-api" } -rikka-refine-runtime = { module = "dev.rikka.tools.refine:runtime", version.ref = "rikka-refine" } -rikka-refine-annotation = { module = "dev.rikka.tools.refine:annotation", version.ref = "rikka-refine" } -rikka-refine-annotation-processor = { module = "dev.rikka.tools.refine:annotation-processor", version.ref = "rikka-refine" } -rikkax-parcelablelist = { module = "dev.rikka.rikkax.parcelablelist:parcelablelist", version.ref = "rikkax-parcelablelist" } -rikkax-htmlktx = { module = "dev.rikka.rikkax.html:html-ktx", version = "1.1.2" } -libsu-core = { module = "com.github.topjohnwu.libsu:core", version.ref = "libsu-core" } -boringssl = { module = "io.github.vvb2060.ndk:boringssl", version = "20250114" } - -# AndroidX -androidx-annotation = { module = "androidx.annotation:annotation", version = "1.9.1" } -androidx-appcompat = { module = "androidx.appcompat:appcompat", version = "1.7.0" } -androidx-cardview = { module = "androidx.cardview:cardview", version = "1.0.0" } -androidx-collection = { module = "androidx.collection:collection", version = "1.4.0" } -androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version = "2.2.1" } -androidx-coordinatorlayout = { module = "androidx.coordinatorlayout:coordinatorlayout", version = "1.3.0" } -androidx-drawer = { module = "androidx.drawerlayout:drawerlayout", version = "1.2.0" } -androidx-grid = { module = "androidx.gridlayout:gridlayout", version = "1.0.0" } -androidx-preference = { module = "androidx.preference:preference", version = "1.2.1" } -androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version = "1.4.0" } -androidx-vectors = { module = "androidx.vectordrawable:vectordrawable", version.ref = "androidx-vectordrawable" } -androidx-animated_vectors = { module = "androidx.vectordrawable:vectordrawable-animated", version.ref = "androidx-vectordrawable" } -androidx-core = { module = "androidx.core:core", version = "1.13.1" } -androidx-core-ktx = { module = "androidx.core:core-ktx", version = "1.13.1" } -androidx-fragment_ktx = { module = "androidx.fragment:fragment-ktx", version = "1.6.2" } -androidx-libDesugaring = { module = "com.android.tools:desugar_jdk_libs", version = "2.0.4" } -androidx-splashscreen = { module = "androidx.core:core-splashscreen", version = "1.0.1" } -androidx-transition = { module = "androidx.transition:transition-ktx", version = "1.5.1" } -androidx-nav-fragment = { module = "androidx.navigation:navigation-fragment-ktx", version = "2.8.8" } -androidx-nav-ui = { module = "androidx.navigation:navigation-ui-ktx", version = "2.8.8" } -androidx-tracing = { module = "androidx.tracing:tracing", version = "1.2.0" } -androidx-tracing-ktx = { module = "androidx.tracing:tracing-ktx", version = "1.2.0" } -androidx-viewpager = { module = "androidx.viewpager:viewpager", version = "1.0.0" } -androidx-viewpager2 = { module = "androidx.viewpager2:viewpager2", version = "1.0.0" } -#noinspection GradleDependency -androidx-window-v1alpha9 = { module = "androidx.window:window", version = "1.0.0-alpha09" } -androidx-work = { module = "androidx.work:work-runtime", version.ref = "androidx-work" } -androidx-work-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "androidx-work" } - -# Google -google-material = { module = "com.google.android.material:material", version = "1.12.0" } -google-gson = { module = "com.google.code.gson:gson", version = "2.12.1" } -google-guava = { module = "com.google.guava:guava", version = "33.4.0-android" } -google-auto-value-annotations = { module = "com.google.auto.value:auto-value-annotations", version = "1.11.0" } -google-auto-value-ap = { module = "com.google.auto.value:auto-value", version = "1.11.0" } -google-auto-service-annotations = { module = "com.google.auto.service:auto-service-annotations", version = "1.1.1" } -google-auto-service = { module = "com.google.auto.service:auto-service", version = "1.1.1" } -google-protobuf-java = { module = "com.google.protobuf:protobuf-javalite", version.ref = "protobuf" } -google-protobuf-kotlin = { module = "com.google.protobuf:protobuf-kotlin-lite", version.ref = "protobuf" } -google-protobuf-gradle = { module = "com.google.protobuf:protobuf-gradle-plugin", version.ref = "protobuf-plugin" } -google-java-format = { module = "com.google.googlejavaformat:google-java-format", version = "1.20.0" } -google-flexbox = { module = "com.google.android.flexbox:flexbox", version = "3.0.0" } - -# AAPT2 -aapt2-common = { module = "com.android.tools:common", version = "31.2.2" } -aapt2-annotations = { module = "com.android.tools:annotations", version = "31.2.2" } -aapt2-jb-annotations = { module = "org.jetbrains:annotations", version = "24.1.0" } - -logging-logback-core = { module = "ch.qos.logback:logback-core", version.ref = "logback" } -logging-logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } - -# XML -xml-xercesImpl = { module = "xerces:xercesImpl", version = "2.12.2" } -xml-apis = { module = "xml-apis:xml-apis", version = "2.0.2" } -xml-remark = { module = "com.kotcrab.remark:remark", version = "1.2.0" } -xml-resolver = { module = "xml-resolver:xml-resolver", version = "1.2" } -xml-jb-annotations = { module = "org.jetbrains:annotations", version = "24.1.0" } - -# GIT -git-jgit = { module = "org.eclipse.jgit:org.eclipse.jgit", version = "6.8.0.202311291450-r" } - -# Tests -tests-junit = { module = "junit:junit", version = "4.13.2" } -tests-junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" } -tests-junit-platformLauncher = { module = "org.junit.platform:junit-platform-launcher" } -core-tests-anroidx-arch = { module = "androidx.arch.core:core-testing", version.ref = "anroidx-test-core" } -tests-google-truth = { module = "com.google.truth:truth", version = "1.4.1" } -tests-robolectric = { module = "org.robolectric:robolectric", version = "4.11.1" } -tests-androidx-test-core = { module = "androidx.test:core", version = "1.5.0" } -tests-androidx-test-monitor = { module = "androidx.test:monitor", version = "1.8.0" } -tests-androidx-test-runner = { module = "androidx.test:runner", version = "1.6.2" } -tests-androidx-test-rules = { module = "androidx.test:rules", version = "1.5.0" } -tests-androidx-junit = { module = "androidx.test.ext:junit", version = "1.1.5" } -tests-androidx-work-testing = { module = "androidx.work:work-testing", version.ref = "androidx-work" } -tests-androidx-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-espresso" } -tests-androidx-espresso-contrib = { module = "androidx.test.espresso:espresso-contrib", version.ref = "androidx-espresso" } -tests-androidx-uiautomator = { module = "androidx.test.uiautomator:uiautomator", version = "2.3.0" } -tests-mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "5.2.1" } -tests-mockk = { module = "io.mockk:mockk", version.ref = "mockk" } -tests-mockk-android = { module = "io.mockk:mockk-android", version.ref = "mockk" } -tests-barista = { module = "com.adevinta.android:barista", version = "4.3.0" } -tests-kaspresso = { module = "com.kaspersky.android-components:kaspresso", version = "1.6.0" } -tests-orchestrator = { module = "androidx.test:orchestrator", version = "1.5.1" } -tests-junit-kts = { module = "androidx.test.ext:junit-ktx", version = "1.2.1" } -tests-kotlinx-coroutines = {module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutinesCore"} - -# Tooling -tooling-builderModel = { module = "com.android.tools.build:builder-model", version.ref = "agp-tooling" } -tooling-gradleApi = { module = "com.itsaky.androidide.gradle:gradle-tooling-api", version.ref = "gradle-tooling" } -tooling-slf4j = { module = "org.slf4j:slf4j-api", version = "2.0.12" } - -# Classpaths -android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" } -kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } -kotlin-serialization-plugin = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlin" } -nav-safe-args-gradle-plugin = { module = "androidx.navigation:navigation-safe-args-gradle-plugin", version.ref = "androidx-navigation" } -maven-publish = { module = "com.vanniktech:gradle-maven-publish-plugin", version.ref = "maven-publish-plugin" } -androidx-monitor = { group = "androidx.test", name = "monitor", version.ref = "monitor" } -monitor = { group = "androidx.test", name = "monitor", version.ref = "monitorVersion" } -org-json = { module = "org.json:json", version = "20210307"} - -pebble = { module = "io.pebbletemplates:pebble", version.ref = "pebble" } -kotlinx-metadata = { module = "org.jetbrains.kotlin:kotlin-metadata-jvm", version.ref = "kotlin" } - -[plugins] -android-application = { id = "com.android.application", version.ref = "agp" } -android-library = { id = "com.android.library", version.ref = "agp" } -kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } -kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } -kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } -maven-publish = { id = "com.vanniktech.maven.publish.base", version.ref = "maven-publish-plugin" } -gradle-publish = { id = "com.gradle.plugin-publish", version = "1.2.1" } -spotless = { id = "com.diffplug.spotless", version.ref = "spotless" } -sentry = { id = "io.sentry.android.gradle", version.ref = "sentry-gradle-plugin" } -google-services = { id = "com.google.gms.google-services", version.ref = "google-services" } -google-protobuf = { id = "com.google.protobuf", version.ref = "protobuf-plugin" } -rikka-autoresconfig = { id = "dev.rikka.tools.autoresconfig", version = "1.2.2" } -rikka-materialthemebuilder = { id = "dev.rikka.tools.materialthemebuilder", version = "1.5.1" } -rikka-refine = { id = "dev.rikka.tools.refine", version.ref = "rikka-refine" } - -sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" } +androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" } +androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" } +kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } +slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } diff --git a/ai-core/gradle/wrapper/gradle-wrapper.properties b/ai-core/gradle/wrapper/gradle-wrapper.properties index 692c2dc2..42f0071e 100644 --- a/ai-core/gradle/wrapper/gradle-wrapper.properties +++ b/ai-core/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/ai-core/llama-impl/build.gradle.kts b/ai-core/llama-impl/build.gradle.kts index b940f4ff..7bb87ea1 100644 --- a/ai-core/llama-impl/build.gradle.kts +++ b/ai-core/llama-impl/build.gradle.kts @@ -11,7 +11,7 @@ kotlin { android { namespace = "android.llama.cpp" - compileSdk = 34 + compileSdk = 36 defaultConfig { minSdk = 33 @@ -65,7 +65,7 @@ android { dependencies { implementation(project(":llama-api")) - implementation(libs.androidx.core.ktx.v1120) - implementation(libs.androidx.appcompat.v171) - implementation(libs.tooling.slf4j) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.slf4j.api) } diff --git a/ai-core/settings.gradle.kts b/ai-core/settings.gradle.kts index 814b83f3..e6de23ea 100644 --- a/ai-core/settings.gradle.kts +++ b/ai-core/settings.gradle.kts @@ -18,7 +18,7 @@ buildscript { dependencies { classpath(files("../libs/plugin-api.jar")) classpath(files("../libs/gradle-plugin.jar")) - classpath("com.android.tools.build:gradle:8.13.2") + classpath("com.android.tools.build:gradle:8.11.0") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.0") } } diff --git a/ai-literacy-course/build.gradle.kts b/ai-literacy-course/build.gradle.kts index 78a2fa9c..06342e17 100644 --- a/ai-literacy-course/build.gradle.kts +++ b/ai-literacy-course/build.gradle.kts @@ -19,12 +19,12 @@ pluginBuilder { android { namespace = "org.appdevforall.ailiteracycourse" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "org.appdevforall.ailiteracycourse" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/apk-viewer/build.gradle.kts b/apk-viewer/build.gradle.kts index 765f3bd1..460265e0 100644 --- a/apk-viewer/build.gradle.kts +++ b/apk-viewer/build.gradle.kts @@ -12,12 +12,12 @@ pluginBuilder { android { namespace = "com.example.sampleplugin" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "com.example.sampleplugin" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/bookshelf/build.gradle.kts b/bookshelf/build.gradle.kts index 339ac3cf..cdb607ae 100644 --- a/bookshelf/build.gradle.kts +++ b/bookshelf/build.gradle.kts @@ -12,12 +12,12 @@ pluginBuilder { android { namespace = "org.appdevforall.bookshelfplugin" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "org.appdevforall.bookshelfplugin" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } @@ -46,7 +46,7 @@ dependencies { compileOnly(files("../libs/gradle-plugin.jar")) compileOnly(files("../libs/plugin-api.jar")) - implementation("org.jetbrains.kotlin:kotlin-stdlib:2.1.21") + implementation("org.jetbrains.kotlin:kotlin-stdlib:2.3.0") } tasks.matching { diff --git a/client-time-tracker/build.gradle.kts b/client-time-tracker/build.gradle.kts index bb8c2950..341278f4 100644 --- a/client-time-tracker/build.gradle.kts +++ b/client-time-tracker/build.gradle.kts @@ -14,12 +14,12 @@ pluginBuilder { android { namespace = "com.appdevforall.contractor.plugin" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "com.appdevforall.contractor.plugin" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/client-time-tracker/gradle/wrapper/gradle-wrapper.properties b/client-time-tracker/gradle/wrapper/gradle-wrapper.properties index df97d72b..d4081da4 100644 --- a/client-time-tracker/gradle/wrapper/gradle-wrapper.properties +++ b/client-time-tracker/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/client-time-tracker/settings.gradle.kts b/client-time-tracker/settings.gradle.kts index 9862b68e..a5210d81 100644 --- a/client-time-tracker/settings.gradle.kts +++ b/client-time-tracker/settings.gradle.kts @@ -15,7 +15,7 @@ buildscript { dependencies { classpath(files("../libs/plugin-api.jar")) classpath(files("../libs/gradle-plugin.jar")) - classpath("com.android.tools.build:gradle:8.8.2") + classpath("com.android.tools.build:gradle:8.11.0") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.0") } } diff --git a/code-suggestions-plugin/build.gradle.kts b/code-suggestions-plugin/build.gradle.kts index af56914f..7dc71ece 100644 --- a/code-suggestions-plugin/build.gradle.kts +++ b/code-suggestions-plugin/build.gradle.kts @@ -10,12 +10,12 @@ pluginBuilder { android { namespace = "com.itsaky.androidide.plugins.codesuggestions" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "com.itsaky.androidide.plugins.codesuggestions" minSdk = 33 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } @@ -42,13 +42,13 @@ dependencies { compileOnly(files("../libs/plugin-api.jar")) // Coroutines for async LLM calls and debouncing - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1") // Material Design implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.android.material:material:1.10.0") - implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2") - implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") + implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7") + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.7") } tasks.matching { diff --git a/compose-preview/build.gradle.kts b/compose-preview/build.gradle.kts index 12086457..6a7fb69e 100644 --- a/compose-preview/build.gradle.kts +++ b/compose-preview/build.gradle.kts @@ -11,12 +11,12 @@ pluginBuilder { android { namespace = "org.appdevforall.composepreview" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "org.appdevforall.composepreview" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" diff --git a/compose-preview/gradle/wrapper/gradle-wrapper.properties b/compose-preview/gradle/wrapper/gradle-wrapper.properties index df97d72b..d4081da4 100644 --- a/compose-preview/gradle/wrapper/gradle-wrapper.properties +++ b/compose-preview/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/compose-preview/settings.gradle.kts b/compose-preview/settings.gradle.kts index 490288c7..1d1a6d2e 100644 --- a/compose-preview/settings.gradle.kts +++ b/compose-preview/settings.gradle.kts @@ -15,7 +15,7 @@ buildscript { dependencies { classpath(files("../libs/plugin-api.jar")) classpath(files("../libs/gradle-plugin.jar")) - classpath("com.android.tools.build:gradle:8.8.2") + classpath("com.android.tools.build:gradle:8.11.0") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.0") classpath("org.jetbrains.kotlin:compose-compiler-gradle-plugin:2.3.0") } diff --git a/cotg-ndk/build.gradle.kts b/cotg-ndk/build.gradle.kts index 5b0ad299..6a6577ad 100644 --- a/cotg-ndk/build.gradle.kts +++ b/cotg-ndk/build.gradle.kts @@ -12,12 +12,12 @@ pluginBuilder { android { namespace = "com.cotg.cotgndk" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "com.cotg.cotgndk" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 6 versionName = "6.0.0" } @@ -63,7 +63,7 @@ dependencies { implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.android.material:material:1.10.0") implementation("androidx.fragment:fragment-ktx:1.8.8") - implementation("org.jetbrains.kotlin:kotlin-stdlib:2.1.21") + implementation("org.jetbrains.kotlin:kotlin-stdlib:2.3.0") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0") } diff --git a/flutter-template/build.gradle.kts b/flutter-template/build.gradle.kts index a2a2692a..dd017486 100644 --- a/flutter-template/build.gradle.kts +++ b/flutter-template/build.gradle.kts @@ -50,7 +50,7 @@ dependencies { implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.android.material:material:1.10.0") - implementation("org.jetbrains.kotlin:kotlin-stdlib:2.1.0") + implementation("org.jetbrains.kotlin:kotlin-stdlib:2.3.0") } tasks.withType().configureEach { diff --git a/flutter-template/settings.gradle.kts b/flutter-template/settings.gradle.kts index 0342a1b2..5de2bb66 100644 --- a/flutter-template/settings.gradle.kts +++ b/flutter-template/settings.gradle.kts @@ -15,7 +15,7 @@ buildscript { classpath(files("../libs/plugin-api.jar")) classpath(files("../libs/gradle-plugin.jar")) classpath("com.android.tools.build:gradle:8.11.0") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.0") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.0") } } diff --git a/get-ai-models/gradle/libs.versions.toml b/get-ai-models/gradle/libs.versions.toml index 03f0ddab..d0a21699 100644 --- a/get-ai-models/gradle/libs.versions.toml +++ b/get-ai-models/gradle/libs.versions.toml @@ -1,13 +1,13 @@ [versions] # Must match the kotlin-gradle-plugin classpath pinned in settings.gradle.kts. -kotlin = "2.1.0" +kotlin = "2.3.0" coreKtx = "1.13.1" appcompat = "1.6.1" material = "1.12.0" recyclerview = "1.3.2" fragment = "1.8.8" -lifecycle = "2.6.2" -coroutines = "1.6.4" +lifecycle = "2.8.7" +coroutines = "1.8.1" junit = "4.13.2" json = "20240303" diff --git a/get-ai-models/settings.gradle.kts b/get-ai-models/settings.gradle.kts index 4a534b5d..f4066634 100644 --- a/get-ai-models/settings.gradle.kts +++ b/get-ai-models/settings.gradle.kts @@ -15,7 +15,7 @@ buildscript { classpath(files("../libs/plugin-api.jar")) classpath(files("../libs/gradle-plugin.jar")) classpath("com.android.tools.build:gradle:8.11.0") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.0") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.0") } } diff --git a/icons-repository/build.gradle.kts b/icons-repository/build.gradle.kts index 82840a5b..1f594550 100644 --- a/icons-repository/build.gradle.kts +++ b/icons-repository/build.gradle.kts @@ -12,11 +12,11 @@ pluginBuilder { android { namespace = "dev.omar.plugin.iconsrepo" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "dev.omar.plugin.iconsrepo" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/keystore-generator/build.gradle.kts b/keystore-generator/build.gradle.kts index cd5c4349..45d07e86 100644 --- a/keystore-generator/build.gradle.kts +++ b/keystore-generator/build.gradle.kts @@ -12,12 +12,12 @@ pluginBuilder { android { namespace = "com.appdevforall.keygen.plugin" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "com.appdevforall.keygen.plugin" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/layout-editor/build.gradle.kts b/layout-editor/build.gradle.kts index 98afaba1..7eb67da7 100644 --- a/layout-editor/build.gradle.kts +++ b/layout-editor/build.gradle.kts @@ -10,12 +10,12 @@ pluginBuilder { android { namespace = "org.appdevforall.codeonthego.layouteditor" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "org.appdevforall.codeonthego.layouteditor" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/layout-editor/gradle/wrapper/gradle-wrapper.properties b/layout-editor/gradle/wrapper/gradle-wrapper.properties index df97d72b..d4081da4 100644 --- a/layout-editor/gradle/wrapper/gradle-wrapper.properties +++ b/layout-editor/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/layout-editor/settings.gradle.kts b/layout-editor/settings.gradle.kts index 8b717726..087f3668 100644 --- a/layout-editor/settings.gradle.kts +++ b/layout-editor/settings.gradle.kts @@ -15,7 +15,7 @@ buildscript { dependencies { classpath(files("../libs/plugin-api.jar")) classpath(files("../libs/gradle-plugin.jar")) - classpath("com.android.tools.build:gradle:8.8.2") + classpath("com.android.tools.build:gradle:8.11.0") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.0") } } diff --git a/markdown-preview/build.gradle.kts b/markdown-preview/build.gradle.kts index 5be08435..4e77ce0e 100644 --- a/markdown-preview/build.gradle.kts +++ b/markdown-preview/build.gradle.kts @@ -12,12 +12,12 @@ pluginBuilder { android { namespace = "com.codeonthego.markdownpreviewer" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "com.codeonthego.markdownpreviewer" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/ndk-installer-plugin/build.gradle.kts b/ndk-installer-plugin/build.gradle.kts index 6d392a53..7926eb1e 100644 --- a/ndk-installer-plugin/build.gradle.kts +++ b/ndk-installer-plugin/build.gradle.kts @@ -17,12 +17,12 @@ pluginBuilder { android { namespace = "org.appdevforall.ndkinstaller" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "org.appdevforall.ndkinstaller" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } @@ -55,7 +55,7 @@ dependencies { compileOnly(files("../libs/plugin-api.jar")) - implementation("org.jetbrains.kotlin:kotlin-stdlib:2.1.21") + implementation("org.jetbrains.kotlin:kotlin-stdlib:2.3.0") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0") } diff --git a/pebble-custom-function-template-installer/build.gradle.kts b/pebble-custom-function-template-installer/build.gradle.kts index d9d767b4..52ed2402 100644 --- a/pebble-custom-function-template-installer/build.gradle.kts +++ b/pebble-custom-function-template-installer/build.gradle.kts @@ -52,7 +52,7 @@ dependencies { implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.android.material:material:1.10.0") implementation("androidx.fragment:fragment-ktx:1.8.8") - implementation("org.jetbrains.kotlin:kotlin-stdlib:2.1.0") + implementation("org.jetbrains.kotlin:kotlin-stdlib:2.3.0") } tasks.withType().configureEach { diff --git a/pebble-custom-function-template-installer/settings.gradle.kts b/pebble-custom-function-template-installer/settings.gradle.kts index 07f43eaa..380415e1 100644 --- a/pebble-custom-function-template-installer/settings.gradle.kts +++ b/pebble-custom-function-template-installer/settings.gradle.kts @@ -15,7 +15,7 @@ buildscript { classpath(files("libs/plugin-api.jar")) classpath(files("libs/gradle-plugin.jar")) classpath("com.android.tools.build:gradle:8.11.0") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.0") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.0") } } diff --git a/project-to-template/build.gradle.kts b/project-to-template/build.gradle.kts index 5a950ec4..11e7d739 100644 --- a/project-to-template/build.gradle.kts +++ b/project-to-template/build.gradle.kts @@ -12,12 +12,12 @@ pluginBuilder { android { namespace = "org.appdevforall.projecttotemplate" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "org.appdevforall.projecttotemplate" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/python-tools/build.gradle.kts b/python-tools/build.gradle.kts index e5b21ba9..6948f123 100644 --- a/python-tools/build.gradle.kts +++ b/python-tools/build.gradle.kts @@ -12,12 +12,12 @@ pluginBuilder { android { namespace = "com.appdevforall.python.plugin" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "com.appdevforall.python.plugin" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/rainbow-on-the-go/build.gradle.kts b/rainbow-on-the-go/build.gradle.kts index 905b9d62..4f24246b 100644 --- a/rainbow-on-the-go/build.gradle.kts +++ b/rainbow-on-the-go/build.gradle.kts @@ -12,12 +12,12 @@ pluginBuilder { android { namespace = "org.appdevforall.rainbowonthego" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "org.appdevforall.rainbowonthego" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/random-xkcd/build.gradle.kts b/random-xkcd/build.gradle.kts index 12077797..e1447d9a 100644 --- a/random-xkcd/build.gradle.kts +++ b/random-xkcd/build.gradle.kts @@ -12,12 +12,12 @@ pluginBuilder { android { namespace = "org.appdevforall.randomxkcd" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "org.appdevforall.randomxkcd" minSdk = 26 - targetSdk = 34 + targetSdk = 36 versionCode = 1 versionName = "1.0.0" } diff --git a/scripts/check-toolchain.sh b/scripts/check-toolchain.sh new file mode 100755 index 00000000..fe9b61fa --- /dev/null +++ b/scripts/check-toolchain.sh @@ -0,0 +1,254 @@ +#!/usr/bin/env bash +# +# check-toolchain.sh (ADFA-4907) +# +# Assert that every Gradle module in this repo declares the one standard +# toolchain. Pure text inspection -- no Gradle run, no JDK, no network, so it +# is fast enough to gate every pull request. +# +# WHY THESE NUMBERS: they are not "latest". They track the toolchain that Code +# On The Go itself ships on-device, because these plugins are meant to be built +# *with* Code On The Go (ADFA-4693). Verified against CoGo build C-d-0727-1613: +# +# * android-36 is the ONLY installed platform in CoGo's bundled SDK +# * AGP 8.11.0 is the ONLY AGP in CoGo's Gradle caches +# * Gradle 8.14.3 is CoGo's Gradle +# * CoGo pins no Kotlin version (it fetches per project); 2.3.0 is our standard +# * Java 17 was already uniform across every plugin +# +# Bumping any value below therefore means re-verifying against a real CoGo +# build first -- not just picking something newer. +# +# SCOPE: this walks *every* build.gradle.kts, deliberately broader than the +# "top-level dir applying com.itsaky.androidide.plugins.build" definition of a +# plugin used by .githooks/pre-push (plugin_dirs()), scripts/update-libs.sh and +# CLAUDE.md. Subprojects such as ai-core/llama-api and ai-core/llama-impl +# compile into a plugin and must agree on the toolchain, but are invisible to +# that definition -- which is exactly how ai-core/llama-impl kept compileSdk 34 +# through a dedicated standardization pass. Do not "unify" discovery onto +# plugin_dirs(): it would silently drop those modules from coverage. +# +# Usage: +# scripts/check-toolchain.sh # check; exit 1 and print a report on drift +# scripts/check-toolchain.sh --list # print the versions it checks, exit 0 +# +set -euo pipefail + +# --------------------------------------------------------------------------- +# The standard +# --------------------------------------------------------------------------- +EXPECTED_COMPILE_SDK="36" +EXPECTED_TARGET_SDK="36" +EXPECTED_AGP="8.11.0" +EXPECTED_KOTLIN="2.3.0" +EXPECTED_GRADLE="8.14.3" +EXPECTED_GRADLE_DIST="bin" # gradle--bin.zip, not -all.zip +EXPECTED_JAVA="JavaVersion.VERSION_17" +EXPECTED_JVM_TARGET="JVM_17" + +# minSdk is deliberately NOT checked. It legitimately varies by what a plugin +# needs (21 for the template installers, 26 for most, 28 for Beepy and +# sketch-to-ui, 33 for the AI plugins which rely on API-33 runtime behavior). +# Do not "standardize" it here. + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$REPO_ROOT" + +failures=() # drift reports, printed on exit 1 +declared=() # "