codegen/build.gradle.kts (188 lines of code) (raw):

/* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ import org.jreleaser.model.Active plugins { `java-library` `maven-publish` signing checkstyle jacoco id("com.github.spotbugs") version "4.7.1" id("org.jreleaser") version "1.9.0" } allprojects { repositories { mavenLocal() mavenCentral() } group = "software.amazon.smithy.typescript" version = "0.29.1" } // The root project doesn't produce a JAR. tasks["jar"].enabled = false // Load the Sonatype user/password for use in publishing tasks. val sonatypeUser: String? by project val sonatypePassword: String? by project repositories { mavenLocal() mavenCentral() } subprojects { val subproject = this /* * Java * ==================================================== */ if (subproject.name == "smithy-aws-typescript-codegen") { apply(plugin = "java-library") java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } tasks.withType<JavaCompile> { options.encoding = "UTF-8" } // Use Junit5's test runner. tasks.withType<Test> { useJUnitPlatform() } // Apply junit 5 and hamcrest test dependencies to all java projects. dependencies { testImplementation("org.junit.jupiter:junit-jupiter-api:5.4.0") testImplementation("org.junit.jupiter:junit-jupiter-engine:5.4.0") testImplementation("org.junit.jupiter:junit-jupiter-params:5.4.0") testImplementation("org.hamcrest:hamcrest:2.1") } // Reusable license copySpec val licenseSpec = copySpec { from("${project.rootDir}/LICENSE") from("${project.rootDir}/NOTICE") } // Set up tasks that build source and javadoc jars. tasks.register<Jar>("sourcesJar") { metaInf.with(licenseSpec) from(sourceSets.main.get().allSource) archiveClassifier.set("sources") } tasks.register<Jar>("javadocJar") { metaInf.with(licenseSpec) from(tasks.javadoc) archiveClassifier.set("javadoc") } // Configure jars to include license related info tasks.jar { metaInf.with(licenseSpec) inputs.property("moduleName", subproject.extra["moduleName"]) manifest { attributes["Automatic-Module-Name"] = subproject.extra["moduleName"] } } // Always run javadoc after build. tasks["build"].finalizedBy(tasks["javadoc"]) /* * Maven * ==================================================== */ apply(plugin = "maven-publish") apply(plugin = "signing") repositories { mavenLocal() mavenCentral() } publishing { repositories { maven { name = "stagingRepository" url = uri("${rootProject.buildDir}/staging") } } publications { create<MavenPublication>("mavenJava") { from(components["java"]) // Ship the source and javadoc jars. artifact(tasks["sourcesJar"]) artifact(tasks["javadocJar"]) // Include extra information in the POMs. afterEvaluate { pom { name.set(subproject.extra["displayName"].toString()) description.set(subproject.description) url.set("https://github.com/aws/aws-sdk-js-v3.git") licenses { license { name.set("Apache License 2.0") url.set("http://www.apache.org/licenses/LICENSE-2.0.txt") distribution.set("repo") } } developers { developer { id.set("smithy") name.set("Smithy") organization.set("Amazon Web Services") organizationUrl.set("https://aws.amazon.com") roles.add("developer") } } scm { url.set("https://github.com/aws/aws-sdk-js-v3.git") } } } } } } // Don't sign the artifacts if we didn't get a key and password to use. val signingKey: String? by project val signingPassword: String? by project if (signingKey != null && signingPassword != null) { signing { useInMemoryPgpKeys(signingKey, signingPassword) sign(publishing.publications["mavenJava"]) } } /* * CheckStyle * ==================================================== */ apply(plugin = "checkstyle") checkstyle { configDirectory.set(rootProject.file("gradleConfig/checkstyle")) } tasks["checkstyleTest"].enabled = false /* * Tests * ==================================================== * * Configure the running of tests. */ // Log on passed, skipped, and failed test events if the `-Plog-tests` property is set. if (project.hasProperty("log-tests")) { tasks.test { testLogging.events("passed", "skipped", "failed") } } /* * Code coverage * ==================================================== */ apply(plugin = "jacoco") // Always run the jacoco test report after testing. tasks["test"].finalizedBy(tasks["jacocoTestReport"]) // Configure jacoco to generate an HTML report. tasks.jacocoTestReport { reports { xml.required.set(false) csv.required.set(false) html.outputLocation.set(file("$buildDir/reports/jacoco")) } } /* * Spotbugs * ==================================================== */ apply(plugin = "com.github.spotbugs") // We don't need to lint tests. tasks["spotbugsTest"].enabled = false // Log on passed, skipped, and failed test events if the `-Plog-tests` property is set. if (project.hasProperty("log-tests")) { tasks.test { testLogging.events("passed", "skipped", "failed") } } // Configure the bug filter for spotbugs. spotbugs { setEffort("max") val excludeFile = rootProject.file("gradleConfig/spotbugs/filter.xml") if (excludeFile.exists()) { excludeFilter.set(excludeFile) } } } } /* * Jreleaser (https://jreleaser.org) config. */ jreleaser { dryrun = false gitRootSearch = true // Used for creating a tagged release, uploading files and generating changelog. // In the future we can set this up to push release tags to GitHub, but for now it's // set up to do nothing. // https://jreleaser.org/guide/latest/reference/release/index.html release { generic { enabled = true skipRelease = true } } // Used to announce a release to configured announcers. // https://jreleaser.org/guide/latest/reference/announce/index.html announce { active = Active.NEVER } // Signing configuration. // https://jreleaser.org/guide/latest/reference/signing.html signing { active = Active.ALWAYS armored = true } // Configuration for deploying to Maven Central. // https://jreleaser.org/guide/latest/examples/maven/maven-central.html#_gradle deploy { maven { nexus2 { create("maven-central") { active = Active.ALWAYS url = "https://aws.oss.sonatype.org/service/local" snapshotUrl = "https://aws.oss.sonatype.org/content/repositories/snapshots" closeRepository.set(true) releaseRepository.set(true) stagingRepositories.add("${rootProject.buildDir}/staging") } } } } }