Implement Bazel build

To run the tests:

  bazel test //...

To build the Gerrit plugin API, run:

  bazel build gerrit-plugin-api:plugin-api_deploy.jar

To build the Gerrit extension API, run:

  bazel build gerrit-extension-api:extension-api_deploy.jar

TODOs:

Licenses
Reduce visibility (all public for now)
Generate HTML Documentation
Core plugins
gerrit_plugin() rule to build plugins in tree and standalone modes
GWT UI (only gwt_module() skylark rule is provided, no gwt_binary())
PolyGerrit UI
WAR
Publish artifacts to Maven Central
Ask Bazel team to add Gerrit to their CI on ci.bazel.io

Contributed-By: Han-Wen Nienhuys <hanwen@google.com>
Change-Id: I9a86e670882a44a5c966579cdeb8ed79b1590de3
diff --git a/gerrit-acceptance-tests/BUILD b/gerrit-acceptance-tests/BUILD
new file mode 100644
index 0000000..2ec7a05
--- /dev/null
+++ b/gerrit-acceptance-tests/BUILD
@@ -0,0 +1,42 @@
+load('//tools/bzl:java.bzl', 'java_library2')
+
+java_library2(
+  name = 'lib',
+  srcs = glob(['src/test/java/com/google/gerrit/acceptance/*.java']),
+  exported_deps = [
+    '//gerrit-acceptance-framework:lib',
+    '//gerrit-common:annotations',
+    '//gerrit-common:server',
+    '//gerrit-extension-api:api',
+    '//gerrit-gpg:testutil',
+    '//gerrit-launcher:launcher',
+    '//gerrit-lucene:lucene',
+    '//gerrit-httpd:httpd',
+    '//gerrit-pgm:init',
+    '//gerrit-pgm:pgm',
+    '//gerrit-pgm:util',
+    '//gerrit-reviewdb:server',
+    '//gerrit-server:server',
+    '//gerrit-server:testutil',
+    '//gerrit-server/src/main/prolog:common',
+    '//gerrit-sshd:sshd',
+
+    '//lib:args4j',
+    '//lib:gson',
+    '//lib:gwtjsonrpc',
+    '//lib:gwtorm',
+    '//lib:h2',
+    '//lib:jsch',
+    '//lib:servlet-api-3_1-without-neverlink',
+
+    '//lib/bouncycastle:bcpg',
+    '//lib/bouncycastle:bcprov',
+    '//lib/guice:guice',
+    '//lib/guice:guice-assistedinject',
+    '//lib/guice:guice-servlet',
+    '//lib/log:api',
+    '//lib/jgit/org.eclipse.jgit:jgit',
+    '//lib/mina:sshd',
+  ],
+  visibility = ['//visibility:public'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/BUILD
new file mode 100644
index 0000000..9935eeb
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/BUILD
@@ -0,0 +1,7 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'api_account',
+  srcs = glob(['*IT.java']),
+  labels = ['api'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/BUILD
new file mode 100644
index 0000000..2502cad
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/BUILD
@@ -0,0 +1,7 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'api_change',
+  srcs = glob(['*IT.java']),
+  labels = ['api'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/config/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/config/BUILD
new file mode 100644
index 0000000..da8274d
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/config/BUILD
@@ -0,0 +1,7 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'api_config',
+  srcs = glob(['*IT.java']),
+  labels = ['api'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/group/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/group/BUILD
new file mode 100644
index 0000000..1a374f0
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/group/BUILD
@@ -0,0 +1,23 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'api_group',
+  srcs = glob(['*IT.java']),
+  deps = [
+    ':util',
+    '//gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account:util',
+  ],
+  labels = ['api'],
+)
+
+java_library(
+  name = 'util',
+  srcs = ['GroupAssert.java'],
+  deps = [
+    '//gerrit-extension-api:api',
+    '//gerrit-reviewdb:server',
+    '//gerrit-server:server',
+    '//lib:gwtorm',
+    '//lib:truth',
+  ],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/project/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/project/BUILD
new file mode 100644
index 0000000..4fb65ff
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/project/BUILD
@@ -0,0 +1,7 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'api_project',
+  srcs = glob(['*IT.java']),
+  labels = ['api'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/revision/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/revision/BUILD
new file mode 100644
index 0000000..e527b9d
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/revision/BUILD
@@ -0,0 +1,7 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'api_revision',
+  srcs = glob(['*IT.java']),
+  labels = ['api'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/edit/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/edit/BUILD
new file mode 100644
index 0000000..3fcf2d8
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/edit/BUILD
@@ -0,0 +1,11 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'edit',
+  srcs = ['ChangeEditIT.java'],
+  deps = [
+    '//lib/commons:codec',
+    '//lib/joda:joda-time',
+  ],
+  labels = ['edit'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/BUILD
new file mode 100644
index 0000000..db0d8e9
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/BUILD
@@ -0,0 +1,26 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'git',
+  srcs = glob(['*IT.java']),
+  deps = [
+    ':submodule_util',
+    ':push_for_review',
+  ],
+  labels = ['git'],
+)
+
+java_library(
+  name = 'push_for_review',
+  srcs = ['AbstractPushForReview.java'],
+  deps = [
+    '//gerrit-acceptance-tests:lib',
+    '//lib/joda:joda-time',
+  ],
+)
+
+java_library(
+  name = 'submodule_util',
+  srcs = ['AbstractSubmoduleSubscription.java',],
+  deps = ['//gerrit-acceptance-tests:lib',]
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/pgm/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/pgm/BUILD
new file mode 100644
index 0000000..806acd2
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/pgm/BUILD
@@ -0,0 +1,8 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'pgm',
+  srcs = glob(['*IT.java']),
+  source_under_test = ['//gerrit-pgm:pgm'],
+  labels = ['pgm'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/BUILD
new file mode 100644
index 0000000..558d0a9
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/BUILD
@@ -0,0 +1,23 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'rest_account',
+  srcs = glob(['*IT.java']),
+  deps = [':util'],
+  labels = ['rest']
+)
+
+java_library(
+  name = 'util',
+  srcs = [
+    'AccountAssert.java',
+    'CapabilityInfo.java',
+  ],
+  deps = [
+    '//gerrit-acceptance-tests:lib',
+    '//gerrit-reviewdb:server',
+    '//lib:gwtorm',
+    '//lib:junit',
+  ],
+  visibility = ['//visibility:public'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/BUILD
new file mode 100644
index 0000000..c06f02f
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/BUILD
@@ -0,0 +1,36 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+SUBMIT_UTIL_SRCS = [
+  'AbstractSubmit.java',
+  'AbstractSubmitByMerge.java',
+]
+
+SUBMIT_TESTS = glob(['Submit*IT.java'])
+OTHER_TESTS = glob(['*IT.java'], exclude = SUBMIT_TESTS)
+
+acceptance_tests(
+  group = 'rest_change_other',
+  srcs = OTHER_TESTS,
+  deps = [
+    ':submit_util',
+    '//lib/joda:joda-time',
+  ],
+  labels = ['rest'],
+)
+
+acceptance_tests(
+  group = 'rest_change_submit',
+  srcs = SUBMIT_TESTS,
+  deps = [
+    ':submit_util',
+  ],
+  labels = ['rest'],
+)
+
+java_library(
+  name = 'submit_util',
+  srcs = SUBMIT_UTIL_SRCS,
+  deps = [
+    '//gerrit-acceptance-tests:lib',
+  ],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/config/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/config/BUILD
new file mode 100644
index 0000000..b9d3ffb
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/config/BUILD
@@ -0,0 +1,7 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'rest_config',
+  srcs = glob(['*IT.java']),
+  labels = ['rest']
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/group/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/group/BUILD
new file mode 100644
index 0000000..d9a400c
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/group/BUILD
@@ -0,0 +1,8 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'rest_group',
+  srcs = glob(['*IT.java']),
+  labels = ['rest']
+)
+
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/BUILD
new file mode 100644
index 0000000..579171f
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/BUILD
@@ -0,0 +1,37 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'rest_project',
+  srcs = glob(['*IT.java']),
+  deps = [
+    ':branch',
+    ':project',
+  ],
+  labels = ['rest'],
+)
+
+java_library(
+  name = 'branch',
+  srcs = [
+    'BranchAssert.java',
+  ],
+  deps = [
+    '//lib:truth',
+    '//gerrit-extension-api:api',
+    '//gerrit-server:server',
+  ],
+)
+
+java_library(
+  name = 'project',
+  srcs = [
+    'ProjectAssert.java',
+  ],
+  deps = [
+    '//gerrit-extension-api:api',
+    '//gerrit-reviewdb:server',
+    '//gerrit-server:server',
+    '//lib:gwtorm',
+    '//lib:truth',
+  ],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/BUILD
new file mode 100644
index 0000000..a5e6d36
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/BUILD
@@ -0,0 +1,7 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'server_change',
+  srcs = glob(['*IT.java']),
+  labels = ['server'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/event/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/event/BUILD
new file mode 100644
index 0000000..ff0c51b
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/event/BUILD
@@ -0,0 +1,7 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'server_event',
+  srcs = glob(['*IT.java']),
+  labels = ['server'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/notedb/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/notedb/BUILD
new file mode 100644
index 0000000..17c4cdc
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/notedb/BUILD
@@ -0,0 +1,7 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'server_notedb',
+  srcs = glob(['*IT.java']),
+  labels = ['notedb', 'server'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/project/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/project/BUILD
new file mode 100644
index 0000000..bcf9c9f
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/project/BUILD
@@ -0,0 +1,16 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+FLAKY_TEST_CASES=['ProjectWatchIT.java']
+
+acceptance_tests(
+  group = 'server_project',
+  srcs = glob(['*IT.java'], exclude=FLAKY_TEST_CASES),
+  labels = ['server'],
+)
+
+acceptance_tests(
+  group = 'server_project_flaky',
+  flaky = 1,
+  srcs = FLAKY_TEST_CASES,
+  labels = ['server', 'flaky'],
+)
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/ssh/BUILD b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/ssh/BUILD
new file mode 100644
index 0000000..3c91aa1
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/ssh/BUILD
@@ -0,0 +1,8 @@
+load('//gerrit-acceptance-tests:tests.bzl', 'acceptance_tests')
+
+acceptance_tests(
+  group = 'ssh',
+  srcs = glob(['*IT.java']),
+  deps = ['//lib/commons:compress'],
+  labels = ['ssh'],
+)
diff --git a/gerrit-acceptance-tests/tests.bzl b/gerrit-acceptance-tests/tests.bzl
new file mode 100644
index 0000000..ff2562d
--- /dev/null
+++ b/gerrit-acceptance-tests/tests.bzl
@@ -0,0 +1,28 @@
+load('//tools/bzl:junit.bzl', 'junit_tests')
+
+BOUNCYCASTLE = [
+  '//lib/bouncycastle:bcpkix-without-neverlink',
+  '//lib/bouncycastle:bcpg-without-neverlink',
+]
+
+def acceptance_tests(
+    group,
+    srcs,
+    flaky = 0,
+    deps = [],
+    labels = [],
+    source_under_test = [], #unused
+    vm_args = ['-Xmx256m']):
+  junit_tests(
+    name = group,
+    srcs = srcs,
+    flaky = flaky,
+    deps = deps + BOUNCYCASTLE + [
+      '//gerrit-acceptance-tests:lib',
+    ],
+    tags = labels + [
+      'acceptance',
+      'slow',
+    ],
+    jvm_flags = vm_args,
+  )