@@ -113,9 +113,34 @@ if (isAndroid) {
113
113
val token = properties[" github_api_key" ]
114
114
check(token != null && token is String ) { " github_api_key not provided in local.properties" }
115
115
116
- dependsOn(" assembleRelease" )
116
+ val workingTreeCleanExec = providers.exec {
117
+ executable(" git" )
118
+ args(" diff" , " --quiet" , " --exit-code" , rootDir.absolutePath)
119
+ isIgnoreExitValue = true
120
+ }
121
+ val workingTreeClean = workingTreeCleanExec.result.orNull?.exitValue == 0
122
+
123
+ providers.exec {
124
+ executable(" git" )
125
+ args(" fetch" )
126
+ isIgnoreExitValue = true
127
+ }
128
+
129
+ val allCommitsPushedExec = providers.exec {
130
+ executable(" git" )
131
+ args(" diff" , " --quiet" , " --exit-code" , " origin/main..main" )
132
+ isIgnoreExitValue = true
133
+ }
134
+ val allCommitsPushed = allCommitsPushedExec.result.orNull?.exitValue == 0
135
+
136
+ if (workingTreeClean && allCommitsPushed) {
137
+ dependsOn(" assembleRelease" )
138
+ }
117
139
118
- doFirst {
140
+ doFirst action@{
141
+ check(workingTreeClean) { " Commit all changes before creating release." }
142
+ check(allCommitsPushed) { " Sync remote before creating release." }
143
+
119
144
val packageRelease = project.tasks.getByName<DefaultTask >(" packageRelease" )
120
145
121
146
val outputs = packageRelease.outputs.files
@@ -129,7 +154,7 @@ if (isAndroid) {
129
154
130
155
if (repository.getReleaseByTagName(tagName) != null ) {
131
156
println (" Release $name already exists" )
132
- return @doFirst
157
+ return @action
133
158
}
134
159
135
160
val release = repository.createRelease(tagName).name(name).draft(true ).create()
@@ -158,7 +183,7 @@ if (isAndroid || isAndroidLib) {
158
183
}
159
184
}
160
185
161
- if (isKotlinLib || isKotlinAndroid) {
186
+ if (isKotlinLib || isKotlinAndroid) {
162
187
dependencies {
163
188
add(" implementation" , " org.jetbrains:annotations:24.0.1" )
164
189
}
0 commit comments