diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index ac216bc..61a9130 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index efa4625..b9c41fe 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -16,5 +16,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 8f825fd..fe5a948 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index 21c90d0..e6dc2e4 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,10 +1,43 @@
+import com.jfrog.bintray.gradle.tasks.BintrayUploadTask
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+import java.io.FileInputStream
+import java.util.*
+
plugins {
id("com.github.ben-manes.versions") version "0.29.0"
+ id("com.jfrog.bintray") version "1.8.5"
id("io.gitlab.arturbosch.detekt") version "1.10.0"
+ id("org.jetbrains.dokka") version "0.10.1"
id("org.jetbrains.kotlin.jvm") version "1.3.72"
+ id("org.sonarqube") version "3.0"
`java-library`
+ `maven-publish`
+ jacoco
}
+description = "Estimated Reading Time for Blog Posts, Articles, etc."
+group = "net.thauvin.erik"
+version = "0.9.0"
+
+val deployDir = "deploy"
+val gitHub = "ethauvin/$name"
+val mavenUrl = "https://github.com/$gitHub"
+val publicationName = "mavenJava"
+var isRelease = "release" in gradle.startParameter.taskNames
+
+// Load local.properties
+File("local.properties").apply {
+ if (exists()) {
+ FileInputStream(this).use { fis ->
+ Properties().apply {
+ load(fis)
+ forEach { (k, v) ->
+ extra[k as String] = v
+ }
+ }
+ }
+ }
+}
repositories {
jcenter()
}
@@ -19,6 +52,194 @@ dependencies {
testImplementation("org.jetbrains.kotlin:kotlin-test-junit")
}
+java {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+}
+
detekt {
baseline = project.rootDir.resolve("config/detekt/baseline.xml")
}
+
+jacoco {
+ toolVersion = "0.8.5"
+}
+
+sonarqube {
+ properties {
+ property("sonar.projectKey", "ethauvin_$name")
+ property("sonar.sourceEncoding", "UTF-8")
+ }
+}
+
+val sourcesJar by tasks.creating(Jar::class) {
+ archiveClassifier.set("sources")
+ from(sourceSets.getByName("main").allSource)
+}
+
+val javadocJar by tasks.creating(Jar::class) {
+ dependsOn(tasks.dokka)
+ from(tasks.dokka)
+ archiveClassifier.set("javadoc")
+ description = "Assembles a JAR of the generated Javadoc."
+ group = JavaBasePlugin.DOCUMENTATION_GROUP
+}
+
+tasks {
+ withType {
+ reports {
+ xml.isEnabled = true
+ html.isEnabled = true
+ }
+ }
+
+ withType().configureEach {
+ kotlinOptions.jvmTarget = "1.8"
+ }
+
+ withType {
+ destination = file("$projectDir/pom.xml")
+ }
+
+ assemble {
+ dependsOn(sourcesJar, javadocJar)
+ }
+
+ clean {
+ doLast {
+ project.delete(fileTree(deployDir))
+ }
+ }
+
+ val copyToDeploy by registering(Copy::class) {
+ from(configurations.runtimeClasspath) {
+ exclude("annotations-*.jar")
+ }
+ from(jar)
+ into(deployDir)
+ }
+
+ val gitIsDirty by registering(Exec::class) {
+ description = "Fails if git has uncommitted changes."
+ group = "verification"
+ commandLine("git", "diff", "--quiet", "--exit-code")
+ }
+
+ val gitTag by registering(Exec::class) {
+ description = "Tags the local repository with version ${project.version}"
+ group = PublishingPlugin.PUBLISH_TASK_GROUP
+ dependsOn(gitIsDirty)
+ if (isRelease) {
+ commandLine("git", "tag", "-a", project.version, "-m", "Version ${project.version}")
+ }
+ }
+
+ val bintrayUpload by existing(BintrayUploadTask::class) {
+ dependsOn(publishToMavenLocal, gitTag)
+ doFirst {
+ versionName = "${project.version}"
+ versionDesc = "${project.name} ${project.version}"
+ versionVcsTag = "${project.version}"
+ versionReleased = Date().toString()
+ }
+ }
+
+ register("deploy") {
+ description = "Copies all needed files to the $deployDir directory."
+ group = PublishingPlugin.PUBLISH_TASK_GROUP
+ dependsOn("build", "jar")
+ outputs.dir(deployDir)
+ inputs.files(copyToDeploy)
+ mustRunAfter("clean")
+ }
+
+ register("release") {
+ description = "Publishes version ${project.version} to Bintray."
+ group = PublishingPlugin.PUBLISH_TASK_GROUP
+ dependsOn("wrapper", bintrayUpload)
+ }
+
+ "sonarqube" {
+ dependsOn("jacocoTestReport")
+ }
+}
+
+fun findProperty(s: String) = project.findProperty(s) as String?
+bintray {
+ user = findProperty("bintray.user")
+ key = findProperty("bintray.apikey")
+ publish = isRelease
+ setPublications(publicationName)
+ pkg.apply {
+ repo = "maven"
+ name = project.name
+ desc = description
+ websiteUrl = mavenUrl
+ issueTrackerUrl = "$mavenUrl/issues"
+ githubRepo = gitHub
+ githubReleaseNotesFile = "README.md"
+ vcsUrl = "$mavenUrl.git"
+ setLabels(
+ "articles",
+ "blog",
+ "java",
+ "kotlin",
+ "medium",
+ "min",
+ "posts",
+ "read",
+ "readingtime",
+ "readtime",
+ "weblog"
+ )
+ setLicenses("BSD 3-Clause")
+ publicDownloadNumbers = true
+ version.apply {
+ name = project.version as String
+ desc = description
+ vcsTag = project.version as String
+ gpg.apply {
+ sign = true
+ }
+ }
+ }
+}
+
+publishing {
+ publications {
+ create(publicationName) {
+ from(components["java"])
+ artifact(sourcesJar)
+ artifact(javadocJar)
+ pom.withXml {
+ asNode().apply {
+ appendNode("name", project.name)
+ appendNode("description", project.description)
+ appendNode("url", mavenUrl)
+
+ appendNode("licenses").appendNode("license").apply {
+ appendNode("name", "BSD 3-Clause")
+ appendNode("url", "https://opensource.org/licenses/BSD-3-Clause")
+ }
+
+ appendNode("developers").appendNode("developer").apply {
+ appendNode("id", "ethauvin")
+ appendNode("name", "Erik C. Thauvin")
+ appendNode("email", "erik@thauvin.net")
+ }
+
+ appendNode("scm").apply {
+ appendNode("connection", "scm:git:$mavenUrl.git")
+ appendNode("developerConnection", "scm:git:git@github.com:$gitHub.git")
+ appendNode("url", mavenUrl)
+ }
+
+ appendNode("issueManagement").apply {
+ appendNode("system", "GitHub")
+ appendNode("url", "$mavenUrl/issues")
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..59a1003
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+ 4.0.0
+ net.thauvin.erik
+ readingtime
+ 0.9.0
+
+
+
+ org.jetbrains.kotlin
+ kotlin-bom
+ 1.3.72
+ pom
+ import
+
+
+
+
+
+ org.jetbrains.kotlin
+ kotlin-stdlib-jdk8
+ 1.3.72
+ runtime
+
+
+ org.jsoup
+ jsoup
+ 1.13.1
+ runtime
+
+
+ readingtime
+ Estimated Reading Time for Blog Posts, Articles, etc.
+ https://github.com/ethauvin/readingtime
+
+
+ BSD 3-Clause
+ https://opensource.org/licenses/BSD-3-Clause
+
+
+
+
+ ethauvin
+ Erik C. Thauvin
+ erik@thauvin.net
+
+
+
+ scm:git:https://github.com/ethauvin/readingtime.git
+ scm:git:git@github.com:ethauvin/readingtime.git
+ https://github.com/ethauvin/readingtime
+
+
+ GitHub
+ https://github.com/ethauvin/readingtime/issues
+
+