Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 8 additions & 14 deletions build-logic/src/main/kotlin/publishing/MemoizedGitInfo.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@

package publishing

import org.gradle.api.GradleException
import org.gradle.api.Project
import org.gradle.api.java.archives.Attributes
import org.gradle.kotlin.dsl.extra
Expand Down Expand Up @@ -54,21 +53,18 @@ internal class MemoizedGitInfo {
@Suppress("UNCHECKED_CAST")
rootProject.extra["gitReleaseInfo"] as Map<String, String>
} else {
val isRelease = rootProject.hasProperty("release")
val isRelease =
rootProject.hasProperty("release") || rootProject.hasProperty("jarWithGitInfo")
val gitHead = execProc(rootProject, "git", "rev-parse", "HEAD")
val gitDescribe =
if (isRelease) {
if (isRelease)
try {
execProc(rootProject, "git", "describe", "--tags")
} catch (e: Exception) {
throw GradleException("'git describe --tags' failed - no Git tag?", e)
} catch (_: Exception) {
execProc(rootProject, "git", "describe", "--always", "--dirty")
}
} else {
execProc(rootProject, "git", "describe", "--always", "--dirty")
}
val timestamp = execProc(rootProject, "date", "+%Y-%m-%d-%H:%M:%S%:z")
val system = execProc(rootProject, "uname", "-a")
val javaVersion = System.getProperty("java.version")
else ""
val javaSpecificationVersion = System.getProperty("java.specification.version")

val version = rootProject.version.toString()
val info =
Expand All @@ -78,9 +74,7 @@ internal class MemoizedGitInfo {
"Apache-Polaris-Is-Release" to isRelease.toString(),
"Apache-Polaris-Build-Git-Head" to gitHead,
"Apache-Polaris-Build-Git-Describe" to gitDescribe,
"Apache-Polaris-Build-Timestamp" to timestamp,
"Apache-Polaris-Build-System" to system,
"Apache-Polaris-Build-Java-Version" to javaVersion,
"Apache-Polaris-Build-Java-Specification-Version" to javaSpecificationVersion,
)
rootProject.extra["gitReleaseInfo"] = info
return info
Expand Down
16 changes: 12 additions & 4 deletions build-logic/src/main/kotlin/publishing/PublishingHelperPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ package publishing

import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin
import javax.inject.Inject
import org.gradle.api.*
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.component.SoftwareComponentFactory
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
Expand All @@ -27,16 +28,23 @@ import org.gradle.api.publish.tasks.GenerateModuleMetadata
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.api.tasks.javadoc.Javadoc
import org.gradle.jvm.tasks.Jar
import org.gradle.kotlin.dsl.*
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.getValue
import org.gradle.kotlin.dsl.named
import org.gradle.kotlin.dsl.provideDelegate
import org.gradle.kotlin.dsl.register
import org.gradle.kotlin.dsl.registering
import org.gradle.kotlin.dsl.withType
import org.gradle.plugins.signing.SigningExtension
import org.gradle.plugins.signing.SigningPlugin

/**
* Release-publishing helper plugin to generate publications that pass Sonatype validations,
* generate Apache release source tarball.
*
* The `release` Gradle project property triggers: signed artifacts + jars with Git information. The
* current Git HEAD must point to a Git tag.
* The `release` Gradle project property triggers: signed artifacts and jars with Git information.
* The current Git HEAD must point to a Git tag.
*
* The `jarWithGitInfo` Gradle project property triggers: jars with Git information (not necessary
* with `release`).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,8 @@
import static java.lang.String.format;
import static org.apache.polaris.version.PolarisVersion.getBuildGitHead;
import static org.apache.polaris.version.PolarisVersion.getBuildGitTag;
import static org.apache.polaris.version.PolarisVersion.getBuildJavaVersion;
import static org.apache.polaris.version.PolarisVersion.getBuildJavaSpecificationVersion;
import static org.apache.polaris.version.PolarisVersion.getBuildReleasedVersion;
import static org.apache.polaris.version.PolarisVersion.getBuildSystem;
import static org.apache.polaris.version.PolarisVersion.getBuildTimestamp;
import static org.apache.polaris.version.PolarisVersion.isReleaseBuild;
import static org.apache.polaris.version.PolarisVersion.polarisVersionString;

Expand All @@ -50,7 +48,7 @@ public class TestPolarisVersion {
@InjectSoftAssertions private SoftAssertions soft;

/**
* Test runs using a "non release" build, so the MANIFEST.MF file has no release version
* Test runs using a "non-release" build, so the MANIFEST.MF file has no release version
* information.
*/
@Test
Expand All @@ -59,18 +57,14 @@ public void versionAvailable() {
soft.assertThat(polarisVersionString()).isEqualTo(System.getProperty("polarisVersion"));
if (isReleaseBuild()) {
soft.assertThat(getBuildReleasedVersion()).isNotEmpty();
soft.assertThat(getBuildTimestamp()).isNotEmpty();
soft.assertThat(getBuildGitHead()).isNotEmpty();
soft.assertThat(getBuildGitTag()).isNotEmpty();
soft.assertThat(getBuildSystem()).isNotEmpty();
soft.assertThat(getBuildJavaVersion()).isNotEmpty();
soft.assertThat(getBuildJavaSpecificationVersion()).isNotEmpty();
} else {
soft.assertThat(getBuildReleasedVersion()).isEmpty();
soft.assertThat(getBuildTimestamp()).isEmpty();
soft.assertThat(getBuildGitHead()).isEmpty();
soft.assertThat(getBuildGitTag()).isEmpty();
soft.assertThat(getBuildSystem()).isEmpty();
soft.assertThat(getBuildJavaVersion()).isEmpty();
soft.assertThat(getBuildJavaSpecificationVersion()).isEmpty();
}
}

Expand All @@ -88,13 +82,9 @@ public void fakeReleaseManifest() {
soft.assertThat(polarisVersionString()).isEqualTo(System.getProperty("polarisVersion"));
soft.assertThat(isReleaseBuild()).isTrue();
soft.assertThat(getBuildReleasedVersion()).contains("0.1.2-incubating-SNAPSHOT");
soft.assertThat(getBuildTimestamp()).contains("2024-12-26-10:31:19+01:00");
soft.assertThat(getBuildGitHead()).contains("27cf81929cbb08e545c8fcb1ed27a53d7ef1af79");
soft.assertThat(getBuildGitTag()).contains("foo-tag-bar");
soft.assertThat(getBuildSystem())
.contains(
"Linux myawesomehost 6.12.6 #81 SMP PREEMPT_DYNAMIC Fri Dec 20 09:22:38 CET 2024 x86_64 x86_64 x86_64 GNU/Linux");
soft.assertThat(getBuildJavaVersion()).contains("21.0.5");
soft.assertThat(getBuildJavaSpecificationVersion()).contains("21");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,4 @@ Apache-Polaris-Version: 0.1.2-incubating-SNAPSHOT
Apache-Polaris-Is-Release: true
Apache-Polaris-Build-Git-Head: 27cf81929cbb08e545c8fcb1ed27a53d7ef1af79
Apache-Polaris-Build-Git-Describe: foo-tag-bar
Apache-Polaris-Build-Timestamp: 2024-12-26-10:31:19+01:00
Apache-Polaris-Build-System: Linux myawesomehost 6.12.6 #81 SMP PREEMPT_DY
NAMIC Fri Dec 20 09:22:38 CET 2024 x86_64 x86_64 x86_64 GNU/Linux
Apache-Polaris-Build-Java-Version: 21.0.5
Apache-Polaris-Build-Java-Specification-Version: 21
Original file line number Diff line number Diff line change
Expand Up @@ -98,43 +98,16 @@ public static Optional<String> getBuildGitTag() {
}

/**
* Returns the Java version used during the build as in the jar manifest, if {@linkplain
* #isReleaseBuild() build-time Git information} is available, when Polaris has been built with
* the Gradle {@code -Prelease} project property.
*
* <p>Example value: {@code 21.0.5}
*
* @see #isReleaseBuild()
*/
public static Optional<String> getBuildJavaVersion() {
return PolarisVersionJarInfo.buildInfo(MF_BUILD_JAVA_VERSION);
}

/**
* Returns information about the system that performed the build, if {@linkplain #isReleaseBuild()
* build-time Git information} is available, when Polaris has been built with the Gradle {@code
* -Prelease} project property.
*
* <p>Example value: {@code Linux myawesomehost 6.12.6 #81 SMP PREEMPT_DYNAMIC Fri Dec 20 09:22:38
* CET 2024 x86_64 x86_64 x86_64 GNU/Linux}
*
* @see #isReleaseBuild()
*/
public static Optional<String> getBuildSystem() {
return PolarisVersionJarInfo.buildInfo(MF_BUILD_SYSTEM);
}

/**
* Returns the build timestamp as in the jar manifest, if {@linkplain #isReleaseBuild() build-time
* Git information} is available, when Polaris has been built with the Gradle {@code -Prelease}
* project property.
* Returns the Java <em>specification</em> version used during the build as in the jar manifest,
* if {@linkplain #isReleaseBuild() build-time Git information} is available, when Polaris has
* been built with the Gradle {@code -Prelease} project property.
*
* <p>Example value: {@code 2024-12-16-11:54:05+01:00}
* <p>Example value: {@code 21}
*
* @see #isReleaseBuild()
*/
public static Optional<String> getBuildTimestamp() {
return PolarisVersionJarInfo.buildInfo(MF_BUILD_TIMESTAMP);
public static Optional<String> getBuildJavaSpecificationVersion() {
return PolarisVersionJarInfo.buildInfo(MF_BUILD_JAVA_SPECIFICATION_VERSION);
}

public static String readNoticeFile() {
Expand All @@ -155,18 +128,15 @@ public static String readBinaryLicenseFile() {
private static final String MF_IS_RELEASE = "Apache-Polaris-Is-Release";
private static final String MF_BUILD_GIT_HEAD = "Apache-Polaris-Build-Git-Head";
private static final String MF_BUILD_GIT_DESCRIBE = "Apache-Polaris-Build-Git-Describe";
private static final String MF_BUILD_TIMESTAMP = "Apache-Polaris-Build-Timestamp";
private static final String MF_BUILD_SYSTEM = "Apache-Polaris-Build-System";
private static final String MF_BUILD_JAVA_VERSION = "Apache-Polaris-Build-Java-Version";
private static final String MF_BUILD_JAVA_SPECIFICATION_VERSION =
"Apache-Polaris-Build-Java-Specification-Version";
private static final List<String> MF_ALL =
List.of(
MF_VERSION,
MF_IS_RELEASE,
MF_BUILD_GIT_HEAD,
MF_BUILD_GIT_DESCRIBE,
MF_BUILD_TIMESTAMP,
MF_BUILD_SYSTEM,
MF_BUILD_JAVA_VERSION);
MF_BUILD_JAVA_SPECIFICATION_VERSION);

static String readResource(String resource) {
var fullResource = format("/META-INF/resources/apache-polaris/%s.txt", resource);
Expand Down