Skip to content

Commit

Permalink
Use Gradle 8.6, Kotlin build script, and conventional gradle layout
Browse files Browse the repository at this point in the history
  • Loading branch information
popematt committed Apr 24, 2024
1 parent 718acb2 commit 6bf8ced
Show file tree
Hide file tree
Showing 74 changed files with 686 additions and 380 deletions.
4 changes: 3 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
[*]
end_of_line = lf
insert_final_newline = true

[*.kt]
ij_kotlin_imports_layout = *
ij_kotlin_packages_to_use_import_on_demand=com.amazon.ionelement.**

[test/**.kt]
[src/test/kotlin/**.kt]
ktlint_ignore_back_ticked_identifier=true
9 changes: 9 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#
# https://help.github.com/articles/dealing-with-line-endings/
#
# Linux start script should use lf
/gradlew text eol=lf

# These are Windows script files and should use crlf
*.bat text eol=crlf

179 changes: 0 additions & 179 deletions build.gradle

This file was deleted.

162 changes: 162 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@

plugins {
id("java-library")

kotlin("jvm") version "1.6.20"
id("maven-publish")
id("signing")
id("org.jetbrains.dokka") version "1.6.20"
id("jacoco")
id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.9.0"
id("org.jlleitschuh.gradle.ktlint") version "10.3.0"

// TODO: Configure and use this
id("com.diffplug.spotless") version "6.11.0"
}

repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}

group = "com.amazon.ion"
version = "1.3.0-SNAPSHOT"
description = "An immutable in-memory representation of Amazon Ion for Kotlin"

val isCI: Boolean = System.getenv("CI") == "true"
val githubRepositoryUrl = "https://github.com/amazon-ion/ion-java/"
val isReleaseVersion: Boolean = !version.toString().endsWith("SNAPSHOT")

dependencies {
api("com.amazon.ion:ion-java:[1.4.0,)")
compileOnly("com.amazon.ion:ion-java:1.4.0")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.4")
testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("org.junit.jupiter:junit-jupiter-api:5.6.2")
testImplementation("org.junit.jupiter:junit-jupiter-params:5.6.2")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.6.2")

// Use the Kotlin JUnit 5 integration.
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}

kotlin {
explicitApi()
}

java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}

lateinit var sourcesJar: AbstractArchiveTask
lateinit var javadocJar: AbstractArchiveTask

tasks {

compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
apiVersion = "1.3"
languageVersion = "1.4" // Can be read by 1.3 compiler, so consumers on kotlin 1.3 are still supported.
freeCompilerArgs = listOf(
"-opt-in=kotlin.RequiresOptIn" // Using RequiresOptIn requires opt-in itself, at least in kotlin-1.4
)
}
}

ktlint {
version.set("0.45.2")
outputToConsole.set(true)
}

sourcesJar = create<Jar>("sourcesJar") sourcesJar@{
archiveClassifier.set("sources")
from(sourceSets.named("main"))
}

javadocJar = create<Jar>("javadocJar") javadocJar@{
archiveClassifier.set("javadoc")
from(javadoc)
}

withType<Sign> {
setOnlyIf { isReleaseVersion && gradle.taskGraph.hasTask(":publish") }
}

test {
useJUnitPlatform()
// report is always generated after tests run
finalizedBy(jacocoTestReport)
}

jacocoTestReport {
dependsOn(test)
reports {
xml.required.set(true)
html.required.set(true)
}
doLast {
logger.quiet("Coverage report written to file://${reports.html.outputLocation.get()}/index.html")
}
}
}

publishing {
publications.create<MavenPublication>("ion-element") {
// from(components.java)
artifact(sourcesJar)
artifact(javadocJar)

pom {
name.set("Ion Element Kotlin")
description.set(project.description)
url.set(githubRepositoryUrl)
scm {
connection.set("scm:git:[email protected]:amazon-ion/ion-java.git")
developerConnection.set("scm:git:[email protected]:amazon-ion/ion-java.git")
url.set("[email protected]:amazon-ion/ion-java.git")
}
licenses {
license {
name.set("The Apache License, Version 2.0")
url.set("https://www.apache.org/licenses/LICENSE-2.0.txt")
}
}
developers {
developer {
name.set("Amazon Ion Team")
email.set("[email protected]")
organization.set("Amazon Ion")
organizationUrl.set("https://github.com/amazon-ion")
}
}
}
}
repositories {
maven {
url = uri("https://aws.oss.sonatype.org/service/local/staging/deploy/maven2")
credentials {
username = properties["ossrhUsername"].toString()
password = properties["ossrhPassword"].toString()
}
}
}
}

signing {
// Allow publishing to maven local even if we don't have the signing keys
// This works because when not required, the signing task will be skipped
// if signing.keyId, signing.password, signing.secretKeyRingFile, etc are
// not present in gradle.properties.
isRequired = isReleaseVersion

if (isCI) {
val signingKeyId: String? by project
val signingKey: String? by project
val signingPassword: String? by project
useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
}
}
1 change: 0 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,3 @@
# Required for the maven publish plugin--these properties must be present even if they contain placeholder values.
ossrhUsername=EMPTY
ossrhPassword=EMPTY

Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 4 additions & 3 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#Mon Mar 29 11:55:05 PDT 2021
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-all.zip
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading

0 comments on commit 6bf8ced

Please sign in to comment.