diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..cfb638b --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: 2026 Xquik Contributors +# SPDX-License-Identifier: Apache-2.0 + +* @kriptoburak @furkanerday diff --git a/buildSrc/src/main/kotlin/x-twitter-scraper.java.gradle.kts b/buildSrc/src/main/kotlin/x-twitter-scraper.java.gradle.kts index c4b6193..45e9f2a 100644 --- a/buildSrc/src/main/kotlin/x-twitter-scraper.java.gradle.kts +++ b/buildSrc/src/main/kotlin/x-twitter-scraper.java.gradle.kts @@ -32,6 +32,11 @@ tasks.withType().configureEach { options.release.set(8) } +tasks.named("compileTestJava") { + // Tests use Java 26 dependencies and never enter published artifacts. + options.release.set(26) +} + tasks.withType().configureEach { isPreserveFileTimestamps = false isReproducibleFileOrder = true diff --git a/buildSrc/src/main/kotlin/x-twitter-scraper.kotlin.gradle.kts b/buildSrc/src/main/kotlin/x-twitter-scraper.kotlin.gradle.kts index 8164f82..803ee7e 100644 --- a/buildSrc/src/main/kotlin/x-twitter-scraper.kotlin.gradle.kts +++ b/buildSrc/src/main/kotlin/x-twitter-scraper.kotlin.gradle.kts @@ -5,6 +5,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.JvmDefaultMode import org.jetbrains.kotlin.gradle.dsl.KotlinVersion +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("x-twitter-scraper.java") @@ -42,6 +43,13 @@ tasks.withType().configureEach { inputs.property("skipMockTests", System.getenv("SKIP_MOCK_TESTS")).optional(true) } +tasks.named("compileTestKotlin") { + compilerOptions { + freeCompilerArgs.set(emptyList()) + jvmTarget.set(JvmTarget.JVM_26) + } +} + val ktfmt = configurations.create("ktfmt") dependencies { ktfmt("com.facebook:ktfmt:0.64") diff --git a/x-twitter-scraper-java-core/src/test/java/com/x_twitter_scraper/api/core/http/RetryAfterFuzzInput.java b/x-twitter-scraper-java-core/src/test/java/com/x_twitter_scraper/api/core/http/RetryAfterFuzzInput.java new file mode 100644 index 0000000..bac2ccf --- /dev/null +++ b/x-twitter-scraper-java-core/src/test/java/com/x_twitter_scraper/api/core/http/RetryAfterFuzzInput.java @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: 2026 Xquik contributors +// +// SPDX-License-Identifier: Apache-2.0 + +package com.x_twitter_scraper.api.core.http; + +import com.code_intelligence.jazzer.api.FuzzedDataProvider; + +final class RetryAfterFuzzInput { + + private RetryAfterFuzzInput() {} + + static String consume(FuzzedDataProvider data) { + return data.consumeRemainingAsString(); + } +} diff --git a/x-twitter-scraper-java-core/src/test/kotlin/com/x_twitter_scraper/api/core/http/RetryAfterFuzzTest.kt b/x-twitter-scraper-java-core/src/test/kotlin/com/x_twitter_scraper/api/core/http/RetryAfterFuzzTest.kt index 9e9de98..682b5e7 100644 --- a/x-twitter-scraper-java-core/src/test/kotlin/com/x_twitter_scraper/api/core/http/RetryAfterFuzzTest.kt +++ b/x-twitter-scraper-java-core/src/test/kotlin/com/x_twitter_scraper/api/core/http/RetryAfterFuzzTest.kt @@ -16,7 +16,7 @@ internal class RetryAfterFuzzTest { @FuzzTest(maxDuration = "30s") fun retryAfterDelayRemainsBounded(data: FuzzedDataProvider) { - val retryAfter = data.consumeRemainingAsString() + val retryAfter = RetryAfterFuzzInput.consume(data) val sleeper = RecordingRetrySleeper() val transport = SequenceHttpClient(