blob: 0a180ef66c6ddd2f16e1b764a5b8a880a4bbb806 [file] [log] [blame]
Sergey Vasilinetscb306422018-05-22 14:39:17 -07001/*
2 * Copyright 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package androidx.build
18
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -070019import androidx.build.ArtifactsPredicate.All
Sergey Vasilinetsaed74042018-08-21 17:34:32 -070020import androidx.build.ArtifactsPredicate.Benchmark
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -070021import androidx.build.ArtifactsPredicate.Exact
22import androidx.build.ArtifactsPredicate.Group
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -070023import androidx.build.Strategy.Ignore
Roberto Pereze2ce75f2018-07-27 13:14:34 -070024import androidx.build.Strategy.Prebuilts
25import androidx.build.Strategy.TipOfTree
Sergey Vasilinetscb306422018-05-22 14:39:17 -070026
Jeff Gaston9c31ae52018-07-25 15:22:32 -040027val RELEASE_RULE = docsRules("public", false) {
Aurimas Liutikas518ffe32018-08-06 18:42:13 -070028 val defaultVersion = "1.0.0-rc01"
Sergey Vasilinetscb306422018-05-22 14:39:17 -070029 prebuilts(LibraryGroups.ANNOTATION, defaultVersion)
30 prebuilts(LibraryGroups.APPCOMPAT, defaultVersion)
31 prebuilts(LibraryGroups.ASYNCLAYOUTINFLATER, defaultVersion)
32 prebuilts(LibraryGroups.BROWSER, defaultVersion)
Roberto Pereze2ce75f2018-07-27 13:14:34 -070033 ignore(LibraryGroups.CAR, "car-cluster")
Alan Viverettedc0543e2018-06-29 12:55:32 -040034 prebuilts(LibraryGroups.CAR, "1.0.0-alpha4")
Roberto Pereze2ce75f2018-07-27 13:14:34 -070035 .addStubs("car/core/car-stubs/android.car.jar")
Sergey Vasilinetscb306422018-05-22 14:39:17 -070036 prebuilts(LibraryGroups.CARDVIEW, defaultVersion)
37 prebuilts(LibraryGroups.COLLECTION, defaultVersion)
Sergey Vasilinets2112cda2018-06-06 23:23:26 -070038 prebuilts(LibraryGroups.CONTENTPAGER, defaultVersion)
Sergey Vasilinetscb306422018-05-22 14:39:17 -070039 prebuilts(LibraryGroups.COORDINATORLAYOUT, defaultVersion)
40 prebuilts(LibraryGroups.CORE, defaultVersion)
41 prebuilts(LibraryGroups.CURSORADAPTER, defaultVersion)
42 prebuilts(LibraryGroups.CUSTOMVIEW, defaultVersion)
43 prebuilts(LibraryGroups.DOCUMENTFILE, defaultVersion)
44 prebuilts(LibraryGroups.DRAWERLAYOUT, defaultVersion)
45 prebuilts(LibraryGroups.DYNAMICANIMATION, defaultVersion)
46 prebuilts(LibraryGroups.EMOJI, defaultVersion)
47 prebuilts(LibraryGroups.EXIFINTERFACE, defaultVersion)
48 prebuilts(LibraryGroups.FRAGMENT, defaultVersion)
49 prebuilts(LibraryGroups.GRIDLAYOUT, defaultVersion)
50 prebuilts(LibraryGroups.HEIFWRITER, defaultVersion)
51 prebuilts(LibraryGroups.INTERPOLATOR, defaultVersion)
52 prebuilts(LibraryGroups.LEANBACK, defaultVersion)
53 prebuilts(LibraryGroups.LEGACY, defaultVersion)
54 prebuilts(LibraryGroups.LOADER, defaultVersion)
55 prebuilts(LibraryGroups.LOCALBROADCASTMANAGER, defaultVersion)
Alan Viverettedc0543e2018-06-29 12:55:32 -040056 prebuilts(LibraryGroups.MEDIA, "media", defaultVersion)
Aurimas Liutikas518ffe32018-08-06 18:42:13 -070057 prebuilts(LibraryGroups.MEDIA, "media-widget", "1.0.0-alpha5")
Andrew Lewis51999562018-07-24 11:03:01 +010058 ignore(LibraryGroups.MEDIA2, "media2-exoplayer")
Aurimas Liutikas518ffe32018-08-06 18:42:13 -070059 prebuilts(LibraryGroups.MEDIA2, "1.0.0-alpha02")
60 prebuilts(LibraryGroups.MEDIAROUTER, "1.0.0-alpha5")
Sergey Vasilinetscb306422018-05-22 14:39:17 -070061 prebuilts(LibraryGroups.PALETTE, defaultVersion)
62 prebuilts(LibraryGroups.PERCENTLAYOUT, defaultVersion)
63 prebuilts(LibraryGroups.PREFERENCE, defaultVersion)
64 prebuilts(LibraryGroups.PRINT, defaultVersion)
65 prebuilts(LibraryGroups.RECOMMENDATION, defaultVersion)
66 prebuilts(LibraryGroups.RECYCLERVIEW, defaultVersion)
Alan Viverettedc0543e2018-06-29 12:55:32 -040067 prebuilts(LibraryGroups.SLICE, "slice-builders", defaultVersion)
Aurimas Liutikas518ffe32018-08-06 18:42:13 -070068 prebuilts(LibraryGroups.SLICE, "slice-builders-ktx", "1.0.0-alpha5")
Alan Viverettedc0543e2018-06-29 12:55:32 -040069 prebuilts(LibraryGroups.SLICE, "slice-core", defaultVersion)
Sergey Vasilinets82887932018-07-24 16:30:59 -070070 // TODO: land prebuilts
71// prebuilts(LibraryGroups.SLICE, "slice-test", defaultVersion)
72 ignore(LibraryGroups.SLICE, "slice-test")
Alan Viverettedc0543e2018-06-29 12:55:32 -040073 prebuilts(LibraryGroups.SLICE, "slice-view", defaultVersion)
Sergey Vasilinetscb306422018-05-22 14:39:17 -070074 prebuilts(LibraryGroups.SLIDINGPANELAYOUT, defaultVersion)
75 prebuilts(LibraryGroups.SWIPEREFRESHLAYOUT, defaultVersion)
Sergey Vasilinetscb306422018-05-22 14:39:17 -070076 prebuilts(LibraryGroups.TRANSITION, defaultVersion)
77 prebuilts(LibraryGroups.TVPROVIDER, defaultVersion)
78 prebuilts(LibraryGroups.VECTORDRAWABLE, defaultVersion)
79 prebuilts(LibraryGroups.VIEWPAGER, defaultVersion)
Sergey Vasilinetscb306422018-05-22 14:39:17 -070080 prebuilts(LibraryGroups.WEAR, defaultVersion)
81 .addStubs("wear/wear_stubs/com.google.android.wearable-stubs.jar")
82 prebuilts(LibraryGroups.WEBKIT, defaultVersion)
Sergey Vasilinetsb385fc62018-07-09 16:44:05 -070083 val flatfootVersion = "2.0.0-beta01"
Sergey Vasilinetscb306422018-05-22 14:39:17 -070084 prebuilts(LibraryGroups.ROOM, flatfootVersion)
85 prebuilts(LibraryGroups.PERSISTENCE, flatfootVersion)
Sergey Vasilinets82887932018-07-24 16:30:59 -070086 ignore(LibraryGroups.LIFECYCLE, "lifecycle-savedstate-core")
87 ignore(LibraryGroups.LIFECYCLE, "lifecycle-savedstate-fragment")
88 ignore(LibraryGroups.LIFECYCLE, "lifecycle-viewmodel-savedstate")
89 ignore(LibraryGroups.LIFECYCLE, "lifecycle-viewmodel-fragment")
Sergey Vasilinetscb306422018-05-22 14:39:17 -070090 prebuilts(LibraryGroups.LIFECYCLE, flatfootVersion)
91 prebuilts(LibraryGroups.ARCH_CORE, flatfootVersion)
Sergey Vasilinets2112cda2018-06-06 23:23:26 -070092 ignore(LibraryGroups.PAGING, "paging-common-ktx")
93 ignore(LibraryGroups.PAGING, "paging-runtime-ktx")
94 ignore(LibraryGroups.PAGING, "paging-rxjava2-ktx")
95 prebuilts(LibraryGroups.PAGING, flatfootVersion)
Sergey Vasilinetsedc8a2a2018-07-25 14:20:46 -070096 prebuilts(LibraryGroups.NAVIGATION, "1.0.0-alpha04")
Sumir Kataria89bc5cc2018-08-24 16:57:09 -070097 prebuilts(LibraryGroups.WORKMANAGER, "1.0.0-alpha08")
Sergey Vasilinetscb306422018-05-22 14:39:17 -070098 default(Ignore)
99}
100
Jeff Gaston9c31ae52018-07-25 15:22:32 -0400101val TIP_OF_TREE = docsRules("tipOfTree", true) {
Sergey Vasilinets4a92ec62018-08-28 01:28:10 -0700102 // TODO: remove once we'll figure out our strategy about it
103 ignore(LibraryGroups.CONCURRENT)
Sergey Vasilinetsc74c7fb52018-05-29 14:50:22 -0700104 default(TipOfTree)
105}
106
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700107/**
108 * Rules are resolved in addition order. So if you have two rules that specify how docs should be
109 * built for a module, first defined rule wins.
110 */
Aurimas Liutikas518ffe32018-08-06 18:42:13 -0700111fun docsRules(
112 name: String,
113 offline: Boolean,
114 init: PublishDocsRulesBuilder.() -> Unit
115): PublishDocsRules {
Jeff Gaston9c31ae52018-07-25 15:22:32 -0400116 val f = PublishDocsRulesBuilder(name, offline)
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700117 f.init()
118 return f.build()
119}
120
Jeff Gaston9c31ae52018-07-25 15:22:32 -0400121class PublishDocsRulesBuilder(private val name: String, private val offline: Boolean) {
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700122
Sergey Vasilinetsaed74042018-08-21 17:34:32 -0700123 private val rules: MutableList<DocsRule> = mutableListOf(DocsRule(Benchmark, Ignore))
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700124 /**
125 * docs for projects within [groupName] will be built from sources.
126 */
127 fun tipOfTree(groupName: String) {
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700128 rules.add(DocsRule(Group(groupName), TipOfTree))
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700129 }
130
131 /**
132 * docs for a project with the given [groupName] and [name] will be built from sources.
133 */
134 fun tipOfTree(groupName: String, name: String) {
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700135 rules.add(DocsRule(Exact(groupName, name), TipOfTree))
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700136 }
137
138 /**
139 * docs for a project with the given [groupName] and [name] will be built from a prebuilt with
140 * the given [version].
141 */
Aurimas Liutikas13d3b612018-05-29 10:13:48 -0700142 fun prebuilts(groupName: String, moduleName: String, version: String) {
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700143 rules.add(DocsRule(Exact(groupName, moduleName), Prebuilts(Version(version))))
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700144 }
145
146 /**
147 * docs for projects within [groupName] will be built from prebuilts with the given [version]
148 */
149 fun prebuilts(groupName: String, version: String) = prebuilts(groupName, Version(version))
150
151 /**
152 * docs for projects within [groupName] will be built from prebuilts with the given [version]
153 */
154 fun prebuilts(groupName: String, version: Version): Prebuilts {
155 val strategy = Prebuilts(version)
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700156 rules.add(DocsRule(Group(groupName), strategy))
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700157 return strategy
158 }
159
160 /**
161 * defines a default strategy for building docs
162 */
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700163 fun default(strategy: Strategy) {
164 rules.add(DocsRule(All, strategy))
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700165 }
166
167 /**
168 * docs for projects within [groupName] won't be built
169 */
170 fun ignore(groupName: String) {
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700171 rules.add(DocsRule(Group(groupName), Ignore))
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700172 }
173
174 /**
175 * docs for a specified project won't be built
176 */
177 fun ignore(groupName: String, name: String) {
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700178 rules.add(DocsRule(Exact(groupName, name), Ignore))
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700179 }
180
Jeff Gaston9c31ae52018-07-25 15:22:32 -0400181 fun build() = PublishDocsRules(name, offline, rules)
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700182}
183
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700184sealed class ArtifactsPredicate {
185 abstract fun apply(inGroup: String, inName: String): Boolean
186 object All : ArtifactsPredicate() {
187 override fun apply(inGroup: String, inName: String) = true
188 }
189 class Group(val group: String) : ArtifactsPredicate() {
190 override fun apply(inGroup: String, inName: String) = inGroup == group
191 override fun toString() = "\"$group\""
192 }
193 class Exact(val group: String, val name: String) : ArtifactsPredicate() {
194 override fun apply(inGroup: String, inName: String) = group == inGroup && name == inName
195 override fun toString() = "\"$group\", \"$name\""
196 }
Sergey Vasilinetsaed74042018-08-21 17:34:32 -0700197
198 object Benchmark : ArtifactsPredicate() {
199 override fun apply(inGroup: String, inName: String) = inName.endsWith("-benchmark")
200 }
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700201}
202
203data class DocsRule(val predicate: ArtifactsPredicate, val strategy: Strategy) {
204 override fun toString(): String {
205 if (predicate is All) {
206 return "default($strategy)"
207 }
208 return when (strategy) {
209 is Prebuilts -> "prebuilts($predicate, \"${strategy.version}\")"
210 is Ignore -> "ignore($predicate)"
211 is TipOfTree -> "tipOfTree($predicate)"
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700212 }
213 }
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700214}
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700215
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700216sealed class Strategy {
217 object TipOfTree : Strategy()
218 object Ignore : Strategy()
219 class Prebuilts(val version: Version) : Strategy() {
220 var stubs: MutableList<String>? = null
221 fun addStubs(path: String) {
222 if (stubs == null) {
223 stubs = mutableListOf()
224 }
225 stubs!!.add(path)
226 }
227
228 override fun toString() = "Prebuilts(\"$version\")"
229 }
230}
231
Jeff Gaston9c31ae52018-07-25 15:22:32 -0400232class PublishDocsRules(val name: String, val offline: Boolean, private val rules: List<DocsRule>) {
Sergey Vasilinetsf38083e2018-05-29 17:10:15 -0700233 fun resolve(groupName: String, moduleName: String): DocsRule {
234 return rules.find { it.predicate.apply(groupName, moduleName) } ?: throw Error()
Sergey Vasilinetscb306422018-05-22 14:39:17 -0700235 }
Chris Craik51f6bc22018-05-23 18:11:26 -0700236}