@@ -28,12 +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
39
+ import org.gradle.util.GradleVersion
34
40
35
- class ReleasePlugin extends PluginHelper implements Plugin< Project > {
41
+ import javax.inject.Inject
36
42
43
+ abstract class ReleasePlugin extends PluginHelper implements Plugin<Project > {
37
44
static final String RELEASE_GROUP = ' Release'
38
45
39
46
private BaseScmAdapter scmAdapter
@@ -73,7 +80,7 @@ class ReleasePlugin extends PluginHelper implements Plugin<Project> {
73
80
" ${ p} updateVersion" as String ,
74
81
" ${ p} commitNewVersion" as String
75
82
]
76
-
83
+
77
84
// Gradle 6 workaround (https://github.com/gradle/gradle/issues/12872)
78
85
buildName = project. name + " -release"
79
86
}
@@ -115,7 +122,7 @@ class ReleasePlugin extends PluginHelper implements Plugin<Project> {
115
122
" ${ p} afterReleaseBuild" as String
116
123
]. flatten()
117
124
}
118
-
125
+
119
126
// Gradle 6 workaround (https://github.com/gradle/gradle/issues/12872)
120
127
buildName = project. name + " -release"
121
128
}
@@ -157,18 +164,40 @@ class ReleasePlugin extends PluginHelper implements Plugin<Project> {
157
164
}
158
165
}
159
166
160
- project. gradle. taskGraph. afterTask { Task task , TaskState state ->
161
- if (state. failure && task. name == " release" ) {
162
- try {
163
- createScmAdapter()
164
- } catch (Exception ignored) {}
165
- if (scmAdapter && extension. revertOnFail && project. file(extension. versionPropertyFile)?. exists()) {
166
- log. error(' Release process failed, reverting back any changes made by Release Plugin.' )
167
- scmAdapter. revert()
168
- } else {
169
- log. error(' Release process failed, please remember to revert any uncommitted changes made by the Release Plugin.' )
167
+ if (GradleVersion . current() < GradleVersion . version(' 6.1' )) {
168
+ project. gradle. taskGraph. afterTask { Task task , TaskState state ->
169
+ if (state. failure && task. name == ' release' ) {
170
+ revert()
170
171
}
171
172
}
173
+ } else {
174
+ objects. newInstance(BuildEventsListenerRegistryProvider )
175
+ .buildEventsListenerRegistry
176
+ .onTaskCompletion(providers. provider {
177
+ { finishEvent ->
178
+ if ((finishEvent. result instanceof TaskFailureResult ) && finishEvent. descriptor. taskPath. endsWith(' :release' )) {
179
+ revert()
180
+ }
181
+ } as OperationCompletionListener
182
+ })
183
+ }
184
+ }
185
+
186
+ @Inject
187
+ abstract protected ObjectFactory getObjects ();
188
+
189
+ @Inject
190
+ abstract protected ProviderFactory getProviders ();
191
+
192
+ protected revert () {
193
+ try {
194
+ createScmAdapter()
195
+ } catch (Exception ignored) {}
196
+ if (scmAdapter && extension. revertOnFail && project. file(extension. versionPropertyFile)?. exists()) {
197
+ log. error(' Release process failed, reverting back any changes made by Release Plugin.' )
198
+ scmAdapter. revert()
199
+ } else {
200
+ log. error(' Release process failed, please remember to revert any uncommitted changes made by the Release Plugin.' )
172
201
}
173
202
}
174
203
0 commit comments