avito-android
85 строк · 2.6 Кб
1package com.avito.plugin
2
3import Slf4jGradleLoggerFactory
4import com.avito.android.getApkOrThrow
5import com.avito.utils.buildFailer
6import okhttp3.OkHttpClient
7import org.gradle.api.DefaultTask
8import org.gradle.api.file.DirectoryProperty
9import org.gradle.api.model.ObjectFactory
10import org.gradle.api.provider.ListProperty
11import org.gradle.api.provider.Property
12import org.gradle.api.tasks.Input
13import org.gradle.api.tasks.InputDirectory
14import org.gradle.api.tasks.TaskAction
15import org.gradle.kotlin.dsl.listProperty
16import org.gradle.kotlin.dsl.property
17import javax.inject.Inject
18
19/**
20* TODO specify outputs: write a file after success upload (with link for example)
21* TODO test caching
22*/
23public abstract class QAppsUploadTask @Inject constructor(
24objects: ObjectFactory
25) : DefaultTask() {
26
27@Input
28public val variantName: Property<String> = objects.property()
29
30@Input
31public val comment: Property<String> = objects.property()
32
33@Input
34public val branch: Property<String> = objects.property()
35
36@Input
37public val host: Property<String> = objects.property()
38
39@Input
40public val versionName: Property<String> = objects.property()
41
42@Input
43public val versionCode: Property<String> = objects.property()
44
45@Input
46public val packageName: Property<String> = objects.property()
47
48@Input
49public val releaseChain: Property<Boolean> = objects.property<Boolean>().convention(false)
50
51@Input
52public val releaseBuildVariants: ListProperty<String> = objects.listProperty()
53
54@get:InputDirectory
55public abstract val apkDirectory: DirectoryProperty
56
57@TaskAction
58public fun upload() {
59val apk = apkDirectory.get().getApkOrThrow()
60
61val uploadResult = QAppsUploadAction(
62apk = apk,
63comment = comment.get(),
64host = host.get(),
65branch = branch.get(),
66versionName = versionName.get(),
67versionCode = versionCode.get(),
68packageName = packageName.get(),
69releaseChain = releaseChain.getOrElse(false) && isReleaseBuildVariant(variantName.get()),
70loggerFactory = Slf4jGradleLoggerFactory,
71httpClientBuilder = OkHttpClient.Builder()
72).upload()
73
74uploadResult.fold(
75{ logger.info("Upload to qapps was successful: ${apk.path}") },
76{ project.buildFailer.failBuild("Can't upload to qapps: ${apk.path};", it) }
77)
78}
79
80private fun isReleaseBuildVariant(variantName: String): Boolean {
81return releaseBuildVariants.map { variants ->
82variants.contains(variantName)
83}.getOrElse(false)
84}
85}
86