From 44bc0ff252c7b7b95604844abdd2bec6e55e5321 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Wed, 24 Sep 2025 15:00:13 +0200 Subject: [PATCH] HHH-19800 Migrate to release scripts for documentation publishing --- ci/release/Jenkinsfile | 2 +- local-build-plugins/build.gradle | 4 - .../hibernate/orm/docs/DescriptorAccess.java | 84 ----------- .../orm/docs/DocumentationPublishing.java | 104 -------------- .../docs/DocumentationPublishingPlugin.java | 112 --------------- .../orm/docs/GenerateDescriptorTask.java | 132 ------------------ .../docs/ProjectDocumentationDescriptor.java | 82 ----------- .../orm/docs/PublishDescriptorTask.java | 57 -------- .../orm/docs/PublishMigrationGuide.java | 75 ---------- .../org/hibernate/orm/docs/PublishTask.java | 70 ---------- .../orm/docs/ReleaseFamilyDocumentation.java | 63 --------- .../ReleaseFamilyIdentifierMarshalling.java | 29 ---- .../org/hibernate/orm/docs/RsyncHelper.java | 26 ---- .../orm/docs/UpdateSymLinksTask.java | 125 ----------------- release/release.gradle | 59 ++------ 15 files changed, 16 insertions(+), 1008 deletions(-) delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/DescriptorAccess.java delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/DocumentationPublishing.java delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/DocumentationPublishingPlugin.java delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/GenerateDescriptorTask.java delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/ProjectDocumentationDescriptor.java delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishDescriptorTask.java delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishMigrationGuide.java delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishTask.java delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/ReleaseFamilyDocumentation.java delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/ReleaseFamilyIdentifierMarshalling.java delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/RsyncHelper.java delete mode 100644 local-build-plugins/src/main/java/org/hibernate/orm/docs/UpdateSymLinksTask.java diff --git a/ci/release/Jenkinsfile b/ci/release/Jenkinsfile index ce7f17e98a6a..cb81ccc7b899 100644 --- a/ci/release/Jenkinsfile +++ b/ci/release/Jenkinsfile @@ -216,7 +216,7 @@ pipeline { string(credentialsId: 'release.gpg.passphrase', variable: 'JRELEASER_GPG_PASSPHRASE'), string(credentialsId: 'Hibernate-CI.github.com', variable: 'JRELEASER_GITHUB_TOKEN') ]) { - sshagent(['ed25519.Hibernate-CI.github.com', 'hibernate.filemgmt.jboss.org', 'hibernate-ci.frs.sourceforge.net']) { + sshagent(['ed25519.Hibernate-CI.github.com', 'hibernate.filemgmt.jboss.org', 'jenkins.in.relation.to', 'hibernate-ci.frs.sourceforge.net']) { // performs documentation upload and Sonatype release // push to github withEnv([ diff --git a/local-build-plugins/build.gradle b/local-build-plugins/build.gradle index 19deebd1406b..7b6bf092b073 100644 --- a/local-build-plugins/build.gradle +++ b/local-build-plugins/build.gradle @@ -69,10 +69,6 @@ gradlePlugin { id = 'org.hibernate.orm.build.reports' implementationClass = 'org.hibernate.orm.post.ReportGenerationPlugin' } - docPubPlugin { - id = 'org.hibernate.orm.build.doc-pub' - implementationClass = 'org.hibernate.orm.docs.DocumentationPublishingPlugin' - } envSettings { id = 'org.hibernate.orm.build.env-settings' implementationClass = 'org.hibernate.orm.env.EnvironmentSettingsPlugin' diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/DescriptorAccess.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/DescriptorAccess.java deleted file mode 100644 index 36c3623cfb79..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/DescriptorAccess.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; - -import jakarta.json.bind.Jsonb; -import jakarta.json.bind.JsonbBuilder; -import jakarta.json.bind.JsonbConfig; -import org.apache.http.HttpEntity; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; - -/** - * Helper for {@linkplain #loadProject() loading} the project documentation descriptor and - * {@linkplain #storeProject storing} it to file. - * - * @author Steve Ebersole - */ -public class DescriptorAccess { - public static final String DETAILS_URL = "https://docs.jboss.org/hibernate/_outdated-content/orm.json"; - - /** - * Load the descriptor - */ - public static ProjectDocumentationDescriptor loadProject() { - try ( final CloseableHttpClient httpClient = HttpClientBuilder.create().build() ) { - final HttpGet request = new HttpGet( DETAILS_URL ); - - try ( final CloseableHttpResponse response = httpClient.execute( request ) ) { - final HttpEntity responseEntity = response.getEntity(); - //noinspection resource - final Jsonb jsonb = JsonbBuilder.create( new JsonbConfig().withFormatting( true ) ); - return jsonb.fromJson( responseEntity.getContent(), ProjectDocumentationDescriptor.class ); - } - } - catch (IOException e) { - throw new RuntimeException( "Unable to create HttpClient", e ); - } - } - - /** - * Store the descriptor to file - */ - public static void storeProject(ProjectDocumentationDescriptor project, File jsonFile) { - prepareJsonFile( jsonFile ); - - //noinspection resource - final Jsonb jsonb = JsonbBuilder.create( new JsonbConfig().withFormatting( true ) ); - - try ( final FileWriter writer = new FileWriter( jsonFile ) ) { - jsonb.toJson( project, writer ); - } - catch (IOException e) { - throw new RuntimeException( "Unable to open write for JSON file : " + jsonFile.getPath(), e ); - } - } - - private static void prepareJsonFile(File jsonFile) { - if ( jsonFile.exists() ) { - final boolean deleted = jsonFile.delete(); - assert deleted; - } - - if ( ! jsonFile.getParentFile().exists() ) { - final boolean dirsMade = jsonFile.getParentFile().mkdirs(); - assert dirsMade; - } - - try { - final boolean created = jsonFile.createNewFile(); - assert created; - } - catch (IOException e) { - throw new RuntimeException( "Unable to create JSON file : `" + jsonFile.getPath() + "`", e ); - } - } -} diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/DocumentationPublishing.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/DocumentationPublishing.java deleted file mode 100644 index a3876318f067..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/DocumentationPublishing.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import javax.inject.Inject; - -import org.gradle.api.Project; -import org.gradle.api.file.DirectoryProperty; -import org.gradle.api.file.RegularFile; -import org.gradle.api.file.RegularFileProperty; -import org.gradle.api.provider.Property; -import org.gradle.api.provider.Provider; - -import org.hibernate.orm.ReleaseFamilyIdentifier; - -/** - * Gradle DSL extension for configuring documentation publishing - * - * @author Steve Ebersole - */ -public class DocumentationPublishing { - public static final String DSL_NAME = "documentationPublishing"; - - public static final String RSYNC_SERVER = "filemgmt-prod-sync.jboss.org"; - public static final String SFTP_SERVER = "filemgmt-prod.jboss.org"; - - public static final String DOC_SERVER_BASE_DIR = "/docs_htdocs/hibernate"; - - public static final String DESCRIPTOR_FILE = "doc-pub/orm.json"; - - private final Project project; - - private final DirectoryProperty stagingDirectory; - - private final Property rsyncDocServer; - private final Property sftpDocServer; - private final Property serverBaseDir; - - private final RegularFileProperty updatedJsonFile; - - private final ReleaseFamilyIdentifier releaseFamilyIdentifier; - - @Inject - public DocumentationPublishing(Project project) { - this.project = project; - - stagingDirectory = project.getObjects() - .directoryProperty() - .convention( project.getLayout().getBuildDirectory().dir( "documentation" ) ); - - - rsyncDocServer = project.getObjects() - .property( String.class ) - .convention( RSYNC_SERVER ); - - sftpDocServer = project.getObjects() - .property( String.class ) - .convention( SFTP_SERVER ); - - serverBaseDir = project.getObjects() - .property( String.class ) - .convention( DOC_SERVER_BASE_DIR ); - - updatedJsonFile = project.getObjects() - .fileProperty() - .convention( project.getLayout().getBuildDirectory().file( DESCRIPTOR_FILE ) ); - - releaseFamilyIdentifier = ReleaseFamilyIdentifier.parse( project.getVersion().toString() ); - } - - public ReleaseFamilyIdentifier getReleaseFamilyIdentifier() { - return releaseFamilyIdentifier; - } - - public Property getRsyncDocServer() { - return rsyncDocServer; - } - - public Property getSftpDocServer() { - return sftpDocServer; - } - - public Property getServerBaseDir() { - return serverBaseDir; - } - - public DirectoryProperty getStagingDirectory() { - return stagingDirectory; - } - - public Provider getUpdatedJsonFile() { - return updatedJsonFile; - } - - public void setUpdatedJsonFile(Object ref) { - updatedJsonFile.fileValue( project.file( ref ) ); - } - - public void updatedJsonFile(Object ref) { - updatedJsonFile.fileValue( project.file( ref ) ); - } -} diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/DocumentationPublishingPlugin.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/DocumentationPublishingPlugin.java deleted file mode 100644 index 4f8a79b3ba6c..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/DocumentationPublishingPlugin.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import java.util.Locale; - -import org.gradle.api.Plugin; -import org.gradle.api.Project; -import org.gradle.api.provider.Provider; -import org.gradle.api.tasks.TaskProvider; - -import static org.hibernate.orm.docs.DocumentationPublishing.DSL_NAME; -import static org.hibernate.orm.docs.GenerateDescriptorTask.GEN_DESC_TASK_NAME; -import static org.hibernate.orm.docs.PublishDescriptorTask.UPLOAD_DESC_TASK_NAME; -import static org.hibernate.orm.docs.PublishTask.UPLOAD_TASK_NAME; - -/** - * Plugin for helping with publishing documentation to the doc server -
    - *
  • Publishes a {@link DocumentationPublishing DSL extension} under {@value DocumentationPublishing#DSL_NAME}
  • - *
  • Creates a task to upload the documentation to the doc server - {@value PublishTask#UPLOAD_TASK_NAME}
  • - *
  • Creates a task to create the doc descriptor (JSON) file - {@value GenerateDescriptorTask#GEN_DESC_TASK_NAME}
  • - *
  • Creates a task to upload the doc descriptor (JSON) file to the doc server - {@value PublishDescriptorTask#UPLOAD_DESC_TASK_NAME}
  • - *
  • Creates a task to update symlinks on the doc server - {@value UpdateSymLinksTask#SYMLINKS_TASK_NAME}
  • - *
  • Creates a task to upload the migration guide to the doc server - {@value PublishMigrationGuide#NAME}
  • - *
- * - * @author Steve Ebersole - */ -public class DocumentationPublishingPlugin implements Plugin { - @Override - public void apply(Project project) { - final DocumentationPublishing docPubDsl = project.getExtensions().create( DSL_NAME, DocumentationPublishing.class ); - - final boolean isSnapshot = project.getVersion().toString().endsWith( "-SNAPSHOT" ); - final boolean isFinal = project.getVersion().toString().endsWith( ".Final" ); - - final TaskProvider generateDescriptorTask = project.getTasks().register( - GEN_DESC_TASK_NAME, - GenerateDescriptorTask.class, - (task) -> { - task.getCurrentlyBuildingFamily().convention( docPubDsl.getReleaseFamilyIdentifier() ); - task.getJsonFile().convention( docPubDsl.getUpdatedJsonFile() ); - - task.onlyIf( (t) -> isFinal ); - } - ); - - final TaskProvider uploadDescriptorTask = project.getTasks().register( - UPLOAD_DESC_TASK_NAME, - PublishDescriptorTask.class, - (task) -> { - task.getDocDescriptorUploadUrl().convention( defaultDescriptorUploadUrl( docPubDsl ) ); - task.getJsonFile().convention( docPubDsl.getUpdatedJsonFile() ); - - task.dependsOn( generateDescriptorTask ); - task.onlyIf( (t) -> generateDescriptorTask.get().getDidWork() && generateDescriptorTask.get().needsUpload() ); - } - ); - - //noinspection unused - final TaskProvider uploadTask = project.getTasks().register( - UPLOAD_TASK_NAME, - PublishTask.class, - (task) -> { - task.getBuildingFamily().convention( docPubDsl.getReleaseFamilyIdentifier() ); - task.getStagingDirectory().convention( docPubDsl.getStagingDirectory() ); - task.getDocServerUrl().convention( defaultDocUploadUrl( docPubDsl ) ); - - task.dependsOn( uploadDescriptorTask ); - task.onlyIf( (t) -> !isSnapshot ); - } - ); - - //noinspection unused - final TaskProvider symLinkTask = project.getTasks().register( - UpdateSymLinksTask.SYMLINKS_TASK_NAME, - UpdateSymLinksTask.class, - (task) -> { - task.getBuildingFamily().convention( docPubDsl.getReleaseFamilyIdentifier() ); - task.getSftpDocServer().convention( docPubDsl.getSftpDocServer() ); - task.getServerBaseDir().convention( docPubDsl.getServerBaseDir() ); - - task.dependsOn( generateDescriptorTask ); - task.dependsOn( uploadTask ); - task.onlyIf( (t) -> generateDescriptorTask.get().getDidWork() && generateDescriptorTask.get().needsSymLinkUpdate() ); - } - ); - - //noinspection unused - final TaskProvider publishMigrationGuideTask = project.getTasks().register( - PublishMigrationGuide.NAME, - PublishMigrationGuide.class, - (task) -> { - task.getCurrentlyBuildingFamily().convention( docPubDsl.getReleaseFamilyIdentifier() ); - task.getDocServerUrl().convention( defaultDocUploadUrl( docPubDsl ) ); - task.getMigrationGuideDirectory().convention( project.getLayout().getBuildDirectory().dir( "documentation/migration-guide" ) ); - } - ); - } - - private Provider defaultDescriptorUploadUrl(DocumentationPublishing dsl) { - return dsl.getRsyncDocServer() - .map( (server) -> String.format( Locale.ROOT, "%s:%s/_outdated-content/orm.json", server, dsl.getServerBaseDir().get() ) ); - } - - private Provider defaultDocUploadUrl(DocumentationPublishing dsl) { - return dsl.getRsyncDocServer() - .map( (server) -> String.format( Locale.ROOT, "%s:%s/orm", server, dsl.getServerBaseDir().get() ) ); - } -} diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/GenerateDescriptorTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/GenerateDescriptorTask.java deleted file mode 100644 index 33691614b62e..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/GenerateDescriptorTask.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import java.io.File; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - -import org.gradle.api.DefaultTask; -import org.gradle.api.file.RegularFileProperty; -import org.gradle.api.provider.Property; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.OutputFile; -import org.gradle.api.tasks.TaskAction; - -import org.hibernate.orm.ReleaseFamilyIdentifier; - -/** - * Task for creating the JSON "documentation descriptor" for ORM - * - * @author Steve Ebersole - */ -public abstract class GenerateDescriptorTask extends DefaultTask { - public static final String GEN_DESC_TASK_NAME = "generateDocumentationDescriptor"; - - private final Property currentlyBuildingFamily; - private final RegularFileProperty jsonFile; - - private boolean needsUpload; - private boolean needsSymLinkUpdate; - - public GenerateDescriptorTask() { - setGroup( "documentation" ); - setDescription( "Generates the documentation publication descriptor (JSON)" ); - - currentlyBuildingFamily = getProject().getObjects().property( ReleaseFamilyIdentifier.class ); - jsonFile = getProject().getObjects().fileProperty(); - } - - @Input - public Property getCurrentlyBuildingFamily() { - return currentlyBuildingFamily; - } - - @OutputFile - public RegularFileProperty getJsonFile() { - return jsonFile; - } - - /** - * Whether we determined, during {@linkplain #generateDescriptor}, that uploading the - * doc descriptor was needed. - * - * @see PublishDescriptorTask - */ - public boolean needsUpload() { - return getDidWork() && needsUpload; - } - - /** - * Whether we determined, during {@linkplain #generateDescriptor}, that updating the - * doc server symlinks was needed. - * - * @see UpdateSymLinksTask - */ - public boolean needsSymLinkUpdate() { - return getDidWork() && needsSymLinkUpdate; - } - - @TaskAction - public void generateDescriptor() { - final ProjectDocumentationDescriptor descriptor = DescriptorAccess.loadProject(); - final boolean isFinal = getProject().getVersion().toString().endsWith( ".Final" ); - - final Set processedReleases = new HashSet<>(); - ReleaseFamilyIdentifier newest = null; - boolean foundCurrentRelease = false; - - final Iterator itr = descriptor.getReleaseFamilies().iterator(); - while ( itr.hasNext() ) { - final ReleaseFamilyDocumentation releaseFamily = itr.next(); - - // NOTE: sometimes releases get duplicated in the descriptor... - // let's clean those up if we run across them - if ( !processedReleases.add( releaseFamily.getName() ) ) { - itr.remove(); - needsUpload = true; - continue; - } - - if ( newest == null - || releaseFamily.getName().newerThan( newest ) ) { - newest = releaseFamily.getName(); - } - - if ( releaseFamily.getName().equals( currentlyBuildingFamily.get() ) ) { - foundCurrentRelease = true; - } - } - - if ( isFinal ) { - // we are releasing a Final - possibly do some other things - - if ( !foundCurrentRelease ) { - // this release is not yet tracked in the descriptor - add it - final ReleaseFamilyDocumentation newEntry = new ReleaseFamilyDocumentation(); - newEntry.setName( currentlyBuildingFamily.get() ); - descriptor.addReleaseFamily( newEntry ); - setDidWork( true ); - needsUpload = true; - } - - if ( currentlyBuildingFamily.get().newerThan( newest ) ) { - // this release is newer than any currently tracked in the descriptor - descriptor.setStableFamily( currentlyBuildingFamily.get() ); - setDidWork( true ); - needsSymLinkUpdate = true; - } - } - - DescriptorAccess.storeProject( descriptor, jsonFile.get().getAsFile() ); - } - - public static void main(String... args) { - final File jsonFile = new File( "/tmp/hibernate-orm-build/doc-pub/orm.json" ); - final ProjectDocumentationDescriptor projectDoc = DescriptorAccess.loadProject(); - DescriptorAccess.storeProject( projectDoc, jsonFile ); - } -} diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/ProjectDocumentationDescriptor.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/ProjectDocumentationDescriptor.java deleted file mode 100644 index daff4a0ac91d..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/ProjectDocumentationDescriptor.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import java.util.List; -import java.util.Map; - -import org.hibernate.orm.ReleaseFamilyIdentifier; - -import jakarta.json.bind.annotation.JsonbProperty; -import jakarta.json.bind.annotation.JsonbPropertyOrder; -import jakarta.json.bind.annotation.JsonbTypeAdapter; - -/** - * Binding for the doc-pub descriptor (JSON) file - * - * @author Steve Ebersole - */ -@JsonbPropertyOrder( {"name", "stableFamily", "singlePageDetails", "multiPageDetails", "releaseFamilies" } ) -public class ProjectDocumentationDescriptor { - @JsonbProperty( "project" ) - private String name; - - @JsonbProperty( "stable" ) - @JsonbTypeAdapter( ReleaseFamilyIdentifierMarshalling.class ) - private ReleaseFamilyIdentifier stableFamily; - - @JsonbProperty( "versions" ) - private List releaseFamilies; - - @JsonbProperty( "multi" ) - private Map multiPageDetails; - @JsonbProperty( "single" ) - private Map singlePageDetails; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public ReleaseFamilyIdentifier getStableFamily() { - return stableFamily; - } - - public void setStableFamily(ReleaseFamilyIdentifier stableFamily) { - this.stableFamily = stableFamily; - } - - public List getReleaseFamilies() { - return releaseFamilies; - } - - public void setReleaseFamilies(List releaseFamilies) { - this.releaseFamilies = releaseFamilies; - } - - public void addReleaseFamily(ReleaseFamilyDocumentation familyDetails) { - // Add new entries at the top - releaseFamilies.add( 0, familyDetails ); - } - - public Map getMultiPageDetails() { - return multiPageDetails; - } - - public void setMultiPageDetails(Map multiPageDetails) { - this.multiPageDetails = multiPageDetails; - } - - public Map getSinglePageDetails() { - return singlePageDetails; - } - - public void setSinglePageDetails(Map singlePageDetails) { - this.singlePageDetails = singlePageDetails; - } -} diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishDescriptorTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishDescriptorTask.java deleted file mode 100644 index ed3df756cea0..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishDescriptorTask.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import org.gradle.api.DefaultTask; -import org.gradle.api.file.RegularFileProperty; -import org.gradle.api.provider.Property; -import org.gradle.api.provider.Provider; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.InputFile; -import org.gradle.api.tasks.SkipWhenEmpty; -import org.gradle.api.tasks.TaskAction; - -/** - * @author Steve Ebersole - */ -public abstract class PublishDescriptorTask extends DefaultTask { - public static final String UPLOAD_DESC_TASK_NAME = "uploadDocumentationDescriptor"; - - private final Provider projectVersion; - private final Property docDescriptorUploadUrl; - private final RegularFileProperty jsonFile; - - public PublishDescriptorTask() { - setGroup( "documentation" ); - setDescription( "Publishes the documentation publication descriptor (JSON)" ); - - projectVersion = getProject().provider( () -> getProject().getVersion() ); - docDescriptorUploadUrl = getProject().getObjects().property( String.class ); - jsonFile = getProject().getObjects().fileProperty(); - } - - @InputFile - @SkipWhenEmpty - public RegularFileProperty getJsonFile() { - return jsonFile; - } - - @Input - public Property getDocDescriptorUploadUrl() { - return docDescriptorUploadUrl; - } - - @Input - public Provider getProjectVersion() { - return projectVersion; - } - - - @TaskAction - public void uploadDescriptor() { - final String url = docDescriptorUploadUrl.get(); - RsyncHelper.rsync( jsonFile.get(), url, getProject() ); - } -} diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishMigrationGuide.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishMigrationGuide.java deleted file mode 100644 index f433104997da..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishMigrationGuide.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import org.gradle.api.DefaultTask; -import org.gradle.api.file.DirectoryProperty; -import org.gradle.api.provider.Property; -import org.gradle.api.provider.Provider; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.InputDirectory; -import org.gradle.api.tasks.PathSensitive; -import org.gradle.api.tasks.PathSensitivity; -import org.gradle.api.tasks.TaskAction; - -import org.hibernate.orm.ReleaseFamilyIdentifier; - -/** - * @author Steve Ebersole - */ -public abstract class PublishMigrationGuide extends DefaultTask { - public static final String NAME = "publishMigrationGuide"; - - private final Provider projectVersion; - private final Property currentlyBuildingFamily; - private final Property docServerUrl; - private final DirectoryProperty migrationGuideDirectory; - - public PublishMigrationGuide() { - setGroup( "documentation" ); - setDescription( "Publishes the migration-guide associated with the current branch. " + - "Intended for incremental publishing of the guide for corrections, etc. without doing a full release. " + - "Note that this is not needed when doing a release as the migration-guide is published as part of that workflow." ); - - getInputs().property( "hibernate-version", getProject().getVersion() ); - - projectVersion = getProject().provider( () -> getProject().getVersion() ); - currentlyBuildingFamily = getProject().getObjects().property( ReleaseFamilyIdentifier.class ); - - docServerUrl = getProject().getObjects().property( String.class ); - migrationGuideDirectory = getProject().getObjects().directoryProperty(); - } - - @Input - public Provider getProjectVersion() { - return projectVersion; - } - - @InputDirectory - @PathSensitive(PathSensitivity.RELATIVE) - public DirectoryProperty getMigrationGuideDirectory() { - return migrationGuideDirectory; - } - - @Input - public Property getDocServerUrl() { - return docServerUrl; - } - - - @Input - public Property getCurrentlyBuildingFamily() { - return currentlyBuildingFamily; - } - - @TaskAction - public void uploadMigrationGuide() { - final String base = docServerUrl.get(); - final String normalizedBase = base.endsWith( "/" ) ? base : base + "/"; - final String url = normalizedBase + currentlyBuildingFamily.get().toExternalForm() + "/migration-guide/"; - - RsyncHelper.rsync( migrationGuideDirectory.get(), url, getProject() ); - } -} diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishTask.java deleted file mode 100644 index 72ca4da38ebb..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/PublishTask.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import org.gradle.api.DefaultTask; -import org.gradle.api.file.Directory; -import org.gradle.api.file.DirectoryProperty; -import org.gradle.api.provider.Property; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.InputDirectory; -import org.gradle.api.tasks.TaskAction; -import org.gradle.process.ExecResult; - -import org.hibernate.orm.ReleaseFamilyIdentifier; - -/** - * @author Steve Ebersole - */ -public abstract class PublishTask extends DefaultTask { - public static final String UPLOAD_TASK_NAME = "uploadDocumentation"; - - private final Property buildingFamily; - private final Property docServerUrl; - private final DirectoryProperty stagingDirectory; - - public PublishTask() { - setGroup( "documentation" ); - setDescription( "Publish documentation to the doc server" ); - - buildingFamily = getProject().getObjects().property( ReleaseFamilyIdentifier.class ); - docServerUrl = getProject().getObjects().property( String.class ); - stagingDirectory = getProject().getObjects().directoryProperty(); - } - - @Input - public Property getDocServerUrl() { - return docServerUrl; - } - - @Input - public Property getBuildingFamily() { - return buildingFamily; - } - - @InputDirectory - public Property getStagingDirectory() { - return stagingDirectory; - } - - @TaskAction - public void uploadDocumentation() { - final String releaseFamily = buildingFamily.get().toExternalForm(); - final String base = docServerUrl.get(); - final String normalizedBase = base.endsWith( "/" ) ? base : base + "/"; - final String url = normalizedBase + releaseFamily; - - final String stagingDirPath = stagingDirectory.get().getAsFile().getAbsolutePath(); - final String stagingDirPathContent = stagingDirPath.endsWith( "/" ) ? stagingDirPath : stagingDirPath + "/"; - - getProject().getLogger().lifecycle( "Uploading documentation `{}` -> `{}`", stagingDirPath, url ); - final ExecResult result = getProject().exec( (exec) -> { - exec.executable( "rsync" ); - exec.args("-avz", "--delete", stagingDirPathContent, url ); - } ); - getProject().getLogger().lifecycle( "Done uploading documentation - {}", result.getExitValue() == 0 ? "success" : "failure" ); - setDidWork( true ); - } -} diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/ReleaseFamilyDocumentation.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/ReleaseFamilyDocumentation.java deleted file mode 100644 index eddef320d253..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/ReleaseFamilyDocumentation.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.orm.ReleaseFamilyIdentifier; - -import jakarta.json.bind.annotation.JsonbProperty; -import jakarta.json.bind.annotation.JsonbPropertyOrder; -import jakarta.json.bind.annotation.JsonbTypeAdapter; - -/** - * Binding for the doc-pub descriptor (JSON) related to a specific release family. - * - * @see ProjectDocumentationDescriptor - * - * @author Steve Ebersole - */ -@JsonbPropertyOrder( { "name", "redirects" } ) -public class ReleaseFamilyDocumentation { - @JsonbProperty( "version" ) - @JsonbTypeAdapter( ReleaseFamilyIdentifierMarshalling.class ) - private ReleaseFamilyIdentifier name; - private Map redirects; - - public ReleaseFamilyDocumentation() { - } - - /** - * The release family, e.g. `6.0` or `5.6` - */ - public ReleaseFamilyIdentifier getName() { - return name; - } - - public void setName(ReleaseFamilyIdentifier name) { - this.name = name; - } - - public Map getRedirects() { - return redirects; - } - - public void setRedirects(Map redirects) { - this.redirects = redirects; - } - - public void redirect(String from, String to) { - if ( redirects == null ) { - redirects = new HashMap<>(); - } - redirects.put( from, to ); - } - - @Override - public String toString() { - return "ReleaseFamilyDocumentation( " + name + ")"; - } -} diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/ReleaseFamilyIdentifierMarshalling.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/ReleaseFamilyIdentifierMarshalling.java deleted file mode 100644 index 1676359520a8..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/ReleaseFamilyIdentifierMarshalling.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import org.hibernate.orm.ReleaseFamilyIdentifier; - -import jakarta.json.Json; -import jakarta.json.JsonString; -import jakarta.json.JsonValue; -import jakarta.json.bind.adapter.JsonbAdapter; - -/** - * @author Steve Ebersole - */ -public class ReleaseFamilyIdentifierMarshalling implements JsonbAdapter { - @Override - public JsonValue adaptToJson(ReleaseFamilyIdentifier obj) throws Exception { - return Json.createValue( obj.toExternalForm() ); - } - - @Override - public ReleaseFamilyIdentifier adaptFromJson(JsonValue obj) throws Exception { - assert obj.getValueType() == JsonValue.ValueType.STRING; - final JsonString jsonString = (JsonString) obj; - return ReleaseFamilyIdentifier.parse( jsonString.getString() ); - } -} diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/RsyncHelper.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/RsyncHelper.java deleted file mode 100644 index a7d93c1d1131..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/RsyncHelper.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import org.gradle.api.Project; -import org.gradle.api.file.FileSystemLocation; - -/** - * Helper for performing rsync system commands, mainly used to centralize - * the command options - * - * @author Steve Ebersole - */ -public class RsyncHelper { - public static void rsync( - FileSystemLocation source, - String targetUrl, - Project project) { - project.exec( (exec) -> { - exec.executable( "rsync" ); - exec.args( "--port=2222", "-avz", source.getAsFile().getAbsolutePath(), targetUrl ); - } ); - } -} diff --git a/local-build-plugins/src/main/java/org/hibernate/orm/docs/UpdateSymLinksTask.java b/local-build-plugins/src/main/java/org/hibernate/orm/docs/UpdateSymLinksTask.java deleted file mode 100644 index 19e43a9c31a0..000000000000 --- a/local-build-plugins/src/main/java/org/hibernate/orm/docs/UpdateSymLinksTask.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.docs; - -import java.io.BufferedReader; -import java.io.Closeable; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import java.util.Locale; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; - -import org.gradle.api.DefaultTask; -import org.gradle.api.provider.Property; -import org.gradle.api.tasks.TaskAction; - -import org.hibernate.orm.ReleaseFamilyIdentifier; - -import static org.hibernate.orm.docs.DocumentationPublishing.DOC_SERVER_BASE_DIR; -import static org.hibernate.orm.docs.DocumentationPublishing.SFTP_SERVER; - -/** - * Updates the "current" and "stable" symlinks on the doc server - * - * @author Steve Ebersole - */ -public class UpdateSymLinksTask extends DefaultTask { - public static final String SYMLINKS_TASK_NAME = "updateDocSymLinks"; - - private final Property sftpDocServer; - private final Property serverBaseDir; - private final Property buildingFamily; - - public UpdateSymLinksTask() { - setGroup( "documentation" ); - setDescription( "Updates the 'current' and 'stable' symlinks on the documentation server" ); - - buildingFamily = getProject().getObjects().property( ReleaseFamilyIdentifier.class ); - sftpDocServer = getProject().getObjects().property( String.class ); - serverBaseDir = getProject().getObjects().property( String.class ); - } - - public Property getBuildingFamily() { - return buildingFamily; - } - - public Property getSftpDocServer() { - return sftpDocServer; - } - - public Property getServerBaseDir() { - return serverBaseDir; - } - - @TaskAction - public void updateSymLinks() throws Exception { - updateSymLinks( buildingFamily.get().toExternalForm(), sftpDocServer.get(), serverBaseDir.get() ); - } - - private static void updateSymLinks(String releaseName, String sftpServer, String serverBaseDir) throws Exception { - final File commandFile = createCommandFile( releaseName, serverBaseDir ); - System.out.println( "SFTP command file : " + commandFile.getAbsolutePath() ); - - final Process sftpProcess = new ProcessBuilder() - .command( "sh", "sftp", "-b", commandFile.getAbsolutePath(), sftpServer ) - .redirectInput( ProcessBuilder.Redirect.INHERIT ) - .start(); - - ExecutorService service = Executors.newFixedThreadPool( 2 ); - try ( InputStream is = sftpProcess.getInputStream(); InputStream es = sftpProcess.getErrorStream(); - Closeable pool = service::shutdownNow ) { - service.submit( () -> drain( is, System.out::println ) ); - service.submit( () -> drain( es, System.err::println ) ); - service.shutdown(); - - final boolean isFinished = sftpProcess.waitFor( 15, TimeUnit.SECONDS ); - if ( !isFinished ) { - System.out.println( "Forcibly ending sftp" ); - sftpProcess.destroyForcibly(); - } - } - } - - private static void drain(InputStream stream, Consumer consumer) { - try (InputStreamReader in = new InputStreamReader( stream, StandardCharsets.UTF_8 ); - BufferedReader bufferedReader = new BufferedReader( in ); ) { - bufferedReader.lines().forEach( consumer ); - } - catch (IOException e) { - throw new RuntimeException( e ); - } - } - - - private static File createCommandFile(String releaseName, String serverBaseDir) throws IOException { - final File commandFile = File.createTempFile( "hibernate-orm-release-doc-symlink-" + releaseName, "-cmd.txt" ); - - try (FileWriter commandFileWriter = new FileWriter( commandFile )) { - commandFileWriter.write( "cd " + serverBaseDir + "/stable\n" ); - commandFileWriter.write( "-rm orm\n" ); - commandFileWriter.write( String.format( Locale.ROOT, "ln -s ../orm/%s orm\n", releaseName ) ); - - commandFileWriter.write( "cd " + serverBaseDir + "/orm\n" ); - commandFileWriter.write( "-rm current\n" ); - commandFileWriter.write( String.format( Locale.ROOT, "ln -s %s current\n", releaseName ) ); - - commandFileWriter.flush(); - } - - return commandFile; - } - - public static void main(String[] args) throws Exception { - System.out.println( "Starting UpdateSymLinksTask" ); - updateSymLinks( "6.6", SFTP_SERVER, DOC_SERVER_BASE_DIR ); - } -} diff --git a/release/release.gradle b/release/release.gradle index 4dd8f448919a..c439f01ecfc5 100644 --- a/release/release.gradle +++ b/release/release.gradle @@ -10,7 +10,6 @@ import groovy.json.JsonSlurper plugins { id "local.module" - id "org.hibernate.orm.build.doc-pub" id "org.hibernate.orm.build.jdks" id "idea" @@ -192,7 +191,7 @@ def stageIntegrationGuideTask = tasks.register( "stageIntegrationGuide", Copy ) dependsOn ":documentation:renderIntegrationGuides" from project.provider { project( ":documentation" ).layout.buildDirectory.dir( "asciidoc/integrationguide" ) } - into layout.buildDirectory.dir( "documentation/integrationguide" ) + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/integrationguide") } def stageQuickstartTask = tasks.register( "stageQuickstart", Copy ) { @@ -202,7 +201,7 @@ def stageQuickstartTask = tasks.register( "stageQuickstart", Copy ) { dependsOn ':documentation:renderGettingStartedGuides' from project.provider { project( ":documentation" ).layout.buildDirectory.dir( "asciidoc/quickstart" ) } - into layout.buildDirectory.dir( "documentation/quickstart" ) + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/quickstart") } def stageTopicalGuideTask = tasks.register( "stageTopicalGuide", Copy ) { @@ -212,8 +211,7 @@ def stageTopicalGuideTask = tasks.register( "stageTopicalGuide", Copy ) { dependsOn ':documentation:renderTopicalGuides' from project.provider { project( ":documentation" ).layout.buildDirectory.dir( "asciidoc/topical" ) } - into layout.buildDirectory.dir( "documentation/topical" ) - + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/topical") } def stageIntroductionGuideTask = tasks.register( "stageIntroductionGuide", Copy ) { @@ -223,7 +221,7 @@ def stageIntroductionGuideTask = tasks.register( "stageIntroductionGuide", Copy dependsOn ':documentation:renderIntroductionGuides' from project.provider { project( ":documentation" ).layout.buildDirectory.dir( "asciidoc/introduction" ) } - into layout.buildDirectory.dir( "documentation/introduction" ) + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/introduction") } def stageQueryGuideTask = tasks.register( "stageQueryGuide", Copy ) { @@ -233,7 +231,7 @@ def stageQueryGuideTask = tasks.register( "stageQueryGuide", Copy ) { dependsOn ':documentation:renderQueryLanguageGuides' from project.provider { project( ":documentation" ).layout.buildDirectory.dir( "asciidoc/querylanguage" ) } - into layout.buildDirectory.dir( "documentation/querylanguage" ) + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/querylanguage") } def stageRepositoriesGuideTask = tasks.register( "stageRepositoriesGuide", Copy ) { @@ -243,7 +241,7 @@ def stageRepositoriesGuideTask = tasks.register( "stageRepositoriesGuide", Copy dependsOn ':documentation:renderRepositories' from project.provider { project( ":documentation" ).layout.buildDirectory.dir( "asciidoc/repositories" ) } - into layout.buildDirectory.dir( "documentation/repositories" ) + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/repositories") } def stageUserGuideTask = tasks.register( "stageUserGuide", Copy ) { @@ -253,7 +251,7 @@ def stageUserGuideTask = tasks.register( "stageUserGuide", Copy ) { dependsOn ':documentation:renderUserGuides' from project.provider { project( ":documentation" ).layout.buildDirectory.dir( "asciidoc/userguide" ) } - into layout.buildDirectory.dir( "documentation/userguide" ) + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/userguide") } @@ -264,7 +262,7 @@ def stageMigrationGuideTask = tasks.register( "stageMigrationGuide", Copy ) { dependsOn ':documentation:renderMigrationGuide' from project.provider { project( ":documentation" ).layout.buildDirectory.dir( "asciidoc/migration-guide" ) } - into layout.buildDirectory.dir( "documentation/migration-guide" ) + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/migration-guide") } def stageWhatsNewGuideTask = tasks.register( "stageWhatsNewGuide", Copy ) { @@ -274,11 +272,7 @@ def stageWhatsNewGuideTask = tasks.register( "stageWhatsNewGuide", Copy ) { dependsOn ':documentation:renderWhatsNew' from project.provider { project( ":documentation" ).layout.buildDirectory.dir( "asciidoc/whats-new" ) } - into layout.buildDirectory.dir( "documentation/whats-new" ) -} - -tasks.named( "publishMigrationGuide" ).configure { - dependsOn stageMigrationGuideTask + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/whats-new") } def stageIncubationReportTask = tasks.register( "stageIncubationReport", Copy ) { task -> @@ -289,7 +283,7 @@ def stageIncubationReportTask = tasks.register( "stageIncubationReport", Copy ) tasks.stageOrmReports.dependsOn task from project( ":documentation" ).tasks.generateIncubationReport - into layout.buildDirectory.dir( "documentation/incubating" ) + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/incubating") } def stageInternalsReportTask = tasks.register( "stageInternalsReport", Copy ) { task -> @@ -299,7 +293,7 @@ def stageInternalsReportTask = tasks.register( "stageInternalsReport", Copy ) { dependsOn ':documentation:generateInternalsReport' from project( ":documentation" ).tasks.generateInternalsReport - into layout.buildDirectory.dir( "documentation/internals" ) + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/internals") } def stageDeprecationReportTask = tasks.register( "stageDeprecationReport", Copy ) { @@ -309,7 +303,7 @@ def stageDeprecationReportTask = tasks.register( "stageDeprecationReport", Copy dependsOn ':documentation:generateDeprecationReport' from project( ":documentation" ).tasks.generateDeprecationReport - into layout.buildDirectory.dir( "documentation/deprecated" ) + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/deprecated") } def stageLoggingReportTask = tasks.register( "stageLoggingReport", Copy ) { task -> @@ -319,7 +313,7 @@ def stageLoggingReportTask = tasks.register( "stageLoggingReport", Copy ) { task dependsOn ':documentation:renderLoggingReport' from project( ":documentation" ).tasks.renderLoggingReport - into layout.buildDirectory.dir( "documentation/logging" ) + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/logging") } def stageDialectReportTask = tasks.register( "stageDialectReport", Copy ) { task -> @@ -329,7 +323,7 @@ def stageDialectReportTask = tasks.register( "stageDialectReport", Copy ) { task dependsOn ':documentation:renderDialectReport' from project( ":documentation" ).tasks.renderDialectReport - into project.layout.buildDirectory.dir("documentation/dialect") + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/dialect") } def stageOrmReportsTask = tasks.register( "stageOrmReports" ) { @@ -351,7 +345,7 @@ def stageJavadocsTask = tasks.register( "stageJavadocs", Copy ) { dependsOn ':documentation:javadoc' from project( ":documentation" ).tasks.javadoc - into project.layout.buildDirectory.dir("documentation/javadocs") + into rootProject.layout.buildDirectory.dir("staging-deploy/documentation/javadocs") } /** @@ -391,33 +385,10 @@ def assembleDocumentationTask = tasks.register( "assembleDocumentation" ) { // * On the published java modules, this means publishing its artifacts to Sonatype // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -def uploadDocumentationTask = tasks.named( "uploadDocumentation" ) { - group = "release-perform" - description = "Uploads assembled documentation to the doc server" - dependsOn assembleDocumentationTask - - doFirst { - if ( ormBuildDetails.hibernateVersion.isSnapshot ) { - logger.error( "Cannot perform upload of SNAPSHOT documentation" ); - throw new RuntimeException( "Cannot perform upload of SNAPSHOT documentation" ); - } - else { - logger.lifecycle( "Uploading documentation ..." ) - } - } - - doLast { - logger.lifecycle( 'Done uploading documentation' ) - } -} - tasks.register( 'releasePerform' ) { group = "release-perform" description "Scripted release 'Release Perform' stage" - dependsOn uploadDocumentationTask - dependsOn uploadDocumentationDescriptor - doFirst { if ( ormBuildDetails.releaseDetails.shouldCreateTag() ) { assert project.gitRemote != null