blob: a43dfe45730850fc9e36ee05c90849b723459a3b [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License 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.gradle.process.CommandLineArgumentProvider
plugins {
id("io.github.gradle-nexus.publish-plugin") version "2.0.0"
}
val projectVersion: String by project
group = "org.apache.airflow"
version = projectVersion
allprojects {
configurations.configureEach {
resolutionStrategy {
failOnDynamicVersions()
failOnChangingVersions()
}
}
}
if (!project.hasProperty("mavenUrl")) {
nexusPublishing {
repositories {
create("apache") {
nexusUrl.set(uri("https://repository.apache.org/service/local/"))
snapshotRepositoryUrl.set(
uri("https://repository.apache.org/content/repositories/snapshots/"),
)
username.set(
providers.gradleProperty("mavenUsername")
.orElse(providers.environmentVariable("ASF_NEXUS_USERNAME")),
)
password.set(
providers.gradleProperty("mavenPassword")
.orElse(providers.environmentVariable("ASF_NEXUS_PASSWORD")),
)
}
}
}
}
val sourceReleaseDir = layout.buildDirectory.dir("distributions")
// Derive the version from the tag, so the tarball's name matches its contents.
val sourceReleaseVersion =
providers.gradleProperty("gitRef").map {
it.substringAfterLast('/').replace(Regex("-rc\\d+$"), "")
}
val sourceReleaseTarball =
sourceReleaseDir.zip(sourceReleaseVersion) { dir, version ->
dir.file("apache-airflow-java-sdk-$version-src.tar.gz")
}
val sourceTarball by tasks.registering(Exec::class) {
group = "release"
description = "Assembles the source tarball from committed java-sdk sources."
executable = "git"
workingDir = rootDir
// Capture early to keep compatibility to the Gradle configuration cache.
val gitRef = providers.gradleProperty("gitRef")
val archiveVersion = sourceReleaseVersion
val tarball = sourceReleaseTarball
argumentProviders.add(
CommandLineArgumentProvider {
listOf(
"archive",
"--format=tar.gz",
"--prefix=apache-airflow-java-sdk-${archiveVersion.get()}/",
"-o", tarball.get().asFile.absolutePath,
gitRef.get(),
)
},
)
doFirst { tarball.get().asFile.parentFile.mkdirs() }
}
val signSourceTarball by tasks.registering(Exec::class) {
group = "release"
description = "Creates the detached OpenPGP signature (.asc) for the source tarball."
executable = "gpg"
workingDir = rootDir
dependsOn(sourceTarball)
// Capture early to keep compatibility to the Gradle configuration cache.
val tarball = sourceReleaseTarball
argumentProviders.add(
CommandLineArgumentProvider {
listOf("--armor", "--yes", "--detach-sign", tarball.get().asFile.absolutePath)
},
)
}
val checksumSourceTarball by tasks.registering {
group = "release"
description = "Writes the SHA-512 checksum (.sha512) for the source tarball."
dependsOn(sourceTarball)
// Capture early to keep compatibility to the Gradle configuration cache.
val tarball = sourceReleaseTarball
doLast {
val file = tarball.get().asFile
val digest = java.security.MessageDigest.getInstance("SHA-512")
file.inputStream().use { input ->
val buffer = ByteArray(8192)
while (true) {
val read = input.read(buffer)
if (read < 0) break
digest.update(buffer, 0, read)
}
}
val hex = digest.digest().joinToString("") { "%02x".format(it) }
file.resolveSibling("${file.name}.sha512").writeText("$hex ${file.name}\n")
}
}
tasks.register("sourceRelease") {
group = "release"
description = "Builds the source tarball plus its .asc signature and .sha512 checksum."
dependsOn(sourceTarball, signSourceTarball, checksumSourceTarball)
}