Set up the plugin build environment

The goal of this CL is to set up the build environment to allow plugins to work.

We have a trivial plugin that doesn't do anything (yet) - it just sets itself as the finalizer of all Reporting tasks.

Eventually, this plugin will upload all reports to GCS, and even create a "cover page" linking to each one of them.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=233617499
This commit is contained in:
guyben 2019-02-12 09:13:04 -08:00 committed by jianglai
parent 75c80b5e24
commit e6c46cab58
4 changed files with 126 additions and 0 deletions

View file

@ -37,6 +37,12 @@ plugins {
id "com.moowork.node" version "1.2.0"
}
apply plugin: google.registry.gradle.plugin.GcsReportUploaderPlugin
gcsReportUploader {
bucket = 'my-bucket'
}
apply from: 'dependencies.gradle'
// Provide defaults for all of the project properties.

View file

@ -0,0 +1,21 @@
repositories {
if (project.ext.properties.repositoryUrl == null) {
println "Plugins: Using Maven central..."
mavenCentral()
} else {
maven {
println "Plugins: Using repo ${repositoryUrl}..."
url repositoryUrl
}
}
}
apply from: '../dependencies.gradle'
dependencies {
def deps = dependencyMap
compile deps['com.google.guava:guava']
testCompile deps['com.google.truth:truth']
}

View file

@ -0,0 +1,56 @@
// Copyright 2019 The Nomulus Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.gradle.plugin;
import java.util.ArrayList;
import org.gradle.api.DefaultTask;
import org.gradle.api.Task;
import org.gradle.api.reporting.Report;
import org.gradle.api.reporting.ReportContainer;
import org.gradle.api.reporting.Reporting;
import org.gradle.api.tasks.TaskAction;
/**
* A task that uploads the Reports generated by other tasks to GCS.
*
* <p>TODO:implement it.
*/
public class GcsReportUploader extends DefaultTask {
private final ArrayList<Task> reportingTasks = new ArrayList<>();
private String bucket = null;
public void setBucket(String bucket) {
this.bucket = bucket;
}
@TaskAction
void uploadResults() {
System.out.format("GcsReportUploader uploading to %s: Unimplemented\n", bucket);
}
private static Reporting<? extends ReportContainer<? extends Report>> asReporting(Task task) {
return (Reporting) task;
}
void addTask(Task task) {
if (!(task instanceof Reporting)) {
return;
}
reportingTasks.add(task);
task.finalizedBy(this);
}
}

View file

@ -0,0 +1,43 @@
// Copyright 2019 The Nomulus Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.gradle.plugin;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
/**
* Plugin setting up the GcsReportUploader task.
*
* <p>It goes over all the tasks in a project and pass them on to the GcsReportUploader task for set
* up.
*
* <p>Note that since we're passing in all the projects' tasks - this includes the GcsReportUploader
* itself! It's up to the GcsReportuploader to take care of not having "infinite loops" caused by
* waiting for itself to end before finishing.
*/
public class GcsReportUploaderPlugin implements Plugin<Project> {
public void apply(Project project) {
GcsReportUploader reportUploader =
project.getTasks().create("gcsReportUploader", GcsReportUploader.class, task -> {
task.setDescription("Uploads the reports to GCS bucket");
task.setGroup("uploads");
});
for (Project subProject : project.getAllprojects()) {
subProject.getTasks().all(reportUploader::addTask);
}
}
}