Add support for just UI plugins (JS)
Change-Id: Ie0e466cf52606c1eaa4f793fd314db3cb20dc869
diff --git a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
index 76254a6..22f78b4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
@@ -123,11 +123,27 @@
return Optional.empty();
}
- Optional<SmartJson> artifactJson = artifacts.flatMap(a -> findArtifact(a, ".jar"));
- if (!artifactJson.isPresent()) {
- return Optional.empty();
+ Optional<SmartJson> artifactJavaJson = artifacts.flatMap(a -> findArtifact(a, ".jar"));
+ if (artifactJavaJson.isPresent()) {
+ Optional<PluginInfo>javaArtifact = getJavaPluginArtifactInfo(buildExecution, artifacts, artifactJavaJson);
+ if (javaArtifact.isPresent()) {
+ return javaArtifact;
+ }
}
+ Optional<SmartJson> artifactJsJson = artifacts.flatMap(a -> findArtifact(a, ".js"));
+ if (artifactJsJson.isPresent()) {
+ Optional<PluginInfo> jsArtifact = getJsPluginArtifactInfo(buildExecution, artifacts, artifactJsJson);
+ if (jsArtifact.isPresent()) {
+ return jsArtifact;
+ }
+ }
+
+ return Optional.empty();
+ }
+
+
+ private Optional<PluginInfo> getJavaPluginArtifactInfo(Optional<SmartJson> buildExecution, Optional<JsonArray> artifacts, Optional<SmartJson> artifactJson) {
String pluginPath = artifactJson.get().getString("relativePath");
String[] pluginPathParts = pluginPath.split("/");
@@ -160,6 +176,36 @@
return Optional.empty();
}
+ private Optional<PluginInfo> getJsPluginArtifactInfo(Optional<SmartJson> buildExecution, Optional<JsonArray> artifacts, Optional<SmartJson> artifactJson) {
+ String pluginPath = artifactJson.get().getString("relativePath");
+
+ String[] pluginPathParts = pluginPath.split("/");
+ String pluginName = pluginNameOfJs(pluginPathParts);
+
+ String pluginUrl =
+ String.format("%s/artifact/%s", buildExecution.get().getString("url"), pluginPath);
+
+ Optional<String> pluginVersion =
+ fetchArtifact(buildExecution.get(), artifacts.get(), ".js-version");
+ Optional<String> pluginDescription =
+ fetchArtifactJson(buildExecution.get(), artifacts.get(), ".json")
+ .flatMap(json -> json.getOptionalString("description"));
+
+ for (JsonElement elem : buildExecution.get().get("actions").get().getAsJsonArray()) {
+ SmartJson elemJson = SmartJson.of(elem);
+ Optional<SmartJson> lastBuildRevision = elemJson.getOptional("lastBuiltRevision");
+
+ if (lastBuildRevision.isPresent()) {
+ String sha1 = lastBuildRevision.get().getString("SHA1").substring(0, 8);
+ return pluginVersion.map(
+ version ->
+ new PluginInfo(pluginName, pluginDescription.orElse(""), version, sha1, pluginUrl));
+ }
+ }
+
+ return Optional.empty();
+ }
+
private Optional<String> fetchArtifact(
SmartJson buildExecution, JsonArray artifacts, String artifactSuffix) {
StringBuilder artifactBody = new StringBuilder();
@@ -227,6 +273,18 @@
return pluginJarParts[filePos].substring(0, jarExtPos);
}
+ private String pluginNameOfJs(String[] pluginJsParts) {
+ int filePos = pluginJsParts.length - 1;
+ int pathPos = filePos - 1;
+
+ if (pluginJsParts[filePos].startsWith(pluginJsParts[pathPos])) {
+ return pluginJsParts[pathPos];
+ }
+
+ int jsExtPos = pluginJsParts[filePos].indexOf(".js");
+ return pluginJsParts[filePos].substring(0, jsExtPos);
+ }
+
private boolean isMavenBuild(String[] pluginPathParts) {
return pluginPathParts[pluginPathParts.length - 2].equals("target");
}
diff --git a/src/main/resources/static/js/plugin-manager.js b/src/main/resources/static/js/plugin-manager.js
index d786e90..04a3cc3 100644
--- a/src/main/resources/static/js/plugin-manager.js
+++ b/src/main/resources/static/js/plugin-manager.js
@@ -129,7 +129,8 @@
};
$("button#" + id).addClass("hidden");
$("span#installing-" + id).removeClass("hidden");
- $http.put($scope.getBaseUrl() + '/a/plugins/' + id + ".jar", pluginInstallData).then(
+ var fileEnding = url.endsWith('.js') ? ".js" : ".jar";
+ $http.put($scope.getBaseUrl() + '/a/plugins/' + id + fileEnding, pluginInstallData).then(
function successCallback(response) {
$("span#installing-" + id).addClass("hidden");
$("span#installed-" + id).removeClass("hidden");