Skip to content

Commit 15fc1c7

Browse files
committed
Automating javadoc manual steps and defining prebuilts config destination
- We seem to have regressed on the skipSampleAppTests flag - Remove the flag for g3 destination - Prebuilts config lands into the build directory - Prebuilts is zipped into the build directory - The zip is wire into kokoro - Tests pending (b/110431909) - Java formatting broken for a few firestore classes (b/110431913) Change-Id: Ie2e757ea386f42db5f2d82b60b5213274b8afa43
1 parent ab746b3 commit 15fc1c7

File tree

18 files changed

+254
-53
lines changed

18 files changed

+254
-53
lines changed

buildSrc/devsite_transform.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#Derived from post processing done in granular
2+
set -x
3+
#!/bin/sh -x
4+
grep -rl 'http://' | xargs sed -i 's|http://|//|g'
5+
grep -rl 'https://' | xargs sed -i 's|https://|//|g'
6+
grep -rl 'reference/com/google/' | xargs sed -i 's|reference/com/google/|/docs/reference/android/com/google/|g'
7+
grep -rl '//developers.google.com/android//docs/reference/android/' | xargs sed -i 's|//developers.google.com/android//docs/reference/android/|//developers.google.com/android/reference/|g'
8+
grep -rl '//developers.google.com/android/reference/com/google/firebase/' | xargs sed -i 's|//developers.google.com/android/reference/com/google/firebase/|/docs/reference/android/com/google/firebase/|g'
9+
grep -rl 'href="reference' | xargs sed -i 's|href="reference|href="/docs/reference/android/|g'
10+
grep -rl '/docs/reference/android///developers.google.com/android/reference/' | xargs sed -i 's|/docs/reference/android///developers.google.com/android/reference/|/docs/reference/android/|g'
11+
grep -rl '/docs/reference/android///developer.android.com/reference/' | xargs sed -i 's|/docs/reference/android///developer.android.com/reference/|//developer.android.com/reference/|g'
12+
grep -rl '/docs/reference/android//docs/reference/android/' | xargs sed -i 's|/docs/reference/android//docs/reference/android/|/docs/reference/android/|g'
13+
find . -name '*.html' | xargs sed -i 's/[ \t]*$//' "$@"
14+
# TODO(b/37810114): Remove this hack once b/64612004 is fixed and propagated to our javadoc.
15+
find . -name '*.html' | xargs perl -0777 -p -i -e 's|.+<div class="jd-tagdata">\n(.*\n){1,5}?(?:.+<tr>\n.+\n.+<td><!-- no parameter comment --></td>\n.+</tr>\n)+?(.+\n){1,5}?.*</div>||gm'
16+
find . -name '_toc.yaml' | xargs sed -i 's|"com\.google\.firebase|"firebase|g'
17+
find . -name '_toc.yaml' | xargs sed -i 's|"com\.goo gle\.android\.gms\.|"|g'
18+
find . -name "_toc.yaml" | xargs sed -i 's|path: reference/|path: /docs/reference/android/|g'

buildSrc/gms_transform.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#Derived from post processing done in granular releases
2+
set -x
3+
#!/bin/sh -x
4+
grep -rl 'http://' | xargs sed -i 's|http://|//|g'
5+
grep -rl 'https://' | xargs sed -i 's|https://|//|g'
6+
grep -rl '/docs/reference/android///developers.google.com/' | xargs sed -i 's|/docs/reference/android///developers.google.com||g'
7+
grep -rl '/docs/reference/android/reference' | xargs sed -i 's|/docs/reference/android/reference|/android/reference|g'
8+
grep -rl '//developers.google.com/android/reference/com/google/firebase/' | xargs sed -i 's|//developers.google.com/android/reference/com/google/firebase/|/android/reference/com/google/firebase/|g'
9+
grep -rl '/docs/reference/android///developer.android.com/reference/' | xargs sed -i 's|/docs/reference/android///developer.android.com/reference/|//developer.android.com/reference/|g'
10+
find . -name '*.html' | xargs sed -i 's/[ \t]*$//' "$@"
11+
find . -name '*.html' | xargs perl -0777 -p -i -e 's|.+<div class="jd-tagdata">\n(.*\n){1,5}?(?:.+<tr>\n.+\n.+<td><!-- no parameter comment --></td>\n.+</tr>\n)+?(.+\n){1,5}?.*</div>||gm'
12+
find . -name '_toc.yaml' | xargs sed -i 's|"com\.google\.firebase|"firebase|g'
13+
find . -name '_toc.yaml' | xargs sed -i 's|"com\.google\.android\.gms\.|"|g'i
14+
find . -name "_toc.yaml" | xargs sed -i 's|path: reference/|path: /android/reference/|g'
15+
find . -name "_toc.yaml" | xargs sed -i 's|path: /docs/reference/android/|path: /android/reference/|g'

buildSrc/src/main/groovy/com/google/firebase/gradle/DoclavaPlugin.groovy

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package com.google.firebase.gradle
22

33
import org.gradle.api.Plugin
44
import org.gradle.api.Project
5+
import org.gradle.api.tasks.Delete
6+
import org.gradle.api.tasks.Exec
7+
import org.gradle.api.tasks.bundling.Zip
58
import org.gradle.api.tasks.javadoc.Javadoc
69

710
/**
@@ -17,8 +20,6 @@ import org.gradle.api.tasks.javadoc.Javadoc
1720
class DoclavaPlugin implements Plugin<Project> {
1821
@Override
1922
void apply(Project project) {
20-
def android = project.android
21-
2223
project.configurations {
2324
javadocCustomConfig
2425
protoliteConfig
@@ -32,12 +33,19 @@ class DoclavaPlugin implements Plugin<Project> {
3233
}
3334

3435
project.task('javadoc', type: Javadoc) {
35-
source = android.sourceSets.main.java.srcDirs
36-
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
36+
3737
// Besides third party libraries, firestore depends on the sibling module :immutable-collection,
3838
// which needs to be in the classpath when javadoc is run
3939
// Ref: https://stackoverflow.com/questions/41076271/javadoc-generation-error-package-does-not-exist-in-multi-module-project
40-
android.libraryVariants.all { variant -> owner.classpath += variant.javaCompile.classpath }
40+
if(LicenseResolverPlugin.isAndroidProject(project)) {
41+
def android = project.android
42+
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
43+
source = android.sourceSets.main.java.srcDirs
44+
android.libraryVariants.all { variant -> owner.classpath += variant.javaCompile.classpath }
45+
} else {
46+
source = project.sourceSets.main.allJava
47+
owner.classpath = project.sourceSets.main.compileClasspath
48+
}
4149

4250
// TODO(ashwinraghav): Investigate why this is needed
4351
// Details at : b/77907758
@@ -94,6 +102,10 @@ class DoclavaPlugin implements Plugin<Project> {
94102
federationApiFiles << ['Google Play services', project.getProperties().
95103
get('google_play_services_api_file')]
96104
}
105+
if (project.hasProperty('tasks_api_file')) {
106+
federationUrls << ['Tasks', 'https://developers.google.com/android']
107+
federationApiFiles << ['Tasks', project.getProperties().get('tasks_api_file')]
108+
}
97109

98110
// set federated links for external projects that need to be linked
99111
options.addMultilineMultiValueOption("federate").setValue(federationUrls)

buildSrc/src/main/groovy/com/google/firebase/gradle/MultiProjectReleasePlugin.groovy

Lines changed: 134 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import org.ajoberstar.grgit.gradle.GrgitPlugin
55
import org.gradle.api.GradleException
66
import org.gradle.api.Plugin
77
import org.gradle.api.Project
8+
import org.gradle.api.tasks.Delete
89
import org.gradle.api.tasks.bundling.Zip
9-
import org.gradle.api.tasks.Copy
1010

1111
/**
1212
* Orchestrates our release process by automating validations, documentation and artifact
@@ -49,6 +49,16 @@ class MultiProjectReleasePlugin implements Plugin<Project> {
4949

5050
def releaseName = System.getProperty('releaseName', new Date().format('dd-MM-yyyy'))
5151
def releaseFromBranch = System.getProperty('releaseFromBranch', 'master')
52+
def releaseJavadocs = System.getProperty('releaseJavadocs', 'true').toBoolean()
53+
54+
def firebaseDevsiteJavadoc = new File(project.buildDir,"firebase-javadocs/" )
55+
firebaseDevsiteJavadoc.mkdirs()
56+
def gmsDevsiteJavadoc = new File( project.buildDir,"gms-javadocs/" )
57+
gmsDevsiteJavadoc.mkdirs()
58+
def firebaseClientBuildDest = new File(firebaseDevsiteJavadoc, "client/" )
59+
firebaseClientBuildDest.mkdirs()
60+
def gmsClientBuildDest = new File(gmsDevsiteJavadoc, "client/" )
61+
gmsClientBuildDest.mkdirs()
5262

5363
project.subprojects { it.apply plugin: VersioningPlugin }
5464
project.afterEvaluate {
@@ -71,15 +81,19 @@ class MultiProjectReleasePlugin implements Plugin<Project> {
7181
def testSampleAppStartupCrash = project.task('testSampleAppStartup') {
7282
description "Test sample app for crashes"
7383

74-
projectsToRelease.each {
75-
it.afterEvaluate {
76-
if (it.plugins.hasPlugin(LaunchSampleAppPlugin)) {
77-
dependsOn("$it.path:$LaunchSampleAppPlugin.LAUNCH_SAMPLE_APP" as String)
84+
if (!System.getProperty('skipSampleAppTests', 'false').toBoolean()) {
85+
projectsToRelease.each {
86+
it.afterEvaluate {
87+
if (it.plugins.hasPlugin(LaunchSampleAppPlugin)) {
88+
dependsOn("$it.path:$LaunchSampleAppPlugin.LAUNCH_SAMPLE_APP" as String)
89+
90+
}
7891
}
7992
}
8093
}
8194
}
8295

96+
8397
def removeAllFromMavenLocal = project.task('removeAllFromMavenLocal') {
8498
projectsToRelease.each {
8599
it.afterEvaluate {
@@ -147,7 +161,7 @@ class MultiProjectReleasePlugin implements Plugin<Project> {
147161

148162
def publishArtifacts = project.task('publishArtifacts') {
149163
mustRunAfter(performPreReleaseCommits)
150-
dependsOn projectsToRelease.collect {
164+
dependsOn projectsToRelease.collect {
151165
"$it.path:publishMavenJavaReleasePublicationToBuildRepository" as String
152166
}
153167
}
@@ -160,12 +174,117 @@ class MultiProjectReleasePlugin implements Plugin<Project> {
160174

161175
}
162176

163-
def g3DestDir = "${System.getProperty('g3dir')}/gmscore/sdk/stage/fireescape/"
164-
165177
def generatePrebuiltsConfig = project.task("generatePrebuiltsConfig", type: GenerateGranularLibraryConfigTask) {
166178
mustRunAfter(dropArtifactsInPrebuiltsStaging)
167179
projects = projectNames
168-
outputDir = new File(g3DestDir)
180+
outputDir = new File(project.buildDir, "prebuilts-config/")
181+
}
182+
183+
def generatePrebuiltsConfigZip = project.task(type: Zip, 'generatePrebuiltsConfigZip') {
184+
dependsOn generatePrebuiltsConfig
185+
from new File(project.buildDir, "prebuilts-config/")
186+
include '**/*'
187+
archiveName "$project.buildDir/prebuilts-config.zip"
188+
}
189+
190+
def generateAllJavadocs = project.task('generateAllJavadocs') {
191+
dependsOn projectsToRelease.collect {
192+
"$it.path:javadoc" as String
193+
}
194+
mustRunAfter publishArtifacts
195+
196+
doLast {
197+
project.copy {
198+
from projectsToRelease.collect {
199+
"$it.buildDir/docs/javadoc/reference"
200+
}
201+
include '**/*'
202+
into firebaseDevsiteJavadoc
203+
}
204+
205+
project.copy {
206+
from projectsToRelease.collect {
207+
"$it.buildDir/docs/javadoc/reference"
208+
}
209+
include '**/*'
210+
into gmsDevsiteJavadoc
211+
}
212+
213+
projectsToRelease.collect { p ->
214+
p.copy {
215+
from "$p.buildDir/docs/javadoc/reference/_toc.yaml"
216+
include '**/*'
217+
into "$firebaseClientBuildDest/$p.name"
218+
}
219+
220+
p.copy {
221+
from "$p.buildDir/docs/javadoc/reference/_toc.yaml"
222+
include '**/*'
223+
into "$gmsClientBuildDest/$p.name"
224+
}
225+
}
226+
}
227+
}
228+
229+
def prepareJavadocs = project.task('prepareJavadocs', type: Delete) {
230+
dependsOn generateAllJavadocs
231+
doLast {
232+
//cleanup docs
233+
project.delete {
234+
def relativeDeletablePaths = [
235+
"timestamp.js", "navtree_data.js", "assets/",
236+
"classes.html", "hierarchy.html",
237+
"lists.js", "package-list",
238+
"packages.html", "index.html",
239+
"current.xml", "_toc.yaml"]
240+
241+
delete relativeDeletablePaths.collectMany {
242+
["$firebaseDevsiteJavadoc.path/$it", "$gmsDevsiteJavadoc.path/$it"]
243+
}
244+
}
245+
246+
//Transform
247+
project.exec {
248+
ignoreExitValue true
249+
workingDir firebaseDevsiteJavadoc
250+
commandLine "${project.rootProject.file("buildSrc").path}/devsite_transform.sh"
251+
}
252+
253+
project.exec {
254+
ignoreExitValue true
255+
workingDir gmsDevsiteJavadoc
256+
commandLine "${project.rootProject.file("buildSrc").path}/gms_transform.sh"
257+
}
258+
259+
//Tidy
260+
if (project.hasProperty('tidyScript')) {
261+
project.exec {
262+
ignoreExitValue true
263+
workingDir firebaseDevsiteJavadoc
264+
commandLine project.getProperties().get('tidyScript'), "."
265+
}
266+
267+
project.exec {
268+
ignoreExitValue true
269+
workingDir gmsDevsiteJavadoc
270+
commandLine project.getProperties().get('tidyScript'), "."
271+
}
272+
}
273+
}
274+
}
275+
276+
def assembleFirebaseJavadocZip = project.task(type: Zip, 'assembleFirebaseJavadocZip') {
277+
dependsOn prepareJavadocs
278+
from firebaseDevsiteJavadoc
279+
include '**/*'
280+
archiveName "$project.buildDir/firebase-javadocs.zip"
281+
}
282+
283+
def assembleGmsJavadocZip = project.task(type: Zip, 'assembleGmsJavadocZip') {
284+
dependsOn prepareJavadocs
285+
from gmsDevsiteJavadoc
286+
include '**/*'
287+
archiveName "$project.buildDir/gms-javadocs.zip"
169288
}
170289

171290
// TODO(ashwinraghav) : Move proguard into versioned directory to avoid having to look
@@ -219,9 +338,13 @@ class MultiProjectReleasePlugin implements Plugin<Project> {
219338
dependsOn checkoutBranch
220339
dependsOn performPreReleaseCommits
221340
dependsOn assembleMavenRepoZip
341+
if(releaseJavadocs) {
342+
dependsOn assembleGmsJavadocZip
343+
dependsOn assembleFirebaseJavadocZip
344+
}
222345
dependsOn performPostReleaseCommits
223-
dependsOn generatePrebuiltsConfig
346+
dependsOn generatePrebuiltsConfigZip
224347
}
225348
}
226349
}
227-
}
350+
}

buildSrc/src/main/groovy/com/google/firebase/gradle/PublishingPlugin.groovy

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,16 +224,17 @@ class PublishingPlugin implements Plugin<Project> {
224224

225225
subProject.ext.prebuiltLibName = "lib${counter}"
226226
counter++
227-
def g3DestDir = "${System.getProperty('g3dir')}/gmscore/sdk/stage/fireescape/$subProject.prebuiltLibName"
227+
def prebuiltsConfigDest = new File(project.buildDir.absolutePath,
228+
"prebuilts-config/gmscore/sdk/stage/fireescape/$subProject.prebuiltLibName")
228229
def createPrebuiltsDrop = subProject.task('createPrebuiltsDrop', type: Copy) {
229230
dependsOn proguardTask
230231
def zipFile = "build/libs/assembleReleaseProguarded.${LicenseResolverPlugin.isAndroidProject(subProject) ? 'aar' : 'jar'}"
231232
from zipTree(zipFile)
232-
into g3DestDir
233+
into prebuiltsConfigDest
233234
}
234235

235236
def createPrebuiltsBuildFile = subProject.task('createPrebuiltsBuildFile', type: GenerateGranularLibraryBuildTask) {
236-
outputDir new File(g3DestDir)
237+
outputDir prebuiltsConfigDest
237238
}
238239

239240
def createPrebuilts = subProject.task('createPrebuilts') {

buildSrc/src/test/groovy/com/google/firebase/gradle/BaseSpecification.groovy

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,6 @@ class BaseSpecification extends Specification {
9393
@Rule
9494
final TemporaryFolder testProjectDir = new TemporaryFolder()
9595

96-
@Rule
97-
final TemporaryFolder g3Dir = new TemporaryFolder()
9896
File rootBuildFile
9997
File rootSettingsFile
10098
File javaModuleFolder

0 commit comments

Comments
 (0)