diff --git a/.github/workflows/gradle-build.yml b/.github/workflows/gradle-build.yml index 8be8d8d..7344861 100644 --- a/.github/workflows/gradle-build.yml +++ b/.github/workflows/gradle-build.yml @@ -14,12 +14,12 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - - name: Set up JDK 8 + - name: Set up JDK 11 uses: actions/setup-java@v3 with: - java-version: '8' + java-version: '11' distribution: 'temurin' - name: Set up Gradle Build Action uses: gradle/gradle-build-action@v2 - - name: Build with Gradle + - name: Build and test with Gradle run: ./gradlew build diff --git a/README.md b/README.md index 303f260..6cca642 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,11 @@ $ ./gradlew install This builds and installs the program into `build/install/gradle-enterprise-api-samples`. You can use the `build/install/gradle-enterprise-api-samples/bin/gradle-enterprise-api-samples` script to run the sample. +### Note on Java 11 + +The current version of the OpenAPI generator requires Java 11 to generate the client code. Even though this sample uses Java 11 to generate the client, but the generated **client code is based on Java 8**. +Therefore, the generated client is still compatible with Java 8 based projects. + ## How to run A Gradle Enterprise access key with the “Export build data via the API” permission is required. @@ -55,7 +60,6 @@ The sample code can be found [here](https://github.com/gradle/gradle-enterprise- The Gradle Enterprise API manual and reference documentation for each version of the API can be found [here](https://docs.gradle.com/enterprise/api-manual). - ## License The Gradle Enterprise API Samples project is open-source software released under the [Apache 2.0 License][apache-license]. diff --git a/build.gradle.kts b/build.gradle.kts index 4de3234..2bc7d70 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,10 @@ +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.distsDirectory + group = "com.gradle.enterprise.api" description = "Gradle Enterprise API sample" plugins { - id("org.openapi.generator") version "6.6.0" + id("org.openapi.generator") version "7.0.0" kotlin("jvm") version embeddedKotlinVersion apply false `java-library` application @@ -17,8 +19,9 @@ application { } java { + sourceCompatibility = JavaVersion.VERSION_1_8 toolchain { - languageVersion.set(JavaLanguageVersion.of(8)) + languageVersion.set(JavaLanguageVersion.of(11)) } } @@ -32,18 +35,25 @@ dependencies { implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") + + testImplementation("org.mock-server:mockserver-netty:5.15.0") + testImplementation("org.junit.jupiter:junit-jupiter:5.7.1") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") + } val gradleEnterpriseVersion = "2023.2" // Must be later than 2022.1 val baseApiUrl = providers.gradleProperty("apiManualUrl").orElse("https://docs.gradle.com/enterprise/api-manual/ref/") val apiSpecificationFileGradleProperty = providers.gradleProperty("apiSpecificationFile") +val apiSpecificationURL = baseApiUrl.map { "${it}gradle-enterprise-${gradleEnterpriseVersion}-api.yaml" } val apiSpecificationFile = apiSpecificationFileGradleProperty .map { s -> file(s) } - .orElse(objects.property(File::class) - .convention(provider { - resources.text.fromUri("${baseApiUrl.get()}gradle-enterprise-${gradleEnterpriseVersion}-api.yaml").asFile() - }) + .orElse( + objects.property(File::class) + .convention(provider { + resources.text.fromUri(apiSpecificationURL).asFile() + }) ).map { file -> file.absolutePath } val basePackageName = "com.gradle.enterprise.api" @@ -73,6 +83,17 @@ openApiGenerate { )) } +tasks.test { + useJUnitPlatform() + + apiSpecificationURL.orNull.let { systemProperties["ge.api.url"] = it } + + + javaLauncher.set(javaToolchains.launcherFor { + languageVersion.set(JavaLanguageVersion.of(8)) + }) +} + sourceSets { main { java { diff --git a/src/test/java/com/gradle/enterprise/api/SimpleApiClientTest.java b/src/test/java/com/gradle/enterprise/api/SimpleApiClientTest.java new file mode 100644 index 0000000..366d125 --- /dev/null +++ b/src/test/java/com/gradle/enterprise/api/SimpleApiClientTest.java @@ -0,0 +1,52 @@ +package com.gradle.enterprise.api; + +import com.gradle.enterprise.api.client.ApiClient; +import com.gradle.enterprise.api.client.ApiException; +import com.gradle.enterprise.api.client.ServerConfiguration; +import com.gradle.enterprise.api.model.Build; +import com.gradle.enterprise.api.model.BuildsQuery; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockserver.configuration.Configuration; +import org.mockserver.integration.ClientAndServer; +import org.mockserver.logging.MockServerLogger; +import org.mockserver.mock.Expectation; +import org.mockserver.openapi.OpenAPIConverter; + +import java.net.InetSocketAddress; +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertFalse; + +public class SimpleApiClientTest { + + private static final String gradleEnterpriseAPIYamlUrl = System.getProperty("ge.api.url"); + + private ClientAndServer mockServer; + + @BeforeEach + public void setup() { + Configuration configuration = Configuration.configuration(); + List openApiExpectations = new OpenAPIConverter(new MockServerLogger()).buildExpectations(gradleEnterpriseAPIYamlUrl, null); + mockServer = ClientAndServer.startClientAndServer(configuration, Collections.singletonList(19234)); + mockServer.upsert(openApiExpectations.toArray(new Expectation[0])); + } + + @Test + public void testSimpleAPICall() throws ApiException { + InetSocketAddress remoteAddress = mockServer.remoteAddress(); + + ApiClient apiClient = new ApiClient(); + apiClient.setServers(Collections.singletonList(new ServerConfiguration( + "http://" + remoteAddress.getHostName() + ":" + remoteAddress.getPort(), "mockServer", Collections.emptyMap() + ))); + BuildsApi buildsApi = new BuildsApi(apiClient); + apiClient.addDefaultHeader("Authorization", "Bearer XYZ"); + + List builds = buildsApi.getBuilds(new BuildsQuery()); + + assertFalse(builds.isEmpty()); + } +}