| /* | |
| * 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) | |
| } |