Skip to content

Commit c90aa25

Browse files
committed
improvements to the structure of release-related tasks
1 parent 9f3baf5 commit c90aa25

File tree

12 files changed

+375
-374
lines changed

12 files changed

+375
-374
lines changed

build.gradle

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,25 @@ plugins {
4040

4141

4242
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43-
// Release Task
44-
45-
tasks.register('release') {
46-
description = "The task performed when we are performing a release build. Relies on " +
47-
"the fact that subprojects will appropriately define a release task " +
48-
"themselves if they have any release-related activities to perform"
49-
50-
doFirst {
51-
def javaVersionsInUse = jdkVersions.allVersions
52-
if (javaVersionsInUse != [JavaLanguageVersion.of(17)].toSet()) {
53-
throw new IllegalStateException("Please use JDK 17 to perform the release. Currently using: ${javaVersionsInUse}")
54-
}
55-
}
43+
// Releasing
44+
45+
tasks.register( 'releasePrepare' ) {
46+
group 'stages'
47+
description "Scripted release 'Release Prepare' stage. " +
48+
"Includes various checks as to the publish-ability of the project: testing, generation, etc. " +
49+
"Sub-projects register their own `releasePrepare` to hook into this stage."
50+
// See `:release:releasePrepare` which does a lot of heavy lifting here
51+
}
52+
53+
tasks.register( 'releasePerform' ) {
54+
group 'stages'
55+
description "Scripted release 'Release Perform' stage. " +
56+
"Generally this entails publishing artifacts to various servers. " +
57+
"Sub-projects register their own `releasePerform` to hook into this stage."
58+
// See `:release:releasePerform` which does a lot of heavy lifting here
5659
}
5760

61+
5862
nexusPublishing {
5963
repositories {
6064
sonatype()

documentation/documentation.gradle

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ buildscript {
2121

2222
plugins {
2323
id "local.module"
24-
id "local.releasable"
2524
id "local.javadoc"
2625

2726
id "org.hibernate.orm.build.reports"
@@ -178,10 +177,6 @@ dependencies {
178177
if ( hibernateVersion.isSnapshot ) {
179178
// only run the ci build tasks for SNAPSHOT versions
180179
tasks.register('ciBuild') { dependsOn clean }
181-
tasks.release.enabled false
182-
}
183-
else {
184-
tasks.release.dependsOn clean
185180
}
186181

187182

hibernate-platform/hibernate-platform.gradle

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,10 @@ publishingExtension.publications.named("publishedArtifacts", MavenPublication) {
6666
from components.javaPlatform
6767
}
6868

69-
tasks.register("publishReleaseArtifacts") {
70-
// mirror for `:release:publishReleaseArtifacts`
71-
dependsOn tasks.release
69+
tasks.register("releasePerform") {
70+
group "release"
71+
description "See :release:releasePerform for details. Here we hook in publishing to Sonatype"
72+
73+
dependsOn tasks.publishToSonatype
7274
}
7375

74-
tasks.release.dependsOn tasks.publishToSonatype

local-build-plugins/src/main/groovy/local.publishing-java-module.gradle

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,6 @@ dependencies {
2121
javadocSources sourceSets.main.allJava
2222
}
2323

24-
tasks.register("publishReleaseArtifacts") {
25-
// mirror for `:release:publishReleaseArtifacts`
26-
dependsOn tasks.release
27-
}
28-
2924

3025
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3126
// Publishing
@@ -37,18 +32,22 @@ publishingExtension.publications.named("publishedArtifacts", MavenPublication) {
3732
}
3833

3934

35+
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36+
// Releasing
4037

41-
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42-
// Release / publishing tasks
38+
tasks.register("releasePrepare") {
39+
group "release"
40+
description "See :release:releasePrepare for details. Here we hook in testing and checks ensure publish-ability"
4341

44-
tasks.register('ciBuild') {
45-
dependsOn test, tasks.publishToSonatype
42+
dependsOn tasks.test
43+
dependsOn tasks.generateMetadataFileForPublishedArtifactsPublication
44+
dependsOn tasks.generatePomFileForPublishedArtifactsPublication
4645
}
4746

48-
tasks.release.dependsOn tasks.test, tasks.publishToSonatype
47+
tasks.register( 'releasePerform' ) {
48+
group "release"
49+
description "See :release:releasePerform for details. Here we hook in publishing to Sonatype"
4950

50-
tasks.preVerifyRelease.dependsOn build
51-
tasks.preVerifyRelease.dependsOn generateMetadataFileForPublishedArtifactsPublication
52-
tasks.preVerifyRelease.dependsOn generatePomFileForPublishedArtifactsPublication
51+
dependsOn tasks.publishToSonatype
52+
}
5353

54-
tasks.publishToSonatype.mustRunAfter test

local-build-plugins/src/main/groovy/local.publishing.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
plugins {
77
id "maven-publish"
88
id "signing"
9-
id "local.releasable"
109
}
1110

1211
// Disable Gradle module metadata publishing until we know what we want.

local-build-plugins/src/main/groovy/local.releasable.gradle

Lines changed: 0 additions & 17 deletions
This file was deleted.

local-build-plugins/src/main/java/org/hibernate/build/HibernateVersion.java

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,11 @@
1111
import java.io.Serializable;
1212
import java.util.Properties;
1313
import java.util.function.Consumer;
14-
import java.util.function.Supplier;
15-
16-
import org.gradle.api.Project;
17-
import org.gradle.api.file.RegularFile;
1814

1915
/**
2016
* @author Steve Ebersole
2117
*/
2218
public class HibernateVersion implements Serializable {
23-
public static final String EXT_KEY = "ormVersion";
24-
public static final String VERSION_KEY = "releaseVersion";
2519
public static final String RELATIVE_FILE = "gradle/version.properties";
2620

2721
private final String fullName;
@@ -64,42 +58,22 @@ public boolean isSnapshot() {
6458
return isSnapshot;
6559
}
6660

67-
public static HibernateVersion determine(Project project, Supplier<File> versionFileAccess) {
68-
if ( project.hasProperty( VERSION_KEY ) ) {
69-
final Object version = project.property( VERSION_KEY );
70-
if ( version != null ) {
71-
return new HibernateVersion( (String) version );
72-
}
73-
}
74-
75-
final String fullName = readVersionProperties( versionFileAccess.get() );
76-
return new HibernateVersion( fullName );
77-
}
78-
79-
public static HibernateVersion from(Project project, RegularFile versionFile) {
80-
return determine( project, versionFile::getAsFile );
81-
}
82-
83-
public static HibernateVersion from(Project project, File versionFile) {
84-
return determine( project, () -> versionFile );
85-
}
86-
87-
private static String readVersionProperties(File file) {
88-
if ( !file.exists() ) {
61+
public static HibernateVersion fromVersionFile(File versionFile) {
62+
if ( !versionFile.exists() ) {
8963
throw new RuntimeException( "Version file $file.canonicalPath does not exists" );
9064
}
9165

9266
final Properties versionProperties = new Properties();
93-
withInputStream( file, (stream) -> {
67+
withInputStream( versionFile, (stream) -> {
9468
try {
9569
versionProperties.load( stream );
9670
}
9771
catch (IOException e) {
98-
throw new RuntimeException( "Unable to load properties from file - " + file.getAbsolutePath(), e );
72+
throw new RuntimeException( "Unable to load properties from file - " + versionFile.getAbsolutePath(), e );
9973
}
10074
} );
10175

102-
return versionProperties.getProperty( "hibernateVersion" );
76+
return new HibernateVersion( versionProperties.getProperty( "hibernateVersion" ) );
10377
}
10478

10579
private static void withInputStream(File file, Consumer<InputStream> action) {

local-build-plugins/src/main/java/org/hibernate/build/OrmBuildDetails.java

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@
44
*/
55
package org.hibernate.build;
66

7+
import org.gradle.api.Project;
8+
79
import javax.inject.Inject;
10+
import java.io.File;
11+
12+
import static org.hibernate.build.HibernateVersion.fromVersionFile;
813

914
/**
1015
* @author Steve Ebersole
@@ -13,16 +18,24 @@ public abstract class OrmBuildDetails {
1318
private final HibernateVersion hibernateVersion;
1419
private final JpaVersion jpaVersion;
1520

21+
private final ReleaseDetails releaseDetails;
22+
1623
private final String databaseName;
1724

1825
@Inject
19-
public OrmBuildDetails(
20-
HibernateVersion hibernateVersion,
21-
JpaVersion jpaVersion,
22-
String databaseName) {
23-
this.hibernateVersion = hibernateVersion;
24-
this.jpaVersion = jpaVersion;
25-
this.databaseName = databaseName;
26+
public OrmBuildDetails(Project project) {
27+
releaseDetails = new ReleaseDetails( project );
28+
29+
this.hibernateVersion = releaseDetails.getReleaseVersion() != null
30+
? releaseDetails.getReleaseVersion()
31+
: fromVersionFile( new File( project.getRootDir(), HibernateVersion.RELATIVE_FILE ) );
32+
33+
34+
project.setVersion( hibernateVersion.getFullName() );
35+
36+
jpaVersion = JpaVersion.from( project );
37+
38+
databaseName = (String) project.property( "db" );
2639
}
2740

2841
public HibernateVersion getHibernateVersion() {
@@ -41,6 +54,10 @@ public String getHibernateVersionNameOsgi() {
4154
return getHibernateVersion().getOsgiVersion();
4255
}
4356

57+
public ReleaseDetails getReleaseDetails() {
58+
return releaseDetails;
59+
}
60+
4461
public JpaVersion getJpaVersion() {
4562
return jpaVersion;
4663
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.build;
6+
7+
import org.gradle.api.Project;
8+
import org.gradle.api.provider.Provider;
9+
10+
/**
11+
* @author Steve Ebersole
12+
*/
13+
public class ReleaseDetails {
14+
private final HibernateVersion releaseVersion;
15+
private final HibernateVersion developmentVersion;
16+
private final Provider<Boolean> createTagAccess;
17+
private final Provider<String> tagNameAccess;
18+
19+
public ReleaseDetails(Project project) {
20+
final Object releaseVersionSetting = project.findProperty( "releaseVersion" );
21+
final Object developmentVersionSetting = project.findProperty( "developmentVersion" );
22+
if ( releaseVersionSetting != null ) {
23+
if ( developmentVersionSetting == null ) {
24+
throw new IllegalStateException( "`releaseVersion` with no `developmentVersion`" );
25+
}
26+
releaseVersion = new HibernateVersion( releaseVersionSetting.toString() );
27+
developmentVersion = new HibernateVersion( developmentVersionSetting.toString() );
28+
tagNameAccess = project.provider( () -> determineReleaseTag( releaseVersion.getFullName() ) );
29+
}
30+
else {
31+
releaseVersion = null;
32+
developmentVersion = null;
33+
tagNameAccess = project.provider( () -> null );
34+
}
35+
36+
createTagAccess = project.provider( () -> !project.hasProperty( "noTag" ) );
37+
}
38+
39+
public HibernateVersion getReleaseVersion() {
40+
return releaseVersion;
41+
}
42+
43+
public HibernateVersion getDevelopmentVersion() {
44+
return developmentVersion;
45+
}
46+
47+
public Provider<Boolean> getCreateTagAccess() {
48+
return createTagAccess;
49+
}
50+
51+
public boolean shouldCreateTag() {
52+
return getCreateTagAccess().get();
53+
}
54+
55+
public Provider<String> getTagNameAccess() {
56+
return tagNameAccess;
57+
}
58+
59+
public String getTagNameToUse() {
60+
return getTagNameAccess().get();
61+
}
62+
63+
private static String determineReleaseTag(String releaseVersion) {
64+
return releaseVersion.endsWith( ".Final" )
65+
? releaseVersion.replace( ".Final", "" )
66+
: releaseVersion;
67+
}
68+
}

local-build-plugins/src/main/java/org/hibernate/build/aspects/ModuleAspect.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,9 @@ public void apply(Project target) {
2323
target.getPluginManager().apply( "base" );
2424

2525
// read-only details about the build
26-
final OrmBuildDetails ormBuildDetails = target.getExtensions().create(
27-
"ormBuildDetails",
26+
final OrmBuildDetails ormBuildDetails = target.getExtensions().create("ormBuildDetails",
2827
OrmBuildDetails.class,
29-
HibernateVersion.determine( target, () -> new File( target.getRootDir(), HibernateVersion.RELATIVE_FILE ) ),
30-
JpaVersion.from( target ),
31-
// default defined in `gradle.properties`
32-
target.property( "db" )
28+
target
3329
);
3430

3531
target.setGroup( "org.hibernate.orm" );

0 commit comments

Comments
 (0)