@@ -66,10 +66,13 @@ import org.gradle.kotlin.dsl.register
66
66
* each releasing library.
67
67
*/
68
68
abstract class PublishingPlugin : Plugin <Project > {
69
+
69
70
override fun apply (project : Project ) {
70
71
project.gradle.projectsEvaluated {
71
72
val allFirebaseLibraries = project.subprojects.mapNotNull { it.firebaseLibraryOrNull }
72
- val releaseMetadata = computeReleaseMetadata(project, allFirebaseLibraries)
73
+ val libraryGroups = computeLibraryGroups(project)
74
+ fixLibraryGroupVersions(libraryGroups)
75
+ val releaseMetadata = computeReleaseMetadata(project, allFirebaseLibraries, libraryGroups)
73
76
74
77
val releasingFirebaseLibraries = releaseMetadata?.releasingLibraries.orEmpty()
75
78
val releasingProjects = releasingFirebaseLibraries.map { it.project }
@@ -81,7 +84,11 @@ abstract class PublishingPlugin : Plugin<Project> {
81
84
val validateProjectsToPublish =
82
85
registerValidateProjectsToPublishTask(project, releasingFirebaseLibraries)
83
86
val validateLibraryGroupsToPublish =
84
- registerValidateLibraryGroupsToPublishTask(project, releasingFirebaseLibraries)
87
+ registerValidateLibraryGroupsToPublishTask(
88
+ project,
89
+ releasingFirebaseLibraries,
90
+ libraryGroups
91
+ )
85
92
val publishReleasingLibrariesToBuildDir =
86
93
registerPublishReleasingLibrariesToBuildDirTask(project, releasingProjects)
87
94
val generateKotlindocsForRelease =
@@ -93,11 +100,12 @@ abstract class PublishingPlugin : Plugin<Project> {
93
100
releaseMetadata?.name.orEmpty()
94
101
)
95
102
96
- registerGenerateReleaseConfigFilesTask(project)
103
+ registerGenerateReleaseConfigFilesTask(project, libraryGroups )
97
104
registerPublishReleasingLibrariesToMavenLocalTask(project, releasingProjects)
98
105
registerSemverCheckForReleaseTask(project, releasingProjects)
99
106
registerPublishAllToBuildDir(project, allFirebaseLibraries)
100
107
registerPostReleasePlugin(releasingProjects)
108
+ registerLibraryGroupsTaks(project, libraryGroups)
101
109
102
110
val buildMavenZip =
103
111
project.tasks.register<Zip >(BUILD_MAVEN_ZIP_TASK ) {
@@ -147,6 +155,19 @@ abstract class PublishingPlugin : Plugin<Project> {
147
155
}
148
156
}
149
157
158
+ protected fun registerLibraryGroupsTaks (
159
+ project : Project ,
160
+ libraryGroups : Map <String , List <FirebaseLibraryExtension >>
161
+ ) {
162
+ project.tasks.register(" libraryGroups" ) {
163
+ for (libraryGroup in libraryGroups) {
164
+ println (
165
+ " ${libraryGroup.key} -> ${libraryGroup.value.joinToString(" | " ) { it.artifactName }} "
166
+ )
167
+ }
168
+ }
169
+ }
170
+
150
171
/* *
151
172
* Figures out the [ReleaseMetadata] for with this release.
152
173
*
@@ -181,33 +202,40 @@ abstract class PublishingPlugin : Plugin<Project> {
181
202
*/
182
203
private fun computeReleaseMetadata (
183
204
project : Project ,
184
- allFirebaseLibraries : List <FirebaseLibraryExtension >
205
+ allFirebaseLibraries : List <FirebaseLibraryExtension >,
206
+ libraryGroups : Map <String , List <FirebaseLibraryExtension >>
185
207
): ReleaseMetadata ? =
186
- releaseMetadataFromProperties(project, allFirebaseLibraries)
187
- ? : releaseMetadataFromReleaseConfig(project, allFirebaseLibraries)
208
+ releaseMetadataFromProperties(project, allFirebaseLibraries, libraryGroups )
209
+ ? : releaseMetadataFromReleaseConfig(project, allFirebaseLibraries, libraryGroups )
188
210
189
211
private fun releaseMetadataFromProperties (
190
212
project : Project ,
191
- allFirebaseLibraries : List <FirebaseLibraryExtension >
213
+ allFirebaseLibraries : List <FirebaseLibraryExtension >,
214
+ libraryGroups : Map <String , List <FirebaseLibraryExtension >>
192
215
): ReleaseMetadata ? {
193
216
val projectsToPublish = project.provideProperty<String >(" projectsToPublish" ).orNull
194
217
val releaseName = project.provideProperty<String >(" releaseName" ).orNull ? : " NO_NAME"
195
218
196
219
if (projectsToPublish == null ) return null
197
220
198
221
val projectNames = projectsToPublish.split(" ," )
199
- val librariesToRelease =
222
+
223
+ val libraryGroupsToRelease =
200
224
allFirebaseLibraries
201
225
.filter { it.artifactId.get() in projectNames }
202
- .flatMap { it.librariesToRelease }
226
+ .map { it.libraryGroupName }
227
+ val librariesToRelease =
228
+ libraryGroups
229
+ .filterKeys { it in libraryGroupsToRelease }
230
+ .flatMap { it.value }
203
231
.distinctBy { it.artifactId.get() }
204
-
205
232
return ReleaseMetadata (librariesToRelease, releaseName)
206
233
}
207
234
208
235
private fun releaseMetadataFromReleaseConfig (
209
236
project : Project ,
210
- allFirebaseLibraries : List <FirebaseLibraryExtension >
237
+ allFirebaseLibraries : List <FirebaseLibraryExtension >,
238
+ libraryGroups : Map <String , List <FirebaseLibraryExtension >>
211
239
): ReleaseMetadata ? {
212
240
val releaseConfigFile =
213
241
project.layout.projectDirectory.file(RELEASE_CONFIG_FILE ).asFile.takeIf { it.exists() }
@@ -216,6 +244,16 @@ abstract class PublishingPlugin : Plugin<Project> {
216
244
val releaseConfig = ReleaseConfig .fromFile(it)
217
245
val librariesToRelease = allFirebaseLibraries.filter { it.path in releaseConfig.libraries }
218
246
247
+ val missingLibrariesToRelease =
248
+ computeMissingLibrariesToRelease(librariesToRelease, libraryGroups)
249
+ if (missingLibrariesToRelease.isNotEmpty()) {
250
+ throw GradleException (
251
+ " Invalid release configuration. " +
252
+ " It's should include the following libraries due to library groups: \n " +
253
+ " ${missingLibrariesToRelease.joinToString(" \n " ){ it.artifactName }} "
254
+ )
255
+ }
256
+
219
257
ReleaseMetadata (librariesToRelease, releaseConfig.name)
220
258
}
221
259
}
@@ -301,16 +339,18 @@ abstract class PublishingPlugin : Plugin<Project> {
301
339
*/
302
340
private fun registerValidateLibraryGroupsToPublishTask (
303
341
project : Project ,
304
- releasinglibraries : List <FirebaseLibraryExtension >
342
+ librariesToRelease : List <FirebaseLibraryExtension >,
343
+ libraryGroups : Map <String , List <FirebaseLibraryExtension >>
305
344
) =
306
345
project.tasks.register(VALIDATE_LIBRARY_GROUPS_TO_PUBLISH_TASK ) {
307
346
doLast {
308
- val libraryGroupProjects = releasinglibraries.flatMap { it.librariesToRelease }
309
- val missingProjects = libraryGroupProjects - releasinglibraries
310
- if (missingProjects .isNotEmpty()) {
347
+ val missingLibrariesToRelease =
348
+ computeMissingLibrariesToRelease(librariesToRelease, libraryGroups)
349
+ if (missingLibrariesToRelease .isNotEmpty()) {
311
350
throw GradleException (
312
- " Some libraries in library groups are not in the release: " +
313
- missingProjects.map { it.mavenName }.joinToString(" \n " )
351
+ " Invalid release configuration. " +
352
+ " It's should include the following libraries due to library groups: \n " +
353
+ " ${missingLibrariesToRelease.joinToString(" \n " )} "
314
354
)
315
355
}
316
356
}
@@ -400,7 +440,10 @@ abstract class PublishingPlugin : Plugin<Project> {
400
440
*
401
441
* @see [ReleaseGenerator]
402
442
*/
403
- private fun registerGenerateReleaseConfigFilesTask (project : Project ) =
443
+ private fun registerGenerateReleaseConfigFilesTask (
444
+ project : Project ,
445
+ libraryGroups : Map <String , List <FirebaseLibraryExtension >>
446
+ ) =
404
447
project.tasks.register<ReleaseGenerator >(RELEASE_GENEATOR_TASK ) {
405
448
currentRelease.convention(project.provideProperty(" currentRelease" ))
406
449
pastRelease.convention(project.provideProperty(" pastRelease" ))
@@ -412,6 +455,7 @@ abstract class PublishingPlugin : Plugin<Project> {
412
455
releaseReportJsonFile.convention(
413
456
project.layout.projectDirectory.file(RELEASE_REPORT_JSON_FILE )
414
457
)
458
+ this .libraryGroups = libraryGroups
415
459
}
416
460
417
461
/* *
0 commit comments