in buildSrc/src/main/java/com/google/firebase/gradle/MultiProjectReleasePlugin.java [61:241]
public void apply(Project project) {
project.apply(ImmutableMap.of("plugin", PublishingPlugin.class));
boolean releaseJavadocs = toBoolean(System.getProperty("releaseJavadocs", "true"));
File firebaseDevsiteJavadoc = new File(project.getBuildDir(), "firebase-javadocs/");
File firebaseClientBuildDest = new File(firebaseDevsiteJavadoc, "client/");
firebaseClientBuildDest.mkdirs();
project.subprojects(
sub -> {
sub.afterEvaluate(
p -> {
sub.apply(ImmutableMap.of("plugin", JavadocPlugin.class));
sub.apply(ImmutableMap.of("plugin", FireEscapeArtifactPlugin.class));
});
});
project
.getTasks()
.create(
"buildBomZip",
Zip.class,
task -> {
task.dependsOn(project.getTasks().create("generateBom", BomGeneratorTask.class));
task.from("bom");
task.getArchiveFileName().set("bom.zip");
task.getDestinationDirectory().set(project.getRootDir());
});
project
.getGradle()
.projectsEvaluated(
gradle -> {
Set<FirebaseLibraryExtension> librariesToPublish =
(Set<FirebaseLibraryExtension>)
project.getExtensions().getExtraProperties().get("projectsToPublish");
Set<Project> projectsToPublish =
librariesToPublish.stream().map(lib -> lib.project).collect(Collectors.toSet());
Task validateProjectsToPublish =
project.task(
"validateProjectsToPublish",
task ->
task.doLast(
t -> {
if (projectsToPublish.isEmpty()) {
throw new GradleException(
"Required projectsToPublish parameter missing.");
}
}));
Task firebasePublish = project.getTasks().findByName("firebasePublish");
firebasePublish.dependsOn(validateProjectsToPublish);
Task generateAllJavadocs =
project.task(
"generateAllJavadocs",
task -> {
for (Project p : projectsToPublish) {
task.dependsOn(p.getPath() + ":" + TasksKt.JAVADOC_TASK_NAME);
task.doLast(
t -> {
for (Project publishableProject : projectsToPublish) {
publishableProject.copy(
copy -> {
copy.from(
publishableProject.getBuildDir()
+ "/docs/javadoc/reference");
copy.include("**/*");
copy.into(firebaseDevsiteJavadoc);
});
publishableProject.copy(
copy -> {
copy.from(
publishableProject.getBuildDir()
+ "/docs/javadoc/reference/_toc.yaml");
copy.include("**/*");
copy.into(
firebaseClientBuildDest
+ "/"
+ publishableProject.getName());
});
}
});
}
});
Delete prepareJavadocs =
project
.getTasks()
.create(
"prepareJavadocs",
Delete.class,
del -> {
del.dependsOn(generateAllJavadocs);
del.doLast(
d -> {
// cleanup docs
project.delete(
delSpec -> {
ImmutableList<String> relativeDeletablePaths =
ImmutableList.of(
"timestamp.js",
"navtree_data.js",
"assets/",
"classes.html",
"hierarchy.html",
"lists.js",
"package-list",
"packages.html",
"index.html",
"current.xml",
"_toc.yaml");
delSpec.delete(
relativeDeletablePaths.stream()
.map(
path ->
firebaseDevsiteJavadoc.getPath()
+ "/"
+ path)
.collect(Collectors.toList()));
});
// Transform
project.exec(
execSpec -> {
execSpec.setIgnoreExitValue(true);
execSpec.setWorkingDir(firebaseDevsiteJavadoc);
execSpec.setCommandLine(
project.getRootProject().file("buildSrc").getPath()
+ "/firesite_transform.sh");
});
// Tidy
String tidyBinary = System.getProperty("tidyBinaryPath", null);
String tidyConfig = System.getProperty("tidyConfigPath", null);
if (tidyBinary != null && tidyConfig != null) {
try {
Files.walk(firebaseDevsiteJavadoc.toPath())
.filter(
p ->
p.toFile().isFile()
&& p.toString().endsWith(".html"))
.forEach(
p -> {
project.exec(
execSpec -> {
System.out.println("Tidying " + p);
execSpec.setIgnoreExitValue(true);
execSpec.commandLine(
tidyBinary, "-config", tidyConfig, p);
});
});
} catch (IOException e) {
throw new GradleException("Directory walk failed.", e);
}
}
});
});
Zip assembleFirebaseJavadocZip =
project
.getTasks()
.create(
"assembleFirebaseJavadocZip",
Zip.class,
zip -> {
zip.dependsOn(prepareJavadocs);
zip.getDestinationDirectory().set(project.getBuildDir());
zip.getArchiveFileName().set("firebase-javadoc.zip");
zip.from(firebaseDevsiteJavadoc);
zip.include("**/*");
});
if (releaseJavadocs) {
firebasePublish.dependsOn(assembleFirebaseJavadocZip);
}
});
}