Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: researchgate/gradle-release
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: main
Choose a base ref
...
head repository: jonnybot0/gradle-release
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
Can’t automatically merge. Don’t worry, you can still create the pull request.
  • 1 commit
  • 2 files changed
  • 1 contributor

Commits on Oct 16, 2023

  1. Copy the full SHA
    3fb4e6f View commit details
Showing with 58 additions and 15 deletions.
  1. +42 −0 src/main/groovy/net/researchgate/release/CleanupBuildService.groovy
  2. +16 −15 src/main/groovy/net/researchgate/release/ReleasePlugin.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package net.researchgate.release

import org.gradle.api.Project
import org.gradle.api.provider.Property
import org.gradle.api.services.BuildService
import org.gradle.api.services.BuildServiceParameters
import org.gradle.tooling.events.FinishEvent
import org.gradle.tooling.events.OperationCompletionListener
import org.gradle.tooling.events.task.TaskFailureResult
import org.gradle.tooling.events.task.TaskFinishEvent
import org.slf4j.LoggerFactory

abstract class CleanupBuildService implements BuildService<Params>, OperationCompletionListener {

interface Params extends BuildServiceParameters {
Property<BaseScmAdapter> getScmAdapter()
Property<ReleaseExtension> getExtension()
Property<Project> getProject()
}

@Override
void onFinish(FinishEvent finishEvent) {
if (finishEvent instanceof TaskFinishEvent) {
def result = finishEvent.result
if (result instanceof TaskFailureResult) {
def extension = parameters.extension.get()
def scmAdapter = parameters.scmAdapter.get()
def project = parameters.project.get()
def log = project.logger ?: LoggerFactory.getLogger(this.getClass())

if (finishEvent.descriptor.name == "release") {
if (scmAdapter && extension.revertOnFail && project.file(extension.versionPropertyFile)?.exists()) {
log.error('Release process failed, reverting back any changes made by Release Plugin.')
scmAdapter.revert()
} else {
log.error('Release process failed, please remember to revert any uncommitted changes made by the Release Plugin.')
}
}
}
}
}
}
31 changes: 16 additions & 15 deletions src/main/groovy/net/researchgate/release/ReleasePlugin.groovy
Original file line number Diff line number Diff line change
@@ -27,17 +27,21 @@ import net.researchgate.release.tasks.UpdateVersion
import org.gradle.api.GradleException
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.plugins.BasePlugin
import org.gradle.api.tasks.GradleBuild
import org.gradle.api.tasks.TaskState
import org.gradle.build.event.BuildEventsListenerRegistry

class ReleasePlugin extends PluginHelper implements Plugin<Project> {
import javax.inject.Inject

abstract class ReleasePlugin extends PluginHelper implements Plugin<Project> {

static final String RELEASE_GROUP = 'Release'

private BaseScmAdapter scmAdapter

@Inject
abstract BuildEventsListenerRegistry getBuildEventsListenerRegistry()

void apply(Project project) {
if (!project.plugins.hasPlugin(BasePlugin.class)) {
project.plugins.apply(BasePlugin.class)
@@ -157,19 +161,16 @@ class ReleasePlugin extends PluginHelper implements Plugin<Project> {
}
}

project.gradle.taskGraph.afterTask { Task task, TaskState state ->
if (state.failure && task.name == "release") {
try {
createScmAdapter()
} catch (Exception ignored) {}
if (scmAdapter && extension.revertOnFail && project.file(extension.versionPropertyFile)?.exists()) {
log.error('Release process failed, reverting back any changes made by Release Plugin.')
scmAdapter.revert()
} else {
log.error('Release process failed, please remember to revert any uncommitted changes made by the Release Plugin.')
def cleanupServiceProvider = project.gradle.sharedServices
.registerIfAbsent('cleanupBuildService', CleanupBuildService) {
it.parameters.extension.set(extension)
it.parameters.project.set(project)
it.parameters.scmAdapter.set(project.provider {
createScmAdapter()
return scmAdapter
})
}
}
}
buildEventsListenerRegistry.onTaskCompletion(cleanupServiceProvider)
}

void createScmAdapter() {