diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5647ed7..701804f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,12 @@ concurrency: jobs: build: + name: "Build / KSP2 = ${{ matrix.useKSP2 }}" runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + useKSP2: [true, false] steps: - name: Checkout @@ -37,8 +42,8 @@ jobs: uses: gradle/actions/setup-gradle@v3 - name: Test - run: ./gradlew check + run: ./gradlew check -Pksp.useKSP2=${{ matrix.useKSP2 }} - name: Publish (default branch only) - if: github.repository == 'slackhq/EitherNet' && github.ref == 'refs/heads/main' + if: github.repository == 'slackhq/EitherNet' && github.ref == 'refs/heads/main' && matrix.useKSP2 == 'false' run: ./gradlew publish -PmavenCentralUsername=${{ secrets.SONATYPEUSERNAME }} -PmavenCentralPassword=${{ secrets.SONATYPEPASSWORD }} diff --git a/.gitignore b/.gitignore index b2f2e95..ae48729 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ build reports .cxx docs/ -out/ \ No newline at end of file +out/ +.kotlin/ \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index f8b84ae..d6aa437 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,12 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import com.google.devtools.ksp.gradle.KspTaskJvm import io.gitlab.arturbosch.detekt.Detekt import java.net.URI import org.jetbrains.dokka.gradle.DokkaTask import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions plugins { alias(libs.plugins.kotlin.jvm) @@ -37,39 +35,29 @@ val tomlJvmTarget = libs.versions.jvmTarget.get() pluginManager.withPlugin("java") { configure { - toolchain { languageVersion.set(JavaLanguageVersion.of(libs.versions.jdk.get().toInt())) } + toolchain { languageVersion.set(libs.versions.jdk.map(JavaLanguageVersion::of)) } } project.tasks.withType().configureEach { options.release.set(tomlJvmTarget.toInt()) } } -apiValidation { - // https://github.com/Kotlin/binary-compatibility-validator/issues/139 - validationDisabled = findProperty("kotlin.experimental.tryK2") == "true" -} - -val kotlinCompilerOptions: KotlinJvmCompilerOptions.() -> Unit = { - progressiveMode.set(true) - jvmTarget.set(libs.versions.jvmTarget.map(JvmTarget::fromTarget)) -} - kotlin { explicitApi() - compilerOptions(kotlinCompilerOptions) + compilerOptions { + progressiveMode.set(true) + jvmTarget.set(libs.versions.jvmTarget.map(JvmTarget::fromTarget)) + } } tasks.compileTestKotlin { compilerOptions { optIn.addAll("kotlin.ExperimentalStdlibApi", "kotlinx.coroutines.ExperimentalCoroutinesApi") - // Enable new jvmdefault behavior + // Enable new JvmDefault behavior // https://blog.jetbrains.com/kotlin/2020/07/kotlin-1-4-m3-generating-default-methods-in-interfaces/ freeCompilerArgs.add("-Xjvm-default=all") } } -// https://github.com/google/ksp/issues/1387 -tasks.withType().configureEach { compilerOptions(kotlinCompilerOptions) } - tasks.withType().configureEach { jvmTarget = tomlJvmTarget } tasks.named("dokkaHtml") { diff --git a/gradle.properties b/gradle.properties index d035593..288126f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,6 +11,9 @@ kotlin.compiler.suppressExperimentalICOptimizationsWarning=true kotlin.compiler.keepIncrementalCompilationCachesInMemory=true kotlin.compiler.preciseCompilationResultsBackup=true +# Use KSP2 +ksp.useKSP2=true + POM_NAME=EitherNet POM_ARTIFACT_ID=eithernet POM_PACKAGING=jar diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7ec2409..b933513 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,27 +1,27 @@ [versions] -coroutines = "1.7.2" -kotlin = "1.9.22" +coroutines = "1.8.1" +kotlin = "2.0.0" jdk = "21" jvmTarget = "11" -ksp = "1.9.22-1.0.17" +ksp = "2.0.0-1.0.21" ktfmt = "0.47" moshi = "1.15.1" okhttp = "4.9.0" retrofit = "2.9.0" [plugins] -binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.14.0" } +binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.15.0-Beta.2" } detekt = { id = "io.gitlab.arturbosch.detekt", version = "1.23.5" } -dokka = { id = "org.jetbrains.dokka", version = "1.9.10" } +dokka = { id = "org.jetbrains.dokka", version = "1.9.20" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } -mavenPublish = { id = "com.vanniktech.maven.publish", version = "0.27.0" } +mavenPublish = { id = "com.vanniktech.maven.publish", version = "0.28.0" } spotless = { id = "com.diffplug.spotless", version = "6.25.0" } [libraries] androidProcessingApi = "com.google.android:android:4.1.1.4" -autoService-annotations = "com.google.auto.service:auto-service-annotations:1.0" -autoService-ksp = "dev.zacsweers.autoservice:auto-service-ksp:1.0.0" +autoService-annotations = "com.google.auto.service:auto-service-annotations:1.1.1" +autoService-ksp = "dev.zacsweers.autoservice:auto-service-ksp:1.1.0" coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines" } junit = "junit:junit:4.13.2" @@ -34,4 +34,4 @@ okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } okhttp-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "okhttp" } retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } retrofit-converterScalars = { module = "com.squareup.retrofit2:converter-scalars", version.ref = "retrofit" } -truth = "com.google.truth:truth:1.4.0" \ No newline at end of file +truth = "com.google.truth:truth:1.4.2" \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd49..e644113 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a80b22c..b82aa23 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/test/kotlin/com/slack/eithernet/ApiResultTest.kt b/src/test/kotlin/com/slack/eithernet/ApiResultTest.kt index 1604af4..6fdb5f7 100644 --- a/src/test/kotlin/com/slack/eithernet/ApiResultTest.kt +++ b/src/test/kotlin/com/slack/eithernet/ApiResultTest.kt @@ -332,7 +332,7 @@ class ApiResultTest { object UnitConverterFactory : Converter.Factory() { override fun responseBodyConverter( type: Type, - annotations: Array, + annotations: Array, retrofit: Retrofit, ): Converter? { return if (getRawType(type) == Unit::class.java) { @@ -344,8 +344,8 @@ class ApiResultTest { override fun requestBodyConverter( type: Type, - parameterAnnotations: Array, - methodAnnotations: Array, + parameterAnnotations: Array, + methodAnnotations: Array, retrofit: Retrofit, ): Converter<*, RequestBody>? { throw NotImplementedError("Test only") @@ -373,7 +373,7 @@ class ApiResultTest { @Suppress("ReturnCount") override fun responseBodyConverter( type: Type, - annotations: Array, + annotations: Array, retrofit: Retrofit, ): Converter? { if (annotations.any { it is BadEndpoint }) { @@ -387,8 +387,8 @@ class ApiResultTest { override fun requestBodyConverter( type: Type, - parameterAnnotations: Array, - methodAnnotations: Array, + parameterAnnotations: Array, + methodAnnotations: Array, retrofit: Retrofit, ): Converter<*, RequestBody>? { throw NotImplementedError("Test only")