Add standalone bazel build Change-Id: Id8157e7f1e0c8529fa61419e1bbe5a40dd6e65aa
diff --git a/.gitignore b/.gitignore index 2c3dd3f..a25a805 100644 --- a/.gitignore +++ b/.gitignore
@@ -2,3 +2,5 @@ *.DS_Store /.project /.settings +/.primary_build_tool +/bazel-*
diff --git a/WORKSPACE b/WORKSPACE new file mode 100644 index 0000000..956c278 --- /dev/null +++ b/WORKSPACE
@@ -0,0 +1,26 @@ +workspace(name = "admin_console") + +load("//:bazlets.bzl", "load_bazlets") + +load_bazlets( + commit = "e50890188cd63f79d4a8529f90024f56168f9c9a", + # local_path = "/home/<user>/projects/bazlets", +) + +#Snapshot Plugin API +#load( +# "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl", +# "gerrit_api_maven_local", +#) + +# Load snapshot Plugin API +#gerrit_api_maven_local() + +# Release Plugin API +load( + "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl", + "gerrit_api", +) + +# Load release Plugin API +gerrit_api()
diff --git a/bazlets.bzl b/bazlets.bzl new file mode 100644 index 0000000..e14e488 --- /dev/null +++ b/bazlets.bzl
@@ -0,0 +1,17 @@ +NAME = "com_googlesource_gerrit_bazlets" + +def load_bazlets( + commit, + local_path = None + ): + if not local_path: + native.git_repository( + name = NAME, + remote = "https://gerrit.googlesource.com/bazlets", + commit = commit, + ) + else: + native.local_repository( + name = NAME, + path = local_path, + )
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md index 0d0cbf4..d60b6e3 100644 --- a/src/main/resources/Documentation/build.md +++ b/src/main/resources/Documentation/build.md
@@ -1,14 +1,64 @@ -Build -===== +# Build -This plugin is built using Bazel. -Only the Gerrit in-tree build is supported. +This plugin can be built with Bazel, and two build modes are supported: +* Standalone +* In Gerrit tree + +Standalone build mode is recommended, as this mode doesn't require local Gerrit +tree to exist. Moreover, there are some limitations and additional manual steps +required when building in Gerrit tree mode (see corresponding sections). + +## Build standalone + +To build the plugin, issue the following command: + +``` + bazel build @PLUGIN@ +``` + +The output is created in + +``` + bazel-genfiles/@PLUGIN@.jar +``` + +To package the plugin sources run: + +``` + bazel build lib@PLUGIN@__plugin-src.jar +``` + +The output is created in: + +``` + bazel-bin/lib@PLUGIN@__plugin-src.jar +``` + +This project can be imported into the Eclipse IDE: + +``` + ./tools/eclipse/project.sh +``` + +## Build in Gerrit tree + +Clone or link this plugin to the plugins directory of Gerrit's +source tree. From Gerrit source tree issue the command: ``` bazel build plugins/@PLUGIN@ ``` +Note that due to a [known issue in Bazel][bazelissue], if the plugin +has previously been built in standalone mode, it is necessary to clean +the workspace before building in-tree: + +``` + cd plugins/@PLUGIN@ + bazel clean --expunge +``` + The output is created in ``` @@ -29,4 +79,4 @@ [Back to @PLUGIN@ documentation index][index] [index]: index.html - +[bazelissue]: https://github.com/bazelbuild/bazel/issues/2797
diff --git a/tools/bazel.rc b/tools/bazel.rc new file mode 100644 index 0000000..4ed16cf --- /dev/null +++ b/tools/bazel.rc
@@ -0,0 +1,2 @@ +build --workspace_status_command=./tools/workspace-status.sh +test --build_tests_only
diff --git a/tools/bzl/BUILD b/tools/bzl/BUILD new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tools/bzl/BUILD
diff --git a/tools/bzl/classpath.bzl b/tools/bzl/classpath.bzl new file mode 100644 index 0000000..dfcbe9c --- /dev/null +++ b/tools/bzl/classpath.bzl
@@ -0,0 +1,2 @@ +load("@com_googlesource_gerrit_bazlets//tools:classpath.bzl", + "classpath_collector")
diff --git a/tools/bzl/plugin.bzl b/tools/bzl/plugin.bzl new file mode 100644 index 0000000..956dd59 --- /dev/null +++ b/tools/bzl/plugin.bzl
@@ -0,0 +1,5 @@ +load( + "@com_googlesource_gerrit_bazlets//:gerrit_plugin.bzl", + "gerrit_plugin", + "PLUGIN_DEPS", +)
diff --git a/tools/eclipse/BUILD b/tools/eclipse/BUILD new file mode 100644 index 0000000..c335759 --- /dev/null +++ b/tools/eclipse/BUILD
@@ -0,0 +1,16 @@ +load("//tools/bzl:plugin.bzl", "PLUGIN_DEPS") +load("//tools/bzl:classpath.bzl", "classpath_collector") + +CP_DEPS = PLUGIN_DEPS + [ + "//:admin-console__plugin", +] + +java_library( + name = "classpath", + runtime_deps = CP_DEPS, +) + +classpath_collector( + name = "main_classpath_collect", + deps = CP_DEPS, +)
diff --git a/tools/eclipse/project.sh b/tools/eclipse/project.sh new file mode 100755 index 0000000..f5aefd4 --- /dev/null +++ b/tools/eclipse/project.sh
@@ -0,0 +1,15 @@ +#!/bin/bash +# Copyright (C) 2017 The Android Open Source Project +# +# 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. +`bazel query @com_googlesource_gerrit_bazlets//tools/eclipse:project --output location | sed s/BUILD:.*//`project.py -n admin-console -r .
diff --git a/tools/workspace-status.sh b/tools/workspace-status.sh new file mode 100755 index 0000000..3546649 --- /dev/null +++ b/tools/workspace-status.sh
@@ -0,0 +1,17 @@ +#!/bin/bash + +# This script will be run by bazel when the build process starts to +# generate key-value information that represents the status of the +# workspace. The output should be like +# +# KEY1 VALUE1 +# KEY2 VALUE2 +# +# If the script exits with non-zero code, it's considered as a failure +# and the output will be discarded. + +function rev() { + cd $1; git describe --always --match "v[0-9].*" --dirty +} + +echo STABLE_BUILD_ADMIN-CONSOLE_LABEL $(rev .)