Skip to content

Commit

Permalink
adds extra retry layer at task level (#72)
Browse files Browse the repository at this point in the history
  • Loading branch information
Joaquimmnetto committed Mar 7, 2024
1 parent 4b42f90 commit 116fbf2
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class AppCenterPlugin implements Plugin<Project> {
extension
}

private static void createAndConfigureTasks(Project project, extension) {
private static void createAndConfigureTasks(Project project, AppCenterPluginExtension extension) {
def tasks = project.tasks

def publishAppCenter = tasks.register(PUBLISH_APP_CENTER_TASK_NAME, AppCenterUploadTask, { t ->
Expand Down
3 changes: 1 addition & 2 deletions src/main/groovy/wooga/gradle/appcenter/AppCenterSpec.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,11 @@
package wooga.gradle.appcenter

import com.wooga.gradle.BaseSpec
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Optional


trait AppCenterSpec extends BaseSpec {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,23 @@ package wooga.gradle.appcenter.error
import groovy.transform.InheritConstructors

@InheritConstructors
class AppCenterUploadException extends Exception {
class RetryableException extends RuntimeException {
}

@InheritConstructors
class AppCenterAppExtractionException extends Exception {
class AppCenterUploadException extends RetryableException {
}

@InheritConstructors
class AppCenterAppUploadServerErrorException extends Exception {
class AppCenterAppExtractionException extends RetryableException {
}

@InheritConstructors
class AppCenterMalwareDetectionException extends Exception {
class AppCenterAppUploadServerErrorException extends RetryableException {
}

@InheritConstructors
class AppCenterMalwareDetectionException extends RetryableException {

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import org.gradle.api.tasks.Optional
import wooga.gradle.appcenter.AppCenterSpec
import wooga.gradle.appcenter.api.AppCenterBuildInfo


import static org.gradle.util.ConfigureUtil.configureUsing

trait AppCenterTaskSpec extends AppCenterSpec {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
import wooga.gradle.appcenter.api.AppCenterReleaseUploader
import wooga.gradle.appcenter.api.AppCenterRetryStrategy
import wooga.gradle.appcenter.error.RetryableException

import java.util.function.Supplier

class AppCenterUploadTask extends DefaultTask implements AppCenterTaskSpec {

Expand Down Expand Up @@ -78,10 +81,27 @@ class AppCenterUploadTask extends DefaultTask implements AppCenterTaskSpec {
distributionSettings.destinations = destinations.getOrElse([])
distributionSettings.buildInfo = getBuildInfo()

AppCenterReleaseUploader.UploadResult result = uploader.upload(binary.get().asFile)
AppCenterReleaseUploader.UploadResult result = retry(retryCount.get(), retryTimeout.get()) {
return uploader.upload(binary.get().asFile)
}
logger.info("published to AppCenter release: ${result.releaseID}")
logger.info("download_url: ${result.downloadUrl}")
logger.info("install_url: ${result.installUrl}")
uploadVersionMetaData.get().asFile << JsonOutput.prettyPrint(JsonOutput.toJson(result.release))
}

<T> T retry(int maxRetries, long waitMs, Supplier<T> operation) {
try {
return operation.get()
} catch(RetryableException e) {
maxRetries--
if(maxRetries > 0) {
logger.warn("Retrying at task level, waiting for $waitMs ms. ${maxRetries} retries left")
Thread.sleep(waitMs)
return (T) retry(maxRetries, waitMs, operation)
} else {
throw new Exception("Operation exceed maximum amount of retries", e.cause)
}
}
}
}

0 comments on commit 116fbf2

Please sign in to comment.