Skip to content

Commit 57651e2

Browse files
VampireHillkorn
authored andcommitted
Replace taskGraph.afterTask with an operation completion listener in Gradle 6.1+
1 parent 7ce9b9d commit 57651e2

File tree

3 files changed

+57
-13
lines changed

3 files changed

+57
-13
lines changed

build.gradle

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import org.gradle.api.internal.classpath.ModuleRegistry
2+
13
buildscript {
24
repositories {
35
maven {
@@ -33,6 +35,10 @@ dependencies {
3335
testCompile "cglib:cglib-nodep:3.2.8"
3436
testImplementation gradleTestKit()
3537
testImplementation("org.junit.jupiter:junit-jupiter:5.7.1")
38+
39+
// work-around for https://github.com/gradle/gradle/issues/16774
40+
testRuntimeOnly(files(project.services.get(ModuleRegistry).getModule('gradle-tooling-api-builders').classpath.asFiles.first()))
41+
testRuntimeOnly('com.google.guava:guava:27.1-android')
3642
}
3743

3844
gradlePlugin {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package net.researchgate.release
2+
3+
import org.gradle.build.event.BuildEventsListenerRegistry
4+
5+
import javax.inject.Inject
6+
7+
interface BuildEventsListenerRegistryProvider {
8+
@Inject
9+
BuildEventsListenerRegistry getBuildEventsListenerRegistry();
10+
}

src/main/groovy/net/researchgate/release/ReleasePlugin.groovy

+41-13
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,19 @@ import org.gradle.api.GradleException
2828
import org.gradle.api.Plugin
2929
import org.gradle.api.Project
3030
import org.gradle.api.Task
31+
import org.gradle.api.model.ObjectFactory
3132
import org.gradle.api.plugins.BasePlugin
33+
import org.gradle.api.provider.ProviderFactory
3234
import org.gradle.api.tasks.GradleBuild
3335
import org.gradle.api.tasks.TaskState
36+
import org.gradle.build.event.BuildEventsListenerRegistry
37+
import org.gradle.tooling.events.OperationCompletionListener
38+
import org.gradle.tooling.events.task.TaskFailureResult
3439
import org.gradle.util.GradleVersion
3540

36-
class ReleasePlugin extends PluginHelper implements Plugin<Project> {
41+
import javax.inject.Inject
3742

43+
abstract class ReleasePlugin extends PluginHelper implements Plugin<Project> {
3844
static final String RELEASE_GROUP = 'Release'
3945

4046
private BaseScmAdapter scmAdapter
@@ -74,7 +80,7 @@ class ReleasePlugin extends PluginHelper implements Plugin<Project> {
7480
"${p}updateVersion" as String,
7581
"${p}commitNewVersion" as String
7682
]
77-
83+
7884
// Gradle 6 workaround (https://github.com/gradle/gradle/issues/12872)
7985
buildName = project.name + "-release"
8086
}
@@ -119,7 +125,7 @@ class ReleasePlugin extends PluginHelper implements Plugin<Project> {
119125
"${p}afterReleaseBuild" as String
120126
].flatten()
121127
}
122-
128+
123129
// Gradle 6 workaround (https://github.com/gradle/gradle/issues/12872)
124130
buildName = project.name + "-release"
125131
}
@@ -161,18 +167,40 @@ class ReleasePlugin extends PluginHelper implements Plugin<Project> {
161167
}
162168
}
163169

164-
project.gradle.taskGraph.afterTask { Task task, TaskState state ->
165-
if (state.failure && task.name == "release") {
166-
try {
167-
createScmAdapter()
168-
} catch (Exception ignored) {}
169-
if (scmAdapter && extension.revertOnFail && project.file(extension.versionPropertyFile)?.exists()) {
170-
log.error('Release process failed, reverting back any changes made by Release Plugin.')
171-
scmAdapter.revert()
172-
} else {
173-
log.error('Release process failed, please remember to revert any uncommitted changes made by the Release Plugin.')
170+
if (GradleVersion.current() < GradleVersion.version('6.1')) {
171+
project.gradle.taskGraph.afterTask { Task task, TaskState state ->
172+
if (state.failure && task.name == 'release') {
173+
revert()
174174
}
175175
}
176+
} else {
177+
objects.newInstance(BuildEventsListenerRegistryProvider)
178+
.buildEventsListenerRegistry
179+
.onTaskCompletion(providers.provider {
180+
{ finishEvent ->
181+
if ((finishEvent.result instanceof TaskFailureResult) && finishEvent.descriptor.taskPath.endsWith(':release')) {
182+
revert()
183+
}
184+
} as OperationCompletionListener
185+
})
186+
}
187+
}
188+
189+
@Inject
190+
abstract protected ObjectFactory getObjects();
191+
192+
@Inject
193+
abstract protected ProviderFactory getProviders();
194+
195+
protected revert() {
196+
try {
197+
createScmAdapter()
198+
} catch (Exception ignored) {}
199+
if (scmAdapter && extension.revertOnFail.get() && project.file(extension.versionPropertyFile)?.exists()) {
200+
log.error('Release process failed, reverting back any changes made by Release Plugin.')
201+
scmAdapter.revert()
202+
} else {
203+
log.error('Release process failed, please remember to revert any uncommitted changes made by the Release Plugin.')
176204
}
177205
}
178206

0 commit comments

Comments
 (0)