@@ -28,13 +28,19 @@ import org.gradle.api.GradleException
28
28
import org.gradle.api.Plugin
29
29
import org.gradle.api.Project
30
30
import org.gradle.api.Task
31
+ import org.gradle.api.model.ObjectFactory
31
32
import org.gradle.api.plugins.BasePlugin
33
+ import org.gradle.api.provider.ProviderFactory
32
34
import org.gradle.api.tasks.GradleBuild
33
35
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
34
39
import org.gradle.util.GradleVersion
35
40
36
- class ReleasePlugin extends PluginHelper implements Plugin< Project > {
41
+ import javax.inject.Inject
37
42
43
+ abstract class ReleasePlugin extends PluginHelper implements Plugin<Project > {
38
44
static final String RELEASE_GROUP = ' Release'
39
45
40
46
private BaseScmAdapter scmAdapter
@@ -74,7 +80,7 @@ class ReleasePlugin extends PluginHelper implements Plugin<Project> {
74
80
" ${ p} updateVersion" as String ,
75
81
" ${ p} commitNewVersion" as String
76
82
]
77
-
83
+
78
84
// Gradle 6 workaround (https://github.com/gradle/gradle/issues/12872)
79
85
buildName = project. name + " -release"
80
86
}
@@ -119,7 +125,7 @@ class ReleasePlugin extends PluginHelper implements Plugin<Project> {
119
125
" ${ p} afterReleaseBuild" as String
120
126
]. flatten()
121
127
}
122
-
128
+
123
129
// Gradle 6 workaround (https://github.com/gradle/gradle/issues/12872)
124
130
buildName = project. name + " -release"
125
131
}
@@ -161,18 +167,40 @@ class ReleasePlugin extends PluginHelper implements Plugin<Project> {
161
167
}
162
168
}
163
169
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()
174
174
}
175
175
}
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.' )
176
204
}
177
205
}
178
206
0 commit comments