public void apply()

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);
              }
            });
  }