jvm/build.gradle.kts (149 lines of code) (raw):
import okhttp3.MultipartBody
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.asRequestBody
import jetbrains.sign.GpgSignSignatoryProvider
import java.util.*
val kotlinVersion = "1.9.22"
val junitVersion = "5.8.2"
val mockitoVersion = "4.2.0"
val isUnderTeamCity = System.getenv("TEAMCITY_VERSION") != null
version = rootProject.ext.get("projectVersion") as String
buildscript {
repositories {
maven { url = uri("https://packages.jetbrains.team/maven/p/jcs/maven") }
}
dependencies {
classpath("com.jetbrains:jet-sign:45.55")
classpath("com.squareup.okhttp3:okhttp:4.12.0")
}
}
plugins {
kotlin("jvm") version "1.9.22"
signing
`maven-publish`
}
sourceSets.main {
resources.srcDirs(/*"src/main/resources/",*/ "../cert/") // Note(ww898): Please uncomment if you need standart resources in project
}
repositories {
mavenCentral()
gradlePluginPortal()
maven { url = uri("https://packages.jetbrains.team/maven/p/jcs/maven") }
}
dependencies {
implementation("org.bouncycastle:bcprov-jdk18on:1.78.1")
implementation("org.bouncycastle:bcpkix-jdk18on:1.78.1")
implementation("org.bouncycastle:bcutil-jdk18on:1.78.1")
implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.7.3")
implementation("org.apache.commons:commons-compress:1.26.1")
testImplementation("org.junit.jupiter:junit-jupiter-params:$junitVersion")
testImplementation("org.junit.jupiter:junit-jupiter-api:$junitVersion")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$junitVersion")
testCompileOnly("org.mockito:mockito-core:$mockitoVersion")
testImplementation("org.mockito:mockito-junit-jupiter:$mockitoVersion")
}
tasks.test {
useJUnitPlatform()
}
java {
withJavadocJar()
withSourcesJar()
}
publishing {
repositories {
maven {
name = "artifacts"
url = uri(layout.buildDirectory.dir("artifacts/maven"))
}
}
publications {
create<MavenPublication>("mavenJava") {
artifactId = "format-ripper"
group = "com.jetbrains.format-ripper"
from(components["java"])
pom {
packaging = "jar"
name.set("JetBrains Format Ripper")
url.set("https://github.com/JetBrains/format-ripper")
description.set("A file format ripper library: provide info about binaries, perform cryptographic check")
licenses {
license {
name.set("The Apache License, Version 2.0")
url.set("https://www.apache.org/licenses/LICENSE-2.0")
}
}
organization {
name.set("JetBrains s.r.o.")
url.set("https://www.jetbrains.com/")
}
developers {
developer {
id.set("mikhail.pilin")
name.set("Mikhail Pilin")
email.set("mikhail.pilin@jetbrains.com")
}
developer {
id.set("konstantin.kretov")
name.set("Konstantin Kretov")
email.set("konstantin.kretov@jetbrains.com")
}
}
scm {
connection.set("scm:git@github.com:JetBrains/format-ripper.git")
url.set("https://github.com/JetBrains/format-ripper.git")
}
}
}
}
}
if (isUnderTeamCity) {
signing {
sign(publishing.publications)
signatories = GpgSignSignatoryProvider()
}
}
tasks {
val packSonatypeCentralBundle by registering(Zip::class) {
group = "publishing"
dependsOn(":publishMavenJavaPublicationToArtifactsRepository")
from(layout.buildDirectory.dir("artifacts/maven"))
archiveFileName.set("bundle.zip")
destinationDirectory.set(layout.buildDirectory)
}
val publishMavenToCentralPortal by registering {
group = "publishing"
dependsOn(packSonatypeCentralBundle)
doLast {
val uriBase = "https://central.sonatype.com/api/v1/publisher/upload"
val publicationType = "USER_MANAGED"
val deploymentName = "${project.name}-$version"
val uri = "$uriBase?name=$deploymentName&publicationType=$publicationType"
val userName = rootProject.extra["centralPortalUserName"] as String
val token = rootProject.extra["centralPortalToken"] as String
val base64Auth = Base64.getEncoder().encode("$userName:$token".toByteArray()).toString(Charsets.UTF_8)
val bundleFile = packSonatypeCentralBundle.get().archiveFile.get().asFile
println("Sending request to $uri...")
val client = OkHttpClient()
val request = Request.Builder()
.url(uri)
.header("Authorization", "Bearer $base64Auth")
.post(
MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("bundle", bundleFile.name, bundleFile.asRequestBody())
.build()
)
.build()
val response = client.newCall(request).execute()
val statusCode = response.code
println("Upload status code: $statusCode")
println("Upload result: ${response.body!!.string()}")
if (statusCode != 201) {
error("Upload error to Central repository. Status code $statusCode.")
}
}
}
}