Remove no longer used Jenkins CI files.
diff --git a/3rdparty/BUILD b/3rdparty/BUILD
deleted file mode 100644
index e69de29..0000000
--- a/3rdparty/BUILD
+++ /dev/null
diff --git a/3rdparty/jvm/antlr/BUILD b/3rdparty/jvm/antlr/BUILD
deleted file mode 100644
index 12790f7..0000000
--- a/3rdparty/jvm/antlr/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "antlr",
- exports = [
- "//external:jar/antlr/antlr"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/aopalliance/BUILD b/3rdparty/jvm/aopalliance/BUILD
deleted file mode 100644
index 9a64f49..0000000
--- a/3rdparty/jvm/aopalliance/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "aopalliance",
- exports = [
- "//external:jar/aopalliance/aopalliance"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/args4j/BUILD b/3rdparty/jvm/args4j/BUILD
deleted file mode 100644
index 9c9642d..0000000
--- a/3rdparty/jvm/args4j/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "args4j",
- exports = [
- "//external:jar/args4j/args4j"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/com/cloudbees/BUILD b/3rdparty/jvm/com/cloudbees/BUILD
deleted file mode 100644
index 6c07585..0000000
--- a/3rdparty/jvm/com/cloudbees/BUILD
+++ /dev/null
@@ -1,14 +0,0 @@
-java_library(
- name = "groovy_cps",
- exports = [
- "//external:jar/com/cloudbees/groovy_cps"
- ],
- runtime_deps = [
- "//3rdparty/jvm/com/google/guava:guava"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/com/github/jnr/BUILD b/3rdparty/jvm/com/github/jnr/BUILD
deleted file mode 100644
index e990224..0000000
--- a/3rdparty/jvm/com/github/jnr/BUILD
+++ /dev/null
@@ -1,72 +0,0 @@
-java_library(
- name = "jffi",
- exports = [
- "//external:jar/com/github/jnr/jffi"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "jnr_constants",
- exports = [
- "//external:jar/com/github/jnr/jnr_constants"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "jnr_ffi",
- exports = [
- "//external:jar/com/github/jnr/jnr_ffi"
- ],
- runtime_deps = [
- "//3rdparty/jvm/org/ow2/asm:asm",
- "//3rdparty/jvm/org/ow2/asm:asm_analysis",
- "//3rdparty/jvm/org/ow2/asm:asm_commons",
- "//3rdparty/jvm/org/ow2/asm:asm_tree",
- "//3rdparty/jvm/org/ow2/asm:asm_util",
- ":jffi",
- ":jnr_x86asm"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "jnr_posix",
- exports = [
- "//external:jar/com/github/jnr/jnr_posix"
- ],
- runtime_deps = [
- ":jnr_constants",
- ":jnr_ffi"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "jnr_x86asm",
- exports = [
- "//external:jar/com/github/jnr/jnr_x86asm"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/com/google/code/findbugs/BUILD b/3rdparty/jvm/com/google/code/findbugs/BUILD
deleted file mode 100644
index d2f2a35..0000000
--- a/3rdparty/jvm/com/google/code/findbugs/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "jsr305",
- exports = [
- "//external:jar/com/google/code/findbugs/jsr305"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/com/google/guava/BUILD b/3rdparty/jvm/com/google/guava/BUILD
deleted file mode 100644
index 3a82699..0000000
--- a/3rdparty/jvm/com/google/guava/BUILD
+++ /dev/null
@@ -1,14 +0,0 @@
-java_library(
- name = "guava",
- exports = [
- "//external:jar/com/google/guava/guava"
- ],
- runtime_deps = [
- "//3rdparty/jvm/com/google/code/findbugs:jsr305"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/com/google/inject/BUILD b/3rdparty/jvm/com/google/inject/BUILD
deleted file mode 100644
index a33c2f5..0000000
--- a/3rdparty/jvm/com/google/inject/BUILD
+++ /dev/null
@@ -1,15 +0,0 @@
-java_library(
- name = "guice",
- exports = [
- "//external:jar/com/google/inject/guice"
- ],
- runtime_deps = [
- "//3rdparty/jvm/aopalliance:aopalliance",
- "//3rdparty/jvm/javax/inject:javax_inject"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/com/infradna/tool/BUILD b/3rdparty/jvm/com/infradna/tool/BUILD
deleted file mode 100644
index 63a36c8..0000000
--- a/3rdparty/jvm/com/infradna/tool/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "bridge_method_annotation",
- exports = [
- "//external:jar/com/infradna/tool/bridge_method_annotation"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/com/jcraft/BUILD b/3rdparty/jvm/com/jcraft/BUILD
deleted file mode 100644
index a7f42b2..0000000
--- a/3rdparty/jvm/com/jcraft/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "jzlib",
- exports = [
- "//external:jar/com/jcraft/jzlib"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/com/lesfurets/BUILD b/3rdparty/jvm/com/lesfurets/BUILD
deleted file mode 100644
index ddbb224..0000000
--- a/3rdparty/jvm/com/lesfurets/BUILD
+++ /dev/null
@@ -1,18 +0,0 @@
-java_library(
- name = "jenkins_pipeline_unit",
- exports = [
- "//external:jar/com/lesfurets/jenkins_pipeline_unit"
- ],
- runtime_deps = [
- "//3rdparty/jvm/com/cloudbees:groovy_cps",
- "//3rdparty/jvm/commons_io:commons_io",
- "//3rdparty/jvm/org/apache/ivy:ivy",
- "//3rdparty/jvm/org/assertj:assertj_core",
- "//3rdparty/jvm/org/codehaus/groovy:groovy_all"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/com/sun/solaris/BUILD b/3rdparty/jvm/com/sun/solaris/BUILD
deleted file mode 100644
index 8ed3a87..0000000
--- a/3rdparty/jvm/com/sun/solaris/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "embedded_su4j",
- exports = [
- "//external:jar/com/sun/solaris/embedded_su4j"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/com/sun/xml/txw2/BUILD b/3rdparty/jvm/com/sun/xml/txw2/BUILD
deleted file mode 100644
index 8dab9eb..0000000
--- a/3rdparty/jvm/com/sun/xml/txw2/BUILD
+++ /dev/null
@@ -1,15 +0,0 @@
-java_library(
- name = "txw2",
- exports = [
- "//external:jar/com/sun/xml/txw2/txw2"
- ],
- runtime_deps = [
- "//3rdparty/jvm/javax/xml/stream:stax_api",
- "//3rdparty/jvm/relaxngDatatype:relaxngDatatype"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/commons_beanutils/BUILD b/3rdparty/jvm/commons_beanutils/BUILD
deleted file mode 100644
index 2f34d6d..0000000
--- a/3rdparty/jvm/commons_beanutils/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "commons_beanutils",
- exports = [
- "//external:jar/commons_beanutils/commons_beanutils"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/commons_codec/BUILD b/3rdparty/jvm/commons_codec/BUILD
deleted file mode 100644
index 3f4d8e7..0000000
--- a/3rdparty/jvm/commons_codec/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "commons_codec",
- exports = [
- "//external:jar/commons_codec/commons_codec"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/commons_collections/BUILD b/3rdparty/jvm/commons_collections/BUILD
deleted file mode 100644
index 991d96d..0000000
--- a/3rdparty/jvm/commons_collections/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "commons_collections",
- exports = [
- "//external:jar/commons_collections/commons_collections"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/commons_digester/BUILD b/3rdparty/jvm/commons_digester/BUILD
deleted file mode 100644
index 80ceab2..0000000
--- a/3rdparty/jvm/commons_digester/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "commons_digester",
- exports = [
- "//external:jar/commons_digester/commons_digester"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/commons_discovery/BUILD b/3rdparty/jvm/commons_discovery/BUILD
deleted file mode 100644
index 646a0ab..0000000
--- a/3rdparty/jvm/commons_discovery/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "commons_discovery",
- exports = [
- "//external:jar/commons_discovery/commons_discovery"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/commons_fileupload/BUILD b/3rdparty/jvm/commons_fileupload/BUILD
deleted file mode 100644
index df5ad9a..0000000
--- a/3rdparty/jvm/commons_fileupload/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "commons_fileupload",
- exports = [
- "//external:jar/commons_fileupload/commons_fileupload"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/commons_httpclient/BUILD b/3rdparty/jvm/commons_httpclient/BUILD
deleted file mode 100644
index b98153b..0000000
--- a/3rdparty/jvm/commons_httpclient/BUILD
+++ /dev/null
@@ -1,14 +0,0 @@
-java_library(
- name = "commons_httpclient",
- exports = [
- "//external:jar/commons_httpclient/commons_httpclient"
- ],
- runtime_deps = [
- "//3rdparty/jvm/junit:junit"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/commons_io/BUILD b/3rdparty/jvm/commons_io/BUILD
deleted file mode 100644
index fb480f2..0000000
--- a/3rdparty/jvm/commons_io/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "commons_io",
- exports = [
- "//external:jar/commons_io/commons_io"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/commons_jelly/BUILD b/3rdparty/jvm/commons_jelly/BUILD
deleted file mode 100644
index 40c2356..0000000
--- a/3rdparty/jvm/commons_jelly/BUILD
+++ /dev/null
@@ -1,23 +0,0 @@
-java_library(
- name = "commons_jelly_tags_fmt",
- exports = [
- "//external:jar/commons_jelly/commons_jelly_tags_fmt"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "commons_jelly_tags_xml",
- exports = [
- "//external:jar/commons_jelly/commons_jelly_tags_xml"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/commons_lang/BUILD b/3rdparty/jvm/commons_lang/BUILD
deleted file mode 100644
index 5059083..0000000
--- a/3rdparty/jvm/commons_lang/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "commons_lang",
- exports = [
- "//external:jar/commons_lang/commons_lang"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/javax/annotation/BUILD b/3rdparty/jvm/javax/annotation/BUILD
deleted file mode 100644
index ee838a5..0000000
--- a/3rdparty/jvm/javax/annotation/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "javax_annotation_api",
- exports = [
- "//external:jar/javax/annotation/javax_annotation_api"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/javax/inject/BUILD b/3rdparty/jvm/javax/inject/BUILD
deleted file mode 100644
index 5087fcb..0000000
--- a/3rdparty/jvm/javax/inject/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "javax_inject",
- exports = [
- "//external:jar/javax/inject/javax_inject"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/javax/mail/BUILD b/3rdparty/jvm/javax/mail/BUILD
deleted file mode 100644
index 67abec1..0000000
--- a/3rdparty/jvm/javax/mail/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "mail",
- exports = [
- "//external:jar/javax/mail/mail"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/javax/servlet/jsp/jstl/BUILD b/3rdparty/jvm/javax/servlet/jsp/jstl/BUILD
deleted file mode 100644
index 2e204ad..0000000
--- a/3rdparty/jvm/javax/servlet/jsp/jstl/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "javax_servlet_jsp_jstl_api",
- exports = [
- "//external:jar/javax/servlet/jsp/jstl/javax_servlet_jsp_jstl_api"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/javax/xml/stream/BUILD b/3rdparty/jvm/javax/xml/stream/BUILD
deleted file mode 100644
index 70a604f..0000000
--- a/3rdparty/jvm/javax/xml/stream/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "stax_api",
- exports = [
- "//external:jar/javax/xml/stream/stax_api"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/jaxen/BUILD b/3rdparty/jvm/jaxen/BUILD
deleted file mode 100644
index 90612a8..0000000
--- a/3rdparty/jvm/jaxen/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "jaxen",
- exports = [
- "//external:jar/jaxen/jaxen"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/jfree/BUILD b/3rdparty/jvm/jfree/BUILD
deleted file mode 100644
index c2530cc..0000000
--- a/3rdparty/jvm/jfree/BUILD
+++ /dev/null
@@ -1,26 +0,0 @@
-java_library(
- name = "jcommon",
- exports = [
- "//external:jar/jfree/jcommon"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "jfreechart",
- exports = [
- "//external:jar/jfree/jfreechart"
- ],
- runtime_deps = [
- ":jcommon"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/jline/BUILD b/3rdparty/jvm/jline/BUILD
deleted file mode 100644
index d85c123..0000000
--- a/3rdparty/jvm/jline/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "jline",
- exports = [
- "//external:jar/jline/jline"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/junit/BUILD b/3rdparty/jvm/junit/BUILD
deleted file mode 100644
index f52df0d..0000000
--- a/3rdparty/jvm/junit/BUILD
+++ /dev/null
@@ -1,14 +0,0 @@
-java_library(
- name = "junit",
- exports = [
- "//external:jar/junit/junit"
- ],
- runtime_deps = [
- "//3rdparty/jvm/org/hamcrest:hamcrest_core"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/net/i2p/crypto/BUILD b/3rdparty/jvm/net/i2p/crypto/BUILD
deleted file mode 100644
index 194aace..0000000
--- a/3rdparty/jvm/net/i2p/crypto/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "eddsa",
- exports = [
- "//external:jar/net/i2p/crypto/eddsa"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/net/java/dev/jna/BUILD b/3rdparty/jvm/net/java/dev/jna/BUILD
deleted file mode 100644
index 65866cc..0000000
--- a/3rdparty/jvm/net/java/dev/jna/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "jna",
- exports = [
- "//external:jar/net/java/dev/jna/jna"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/net/java/sezpoz/BUILD b/3rdparty/jvm/net/java/sezpoz/BUILD
deleted file mode 100644
index f5d2e32..0000000
--- a/3rdparty/jvm/net/java/sezpoz/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "sezpoz",
- exports = [
- "//external:jar/net/java/sezpoz/sezpoz"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/net/sf/ezmorph/BUILD b/3rdparty/jvm/net/sf/ezmorph/BUILD
deleted file mode 100644
index d205e12..0000000
--- a/3rdparty/jvm/net/sf/ezmorph/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "ezmorph",
- exports = [
- "//external:jar/net/sf/ezmorph/ezmorph"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/net/sf/kxml/BUILD b/3rdparty/jvm/net/sf/kxml/BUILD
deleted file mode 100644
index 1bfd035..0000000
--- a/3rdparty/jvm/net/sf/kxml/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "kxml2",
- exports = [
- "//external:jar/net/sf/kxml/kxml2"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/acegisecurity/BUILD b/3rdparty/jvm/org/acegisecurity/BUILD
deleted file mode 100644
index 4cac13d..0000000
--- a/3rdparty/jvm/org/acegisecurity/BUILD
+++ /dev/null
@@ -1,15 +0,0 @@
-java_library(
- name = "acegi_security",
- exports = [
- "//external:jar/org/acegisecurity/acegi_security"
- ],
- runtime_deps = [
- "//3rdparty/jvm/org/springframework:spring_jdbc",
- "//3rdparty/jvm/oro:oro"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/apache/ant/BUILD b/3rdparty/jvm/org/apache/ant/BUILD
deleted file mode 100644
index 828dbc4..0000000
--- a/3rdparty/jvm/org/apache/ant/BUILD
+++ /dev/null
@@ -1,26 +0,0 @@
-java_library(
- name = "ant",
- exports = [
- "//external:jar/org/apache/ant/ant"
- ],
- runtime_deps = [
- ":ant_launcher"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "ant_launcher",
- exports = [
- "//external:jar/org/apache/ant/ant_launcher"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/apache/commons/BUILD b/3rdparty/jvm/org/apache/commons/BUILD
deleted file mode 100644
index 2651080..0000000
--- a/3rdparty/jvm/org/apache/commons/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "commons_compress",
- exports = [
- "//external:jar/org/apache/commons/commons_compress"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/apache/ivy/BUILD b/3rdparty/jvm/org/apache/ivy/BUILD
deleted file mode 100644
index fb331ce..0000000
--- a/3rdparty/jvm/org/apache/ivy/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "ivy",
- exports = [
- "//external:jar/org/apache/ivy/ivy"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/assertj/BUILD b/3rdparty/jvm/org/assertj/BUILD
deleted file mode 100644
index aa74de4..0000000
--- a/3rdparty/jvm/org/assertj/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "assertj_core",
- exports = [
- "//external:jar/org/assertj/assertj_core"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/codehaus/groovy/BUILD b/3rdparty/jvm/org/codehaus/groovy/BUILD
deleted file mode 100644
index b3f1501..0000000
--- a/3rdparty/jvm/org/codehaus/groovy/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "groovy_all",
- exports = [
- "//external:jar/org/codehaus/groovy/groovy_all"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/codehaus/woodstox/BUILD b/3rdparty/jvm/org/codehaus/woodstox/BUILD
deleted file mode 100644
index ec83d04..0000000
--- a/3rdparty/jvm/org/codehaus/woodstox/BUILD
+++ /dev/null
@@ -1,14 +0,0 @@
-java_library(
- name = "wstx_asl",
- exports = [
- "//external:jar/org/codehaus/woodstox/wstx_asl"
- ],
- runtime_deps = [
- "//3rdparty/jvm/stax:stax_api"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/connectbot/jbcrypt/BUILD b/3rdparty/jvm/org/connectbot/jbcrypt/BUILD
deleted file mode 100644
index 1450ab3..0000000
--- a/3rdparty/jvm/org/connectbot/jbcrypt/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "jbcrypt",
- exports = [
- "//external:jar/org/connectbot/jbcrypt/jbcrypt"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/fusesource/jansi/BUILD b/3rdparty/jvm/org/fusesource/jansi/BUILD
deleted file mode 100644
index 5ea1261..0000000
--- a/3rdparty/jvm/org/fusesource/jansi/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "jansi",
- exports = [
- "//external:jar/org/fusesource/jansi/jansi"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/hamcrest/BUILD b/3rdparty/jvm/org/hamcrest/BUILD
deleted file mode 100644
index 23e84f6..0000000
--- a/3rdparty/jvm/org/hamcrest/BUILD
+++ /dev/null
@@ -1,23 +0,0 @@
-java_library(
- name = "hamcrest_all",
- exports = [
- "//external:jar/org/hamcrest/hamcrest_all"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "hamcrest_core",
- exports = [
- "//external:jar/org/hamcrest/hamcrest_core"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jboss/marshalling/BUILD b/3rdparty/jvm/org/jboss/marshalling/BUILD
deleted file mode 100644
index c6e36bc..0000000
--- a/3rdparty/jvm/org/jboss/marshalling/BUILD
+++ /dev/null
@@ -1,26 +0,0 @@
-java_library(
- name = "jboss_marshalling",
- exports = [
- "//external:jar/org/jboss/marshalling/jboss_marshalling"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "jboss_marshalling_river",
- exports = [
- "//external:jar/org/jboss/marshalling/jboss_marshalling_river"
- ],
- runtime_deps = [
- ":jboss_marshalling"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jenkins_ci/BUILD b/3rdparty/jvm/org/jenkins_ci/BUILD
deleted file mode 100644
index dfe7703..0000000
--- a/3rdparty/jvm/org/jenkins_ci/BUILD
+++ /dev/null
@@ -1,153 +0,0 @@
-java_library(
- name = "annotation_indexer",
- exports = [
- "//external:jar/org/jenkins_ci/annotation_indexer"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "bytecode_compatibility_transformer",
- exports = [
- "//external:jar/org/jenkins_ci/bytecode_compatibility_transformer"
- ],
- runtime_deps = [
- "//3rdparty/jvm/org/kohsuke:asm5"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "commons_jelly",
- exports = [
- "//external:jar/org/jenkins_ci/commons_jelly"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "commons_jexl",
- exports = [
- "//external:jar/org/jenkins_ci/commons_jexl"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "constant_pool_scanner",
- exports = [
- "//external:jar/org/jenkins_ci/constant_pool_scanner"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "crypto_util",
- exports = [
- "//external:jar/org/jenkins_ci/crypto_util"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "jmdns",
- exports = [
- "//external:jar/org/jenkins_ci/jmdns"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "memory_monitor",
- exports = [
- "//external:jar/org/jenkins_ci/memory_monitor"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "symbol_annotation",
- exports = [
- "//external:jar/org/jenkins_ci/symbol_annotation"
- ],
- runtime_deps = [
- ":annotation_indexer"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "task_reactor",
- exports = [
- "//external:jar/org/jenkins_ci/task_reactor"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "trilead_ssh2",
- exports = [
- "//external:jar/org/jenkins_ci/trilead_ssh2"
- ],
- runtime_deps = [
- "//3rdparty/jvm/net/i2p/crypto:eddsa",
- "//3rdparty/jvm/org/connectbot/jbcrypt:jbcrypt"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "version_number",
- exports = [
- "//external:jar/org/jenkins_ci/version_number"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jenkins_ci/dom4j/BUILD b/3rdparty/jvm/org/jenkins_ci/dom4j/BUILD
deleted file mode 100644
index 298c9d7..0000000
--- a/3rdparty/jvm/org/jenkins_ci/dom4j/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "dom4j",
- exports = [
- "//external:jar/org/jenkins_ci/dom4j/dom4j"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jenkins_ci/main/BUILD b/3rdparty/jvm/org/jenkins_ci/main/BUILD
deleted file mode 100644
index 5242240..0000000
--- a/3rdparty/jvm/org/jenkins_ci/main/BUILD
+++ /dev/null
@@ -1,113 +0,0 @@
-java_library(
- name = "cli",
- exports = [
- "//external:jar/org/jenkins_ci/main/cli"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "jenkins_core",
- exports = [
- "//external:jar/org/jenkins_ci/main/jenkins_core"
- ],
- runtime_deps = [
- "//3rdparty/jvm/antlr:antlr",
- "//3rdparty/jvm/args4j:args4j",
- "//3rdparty/jvm/com/github/jnr:jnr_posix",
- "//3rdparty/jvm/com/google/guava:guava",
- "//3rdparty/jvm/com/google/inject:guice",
- "//3rdparty/jvm/com/infradna/tool:bridge_method_annotation",
- "//3rdparty/jvm/com/jcraft:jzlib",
- "//3rdparty/jvm/com/sun/solaris:embedded_su4j",
- "//3rdparty/jvm/com/sun/xml/txw2:txw2",
- "//3rdparty/jvm/commons_beanutils:commons_beanutils",
- "//3rdparty/jvm/commons_codec:commons_codec",
- "//3rdparty/jvm/commons_collections:commons_collections",
- "//3rdparty/jvm/commons_digester:commons_digester",
- "//3rdparty/jvm/commons_fileupload:commons_fileupload",
- "//3rdparty/jvm/commons_httpclient:commons_httpclient",
- "//3rdparty/jvm/commons_io:commons_io",
- "//3rdparty/jvm/commons_jelly:commons_jelly_tags_fmt",
- "//3rdparty/jvm/commons_jelly:commons_jelly_tags_xml",
- "//3rdparty/jvm/commons_lang:commons_lang",
- "//3rdparty/jvm/javax/mail:mail",
- "//3rdparty/jvm/javax/servlet/jsp/jstl:javax_servlet_jsp_jstl_api",
- "//3rdparty/jvm/jaxen:jaxen",
- "//3rdparty/jvm/jfree:jfreechart",
- "//3rdparty/jvm/jline:jline",
- "//3rdparty/jvm/net/java/dev/jna:jna",
- "//3rdparty/jvm/net/java/sezpoz:sezpoz",
- "//3rdparty/jvm/net/sf/kxml:kxml2",
- "//3rdparty/jvm/org/acegisecurity:acegi_security",
- "//3rdparty/jvm/org/apache/ant:ant",
- "//3rdparty/jvm/org/apache/commons:commons_compress",
- "//3rdparty/jvm/org/codehaus/groovy:groovy_all",
- "//3rdparty/jvm/org/codehaus/woodstox:wstx_asl",
- "//3rdparty/jvm/org/fusesource/jansi:jansi",
- "//3rdparty/jvm/org/jenkins_ci/plugins/icon_shim:icon_set",
- "//3rdparty/jvm/org/jenkins_ci:annotation_indexer",
- "//3rdparty/jvm/org/jenkins_ci:bytecode_compatibility_transformer",
- "//3rdparty/jvm/org/jenkins_ci:commons_jexl",
- "//3rdparty/jvm/org/jenkins_ci:crypto_util",
- "//3rdparty/jvm/org/jenkins_ci:jmdns",
- "//3rdparty/jvm/org/jenkins_ci:memory_monitor",
- "//3rdparty/jvm/org/jenkins_ci:symbol_annotation",
- "//3rdparty/jvm/org/jenkins_ci:task_reactor",
- "//3rdparty/jvm/org/jenkins_ci:trilead_ssh2",
- "//3rdparty/jvm/org/jenkins_ci:version_number",
- "//3rdparty/jvm/org/jruby/ext/posix:jna_posix",
- "//3rdparty/jvm/org/jvnet/hudson:activation",
- "//3rdparty/jvm/org/jvnet/hudson:commons_jelly_tags_define",
- "//3rdparty/jvm/org/jvnet/hudson:jtidy",
- "//3rdparty/jvm/org/jvnet/hudson:xstream",
- "//3rdparty/jvm/org/jvnet/localizer:localizer",
- "//3rdparty/jvm/org/jvnet/robust_http_client:robust_http_client",
- "//3rdparty/jvm/org/jvnet/winp:winp",
- "//3rdparty/jvm/org/kohsuke/jinterop:j_interop",
- "//3rdparty/jvm/org/kohsuke/stapler:json_lib",
- "//3rdparty/jvm/org/kohsuke/stapler:stapler_adjunct_codemirror",
- "//3rdparty/jvm/org/kohsuke/stapler:stapler_adjunct_timeline",
- "//3rdparty/jvm/org/kohsuke/stapler:stapler_adjunct_zeroclipboard",
- "//3rdparty/jvm/org/kohsuke/stapler:stapler_groovy",
- "//3rdparty/jvm/org/kohsuke/stapler:stapler_jrebel",
- "//3rdparty/jvm/org/kohsuke:access_modifier_annotation",
- "//3rdparty/jvm/org/kohsuke:akuma",
- "//3rdparty/jvm/org/kohsuke:libpam4j",
- "//3rdparty/jvm/org/kohsuke:libzfs",
- "//3rdparty/jvm/org/kohsuke:trilead_putty_extension",
- "//3rdparty/jvm/org/kohsuke:windows_package_checker",
- "//3rdparty/jvm/org/slf4j:jcl_over_slf4j",
- "//3rdparty/jvm/org/slf4j:log4j_over_slf4j",
- "//3rdparty/jvm/org/springframework:spring_aop",
- "//3rdparty/jvm/org/springframework:spring_core",
- "//3rdparty/jvm/org/springframework:spring_webmvc",
- "//3rdparty/jvm/xpp3:xpp3",
- ":cli",
- ":remoting"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "remoting",
- exports = [
- "//external:jar/org/jenkins_ci/main/remoting"
- ],
- runtime_deps = [
- "//3rdparty/jvm/org/jenkins_ci:constant_pool_scanner"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jenkins_ci/plugins/BUILD b/3rdparty/jvm/org/jenkins_ci/plugins/BUILD
deleted file mode 100644
index 0ca47b9..0000000
--- a/3rdparty/jvm/org/jenkins_ci/plugins/BUILD
+++ /dev/null
@@ -1,41 +0,0 @@
-java_library(
- name = "scm_api",
- exports = [
- "//external:jar/org/jenkins_ci/plugins/scm_api"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "script_security",
- exports = [
- "//external:jar/org/jenkins_ci/plugins/script_security"
- ],
- runtime_deps = [
- "//3rdparty/jvm/org/kohsuke:groovy_sandbox"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "structs",
- exports = [
- "//external:jar/org/jenkins_ci/plugins/structs"
- ],
- runtime_deps = [
- "//3rdparty/jvm/org/jenkins_ci:symbol_annotation"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jenkins_ci/plugins/icon_shim/BUILD b/3rdparty/jvm/org/jenkins_ci/plugins/icon_shim/BUILD
deleted file mode 100644
index 32509d1..0000000
--- a/3rdparty/jvm/org/jenkins_ci/plugins/icon_shim/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "icon_set",
- exports = [
- "//external:jar/org/jenkins_ci/plugins/icon_shim/icon_set"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jenkins_ci/plugins/workflow/BUILD b/3rdparty/jvm/org/jenkins_ci/plugins/workflow/BUILD
deleted file mode 100644
index e7fc757..0000000
--- a/3rdparty/jvm/org/jenkins_ci/plugins/workflow/BUILD
+++ /dev/null
@@ -1,45 +0,0 @@
-java_library(
- name = "workflow_api",
- exports = [
- "//external:jar/org/jenkins_ci/plugins/workflow/workflow_api"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "workflow_step_api",
- exports = [
- "//external:jar/org/jenkins_ci/plugins/workflow/workflow_step_api"
- ],
- runtime_deps = [
- "//3rdparty/jvm/org/jenkins_ci/plugins:structs"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "workflow_support",
- exports = [
- "//external:jar/org/jenkins_ci/plugins/workflow/workflow_support"
- ],
- runtime_deps = [
- "//3rdparty/jvm/org/jboss/marshalling:jboss_marshalling_river",
- "//3rdparty/jvm/org/jenkins_ci/plugins:scm_api",
- "//3rdparty/jvm/org/jenkins_ci/plugins:script_security",
- ":workflow_api",
- ":workflow_step_api"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jruby/ext/posix/BUILD b/3rdparty/jvm/org/jruby/ext/posix/BUILD
deleted file mode 100644
index be75afd..0000000
--- a/3rdparty/jvm/org/jruby/ext/posix/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "jna_posix",
- exports = [
- "//external:jar/org/jruby/ext/posix/jna_posix"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jvnet/BUILD b/3rdparty/jvm/org/jvnet/BUILD
deleted file mode 100644
index a3bc8e3..0000000
--- a/3rdparty/jvm/org/jvnet/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "tiger_types",
- exports = [
- "//external:jar/org/jvnet/tiger_types"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jvnet/hudson/BUILD b/3rdparty/jvm/org/jvnet/hudson/BUILD
deleted file mode 100644
index 6dcf0aa..0000000
--- a/3rdparty/jvm/org/jvnet/hudson/BUILD
+++ /dev/null
@@ -1,47 +0,0 @@
-java_library(
- name = "activation",
- exports = [
- "//external:jar/org/jvnet/hudson/activation"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "commons_jelly_tags_define",
- exports = [
- "//external:jar/org/jvnet/hudson/commons_jelly_tags_define"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "jtidy",
- exports = [
- "//external:jar/org/jvnet/hudson/jtidy"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "xstream",
- exports = [
- "//external:jar/org/jvnet/hudson/xstream"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jvnet/localizer/BUILD b/3rdparty/jvm/org/jvnet/localizer/BUILD
deleted file mode 100644
index c9bc539..0000000
--- a/3rdparty/jvm/org/jvnet/localizer/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "localizer",
- exports = [
- "//external:jar/org/jvnet/localizer/localizer"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jvnet/robust_http_client/BUILD b/3rdparty/jvm/org/jvnet/robust_http_client/BUILD
deleted file mode 100644
index 0272291..0000000
--- a/3rdparty/jvm/org/jvnet/robust_http_client/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "robust_http_client",
- exports = [
- "//external:jar/org/jvnet/robust_http_client/robust_http_client"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/jvnet/winp/BUILD b/3rdparty/jvm/org/jvnet/winp/BUILD
deleted file mode 100644
index 717525e..0000000
--- a/3rdparty/jvm/org/jvnet/winp/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "winp",
- exports = [
- "//external:jar/org/jvnet/winp/winp"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/kohsuke/BUILD b/3rdparty/jvm/org/kohsuke/BUILD
deleted file mode 100644
index 2567be8..0000000
--- a/3rdparty/jvm/org/kohsuke/BUILD
+++ /dev/null
@@ -1,95 +0,0 @@
-java_library(
- name = "access_modifier_annotation",
- exports = [
- "//external:jar/org/kohsuke/access_modifier_annotation"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "akuma",
- exports = [
- "//external:jar/org/kohsuke/akuma"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "asm5",
- exports = [
- "//external:jar/org/kohsuke/asm5"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "groovy_sandbox",
- exports = [
- "//external:jar/org/kohsuke/groovy_sandbox"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "libpam4j",
- exports = [
- "//external:jar/org/kohsuke/libpam4j"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "libzfs",
- exports = [
- "//external:jar/org/kohsuke/libzfs"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "trilead_putty_extension",
- exports = [
- "//external:jar/org/kohsuke/trilead_putty_extension"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "windows_package_checker",
- exports = [
- "//external:jar/org/kohsuke/windows_package_checker"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/kohsuke/jinterop/BUILD b/3rdparty/jvm/org/kohsuke/jinterop/BUILD
deleted file mode 100644
index c1bf531..0000000
--- a/3rdparty/jvm/org/kohsuke/jinterop/BUILD
+++ /dev/null
@@ -1,29 +0,0 @@
-java_library(
- name = "j_interop",
- exports = [
- "//external:jar/org/kohsuke/jinterop/j_interop"
- ],
- runtime_deps = [
- ":j_interopdeps"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "j_interopdeps",
- exports = [
- "//external:jar/org/kohsuke/jinterop/j_interopdeps"
- ],
- runtime_deps = [
- "//3rdparty/jvm/org/samba/jcifs:jcifs"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/kohsuke/stapler/BUILD b/3rdparty/jvm/org/kohsuke/stapler/BUILD
deleted file mode 100644
index 2ff079d..0000000
--- a/3rdparty/jvm/org/kohsuke/stapler/BUILD
+++ /dev/null
@@ -1,114 +0,0 @@
-java_library(
- name = "json_lib",
- exports = [
- "//external:jar/org/kohsuke/stapler/json_lib"
- ],
- runtime_deps = [
- "//3rdparty/jvm/net/sf/ezmorph:ezmorph"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "stapler",
- exports = [
- "//external:jar/org/kohsuke/stapler/stapler"
- ],
- runtime_deps = [
- "//3rdparty/jvm/com/google/code/findbugs:jsr305",
- "//3rdparty/jvm/commons_discovery:commons_discovery",
- "//3rdparty/jvm/javax/annotation:javax_annotation_api",
- "//3rdparty/jvm/org/jvnet:tiger_types"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "stapler_adjunct_codemirror",
- exports = [
- "//external:jar/org/kohsuke/stapler/stapler_adjunct_codemirror"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "stapler_adjunct_timeline",
- exports = [
- "//external:jar/org/kohsuke/stapler/stapler_adjunct_timeline"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "stapler_adjunct_zeroclipboard",
- exports = [
- "//external:jar/org/kohsuke/stapler/stapler_adjunct_zeroclipboard"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "stapler_groovy",
- exports = [
- "//external:jar/org/kohsuke/stapler/stapler_groovy"
- ],
- runtime_deps = [
- ":stapler_jelly"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "stapler_jelly",
- exports = [
- "//external:jar/org/kohsuke/stapler/stapler_jelly"
- ],
- runtime_deps = [
- "//3rdparty/jvm/org/jenkins_ci/dom4j:dom4j",
- "//3rdparty/jvm/org/jenkins_ci:commons_jelly"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "stapler_jrebel",
- exports = [
- "//external:jar/org/kohsuke/stapler/stapler_jrebel"
- ],
- runtime_deps = [
- ":stapler"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/ow2/asm/BUILD b/3rdparty/jvm/org/ow2/asm/BUILD
deleted file mode 100644
index 80c996d..0000000
--- a/3rdparty/jvm/org/ow2/asm/BUILD
+++ /dev/null
@@ -1,59 +0,0 @@
-java_library(
- name = "asm",
- exports = [
- "//external:jar/org/ow2/asm/asm"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "asm_analysis",
- exports = [
- "//external:jar/org/ow2/asm/asm_analysis"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "asm_commons",
- exports = [
- "//external:jar/org/ow2/asm/asm_commons"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "asm_tree",
- exports = [
- "//external:jar/org/ow2/asm/asm_tree"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "asm_util",
- exports = [
- "//external:jar/org/ow2/asm/asm_util"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/samba/jcifs/BUILD b/3rdparty/jvm/org/samba/jcifs/BUILD
deleted file mode 100644
index d1a03bb..0000000
--- a/3rdparty/jvm/org/samba/jcifs/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "jcifs",
- exports = [
- "//external:jar/org/samba/jcifs/jcifs"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/slf4j/BUILD b/3rdparty/jvm/org/slf4j/BUILD
deleted file mode 100644
index e520ae3..0000000
--- a/3rdparty/jvm/org/slf4j/BUILD
+++ /dev/null
@@ -1,38 +0,0 @@
-java_library(
- name = "jcl_over_slf4j",
- exports = [
- "//external:jar/org/slf4j/jcl_over_slf4j"
- ],
- runtime_deps = [
- ":slf4j_api"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "log4j_over_slf4j",
- exports = [
- "//external:jar/org/slf4j/log4j_over_slf4j"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "slf4j_api",
- exports = [
- "//external:jar/org/slf4j/slf4j_api"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/org/springframework/BUILD b/3rdparty/jvm/org/springframework/BUILD
deleted file mode 100644
index 2f0b65f..0000000
--- a/3rdparty/jvm/org/springframework/BUILD
+++ /dev/null
@@ -1,116 +0,0 @@
-java_library(
- name = "spring_aop",
- exports = [
- "//external:jar/org/springframework/spring_aop"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "spring_beans",
- exports = [
- "//external:jar/org/springframework/spring_beans"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "spring_context",
- exports = [
- "//external:jar/org/springframework/spring_context"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "spring_context_support",
- exports = [
- "//external:jar/org/springframework/spring_context_support"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "spring_core",
- exports = [
- "//external:jar/org/springframework/spring_core"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "spring_dao",
- exports = [
- "//external:jar/org/springframework/spring_dao"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "spring_jdbc",
- exports = [
- "//external:jar/org/springframework/spring_jdbc"
- ],
- runtime_deps = [
- ":spring_dao"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "spring_web",
- exports = [
- "//external:jar/org/springframework/spring_web"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
-
-java_library(
- name = "spring_webmvc",
- exports = [
- "//external:jar/org/springframework/spring_webmvc"
- ],
- runtime_deps = [
- ":spring_beans",
- ":spring_context",
- ":spring_context_support",
- ":spring_web"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/oro/BUILD b/3rdparty/jvm/oro/BUILD
deleted file mode 100644
index c92cce4..0000000
--- a/3rdparty/jvm/oro/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "oro",
- exports = [
- "//external:jar/oro/oro"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/relaxngDatatype/BUILD b/3rdparty/jvm/relaxngDatatype/BUILD
deleted file mode 100644
index 1871f43..0000000
--- a/3rdparty/jvm/relaxngDatatype/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "relaxngDatatype",
- exports = [
- "//external:jar/relaxngDatatype/relaxngDatatype"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/stax/BUILD b/3rdparty/jvm/stax/BUILD
deleted file mode 100644
index 4a3a64f..0000000
--- a/3rdparty/jvm/stax/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "stax_api",
- exports = [
- "//external:jar/stax/stax_api"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/jvm/xpp3/BUILD b/3rdparty/jvm/xpp3/BUILD
deleted file mode 100644
index 3c6437d..0000000
--- a/3rdparty/jvm/xpp3/BUILD
+++ /dev/null
@@ -1,11 +0,0 @@
-java_library(
- name = "xpp3",
- exports = [
- "//external:jar/xpp3/xpp3"
- ],
- visibility = [
- "//visibility:public"
- ]
-)
-
-
diff --git a/3rdparty/workspace.bzl b/3rdparty/workspace.bzl
deleted file mode 100644
index 7c04739..0000000
--- a/3rdparty/workspace.bzl
+++ /dev/null
@@ -1,157 +0,0 @@
-def declare_maven(hash):
- native.maven_jar(
- name = hash["name"],
- artifact = hash["artifact"],
- sha1 = hash["sha1"],
- repository = hash["repository"]
- )
- native.bind(
- name = hash["bind"],
- actual = hash["actual"]
- )
-
-def maven_dependencies(callback = declare_maven):
- callback({"artifact": "antlr:antlr:2.7.6", "lang": "java", "sha1": "cf4f67dae5df4f9932ae7810f4548ef3e14dd35e", "repository": "https://repo.maven.apache.org/maven2/", "name": "antlr_antlr", "actual": "@antlr_antlr//jar", "bind": "jar/antlr/antlr"})
- callback({"artifact": "aopalliance:aopalliance:1.0", "lang": "java", "sha1": "0235ba8b489512805ac13a8f9ea77a1ca5ebe3e8", "repository": "https://repo.maven.apache.org/maven2/", "name": "aopalliance_aopalliance", "actual": "@aopalliance_aopalliance//jar", "bind": "jar/aopalliance/aopalliance"})
- callback({"artifact": "args4j:args4j:2.0.31", "lang": "java", "sha1": "6b870d81551ce93c5c776c3046299db8ad6c39d2", "repository": "https://repo.maven.apache.org/maven2/", "name": "args4j_args4j", "actual": "@args4j_args4j//jar", "bind": "jar/args4j/args4j"})
- callback({"artifact": "com.cloudbees:groovy-cps:1.12", "lang": "java", "sha1": "d766273a59e0b954c016e805779106bca22764b9", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_cloudbees_groovy_cps", "actual": "@com_cloudbees_groovy_cps//jar", "bind": "jar/com/cloudbees/groovy_cps"})
- callback({"artifact": "com.github.jnr:jffi:1.2.15", "lang": "java", "sha1": "f480f0234dd8f053da2421e60574cfbd9d85e1f5", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_github_jnr_jffi", "actual": "@com_github_jnr_jffi//jar", "bind": "jar/com/github/jnr/jffi"})
- callback({"artifact": "com.github.jnr:jnr-constants:0.9.8", "lang": "java", "sha1": "478036404879bd582be79e9a7939f3a161601c8b", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_github_jnr_jnr_constants", "actual": "@com_github_jnr_jnr_constants//jar", "bind": "jar/com/github/jnr/jnr_constants"})
- callback({"artifact": "com.github.jnr:jnr-ffi:2.1.4", "lang": "java", "sha1": "0a63bbd4af5cee55d820ef40dc5347d45765b788", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_github_jnr_jnr_ffi", "actual": "@com_github_jnr_jnr_ffi//jar", "bind": "jar/com/github/jnr/jnr_ffi"})
- callback({"artifact": "com.github.jnr:jnr-posix:3.0.41", "lang": "java", "sha1": "36eff018149e53ed814a340ddb7de73ceb66bf96", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_github_jnr_jnr_posix", "actual": "@com_github_jnr_jnr_posix//jar", "bind": "jar/com/github/jnr/jnr_posix"})
- callback({"artifact": "com.github.jnr:jnr-x86asm:1.0.2", "lang": "java", "sha1": "006936bbd6c5b235665d87bd450f5e13b52d4b48", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_github_jnr_jnr_x86asm", "actual": "@com_github_jnr_jnr_x86asm//jar", "bind": "jar/com/github/jnr/jnr_x86asm"})
-# duplicates in com.google.code.findbugs:jsr305 promoted to 2.0.1
-# - org.kohsuke.stapler:stapler:1.254 wanted version 2.0.1
-# - com.google.guava:guava:11.0.1 wanted version 1.3.9
- callback({"artifact": "com.google.code.findbugs:jsr305:2.0.1", "lang": "java", "sha1": "516c03b21d50a644d538de0f0369c620989cd8f0", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_google_code_findbugs_jsr305", "actual": "@com_google_code_findbugs_jsr305//jar", "bind": "jar/com/google/code/findbugs/jsr305"})
- callback({"artifact": "com.google.guava:guava:11.0.1", "lang": "java", "sha1": "57b40a943725d43610c898ac0169adf1b2d55742", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_google_guava_guava", "actual": "@com_google_guava_guava//jar", "bind": "jar/com/google/guava/guava"})
- callback({"artifact": "com.google.inject:guice:4.0", "lang": "java", "sha1": "0f990a43d3725781b6db7cd0acf0a8b62dfd1649", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_google_inject_guice", "actual": "@com_google_inject_guice//jar", "bind": "jar/com/google/inject/guice"})
- callback({"artifact": "com.infradna.tool:bridge-method-annotation:1.13", "lang": "java", "sha1": "18cdce50cde6f54ee5390d0907384f72183ff0fe", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_infradna_tool_bridge_method_annotation", "actual": "@com_infradna_tool_bridge_method_annotation//jar", "bind": "jar/com/infradna/tool/bridge_method_annotation"})
- callback({"artifact": "com.jcraft:jzlib:1.1.3-kohsuke-1", "lang": "java", "sha1": "af5d27e1de29df05db95da5d76b546d075bc1bc5", "repository": "http://repo.jenkins-ci.org/public/", "name": "com_jcraft_jzlib", "actual": "@com_jcraft_jzlib//jar", "bind": "jar/com/jcraft/jzlib"})
- callback({"artifact": "com.lesfurets:jenkins-pipeline-unit:1.1", "lang": "java", "sha1": "afb0fd02143e5d5127ff6187b4403a3cf0b890a0", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_lesfurets_jenkins_pipeline_unit", "actual": "@com_lesfurets_jenkins_pipeline_unit//jar", "bind": "jar/com/lesfurets/jenkins_pipeline_unit"})
- callback({"artifact": "com.sun.solaris:embedded_su4j:1.1", "lang": "java", "sha1": "9404130cc4e60670429f1ab8dbf94d669012725d", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_sun_solaris_embedded_su4j", "actual": "@com_sun_solaris_embedded_su4j//jar", "bind": "jar/com/sun/solaris/embedded_su4j"})
- callback({"artifact": "com.sun.xml.txw2:txw2:20110809", "lang": "java", "sha1": "46afa3f3c468680875adb8f2a26086a126c89902", "repository": "https://repo.maven.apache.org/maven2/", "name": "com_sun_xml_txw2_txw2", "actual": "@com_sun_xml_txw2_txw2//jar", "bind": "jar/com/sun/xml/txw2/txw2"})
- callback({"artifact": "commons-beanutils:commons-beanutils:1.8.3", "lang": "java", "sha1": "686ef3410bcf4ab8ce7fd0b899e832aaba5facf7", "repository": "https://repo.maven.apache.org/maven2/", "name": "commons_beanutils_commons_beanutils", "actual": "@commons_beanutils_commons_beanutils//jar", "bind": "jar/commons_beanutils/commons_beanutils"})
- callback({"artifact": "commons-codec:commons-codec:1.9", "lang": "java", "sha1": "9ce04e34240f674bc72680f8b843b1457383161a", "repository": "https://repo.maven.apache.org/maven2/", "name": "commons_codec_commons_codec", "actual": "@commons_codec_commons_codec//jar", "bind": "jar/commons_codec/commons_codec"})
- callback({"artifact": "commons-collections:commons-collections:3.2.2", "lang": "java", "sha1": "8ad72fe39fa8c91eaaf12aadb21e0c3661fe26d5", "repository": "https://repo.maven.apache.org/maven2/", "name": "commons_collections_commons_collections", "actual": "@commons_collections_commons_collections//jar", "bind": "jar/commons_collections/commons_collections"})
- callback({"artifact": "commons-digester:commons-digester:2.1", "lang": "java", "sha1": "73a8001e7a54a255eef0f03521ec1805dc738ca0", "repository": "https://repo.maven.apache.org/maven2/", "name": "commons_digester_commons_digester", "actual": "@commons_digester_commons_digester//jar", "bind": "jar/commons_digester/commons_digester"})
- callback({"artifact": "commons-discovery:commons-discovery:0.4", "lang": "java", "sha1": "9e3417d3866d9f71e83b959b229b35dc723c7bea", "repository": "https://repo.maven.apache.org/maven2/", "name": "commons_discovery_commons_discovery", "actual": "@commons_discovery_commons_discovery//jar", "bind": "jar/commons_discovery/commons_discovery"})
- callback({"artifact": "commons-fileupload:commons-fileupload:1.3.1-jenkins-2", "lang": "java", "sha1": "297d1dc0a3cbdd3e125f4d506c2b73a105e6cd30", "repository": "http://repo.jenkins-ci.org/public/", "name": "commons_fileupload_commons_fileupload", "actual": "@commons_fileupload_commons_fileupload//jar", "bind": "jar/commons_fileupload/commons_fileupload"})
- callback({"artifact": "commons-httpclient:commons-httpclient:3.1-jenkins-1", "lang": "java", "sha1": "a75a5917272ea09a24e6a4d9fc0b88a382341d22", "repository": "http://repo.jenkins-ci.org/public/", "name": "commons_httpclient_commons_httpclient", "actual": "@commons_httpclient_commons_httpclient//jar", "bind": "jar/commons_httpclient/commons_httpclient"})
-# duplicates in commons-io:commons-io promoted to 2.5
-# - org.jenkins-ci.main:jenkins-core:2.105 wanted version 2.4
-# - com.lesfurets:jenkins-pipeline-unit:1.1 wanted version 2.5
- callback({"artifact": "commons-io:commons-io:2.5", "lang": "java", "sha1": "2852e6e05fbb95076fc091f6d1780f1f8fe35e0f", "repository": "https://repo.maven.apache.org/maven2/", "name": "commons_io_commons_io", "actual": "@commons_io_commons_io//jar", "bind": "jar/commons_io/commons_io"})
- callback({"artifact": "commons-jelly:commons-jelly-tags-fmt:1.0", "lang": "java", "sha1": "2107da38fdd287ab78a4fa65c1300b5ad9999274", "repository": "https://repo.maven.apache.org/maven2/", "name": "commons_jelly_commons_jelly_tags_fmt", "actual": "@commons_jelly_commons_jelly_tags_fmt//jar", "bind": "jar/commons_jelly/commons_jelly_tags_fmt"})
- callback({"artifact": "commons-jelly:commons-jelly-tags-xml:1.1", "lang": "java", "sha1": "cc0efc2ae0ff81ef7737afc786a0ce16a8540efc", "repository": "https://repo.maven.apache.org/maven2/", "name": "commons_jelly_commons_jelly_tags_xml", "actual": "@commons_jelly_commons_jelly_tags_xml//jar", "bind": "jar/commons_jelly/commons_jelly_tags_xml"})
- callback({"artifact": "commons-lang:commons-lang:2.6", "lang": "java", "sha1": "0ce1edb914c94ebc388f086c6827e8bdeec71ac2", "repository": "https://repo.maven.apache.org/maven2/", "name": "commons_lang_commons_lang", "actual": "@commons_lang_commons_lang//jar", "bind": "jar/commons_lang/commons_lang"})
- callback({"artifact": "javax.annotation:javax.annotation-api:1.2", "lang": "java", "sha1": "479c1e06db31c432330183f5cae684163f186146", "repository": "https://repo.maven.apache.org/maven2/", "name": "javax_annotation_javax_annotation_api", "actual": "@javax_annotation_javax_annotation_api//jar", "bind": "jar/javax/annotation/javax_annotation_api"})
- callback({"artifact": "javax.inject:javax.inject:1", "lang": "java", "sha1": "6975da39a7040257bd51d21a231b76c915872d38", "repository": "https://repo.maven.apache.org/maven2/", "name": "javax_inject_javax_inject", "actual": "@javax_inject_javax_inject//jar", "bind": "jar/javax/inject/javax_inject"})
- callback({"artifact": "javax.mail:mail:1.4.4", "lang": "java", "sha1": "b907ef0a02ff6e809392b1e7149198497fcc8e49", "repository": "https://repo.maven.apache.org/maven2/", "name": "javax_mail_mail", "actual": "@javax_mail_mail//jar", "bind": "jar/javax/mail/mail"})
- callback({"artifact": "javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1", "lang": "java", "sha1": "f072f63ab1689e885ac40c221df3e6bb3e64a84a", "repository": "https://repo.maven.apache.org/maven2/", "name": "javax_servlet_jsp_jstl_javax_servlet_jsp_jstl_api", "actual": "@javax_servlet_jsp_jstl_javax_servlet_jsp_jstl_api//jar", "bind": "jar/javax/servlet/jsp/jstl/javax_servlet_jsp_jstl_api"})
- callback({"artifact": "javax.xml.stream:stax-api:1.0-2", "lang": "java", "sha1": "d6337b0de8b25e53e81b922352fbea9f9f57ba0b", "repository": "https://repo.maven.apache.org/maven2/", "name": "javax_xml_stream_stax_api", "actual": "@javax_xml_stream_stax_api//jar", "bind": "jar/javax/xml/stream/stax_api"})
- callback({"artifact": "jaxen:jaxen:1.1-beta-11", "lang": "java", "sha1": "81e32b8bafcc778e5deea4e784670299f1c26b96", "repository": "https://repo.maven.apache.org/maven2/", "name": "jaxen_jaxen", "actual": "@jaxen_jaxen//jar", "bind": "jar/jaxen/jaxen"})
- callback({"artifact": "jfree:jcommon:1.0.12", "lang": "java", "sha1": "737f02607d2f45bb1a589a85c63b4cd907e5e634", "repository": "https://repo.maven.apache.org/maven2/", "name": "jfree_jcommon", "actual": "@jfree_jcommon//jar", "bind": "jar/jfree/jcommon"})
- callback({"artifact": "jfree:jfreechart:1.0.9", "lang": "java", "sha1": "6e522aa603bf7ac69da59edcf519b335490e93a6", "repository": "https://repo.maven.apache.org/maven2/", "name": "jfree_jfreechart", "actual": "@jfree_jfreechart//jar", "bind": "jar/jfree/jfreechart"})
- callback({"artifact": "jline:jline:2.12", "lang": "java", "sha1": "ce9062c6a125e0f9ad766032573c041ae8ecc986", "repository": "https://repo.maven.apache.org/maven2/", "name": "jline_jline", "actual": "@jline_jline//jar", "bind": "jar/jline/jline"})
- callback({"artifact": "junit:junit:4.12", "lang": "java", "sha1": "2973d150c0dc1fefe998f834810d68f278ea58ec", "repository": "https://repo.maven.apache.org/maven2/", "name": "junit_junit", "actual": "@junit_junit//jar", "bind": "jar/junit/junit"})
- callback({"artifact": "net.i2p.crypto:eddsa:0.2.0", "lang": "java", "sha1": "0856a92559c4daf744cb27c93cd8b7eb1f8c4780", "repository": "https://repo.maven.apache.org/maven2/", "name": "net_i2p_crypto_eddsa", "actual": "@net_i2p_crypto_eddsa//jar", "bind": "jar/net/i2p/crypto/eddsa"})
- callback({"artifact": "net.java.dev.jna:jna:4.2.1", "lang": "java", "sha1": "fcc5b10cb812c41b00708e7b57baccc3aee5567c", "repository": "https://repo.maven.apache.org/maven2/", "name": "net_java_dev_jna_jna", "actual": "@net_java_dev_jna_jna//jar", "bind": "jar/net/java/dev/jna/jna"})
- callback({"artifact": "net.java.sezpoz:sezpoz:1.12", "lang": "java", "sha1": "01f7e4a04e06fdbc91d66ddf80c443c3f7c6503c", "repository": "https://repo.maven.apache.org/maven2/", "name": "net_java_sezpoz_sezpoz", "actual": "@net_java_sezpoz_sezpoz//jar", "bind": "jar/net/java/sezpoz/sezpoz"})
- callback({"artifact": "net.sf.ezmorph:ezmorph:1.0.6", "lang": "java", "sha1": "01e55d2a0253ea37745d33062852fd2c90027432", "repository": "https://repo.maven.apache.org/maven2/", "name": "net_sf_ezmorph_ezmorph", "actual": "@net_sf_ezmorph_ezmorph//jar", "bind": "jar/net/sf/ezmorph/ezmorph"})
- callback({"artifact": "net.sf.kxml:kxml2:2.3.0", "lang": "java", "sha1": "ccbc77a5fd907ef863c29f3596c6f54ffa4e9442", "repository": "https://repo.maven.apache.org/maven2/", "name": "net_sf_kxml_kxml2", "actual": "@net_sf_kxml_kxml2//jar", "bind": "jar/net/sf/kxml/kxml2"})
- callback({"artifact": "org.acegisecurity:acegi-security:1.0.7", "lang": "java", "sha1": "72901120d299e0c6ed2f6a23dd37f9186eeb8cc3", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_acegisecurity_acegi_security", "actual": "@org_acegisecurity_acegi_security//jar", "bind": "jar/org/acegisecurity/acegi_security"})
- callback({"artifact": "org.apache.ant:ant-launcher:1.9.2", "lang": "java", "sha1": "4f20f0651dd207caf04351192d59936e71da895b", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_apache_ant_ant_launcher", "actual": "@org_apache_ant_ant_launcher//jar", "bind": "jar/org/apache/ant/ant_launcher"})
- callback({"artifact": "org.apache.ant:ant:1.9.2", "lang": "java", "sha1": "112cf195dec0bd2b7967b5711b88c880b6640d86", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_apache_ant_ant", "actual": "@org_apache_ant_ant//jar", "bind": "jar/org/apache/ant/ant"})
- callback({"artifact": "org.apache.commons:commons-compress:1.10", "lang": "java", "sha1": "5eeb27c57eece1faf2d837868aeccc94d84dcc9a", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_apache_commons_commons_compress", "actual": "@org_apache_commons_commons_compress//jar", "bind": "jar/org/apache/commons/commons_compress"})
- callback({"artifact": "org.apache.ivy:ivy:2.4.0", "lang": "java", "sha1": "5abe4c24bbe992a9ac07ca563d5bd3e8d569e9ed", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_apache_ivy_ivy", "actual": "@org_apache_ivy_ivy//jar", "bind": "jar/org/apache/ivy/ivy"})
- callback({"artifact": "org.assertj:assertj-core:3.4.1", "lang": "java", "sha1": "536893abdf1ce11f72c1e4483a88e94d6ba80005", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_assertj_assertj_core", "actual": "@org_assertj_assertj_core//jar", "bind": "jar/org/assertj/assertj_core"})
-# duplicates in org.codehaus.groovy:groovy-all fixed to 2.4.13
-# - com.lesfurets:jenkins-pipeline-unit:1.1 wanted version 2.4.6
-# - org.jenkins-ci.main:jenkins-core:2.105 wanted version 2.4.11
- callback({"artifact": "org.codehaus.groovy:groovy-all:2.4.13", "lang": "java", "sha1": "7e410735a50e495323dd4855ddd13ea7dad23ac1", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_codehaus_groovy_groovy_all", "actual": "@org_codehaus_groovy_groovy_all//jar", "bind": "jar/org/codehaus/groovy/groovy_all"})
- callback({"artifact": "org.codehaus.woodstox:wstx-asl:3.2.9", "lang": "java", "sha1": "c82b6e8f225bb799540e558b10ee24d268035597", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_codehaus_woodstox_wstx_asl", "actual": "@org_codehaus_woodstox_wstx_asl//jar", "bind": "jar/org/codehaus/woodstox/wstx_asl"})
- callback({"artifact": "org.connectbot.jbcrypt:jbcrypt:1.0.0", "lang": "java", "sha1": "f37bba2b8b78fcc8111bb932318b621dcc6c5194", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_connectbot_jbcrypt_jbcrypt", "actual": "@org_connectbot_jbcrypt_jbcrypt//jar", "bind": "jar/org/connectbot/jbcrypt/jbcrypt"})
- callback({"artifact": "org.fusesource.jansi:jansi:1.11", "lang": "java", "sha1": "655c643309c2f45a56a747fda70e3fadf57e9f11", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_fusesource_jansi_jansi", "actual": "@org_fusesource_jansi_jansi//jar", "bind": "jar/org/fusesource/jansi/jansi"})
- callback({"artifact": "org.hamcrest:hamcrest-all:1.3", "lang": "java", "sha1": "63a21ebc981131004ad02e0434e799fd7f3a8d5a", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_hamcrest_hamcrest_all", "actual": "@org_hamcrest_hamcrest_all//jar", "bind": "jar/org/hamcrest/hamcrest_all"})
- callback({"artifact": "org.hamcrest:hamcrest-core:1.3", "lang": "java", "sha1": "42a25dc3219429f0e5d060061f71acb49bf010a0", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_hamcrest_hamcrest_core", "actual": "@org_hamcrest_hamcrest_core//jar", "bind": "jar/org/hamcrest/hamcrest_core"})
- callback({"artifact": "org.jboss.marshalling:jboss-marshalling-river:1.4.12.jenkins-3", "lang": "java", "sha1": "53949db54bd86e2aa1b3a3614cc0110aaffcca0d", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jboss_marshalling_jboss_marshalling_river", "actual": "@org_jboss_marshalling_jboss_marshalling_river//jar", "bind": "jar/org/jboss/marshalling/jboss_marshalling_river"})
- callback({"artifact": "org.jboss.marshalling:jboss-marshalling:1.4.12.jenkins-3", "lang": "java", "sha1": "3d6857aead803e7f7f7e6418d1b4a6f771c74ef9", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jboss_marshalling_jboss_marshalling", "actual": "@org_jboss_marshalling_jboss_marshalling//jar", "bind": "jar/org/jboss/marshalling/jboss_marshalling"})
- callback({"artifact": "org.jenkins-ci.dom4j:dom4j:1.6.1-jenkins-4", "lang": "java", "sha1": "9a370b2010b5a1223c7a43dae6c05226918e17b1", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_dom4j_dom4j", "actual": "@org_jenkins_ci_dom4j_dom4j//jar", "bind": "jar/org/jenkins_ci/dom4j/dom4j"})
- callback({"artifact": "org.jenkins-ci.main:cli:2.105", "lang": "java", "sha1": "f5314541cf4878c6beccb6dcf23527e3bb26b94a", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_main_cli", "actual": "@org_jenkins_ci_main_cli//jar", "bind": "jar/org/jenkins_ci/main/cli"})
- callback({"artifact": "org.jenkins-ci.main:jenkins-core:2.105", "lang": "java", "sha1": "af35cd5ddee2ca256ee9910559ec00444ff43345", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_main_jenkins_core", "actual": "@org_jenkins_ci_main_jenkins_core//jar", "bind": "jar/org/jenkins_ci/main/jenkins_core"})
- callback({"artifact": "org.jenkins-ci.main:remoting:3.16", "lang": "java", "sha1": "98133ca4027b00ed1a1d87241708ac05acc20e8b", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_main_remoting", "actual": "@org_jenkins_ci_main_remoting//jar", "bind": "jar/org/jenkins_ci/main/remoting"})
- callback({"artifact": "org.jenkins-ci.plugins.icon-shim:icon-set:1.0.5", "lang": "java", "sha1": "dedc76ac61797dafc66f31e8507d65b98c9e57df", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_plugins_icon_shim_icon_set", "actual": "@org_jenkins_ci_plugins_icon_shim_icon_set//jar", "bind": "jar/org/jenkins_ci/plugins/icon_shim/icon_set"})
- callback({"artifact": "org.jenkins-ci.plugins.workflow:workflow-api:2.22", "lang": "java", "sha1": "ba64d15b11475153e2542c201552765c90b9c884", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_plugins_workflow_workflow_api", "actual": "@org_jenkins_ci_plugins_workflow_workflow_api//jar", "bind": "jar/org/jenkins_ci/plugins/workflow/workflow_api"})
- callback({"artifact": "org.jenkins-ci.plugins.workflow:workflow-step-api:2.13", "lang": "java", "sha1": "4683818134b9610b126557033425cc68ba5de8dd", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_plugins_workflow_workflow_step_api", "actual": "@org_jenkins_ci_plugins_workflow_workflow_step_api//jar", "bind": "jar/org/jenkins_ci/plugins/workflow/workflow_step_api"})
- callback({"artifact": "org.jenkins-ci.plugins.workflow:workflow-support:2.16", "lang": "java", "sha1": "b17142e69505d4f9c7f0ccc53d01470a7ca39dfd", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_plugins_workflow_workflow_support", "actual": "@org_jenkins_ci_plugins_workflow_workflow_support//jar", "bind": "jar/org/jenkins_ci/plugins/workflow/workflow_support"})
- callback({"artifact": "org.jenkins-ci.plugins:scm-api:2.0.8", "lang": "java", "sha1": "9ee72304b2a58dc3a3b08c4a48fc45870097f9d4", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_plugins_scm_api", "actual": "@org_jenkins_ci_plugins_scm_api//jar", "bind": "jar/org/jenkins_ci/plugins/scm_api"})
- callback({"artifact": "org.jenkins-ci.plugins:script-security:1.27", "lang": "java", "sha1": "486d8f7e051f4a439e2a2850cd9fa2c64ee71d52", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_plugins_script_security", "actual": "@org_jenkins_ci_plugins_script_security//jar", "bind": "jar/org/jenkins_ci/plugins/script_security"})
- callback({"artifact": "org.jenkins-ci.plugins:structs:1.5", "lang": "java", "sha1": "72d429f749151f1c983c1fadcb348895cc6da20e", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_plugins_structs", "actual": "@org_jenkins_ci_plugins_structs//jar", "bind": "jar/org/jenkins_ci/plugins/structs"})
-# duplicates in org.jenkins-ci:annotation-indexer promoted to 1.12
-# - org.jenkins-ci:symbol-annotation:1.5 wanted version 1.9
-# - org.jenkins-ci.main:jenkins-core:2.105 wanted version 1.12
- callback({"artifact": "org.jenkins-ci:annotation-indexer:1.12", "lang": "java", "sha1": "8f6ee0cd64c305dcca29e2f5b46631d50890208f", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_annotation_indexer", "actual": "@org_jenkins_ci_annotation_indexer//jar", "bind": "jar/org/jenkins_ci/annotation_indexer"})
- callback({"artifact": "org.jenkins-ci:bytecode-compatibility-transformer:1.8", "lang": "java", "sha1": "aded88ffe12f1904758397f96f16957e97b88e6e", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_bytecode_compatibility_transformer", "actual": "@org_jenkins_ci_bytecode_compatibility_transformer//jar", "bind": "jar/org/jenkins_ci/bytecode_compatibility_transformer"})
- callback({"artifact": "org.jenkins-ci:commons-jelly:1.1-jenkins-20120928", "lang": "java", "sha1": "2720a0d54b7f32479b08970d7738041362e1f410", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_commons_jelly", "actual": "@org_jenkins_ci_commons_jelly//jar", "bind": "jar/org/jenkins_ci/commons_jelly"})
- callback({"artifact": "org.jenkins-ci:commons-jexl:1.1-jenkins-20111212", "lang": "java", "sha1": "0a990a77bea8c5a400d58a6f5d98122236300f7d", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_commons_jexl", "actual": "@org_jenkins_ci_commons_jexl//jar", "bind": "jar/org/jenkins_ci/commons_jexl"})
- callback({"artifact": "org.jenkins-ci:constant-pool-scanner:1.2", "lang": "java", "sha1": "e5e0b7c7fcb67767dbd195e0ca1f0ee9406dd423", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_jenkins_ci_constant_pool_scanner", "actual": "@org_jenkins_ci_constant_pool_scanner//jar", "bind": "jar/org/jenkins_ci/constant_pool_scanner"})
- callback({"artifact": "org.jenkins-ci:crypto-util:1.1", "lang": "java", "sha1": "3a199a4c3748012b9dbbf3080097dc9f302493d8", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_crypto_util", "actual": "@org_jenkins_ci_crypto_util//jar", "bind": "jar/org/jenkins_ci/crypto_util"})
- callback({"artifact": "org.jenkins-ci:jmdns:3.4.0-jenkins-3", "lang": "java", "sha1": "264d0c402b48c365f34d072b864ed57f25e92e63", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_jmdns", "actual": "@org_jenkins_ci_jmdns//jar", "bind": "jar/org/jenkins_ci/jmdns"})
- callback({"artifact": "org.jenkins-ci:memory-monitor:1.9", "lang": "java", "sha1": "1935bfb46474e3043ee2310a9bb790d42dde2ed7", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_memory_monitor", "actual": "@org_jenkins_ci_memory_monitor//jar", "bind": "jar/org/jenkins_ci/memory_monitor"})
-# duplicates in org.jenkins-ci:symbol-annotation promoted to 1.5
-# - org.jenkins-ci.plugins:structs:1.5 wanted version 1.5
-# - org.jenkins-ci.main:jenkins-core:2.105 wanted version 1.1
- callback({"artifact": "org.jenkins-ci:symbol-annotation:1.5", "lang": "java", "sha1": "17694feb24cb69793914d0c1c11ff479ee4c1b38", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_symbol_annotation", "actual": "@org_jenkins_ci_symbol_annotation//jar", "bind": "jar/org/jenkins_ci/symbol_annotation"})
- callback({"artifact": "org.jenkins-ci:task-reactor:1.5", "lang": "java", "sha1": "62964c07bb64457bbbb5711482e9c79bab720f20", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_task_reactor", "actual": "@org_jenkins_ci_task_reactor//jar", "bind": "jar/org/jenkins_ci/task_reactor"})
- callback({"artifact": "org.jenkins-ci:trilead-ssh2:build-217-jenkins-11", "lang": "java", "sha1": "f10f4dd4121cc233cac229c51adb4775960fee0a", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_trilead_ssh2", "actual": "@org_jenkins_ci_trilead_ssh2//jar", "bind": "jar/org/jenkins_ci/trilead_ssh2"})
- callback({"artifact": "org.jenkins-ci:version-number:1.4", "lang": "java", "sha1": "5d0f2ea16514c0ec8de86c102ce61a7837e45eb8", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jenkins_ci_version_number", "actual": "@org_jenkins_ci_version_number//jar", "bind": "jar/org/jenkins_ci/version_number"})
- callback({"artifact": "org.jruby.ext.posix:jna-posix:1.0.3-jenkins-1", "lang": "java", "sha1": "fb1148cc8192614ec1418d414f7b6026cc0ec71b", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jruby_ext_posix_jna_posix", "actual": "@org_jruby_ext_posix_jna_posix//jar", "bind": "jar/org/jruby/ext/posix/jna_posix"})
- callback({"artifact": "org.jvnet.hudson:activation:1.1.1-hudson-1", "lang": "java", "sha1": "7957d80444223277f84676aabd5b0421b65888c4", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_jvnet_hudson_activation", "actual": "@org_jvnet_hudson_activation//jar", "bind": "jar/org/jvnet/hudson/activation"})
- callback({"artifact": "org.jvnet.hudson:commons-jelly-tags-define:1.0.1-hudson-20071021", "lang": "java", "sha1": "8b952d0e504ee505d234853119e5648441894234", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_jvnet_hudson_commons_jelly_tags_define", "actual": "@org_jvnet_hudson_commons_jelly_tags_define//jar", "bind": "jar/org/jvnet/hudson/commons_jelly_tags_define"})
- callback({"artifact": "org.jvnet.hudson:jtidy:4aug2000r7-dev-hudson-1", "lang": "java", "sha1": "ad8553d0acfa6e741d21d5b2c2beb737972ab7c7", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_jvnet_hudson_jtidy", "actual": "@org_jvnet_hudson_jtidy//jar", "bind": "jar/org/jvnet/hudson/jtidy"})
- callback({"artifact": "org.jvnet.hudson:xstream:1.4.7-jenkins-1", "lang": "java", "sha1": "161ed1603117c2d37b864f81a0d62f36cf7e958a", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jvnet_hudson_xstream", "actual": "@org_jvnet_hudson_xstream//jar", "bind": "jar/org/jvnet/hudson/xstream"})
- callback({"artifact": "org.jvnet.localizer:localizer:1.24", "lang": "java", "sha1": "e20e7668dbf36e8d354dab922b89adb6273b703f", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jvnet_localizer_localizer", "actual": "@org_jvnet_localizer_localizer//jar", "bind": "jar/org/jvnet/localizer/localizer"})
- callback({"artifact": "org.jvnet.robust-http-client:robust-http-client:1.2", "lang": "java", "sha1": "dee9fda92ad39a94a77ec6cf88300d4dd6db8a4d", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jvnet_robust_http_client_robust_http_client", "actual": "@org_jvnet_robust_http_client_robust_http_client//jar", "bind": "jar/org/jvnet/robust_http_client/robust_http_client"})
- callback({"artifact": "org.jvnet.winp:winp:1.25", "lang": "java", "sha1": "1c88889f80c0e03a7fb62c26b706d68813f8e657", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_jvnet_winp_winp", "actual": "@org_jvnet_winp_winp//jar", "bind": "jar/org/jvnet/winp/winp"})
- callback({"artifact": "org.jvnet:tiger-types:2.2", "lang": "java", "sha1": "7ddc6bbc8ca59be8879d3a943bf77517ec190f39", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_jvnet_tiger_types", "actual": "@org_jvnet_tiger_types//jar", "bind": "jar/org/jvnet/tiger_types"})
- callback({"artifact": "org.kohsuke.jinterop:j-interop:2.0.6-kohsuke-1", "lang": "java", "sha1": "b2e243227608c1424ab0084564dc71659d273007", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_jinterop_j_interop", "actual": "@org_kohsuke_jinterop_j_interop//jar", "bind": "jar/org/kohsuke/jinterop/j_interop"})
- callback({"artifact": "org.kohsuke.jinterop:j-interopdeps:2.0.6-kohsuke-1", "lang": "java", "sha1": "778400517a3419ce8c361498c194036534851736", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_jinterop_j_interopdeps", "actual": "@org_kohsuke_jinterop_j_interopdeps//jar", "bind": "jar/org/kohsuke/jinterop/j_interopdeps"})
- callback({"artifact": "org.kohsuke.stapler:json-lib:2.4-jenkins-2", "lang": "java", "sha1": "7f4f9016d8c8b316ecbe68afe7c26df06d301366", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_kohsuke_stapler_json_lib", "actual": "@org_kohsuke_stapler_json_lib//jar", "bind": "jar/org/kohsuke/stapler/json_lib"})
- callback({"artifact": "org.kohsuke.stapler:stapler-adjunct-codemirror:1.3", "lang": "java", "sha1": "fd1d45544400d2a4da6dfee9e60edd4ec3368806", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_kohsuke_stapler_stapler_adjunct_codemirror", "actual": "@org_kohsuke_stapler_stapler_adjunct_codemirror//jar", "bind": "jar/org/kohsuke/stapler/stapler_adjunct_codemirror"})
- callback({"artifact": "org.kohsuke.stapler:stapler-adjunct-timeline:1.5", "lang": "java", "sha1": "3fa806cbb94679ceab9c1ecaaf5fea8207390cb7", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_stapler_stapler_adjunct_timeline", "actual": "@org_kohsuke_stapler_stapler_adjunct_timeline//jar", "bind": "jar/org/kohsuke/stapler/stapler_adjunct_timeline"})
- callback({"artifact": "org.kohsuke.stapler:stapler-adjunct-zeroclipboard:1.3.5-1", "lang": "java", "sha1": "20184ea79888b55b6629e4479615b52f88b55173", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_stapler_stapler_adjunct_zeroclipboard", "actual": "@org_kohsuke_stapler_stapler_adjunct_zeroclipboard//jar", "bind": "jar/org/kohsuke/stapler/stapler_adjunct_zeroclipboard"})
- callback({"artifact": "org.kohsuke.stapler:stapler-groovy:1.254", "lang": "java", "sha1": "c8f1bc639c6067a43b2c18d37d2eff436e475f8f", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_stapler_stapler_groovy", "actual": "@org_kohsuke_stapler_stapler_groovy//jar", "bind": "jar/org/kohsuke/stapler/stapler_groovy"})
- callback({"artifact": "org.kohsuke.stapler:stapler-jelly:1.254", "lang": "java", "sha1": "1f81746ae5c4a56eac61d39f225eb908cc9d5673", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_stapler_stapler_jelly", "actual": "@org_kohsuke_stapler_stapler_jelly//jar", "bind": "jar/org/kohsuke/stapler/stapler_jelly"})
- callback({"artifact": "org.kohsuke.stapler:stapler-jrebel:1.254", "lang": "java", "sha1": "cb23acb2f7237e5846c4bb2b8e11e4c87e72141f", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_stapler_stapler_jrebel", "actual": "@org_kohsuke_stapler_stapler_jrebel//jar", "bind": "jar/org/kohsuke/stapler/stapler_jrebel"})
- callback({"artifact": "org.kohsuke.stapler:stapler:1.254", "lang": "java", "sha1": "e01068956c7e143264ce57e659728c89a2e38f3c", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_stapler_stapler", "actual": "@org_kohsuke_stapler_stapler//jar", "bind": "jar/org/kohsuke/stapler/stapler"})
- callback({"artifact": "org.kohsuke:access-modifier-annotation:1.12", "lang": "java", "sha1": "a4964840aef2cf07bdf8b327a4b737cef64ce19d", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_access_modifier_annotation", "actual": "@org_kohsuke_access_modifier_annotation//jar", "bind": "jar/org/kohsuke/access_modifier_annotation"})
- callback({"artifact": "org.kohsuke:akuma:1.10", "lang": "java", "sha1": "0e2c6a1f79f17e3fab13332ab8e9b9016eeab0b6", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_akuma", "actual": "@org_kohsuke_akuma//jar", "bind": "jar/org/kohsuke/akuma"})
- callback({"artifact": "org.kohsuke:asm5:5.0.1", "lang": "java", "sha1": "71ab0620a41ed37f626b96d80c2a7c58165550df", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_asm5", "actual": "@org_kohsuke_asm5//jar", "bind": "jar/org/kohsuke/asm5"})
- callback({"artifact": "org.kohsuke:groovy-sandbox:1.10", "lang": "java", "sha1": "f4f33a2122cca74ce8beaaf6a3c5ab9c8644d977", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_groovy_sandbox", "actual": "@org_kohsuke_groovy_sandbox//jar", "bind": "jar/org/kohsuke/groovy_sandbox"})
- callback({"artifact": "org.kohsuke:libpam4j:1.8", "lang": "java", "sha1": "548d4a1177adad8242fe03a6930c335669d669ad", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_libpam4j", "actual": "@org_kohsuke_libpam4j//jar", "bind": "jar/org/kohsuke/libpam4j"})
- callback({"artifact": "org.kohsuke:libzfs:0.8", "lang": "java", "sha1": "5bb311276283921f7e1082c348c0253b17922dcc", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_libzfs", "actual": "@org_kohsuke_libzfs//jar", "bind": "jar/org/kohsuke/libzfs"})
- callback({"artifact": "org.kohsuke:trilead-putty-extension:1.2", "lang": "java", "sha1": "0f2f41517e1f73be8e319da27a69e0dc0c524bf6", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_trilead_putty_extension", "actual": "@org_kohsuke_trilead_putty_extension//jar", "bind": "jar/org/kohsuke/trilead_putty_extension"})
- callback({"artifact": "org.kohsuke:windows-package-checker:1.2", "lang": "java", "sha1": "86b5d2f9023633808d65dbcfdfd50dc5ad3ca31f", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_kohsuke_windows_package_checker", "actual": "@org_kohsuke_windows_package_checker//jar", "bind": "jar/org/kohsuke/windows_package_checker"})
- callback({"artifact": "org.ow2.asm:asm-analysis:5.0.3", "lang": "java", "sha1": "c7126aded0e8e13fed5f913559a0dd7b770a10f3", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_ow2_asm_asm_analysis", "actual": "@org_ow2_asm_asm_analysis//jar", "bind": "jar/org/ow2/asm/asm_analysis"})
- callback({"artifact": "org.ow2.asm:asm-commons:5.0.3", "lang": "java", "sha1": "a7111830132c7f87d08fe48cb0ca07630f8cb91c", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_ow2_asm_asm_commons", "actual": "@org_ow2_asm_asm_commons//jar", "bind": "jar/org/ow2/asm/asm_commons"})
- callback({"artifact": "org.ow2.asm:asm-tree:5.0.3", "lang": "java", "sha1": "287749b48ba7162fb67c93a026d690b29f410bed", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_ow2_asm_asm_tree", "actual": "@org_ow2_asm_asm_tree//jar", "bind": "jar/org/ow2/asm/asm_tree"})
- callback({"artifact": "org.ow2.asm:asm-util:5.0.3", "lang": "java", "sha1": "1512e5571325854b05fb1efce1db75fcced54389", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_ow2_asm_asm_util", "actual": "@org_ow2_asm_asm_util//jar", "bind": "jar/org/ow2/asm/asm_util"})
- callback({"artifact": "org.ow2.asm:asm:5.0.3", "lang": "java", "sha1": "dcc2193db20e19e1feca8b1240dbbc4e190824fa", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_ow2_asm_asm", "actual": "@org_ow2_asm_asm//jar", "bind": "jar/org/ow2/asm/asm"})
- callback({"artifact": "org.samba.jcifs:jcifs:1.3.17-kohsuke-1", "lang": "java", "sha1": "6c9114dc4075277d829ea09e15d6ffab52f2d0c0", "repository": "http://repo.jenkins-ci.org/public/", "name": "org_samba_jcifs_jcifs", "actual": "@org_samba_jcifs_jcifs//jar", "bind": "jar/org/samba/jcifs/jcifs"})
- callback({"artifact": "org.slf4j:jcl-over-slf4j:1.7.25", "lang": "java", "sha1": "f8c32b13ff142a513eeb5b6330b1588dcb2c0461", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_slf4j_jcl_over_slf4j", "actual": "@org_slf4j_jcl_over_slf4j//jar", "bind": "jar/org/slf4j/jcl_over_slf4j"})
- callback({"artifact": "org.slf4j:log4j-over-slf4j:1.7.25", "lang": "java", "sha1": "a87bb47468f47ee7aabbd54f93e133d4215769c3", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_slf4j_log4j_over_slf4j", "actual": "@org_slf4j_log4j_over_slf4j//jar", "bind": "jar/org/slf4j/log4j_over_slf4j"})
- callback({"artifact": "org.slf4j:slf4j-api:1.7.25", "lang": "java", "sha1": "da76ca59f6a57ee3102f8f9bd9cee742973efa8a", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_slf4j_slf4j_api", "actual": "@org_slf4j_slf4j_api//jar", "bind": "jar/org/slf4j/slf4j_api"})
- callback({"artifact": "org.springframework:spring-aop:2.5.6.SEC03", "lang": "java", "sha1": "6468695557500723a18630b712ce112ec58827c1", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_springframework_spring_aop", "actual": "@org_springframework_spring_aop//jar", "bind": "jar/org/springframework/spring_aop"})
- callback({"artifact": "org.springframework:spring-beans:2.5.6.SEC03", "lang": "java", "sha1": "79b2c86ff12c21b2420b4c46dca51f0e58762aae", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_springframework_spring_beans", "actual": "@org_springframework_spring_beans//jar", "bind": "jar/org/springframework/spring_beans"})
- callback({"artifact": "org.springframework:spring-context-support:2.5.6.SEC03", "lang": "java", "sha1": "edf496f4ce066edc6b212e0e5521cb11ff97d55e", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_springframework_spring_context_support", "actual": "@org_springframework_spring_context_support//jar", "bind": "jar/org/springframework/spring_context_support"})
- callback({"artifact": "org.springframework:spring-context:2.5.6.SEC03", "lang": "java", "sha1": "5f1c24b26308afedc48a90a1fe2ed334a6475921", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_springframework_spring_context", "actual": "@org_springframework_spring_context//jar", "bind": "jar/org/springframework/spring_context"})
- callback({"artifact": "org.springframework:spring-core:2.5.6.SEC03", "lang": "java", "sha1": "644a23805a7ea29903bde0ccc1cd1a8b5f0432d6", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_springframework_spring_core", "actual": "@org_springframework_spring_core//jar", "bind": "jar/org/springframework/spring_core"})
- callback({"artifact": "org.springframework:spring-dao:1.2.9", "lang": "java", "sha1": "6f90baf86fc833cac3c677a8f35d3333ed86baea", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_springframework_spring_dao", "actual": "@org_springframework_spring_dao//jar", "bind": "jar/org/springframework/spring_dao"})
- callback({"artifact": "org.springframework:spring-jdbc:1.2.9", "lang": "java", "sha1": "8a81d42995e61e2deac49c2bc75cfacbb28e7218", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_springframework_spring_jdbc", "actual": "@org_springframework_spring_jdbc//jar", "bind": "jar/org/springframework/spring_jdbc"})
- callback({"artifact": "org.springframework:spring-web:2.5.6.SEC03", "lang": "java", "sha1": "699f171339f20126f1d09dde2dd17d6db2943fce", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_springframework_spring_web", "actual": "@org_springframework_spring_web//jar", "bind": "jar/org/springframework/spring_web"})
- callback({"artifact": "org.springframework:spring-webmvc:2.5.6.SEC03", "lang": "java", "sha1": "275c5ac6ade12819f49e984c8e06b114a4e23458", "repository": "https://repo.maven.apache.org/maven2/", "name": "org_springframework_spring_webmvc", "actual": "@org_springframework_spring_webmvc//jar", "bind": "jar/org/springframework/spring_webmvc"})
- callback({"artifact": "oro:oro:2.0.8", "lang": "java", "sha1": "5592374f834645c4ae250f4c9fbb314c9369d698", "repository": "https://repo.maven.apache.org/maven2/", "name": "oro_oro", "actual": "@oro_oro//jar", "bind": "jar/oro/oro"})
- callback({"artifact": "relaxngDatatype:relaxngDatatype:20020414", "lang": "java", "sha1": "de7952cecd05b65e0e4370cc93fc03035175eef5", "repository": "https://repo.maven.apache.org/maven2/", "name": "relaxngDatatype_relaxngDatatype", "actual": "@relaxngDatatype_relaxngDatatype//jar", "bind": "jar/relaxngDatatype/relaxngDatatype"})
- callback({"artifact": "stax:stax-api:1.0.1", "lang": "java", "sha1": "49c100caf72d658aca8e58bd74a4ba90fa2b0d70", "repository": "https://repo.maven.apache.org/maven2/", "name": "stax_stax_api", "actual": "@stax_stax_api//jar", "bind": "jar/stax/stax_api"})
- callback({"artifact": "xpp3:xpp3:1.1.4c", "lang": "java", "sha1": "9b988ea84b9e4e9f1874e390ce099b8ac12cfff5", "repository": "https://repo.maven.apache.org/maven2/", "name": "xpp3_xpp3", "actual": "@xpp3_xpp3//jar", "bind": "jar/xpp3/xpp3"})
diff --git a/BUILD b/BUILD
deleted file mode 100644
index 7e76bfa..0000000
--- a/BUILD
+++ /dev/null
@@ -1,7 +0,0 @@
-genrule(
- name = "git-hash",
- srcs = [".git/logs/HEAD"],
- outs = ["git-hash.txt"],
- cmd = "tail -1 $< | cut -d ' ' -f 2 > $@",
- visibility = ["//visibility:public"],
-)
diff --git a/WORKSPACE b/WORKSPACE
index ae47f64..bec9f16 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -11,119 +11,4 @@
# 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.
-workspace(name = "io_bazel_ci")
-
-git_repository(
- name = "io_bazel_rules_docker",
- remote = "https://github.com/bazelbuild/rules_docker.git",
- tag = "v0.3.0",
-)
-
-load(
- "@io_bazel_rules_docker//container:container.bzl",
- "container_pull",
- container_repositories = "repositories",
-)
-
-# This is NOT needed when going through the language lang_image
-# "repositories" function(s).
-container_repositories()
-
-# Docker base images
-load("//base:docker_base.bzl", "docker_bases")
-docker_bases()
-
-# Jenkins
-load("//jenkins/base:plugins.bzl", "JENKINS_PLUGINS")
-load("//jenkins/base:jenkins_base.bzl", "jenkins_base")
-
-jenkins_base(
- name = "jenkins",
- plugins = JENKINS_PLUGINS,
- version = "2.105",
- digest = "sha256:d2b9c9e7c373f365364d9be87d21f29157d267cfe063e64d1bdf6097018772a5",
- volumes = ["/opt/secrets"],
-)
-
-# Releases stuff
-http_file(
- name = "hoedown",
- sha256 = "01b6021b1ec329b70687c0d240b12edcaf09c4aa28423ddf344d2bd9056ba920",
- url = "https://github.com/hoedown/hoedown/archive/3.0.7.tar.gz",
-)
-
-http_file(
- name = "github_release",
- sha256 = "bb647fb89f086a78bfc51c0b3264338f3471fb5b275829a7d1f08cf76af17da2",
- url = "https://github.com/c4milo/github-release/archive/v1.1.0.tar.gz",
-)
-
-# Use Jinja for templating our files
-new_http_archive(
- name = "markupsafe_archive",
- build_file_content = """
-py_library(
- name = "markupsafe",
- srcs = glob(["markupsafe/*.py"]),
- srcs_version = "PY2AND3",
- visibility = ["//visibility:public"],
-)
-""",
- sha256 = "a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665",
- strip_prefix = "MarkupSafe-1.0",
- url = "https://pypi.python.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz#md5=2fcedc9284d50e577b5192e8e3578355",
-)
-
-new_http_archive(
- name = "org_pocoo_jinja_jinja2",
- build_file_content = """
-py_library(
- name = "jinja2",
- srcs = glob(["jinja2/*.py"]),
- srcs_version = "PY2AND3",
- deps = [
- "@markupsafe_archive//:markupsafe",
- ],
- visibility = ["//visibility:public"],
-)
-""",
- sha256 = "f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4",
- strip_prefix = "Jinja2-2.10",
- url = "https://pypi.python.org/packages/56/e6/332789f295cf22308386cf5bbd1f4e00ed11484299c5d7383378cf48ba47/Jinja2-2.10.tar.gz#md5=61ef1117f945486472850819b8d1eb3d",
-)
-
-# Our template engine use gflags
-new_git_repository(
- name = "com_github_google_python_gflags",
- build_file_content = """
-py_library(
- name = "gflags",
- srcs = [
- "gflags.py",
- "gflags_validators.py",
- ],
- visibility = ["//visibility:public"],
-)
-""",
- remote = "https://github.com/google/python-gflags",
- tag = "python-gflags-2.0",
-)
-
-# Testing Jenkins pipeline library
-# TODO(dmarting): the groovy support is really rudimentary we should fix it:
-# - Need for adding more dependency
-# - Groovy test absolutely want you to declare a specific structure
-# - The release is not working with latest bazel
-# - Repository overrely on bind() and does not respect naming conventions
-http_archive(
- name = "io_bazel_rules_groovy",
- url = "https://github.com/bazelbuild/rules_groovy/archive/6b8e32ce0f7e33ae1b859706c2dc0c169b966e7e.zip",
- sha256 = "9dac7ddcf9e0004b1eeaf53dd9324350601eaee8c252f77423330af3effe2f5c",
- strip_prefix = "rules_groovy-6b8e32ce0f7e33ae1b859706c2dc0c169b966e7e",
-)
-load("@io_bazel_rules_groovy//groovy:groovy.bzl", "groovy_repositories")
-groovy_repositories()
-
-# For groovy tests
-load("//3rdparty:workspace.bzl", "maven_dependencies")
-maven_dependencies()
+workspace(name = "build_bazel_ci")
diff --git a/base/BUILD b/base/BUILD
deleted file mode 100644
index 5405ab2..0000000
--- a/base/BUILD
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright 2015 The Bazel 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(default_visibility = ["//visibility:public"])
-
-load("@io_bazel_rules_docker//docker:docker.bzl", "docker_build")
-
-# Image support golang and make
-docker_build(
- name = "ubuntu-xenial-amd64-deploy",
- base = "@ubuntu-xenial-amd64-deploy//:image",
-)
-
-# Support SSH for gerrit deployment
-docker_build(
- name = "ubuntu-xenial-amd64-ssh",
- base = "@ubuntu-xenial-amd64-ssh//:image",
-)
diff --git a/base/Dockerfile.ubuntu-xenial-amd64-deploy b/base/Dockerfile.ubuntu-xenial-amd64-deploy
deleted file mode 100644
index 8cd1508..0000000
--- a/base/Dockerfile.ubuntu-xenial-amd64-deploy
+++ /dev/null
@@ -1,8 +0,0 @@
-FROM ubuntu:xenial
-RUN apt-get update && apt-get install -y \
- zip g++ openjdk-8-jdk openjdk-8-source wget git unzip python python3 curl \
- golang make \
- jekyll \
- reprepro devscripts dpkg-dev
-ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
-RUN update-ca-certificates -f
diff --git a/base/Dockerfile.ubuntu-xenial-amd64-ssh b/base/Dockerfile.ubuntu-xenial-amd64-ssh
deleted file mode 100644
index 1fed08e..0000000
--- a/base/Dockerfile.ubuntu-xenial-amd64-ssh
+++ /dev/null
@@ -1,6 +0,0 @@
-FROM ubuntu:xenial
-RUN apt-get update && apt-get install -y \
- zip g++ openjdk-8-jdk openjdk-8-source wget git unzip python python3 curl \
- ssh
-ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
-RUN update-ca-certificates -f
diff --git a/base/convert_image_to_build.py b/base/convert_image_to_build.py
deleted file mode 100644
index 63f57cc..0000000
--- a/base/convert_image_to_build.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 2017 The Bazel 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.
-
-"""Convert a docker save JSON files to a BUILD file so docker_import can read it."""
-
-import gzip
-import json
-import os
-import os.path
-import shutil
-import sys
-import tarfile
-
-def convert_manifest(infile, outfile):
- with open(infile, "r") as fp:
- json_obj = json.load(fp)
- dirname = os.path.dirname(infile)
- dir = os.path.relpath(dirname, os.path.dirname(outfile))
- config = json_obj[0]["Config"]
- layers = json_obj[0]["Layers"]
- with open(outfile, "w") as of:
- of.write( """
-load("@io_bazel_rules_docker//docker:docker.bzl", "docker_import")
-
-docker_import(
- name = "image",
- layers = [%s],
- config = "%s/%s",
- visibility = ["//visibility:public"],
-)
-""" % (",".join(['"%s/%s.tgz"' % (dir, os.path.dirname(l)) for l in layers]), dir, config))
-
-def extract_image(image, directory):
- with tarfile.open(image) as tar:
- tar.extractall(directory)
- for f in os.listdir(directory):
- d = os.path.join(directory, f)
- l = os.path.join(d, "layer.tar")
- if os.path.isdir(d) and os.path.exists(l):
- with gzip.open(d + ".tgz", "wb") as f_out, open(l, "rb") as f_in:
- shutil.copyfileobj(f_in, f_out)
- os.remove(l)
-
-if __name__ == '__main__':
- if len(sys.argv) < 4:
- sys.stderr.write("Usage: %s infile directory build_file\n" % sys.argv[0])
- sys.exit(1)
- extract_image(sys.argv[1], sys.argv[2])
- convert_manifest(os.path.join(sys.argv[2], "manifest.json"), sys.argv[3])
diff --git a/base/docker_base.bzl b/base/docker_base.bzl
deleted file mode 100644
index 5101e77..0000000
--- a/base/docker_base.bzl
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright 2017 The Bazel 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.
-
-"""Wrapper to fetch the base docker images we need."""
-
-load(":dockerfile_build.bzl", "dockerfile_build")
-
-def docker_bases():
- dockerfile_build(
- name = "ubuntu-xenial-amd64-deploy",
- dockerfile = "//base:Dockerfile.ubuntu-xenial-amd64-deploy",
- tag = "local:ubuntu-xenial-amd64-deploy",
- )
- dockerfile_build(
- name = "ubuntu-xenial-amd64-ssh",
- dockerfile = "//base:Dockerfile.ubuntu-xenial-amd64-ssh",
- tag = "local:ubuntu-xenial-amd64-ssh",
- )
diff --git a/base/dockerfile_build.bzl b/base/dockerfile_build.bzl
deleted file mode 100644
index 6c6f888..0000000
--- a/base/dockerfile_build.bzl
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright 2016 The Bazel 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.
-
-"""Repository rule to build image with `docker build`."""
-
-def _impl(rctx):
- tag = rctx.attr.tag
- dockerfile = rctx.path(rctx.attr.dockerfile)
- result = rctx.execute([
- "docker",
- "build",
- "-q",
- "-t",
- tag,
- "-f",
- dockerfile,
- dockerfile.dirname,
- ])
- if result.return_code:
- fail("docker build failed with error code %s:\n%s" % (
- result.return_code,
- result.stdout + result.stderr))
- base_tar = rctx.path("base.tar")
- base_dir = rctx.path("base")
- result = rctx.execute(["docker", "save", "-o", base_tar, tag])
- if result.return_code:
- fail("docker save failed with error code %s:\n%s" % (
- result.return_code,
- result.stderr))
- result = rctx.execute(["python", rctx.path(Label("//base:convert_image_to_build.py")),
- base_tar, base_dir, rctx.path("BUILD")])
- if result.return_code:
- fail("Converting the image failed with error code %s:\n%s" % (
- result.return_code,
- result.stderr))
-
-dockerfile_build = repository_rule(
- implementation = _impl,
- attrs = {
- "tag": attr.string(mandatory=True),
- "dockerfile": attr.label(mandatory=True),
- },
-)
diff --git a/dependencies.yaml b/dependencies.yaml
deleted file mode 100644
index 3994b36..0000000
--- a/dependencies.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-options:
- languages: [ "java" ]
- resolvers:
- - id: "mavencentral"
- type: "default"
- url: https://repo.maven.apache.org/maven2/
- - id: "jenkins-public"
- type: "default"
- url: http://repo.jenkins-ci.org/public/
- transitivity: runtime_deps
- versionConflictPolicy: highest
-
-dependencies:
- com.lesfurets:
- jenkins-pipeline-unit:
- lang: java
- version: "1.1"
-
- org.codehaus.groovy:
- groovy-all:
- lang: java
- version: "2.4.13"
-
- org.hamcrest:
- hamcrest-all:
- lang: java
- version: "1.3"
-
- junit:
- junit:
- lang: java
- version: "4.12"
-
- org.jenkins-ci.main:
- jenkins-core:
- lang: java
- version: "2.105"
-
- org.jenkins-ci.plugins.workflow:
- workflow-step-api:
- lang: java
- version: "2.14"
-
- org.jenkins-ci.plugins.workflow:
- workflow-support:
- lang: java
- version: "2.16"
diff --git a/docs/bazel-monitoring.md b/docs/bazel-monitoring.md
deleted file mode 100644
index 72f46ae..0000000
--- a/docs/bazel-monitoring.md
+++ /dev/null
@@ -1,81 +0,0 @@
-# How to monitor for Bazel regressions
-
-This is a guide for the Bazel build sheriff about monitoring the Bazel CI
-(Continuous Integration) projects and jobs.
-
-# The CI dashboard
-
-URL: https://ci.bazel.build/view/Dashboard/
-
-The dashboard gives a quick overview of the Bazel CI's health.
-
-We monitor:
-
-* Bazel's own jobs (owned by the core Bazel team):
-
- - [bazel-tests](https://ci.bazel.build/job/bazel-tests)
- - [bazel-slow-tests](https://ci.bazel.build/job/bazel-slow-tests)
- - [bazel-remote-tests](https://ci.bazel.build/job/bazel-remote-tests)
- - [Tutorial](https://ci.bazel.build/job/Tutorial)
- - [nightly](https://ci.bazel.build/job/bazel/job/nightly)
- - [release](https://ci.bazel.build/job/bazel/job/release)
-
-* Projects built using Bazel:
-
- - repositories on the bazelbuild GitHub organisation, e.g. rules\_web
- - TensorFlow
- - Gerrit
- - protobuf
- - re2
- - ...
-
-If Bazel's own jobs are not green, the Bazel team must:
-
-1. investigate
-2. fix as soon as possible
-
-If the other projects are not green:
-
-1. report it to the project owners
-2. deactivate the project if it stays broken for more than a week
-
-# Triaging failures
-
-The build sheriff should monitor the outputs of these types of jobs:
-
-* [global tests](user.md#global-jobs)
-* [postsubmits](user.md#postsubmit)
-
-## Global tests
-
-URLs:
-
-* nightly: https://ci.bazel.build/job/bazel/job/nightly
-* release: https://ci.bazel.build/job/bazel/job/release
-
-When do these jobs run:
-
-* [nightly](https://ci.bazel.build/job/bazel/job/nightly): runs every night and
- can be re-run on demand using the Run button in Jenkins (you need to log in
- on the Jenkins UI)
-* [release](https://ci.bazel.build/job/bazel/job/release): runs at every push and
- is always green for non-release pushes
-
-How to investigate: see the [user guide](user.md#global-jobs).
-
-When global tests fail badly:
-
-1. [file a bug to bazelbuild/bazel](https://github.com/bazelbuild/bazel/issues/new)
-2. add the "breakage" label to the bug
-3. add the "release blocker" label if the breakage is on the release job
-
-## Postsubmits
-
-These are all the other monitored jobs.
-
-To investigate:
-
-How to investigate: see the [user guide](user.md#presubmit).
-
-1. report to the project owner (e.g. Bazel team for "bazel-tests")
-2. deactivate partially or totally, if a failure stays for too long
diff --git a/docs/init.md b/docs/init.md
deleted file mode 100644
index 52fe3eb..0000000
--- a/docs/init.md
+++ /dev/null
@@ -1,149 +0,0 @@
-# Initializing Google Cloud for Bazel's CI
-
-This document describes how to setup our Google Cloud project so that it can
-host Bazel's Jenkins CI.
-
-## Network
-
-For CI we're using a normal 'auto' mode network:
-
-```bash
-gcloud compute networks create "default"
-```
-
-We'll also need a static IP address for Jenkins:
-
-```bash
-gcloud compute addresses create "ci"
-```
-
-## `/volumes` disk
-
-The Jenkins controller is connected to a persistent disk. This disk is
-encrypted, and it is not erased between builds nor after Jenkins restarts.
-
-Let's create one:
-
-```bash
-gcloud compute disks create "jenkins-volumes" --size=4TB
-```
-
-This disk is mounted under `/volumes` on the Jenkins controller and has two
-subdirectories:
-
-* `/volumes/secrets`: stores credentials needed for CI
-* `/volumes/jenkins_home`: stores permanent files for the Jenkins controller,
- to keep history (logs and build artifacts) even after reimaging the
- controller
-
-## Populating the `/volumes/secrets` directory
-
-`/volumes/secrets` directory is filled with RSA keys, authentication tokens, and
-passwords. Each file refers to one particular secret, some of which have
-corresponding placeholders in the `//jenkins/config/secrets/*.xml` files.
-
-The secrets are:
-
-* `google.oauth.clientid` and `google.oauth.secret`: OAuth authentication
- token to the Google Cloud APIs.
-
- To regenerate:
-
- 1. Go to the Cloud Console:
- https://console.cloud.google.com/apis/credentials?project=bazel-public
-
- 2. Click on "Create credentials" > "OAuth client ID".
-
- ```text
- Application type: Web application
- Name: Jenkins
- Authorized redirect URIs: https://ci.bazel.build/securityRealm/finishLogin
- ```
-
- 3. Click create, copy the resulting Client ID and Client secret into the
- two files in `/volumes/secrets`, without a newline at the end:
-
- ```sh
- echo -n '<client id>' > google.oauth.clientid
- echo -n '<client secret>' > google.oauth.secret
- ```
-
-* `gerritcookies`: the Git cookies file for the CI user on Gerrit
-
- You can fetch this from
- https://bazel-review.googlesource.com/#/settings/http-password.
-
-* `github.bazel-io.jenkins.password`: the password for the CI user on Github
-
- To regenerate:
-
- 1. Click "Manage Jenkins" > "Manage Credentials".
- 2. Enter the password for the GitHub account
- 3. Click on "Save".
-
- This updates `/var/jenkins_home/credentials.xml` inside
- the local Docker container with the secret.
-
- 4. Connect to the Jenkins VM:
-
- ```sh
- gcloud compute ssh jenkins
- ```
-
- 5. Copy the credentials out of the file:
-
- ```sh
- cat /volumes/jenkins_home/credentials.xml
- ```
-
- 6. Copy the value of the `<password>` tag and write it to
- `/volumes/secrets/github.bazel-io.jenkins.password`.
-
-* `boto_config`: a boto config file with oauth token to access GCS
-
-* `github_id.rsa` and `github_id_rsa.pub`: private and public SSH keys for
- pushing to GitHub
-
- The Jenkins job pushes to GitHub to sync the Gerrit and GitHub
- repositories.
-
- To regenerate:
-
- 1. SSH into the Jenkins controller
- 2. Run:
-
- ```sh
- ssh-keygen -t rsa -b 4096 -C "noreply@bazel.build" -N '' -f /volumes/secrets/github_id_rsa
- ```
-
- You must add the public key to the list of deploy keys of all repositories
- to sync (e.g. for Bazel at `https://github.com/bazelbuild/bazel/settings/keys`).
-
-* `github_token`: the "Bazel Release Token" of the "Personal access tokens"
- of the "ci.bazel" user on GitHub
-
- The Jenkins controller uses this token to push Bazel releases to GitHub.
-
- You can't see the token itself, but you can update it and then GitHub
- shows you the new value.
-
-* `github_trigger_auth_token`: the "Jenkins GitHub Pull Request Builder" of
- the "Personal access tokens" of the "ci.bazel" user on GitHub
-
- The Jenkins controller uses this token to post comments on GitHub pull
- requests, e.g. "All tests passed".
-
- You can't see the token itself, but you can update it and then GitHub
- shows you the new value.
-
-* `apt-key.id` and `apt-key.sec.gpg`: GPG key to sign the Debian packages
-
-* `smtp.auth.password` and `smtp.auth.username`: authentication information
- for the mail provider.
-
- We use bazel.build's G Suite to send e-mails.
-
-## Next
-
-You can now use the [`vm.sh` script to create the virtual machines and the
-`setup_mac.sh` script to setup mac nodes](machines.md).
diff --git a/docs/jobs.md b/docs/jobs.md
deleted file mode 100644
index 9da26b4..0000000
--- a/docs/jobs.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# Jobs
-
-Three categories of jobs run on https://ci.bazel.build:
-
-* bootstrap/maintenance jobs (e.g. bazel-bootstrap)
-* projects (e.g. TensorFlow)
-* hidden jobs
-
-## Bootstrap and maintenance
-
-Several jobs control the bootstrap and maintenance of Bazel, they
-are mostly under the `maintenance` and `bazel` folders:
-
-* `maintenance/install-bazel`: installs Bazel release on all workers
-* `maintenance/gerrit-verifier`: detects pending reviews on Gerrit that
- need validation.
-
- A review needs validation if somebody marks it as `Presubmit-Ready`.
-
-* `bazel/nightly`: handles the [Global tests](docs/bazel-monitoring.md#global-tests)
-
- This job runs every night.
-
-* `bazel/release`: copy of `bazel/nightly` that runs for the release
-
- This job also handles publishing the release artifacts.
-
-* `bazel/presubmit`: copy of `bazel/nightly` that is triggered when someone
- sets `Presubmit-Ready+2` on Gerrit
-
-## Projects
-
-These jobs simply run Bazel on a GitHub repository.
-
-The job templates and definitions are under `//jenkins`.
-
-Particularly interesting is `//jenkins/jobs/jobs.bzl`: it contains the logic
-that computes which jobs to run on CI.
-
-## Hidden jobs
-
-These jobs are copies of the jobs for the corresponding `<project>`. These jobs
-all use the latest Bazel release:
-
-* `PR/<project>`: validates a GitHub pull request on `<project>`
-
-* `CR/<project>`: validates a Gerrit review request on `<project>`
-
-* `Global/<project>`: runs a global presubmit test for changes on `<project>`
diff --git a/docs/machines.md b/docs/machines.md
deleted file mode 100644
index fd1ab57..0000000
--- a/docs/machines.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# CI machines
-
-This document describes the architecture and administration of the Bazel CI
-(Continuous Integration) machines.
-
-## Architecture
-
-Bazel's CI uses Jenkins.
-
-The Jenkins controller runs in a Docker container on a virtual machine (VM).
-
-The Jenkins controller distributes the work to various nodes:
-
-* VMs on GCE (e.g. Linux and Windows nodes)
-* Physical machines (e.g Mac nodes)
-* Docker containers (e.g. the deploy node that deploys Bazel releases and the
- Bazel homepage)
-
-The Docker containers run on the Jenkins controller's VM.
-
-## Administration
-
-* VMs: through the `//gce/vm.sh` script
-* Physical machines: physically or through Chrome Remote Desktop
-* Docker containers: through the `//gce/jenkins.yml` files (Google Container
- Engine pod configurations)
-
-### Virtual machines admininstration
-
-You can administer the VMs using the `//gce/vm.sh` script.
-
-You can apply the script's changes to:
-
-* individual machines, or
-* all machines
-
-`//gce/vm.sh` script commands:
-
-* `create` and `delete`: create a machine (unless it already exists) or delete
- it
-* `reimage`: `delete` a machine, then `create` it again
-* `start` and `stop`: start or stop the specified machine(s).
-* `update_metadata`: update the metadata for the VM
-
- The metadata is what we pass to the `--metadata` flags when we run `gcloud
- instances create` commands. The metadata includes the startup scripts and
- the pod configuration for the Docker containers.
-
-The `//gce/vm.sh` script runs `gcloud` and assumes your default GCE project
-is the Bazel CI project.
-
-You can install `gcloud` from https://cloud.google.com/sdk/
-
-To set the default `gcloud` project to "bazel-public", run:
-
-```
-gcloud config set project bazel-public
-gcloud auth login
-```
-
-### Physical machines administration
-
-The physical machines need to be on a network allowed for port 50000. See the
-list of IP ranges provided to the [`init.sh`](init.md) script.
-
-The physical manually need to have a service installed that talks to the Jenkins
-controller. The only kind of physical nodes we use are Mac nodes and we need to
-set them up manually (for licensing reasons).
-
-To set up a Mac executor node:
-
-1. install [Xcode](https://developer.apple.com/xcode/downloads/)
-2. install [JDK 8](https://jdk8.java.net/download.html)
-3. create a "ci" user with "sudo" rights
-4. download the `mac/setup_mac.sh` script and run it as the "ci" user:
-
- ```
- curl -o setup_mac.sh "https://raw.githubusercontent.com/bazelbuild/continuous-integration/master/mac/setup_mac.sh"
- sudo su ci -c "/bin/bash setup_mac.sh <node_name>"
- ```
diff --git a/docs/owner.md b/docs/owner.md
deleted file mode 100644
index d866312..0000000
--- a/docs/owner.md
+++ /dev/null
@@ -1,296 +0,0 @@
-# Bazel continuous integration for project owners
-
-## Adding a project
-
-To add a project to Bazel CI that is on the `bazelbuild` GitHub organization:
-
-1. Allow write access to your repository:
-
- * for [`robots`](https://github.com/orgs/bazelbuild/teams/robot), if your
- repository is part of the `bazelbuild` organization
- * for [`bazel-io`](https://github.com/bazel-io), if your repository is
- outside of the `bazelbuild` organization
-
-2. Add the job to the job list.
-
- If the project is in the `bazelbuild` organization and doesn't need special
- tweaking, you can add it to an existing job list in `jenkins/jobs/BUILD`.
-
- Otherwise add a `bazel_github_job` or `bazel_git_job` rule to
- `jenkins/jobs/BUILD`:
-
- * use `bazel_github_job` for jobs from GitHub repositories
- * use `bazel_git_job` for jobs from Git repositories
-
-3. Send a Gerrit code review to a CI admin.
-
- See `jenkins/config.bzl` for the list of admins.
-
-### `bazel_github_job` parameters
-
-The `bazel_github_job` rule takes the following parameters:
-
-* `name`: name of the job as it will appear in Jenkins
-* `branch`: Git branch to build and test (default: `master`)
-* `project`: name of the project (default: same as `name`)
-
- Useful when you rename a job but want to keep its history.
-
-* `org`: name of the organization on GitHub
-* `git_url`: URL to the Git repository (default:
- `https://github.com/<org>/<project>`)
-* `project_url`: URL to the project (default: same as `git_url`)
-* `workspace`: the directory where the workspace is, relative to the
- root of the Git repository (default: `.`)
-* `config`: specifies a default configuration file (default:
- `jenkins/build_defs:default.json`)
-
- Normally it is not needed because you can change the configuration using
- a file in the repository (see next section).
-
-* `enable_trigger`: enable postsubmit test (default: true)
-* `poll`: use polling to trigger postsubmit tests instead of waiting
- for GitHub API to notify (default: true if organization is not
- `bazelbuild`)
-* `gerrit_project`: project on the [Bazel Gerrit
- server](https://bazel-review.googlesource.com) that mirrors the GitHub
- project and will be used to trigger presubmits from Gerrit
-* `enabled`: activates or deactivates the project (default: true)
-* `pr_enabled`: enables or disables presubmit from GitHub Pull Requests
-* `run_sequential`: if enabled, runs the job's configurations
- concurrently; otherwise runs the job's configurations one after the
- other
-
- Useful if the job uses some exclusive resource such as [Sauce
- Labs](https://wiki.saucelabs.com/).
-
-* `sauce_enabled`: activates or deactivates [Sauce
- Labs](https://wiki.saucelabs.com/) support
-
-### `bazel_git_job` parameters
-
-The `bazel_git_job` rule takes the same parameters as `bazel_github_job`, but
-requires that either `git_url` or `project_url` be specified.
-
-## Customizing a project
-
-By default, the CI system tries to build `//...` then to test `//...` on Darwin
-and on Linuxes.
-
-You can use a JSON file to change how the project is built:
-
-* add `.ci/<name>.json` to the project's repository, or
-* or add `scripts/ci/<name>.json` to the
- https://github.com/bazelbuild/continuous-integration repository
-
-Where `<name>` is the name of the project declared in `jobs.bzl`.
-
-This JSON file contains a list of configurations to build and test.
-Each configuration entry specifies:
-
-* a platform name under the `node` key
-* optionally a list of parameters under the key `parameters`
-* optionally a list of sub-configurations under the key `configurations`
-
-### Example 1
-
-A simple configuration with one platform:
-
-```javascript
-[
- {"node": "linux-x86_64"}
-]
-```
-
-This configuration would build and test on a node that has the label
-`linux-x86\_64` with the default set of parameters (i.e. build `//...`
-then test `//...`).
-
-### Example 2
-
-Built on the previous example:
-
-```javascript
-[
- {
- "node": "linux-x86_64",
- "parameters": {
- "targets": ["//my:target"],
- "tests": ["//my:test"],
- }
- }
-]
-```
-
-This configuration uses `targets` and `tests` parameters to set the targets
-to build (`targets`) and to test (`tests`), instead of the default `//...`.
-
-### Example 3
-
-To add a platform, add another configuration:
-
-```javascript
-[
- {
- "node": "linux-x86_64",
- "parameters": {
- "targets": ["//my:target"],
- "tests": ["//my:test"],
- }
- },
- {
- "node": "darwin-x86_64",
- "parameters": {
- "targets": ["//my:target"],
- "tests": ["//my:test"],
- }
- },
- {
- "node": "windows-x86_64",
- "parameters": {
- "targets": ["//my:target"],
- "tests": [
- "//my/other/windows/specific:test",
- "//and/some/other/test:name"
- ],
- }
- }
-]
-```
-
-### Example 4
-
-Use a sub-configurations to reduce repetitions:
-
-```javascript
-[
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "darwin-x86_64"},
- ],
- "parameters": {
- "targets": ["//my:target"],
- "tests": ["//my:test"],
- }
- }
-]
-```
-
-### Example 5
-
-You can specify child configurations.
-
-Each child configuration inherits parent configuration description. The
-child configurations get factored with the parent configuration to create N
-configurations that inherit the parameters and descriptor of the parent
-configuration. The child configuration can override inherited parameters.
-
-The following configuration:
-
-```javascript
-[
- {
- "descriptor": "yeah",
- "parameters": ["targets": ["//:target1"]],
- "configurations": [
- {
- "descriptor2": "a",
- "parameters": ["tests": ["//:test"]]
- },
- {
- "descriptor2": "b",
- "parameters": ["targets": ["//:target2"], "tests": ["//:test"]]
- }
- ]
- }
-]
-```
-
-would expand to this:
-
-```javascript
-[
- {
- "descriptor": "yeah",
- "descriptor2": "a",
- "parameters": ["targets": ["//:target1"], "tests": ["//:test"]]
- },
- {
- "descriptor": "yeah",
- "descriptor2": "b",
- "parameters": ["targets": ["//:target2"], "tests": ["//:test"]]
- }
-]
-```
-
-## Reference
-
-### Configuration `descriptor` keys
-
-`descriptor` keys that have special meaning:
-
-* `node`: a label that describes the platform to run on
-
- Example: `linux-x86_64`, `windows-x86_64`, `freebsd-11`, etc.
-
- The complete list of connected nodes is available on
- https://ci.bazel.build/computer/ . You can select nodes either by name or by
- label. To see the list of labels of a specific node, click on the node in
- the Jenkins UI.
-
-You can use more `descriptor` keys to specify more configuration combinations,
-but they won't have any special effects.
-
-
-### Configuration `parameter` keys
-
-Supported `parameter` keys:
-
-* `configure`: list of Shell commands (Batch commands on Windows) to execute
- before the build
-* `targets`: list of targets to build.
-* `tests`: the list of targets to test; can be a bazel query expression
-* `build_tag_filters`: `tags` filter for the build step; works the same way as
- [test_suite.tags](https://docs.bazel.build/versions/master/be/general.html#test_suite.tags)
-* `test_tag_filters`: `tags` filter for the build step; always considered to
- contain `["-noci", "-manual"]`; works the same way as
- [test_suite.tags](https://docs.bazel.build/versions/master/be/general.html#test_suite.tags)
-* `build_opts`: list of options to add to the bazelrc as `build` options
-
- Note that such options also affect testing.
-
-* `test_opts`: list of options to add to the bazelrc as `test` options
-* `startup_opts`: list of options to add to the bazelrc as `startup` options
-
-
-### `scripts/ci/bootstrap.json` (Bazel bootstrap configuration)
-
-__For Bazel developers.__
-
-The Bazel project itself has a separate configuration file for
-creating release artifacts. It is stored under `scripts/ci/bootstrap.json`.
-
-This file follows the same JSON format as discussed in [Customizing a
-project](#customizing-a-project) but accepts different parameters:
-
-* `archive`: list of files to archive
-
- This is a map of target name to new name.
-
- The names may contain the `%{release_name}` placeholder, which will be
- replaced by the release name.
-
- If this parameter is empty then nothing is archived (useful for non-release
- builds).
-
-* `stash`: list of artifacts to stash
-
- These artifacts are either:
-
- * to be released, or
- * to be pushed, but there's no need to keep them forever
-
-* `configure`: list of Shell commands (Batch commands on Windows) to execute
- before building
-* `targets`: list of targets to build, in addition to `//src:bazel`
diff --git a/docs/user.md b/docs/user.md
deleted file mode 100644
index a0a726b..0000000
--- a/docs/user.md
+++ /dev/null
@@ -1,146 +0,0 @@
-# Using the Bazel CI
-
-[Bazel CI](https://ci.bazel.build) tests Bazel and a variety of
-open-source projects that use Bazel.
-
-We also use the projects using Bazel to validate Bazel changes.
-
-The Bazel CI:
-
-* runs presubmit tests (on a pending change)
-* runs postsubmit tests (on the master branch)
-* handles the release project of Bazel
-
-If you wish to add or modify a configuration for one of the projects on
-Bazel CI, see the [project owner documentation](owner.md).
-
-## Postsubmit <a name="postsubmit"></a>
-
-The CI uses the GitHub API and handles test runs automatically if
-[bazel-io](https://github.com/bazel-io) has write access to the repository.
-
-The result of a build can be one of:
-
-* Success (job is green)
-* Unstable (job is yellow), if some tests failed.
-
- The Blue Ocean View<sup>1</sup> shows the failing platforms in Pipeline view
- and the list of failing tests in Tests view.
-
-* Failed (job is red), if compilation failed or configuration files are
- broken.
-
- The Blue Ocean View<sup>1</sup> shows the build breakage. If it doesn't,
- you should look at the full console log.
-
-<sup>1</sup> The Open Blue Ocean view is a Jenkins UI. There's a link to it on
-the default Jenkins UI, on the left side in the Job view.
-
-Tips:
-
-* Test logs are available under the artifacts list via the URL
- `<joburl>/artifact`.
-
- Example: https://ci.bazel.build/job/bazel-tests/lastCompletedBuild/artifact/
-
-* Flaky tests can be analyzed with the Test Results Analyzer
-
- The analyzer is available in the normal job view on the side menu (the one
- which shows the test's history).
-
-* The "Pipeline Steps" button on the side menu on a job view lets you examine
- each step of the Jenkins pipeline.
-
- Looking for the enclosing workspace or node start step of another step gives
- you access to the workspace of that step.
-
-Current limitations:
-
-* Jenkins Blue Ocean UI has no good way to mark an unstable steps.
-
- If a platform stage fails without clear sub-step failing, look for the last
- shell step in the platform stage view.
-
-* Tests are not ordered by platforms in the test view.
-
-## Presubmit
-
-The Bazel CI can run presubmit tests for changes from GitHub and from Gerrit.
-
-### GitHub pull requests
-
-A GitHub pull request is tested when:
-
-* a pull request admin comments "test this please" or "retest this please"
-* an admin pushes a Pull Request
-
-Pull request admins are the people from:
-
-* the [bazelbuild](https://github.com/bazelbuild) organization, or
-* the [google](https://github.com/google) organization
-
-Jenkins considers those people to be admins whose visibility is public. To make
-someone public:
-
-1. go to [the Bazel organization
- page](https://github.com/orgs/bazelbuild/people) (or the
- [Google organization page](https://github.com/orgs/google/people)
- respectively)
-2. find the person's name and change their visibility to public
-
-To test pull requests, [bazel-io](https://github.com/bazel-io) needs
-write access to the repository. This is always the case if the repository is in
-the `bazelbuild` organization, otherwise you may need to grant access.
-
-### Gerrit code reviews
-
-A Gerrit code review is tested when someone marks the code review as
-`Presubmit-Ready+1`.
-
-Marking the code review as presubmit ready:
-
-* automatically adds "Bazel CI" as a reviewer
-* updates the review thread with the link to the test results
-* marks the code review as `Verified+1` or `Verified-1` depending on the
- result of the test
-
-To retrigger a test, simply reset the `Presubmit-Ready` label.
-
-You can read the output the same way as of the [postsubmit](#postsubmit).
-
-## Global tests <a name="global-tests"></a>
-
-The Bazel CI can also do a "global test".
-
-A global test:
-
-1. builds Bazel from a branch
-2. uses the resulting Bazel binary to run all the other jobs on the Bazel CI
-3. produces a report comparing the global test results of this binary and of
- the latest release of Bazel
-
-This report is at
-`https://ci.bazel.build/job/bazel/job/<nightly|release|presubmit>/<buildNumber>/Downstream_projects/`.
-For example for the last nigthly run it will be at
-https://ci.bazel.build/job/bazel/job/nightly/lastBuild/Downstream_projects/ .
-
-The way to read that report is as follows:
-
-* Newly failing jobs are problematic.
-
- They are likely to indicate a failure due to a Bazel change. These make the
- build to be unstable (yellow).
-
-* Already failing jobs may be fine.
-
- They mean that the job result is no worse than before. It is usually safe to
- ignore these failure, but we should aim to have none of them, because they
- might hide new regressions.
-
-* Passing jobs are safe to ignore.
-
-## Release process
-
-In addition to testing all the jobs, the [Global test](#global-tests) handles
-pushing artifacts that are created by a release branch to GCS and to the GitHub
-release system.
diff --git a/docs/windows-slave-image.md b/docs/windows-slave-image.md
deleted file mode 100644
index bbc461f..0000000
--- a/docs/windows-slave-image.md
+++ /dev/null
@@ -1,89 +0,0 @@
-# Creating a new Windows VM image for Bazel's CI
-
-The key thing to keep in mind is that the Windows setup for Jenkins has nothing magic about it
-that makes it a Jenkins slave VM. It's just a normal Windows setup with a few pre-installed tools
-that you would install on a workstation anyway. The Jenkins-specific setup is then handled
-completely automatic by the PowerShell script in `gce/jenkins-slave-windows-2016.ps1`.
-
-## Modifying an existing image
-
-Instead of recreating the image from scratch, it is also fine to just take an existing image that was generated using an earlier version of these instructions, create a VM using it, make the necessary changes, run GCESysprep again and create a new image from the VM disk.
-
-## Necessary steps
-- Create a new GCE VM with Windows Server 2016.
-- Temporarily enable RDP access to the VM via:
- - `gcloud compute firewall-rules create $USER-rdp --allow=tcp:3389,udp:3389 --source-ranges=$(curl v4.ifconfig.co)/32`
-- Set a new Windows password, note it somewhere and connect via RDP.
-
-- Server Manager -> Configure this local server
- - Deactivate Windows Firewall.
- - Deactivate Windows Defender.
- - Deactivate IE Enhanced Security Configuration.
- - Set time zone to Europe/Berlin.
-
-- Download and install Google Chrome. Pin to taskbar, unpin IE.
-
-- Settings -> Update & security
- - For developers -> [x] Developer mode. Click all three "Apply" buttons below.
- - Windows Update -> Advanced options -> Check "Give me updates for other Microsoft products".
- - Windows Update -> Check updates, then install all updates.
- - Reboot if necessary.
- - Repeat until no more updates are found.
-
-- Go to https://www.python.org/downloads/windows/
- - Download latest stable Python 3.x (64-Bit).
- - Start installation.
- - Check "Install launcher for all users".
- - Check "Add Python to PATH".
- - Customize installation, check all boxes.
- - Check "Install for all users".
- - Customize install location: C:\Python3
- - When setup is complete, click "Disable path length limit", then close setup.
-
-- Go to http://www.msys2.org/
- - Download latest x86_64 msys2 setup.
- - Install to C:\msys64.
- - Launch msys2 shell from installer, run "pacman -Syuu", forcibly close terminal window when prompted.
- - Launch "MSYS2 MinGW 64-bit" shell, run "pacman -Syuu", install all updates.
- - Run "pacman -S git curl zip unzip gcc zlib-devel isl tar patch".
- - Open a cmd.exe with administrator privileges and run:
- - mkdir c:\tools
- - mklink /j c:\tools\msys64 c:\msys64
-
-- Go to http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- - Download and install latest "Windows x64" JDK 8.
-
-- Go to http://landinghub.visualstudio.com/visual-cpp-build-tools
- - Download "Visual C++ Build Tools 2015".
- - Start installation, choose "Custom", select all options, install.
-
-- Go to https://nssm.cc/download
- - Download "nssm 2.24-101-g897c7ad (2017-04-26)" or later build.
- - Create new folder: "C:\Program Files\nssm".
- - Extract nssm.exe from the download ZIP file's "win64" folder into the just created folder.
-
-- Install the Android SDK:
- - Download the command-line tools from: https://developer.android.com/studio/index.html#downloads
- - Extract the ZIP into C:\bazel_ci\android (create missing folders if necessary).
- - Open a cmd.exe with administrator privileges and run:
- - cd \bazel_ci\android
- - ren tools tools.old
- - tools.old\bin\sdkmanager tools
- - rd /s /q tools.old
- - tools\bin\sdkmanager --install platform-tools build-tools;27.0.3 platforms;android-24 platforms;android-25 platforms;android-26 platforms;android-27 extras;android;m2repository
-
-- Install the Android NDK:
- - Download the NDK from here: https://dl.google.com/android/repository/android-ndk-r14b-windows-x86_64.zip
- - Extract the ZIP into C:\bazel_ci.
-
-- Start -> Search for "path" -> Choose "Edit the system environment variables"
- - Click "Environment Variables". Do the following actions in the lower "System variables" part of the UI.
- - Add "C:\Program Files\nssm" to the PATH variable.
- - Set BAZEL_VC to "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC"
- - Set BAZEL_SH to "C:\msys64\usr\bin\bash.exe"
- - Set JAVA_HOME to "C:\Program Files\Java\jdk1.8.0_152" (or the latest version installed)
- - Set ANDROID_HOME to "C:\bazel_ci\android".
- - Set ANDROID_NDK_HOME to "C:\bazel_ci\android-ndk-r10e".
-
-- Start -> Type "GCESysprep", run it.
- - The system will shut down and prepare itself for being used as an image to create new VMs.
diff --git a/docs/workflow.md b/docs/workflow.md
deleted file mode 100644
index 5ab0dd1..0000000
--- a/docs/workflow.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# Bazel CI workflow
-
-## Prerequisites
-
-Docker:
-
-* [At least
- 25GB](https://github.com/bazelbuild/continuous-integration/issues/73) of
- free disk space.
-
-* Your username in the "docker" group.
-
- Follow the instructions on [Ask Ubuntu](https://askubuntu.com/a/477554/671928).
-
-Gcloud:
-
-* You may need to authenticate and set the current project. To do so, run:
-
- ```
- gcloud auth login
- gcloud config set project bazel-public
- gcloud config set zone europe-west1-d
- ```
-
-## Pushing changes
-
-The process typically looks like:
-
-1. Make your change.
-2. Deploy to Google Cloud with `bazel run //gcr:deploy`.
-3. Gracefully restart the Jenkins instance: https://ci.bazel.build/safeExit
-
- If Jenkins doesn't exit fast enough, ensure that no important jobs are
- running and then: https://ci.bazel.build/exit
diff --git a/gce/BUILD b/gce/BUILD
deleted file mode 100644
index 2f08581..0000000
--- a/gce/BUILD
+++ /dev/null
@@ -1 +0,0 @@
-exports_files(["bootstrap-bazel.sh"])
diff --git a/gce/bootstrap-bazel.sh b/gce/bootstrap-bazel.sh
deleted file mode 100644
index 8b62a32..0000000
--- a/gce/bootstrap-bazel.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright 2016 The Bazel 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.
-
-set -eu
-
-# Install a bootstrap bazel; we use the latest released version
-PLATFORM=$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)
-BAZEL_VERSION=$(curl -I https://github.com/bazelbuild/bazel/releases/latest | grep '^Location: ' | sed 's|.*/||' | sed $'s/\r//')
-
-CI_HOME="$(echo ~ci)"
-
-mkdir -p "${CI_HOME}/bootstrap-bazel"
-cd "${CI_HOME}/bootstrap-bazel"
-
-installer="https://releases.bazel.build/${BAZEL_VERSION}/release/bazel-${BAZEL_VERSION}-without-jdk-installer-${PLATFORM}.sh"
-destination="${CI_HOME}/.bazel/${BAZEL_VERSION}"
-curl -L -o install.sh "${installer}"
-chmod 0755 ./install.sh
-rm -fr "${destination}"
-mkdir -p "${destination}"
-./install.sh \
- --base="${destination}" \
- --bin="${destination}/binary"
-ln -s "${destination}" "${CI_HOME}/.bazel/latest"
-
-chown -R ci "${CI_HOME}/.bazel"
-rm -rf "${CI_HOME}/bootstrap-bazel"
diff --git a/gce/cleanup-install.sh b/gce/cleanup-install.sh
deleted file mode 100644
index 2937873..0000000
--- a/gce/cleanup-install.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2016 The Bazel 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.
-
-cat >/etc/cron.daily/cleanup_bazel_installs <<'EOF'
-#!/bin/bash
-# Clean-up bazel installs
-BAZEL_INSTALLER_PREFIX="/home/ci/.cache/bazel/_bazel_ci/install"
-
-ctime=$(date +%s)
-for f in ${BAZEL_INSTALLER_PREFIX}/*; do
- mtime=$(stat -c "%X" $f/_embedded_binaries/install_base_key)
- if (( $ctime - $mtime > 86400*14 )); then
- # The last modification time is older than 14 days, delete.
- rm -fr $f
- fi
-done
-EOF
-
-chmod +x /etc/cron.daily/cleanup_bazel_installs
diff --git a/gce/jenkins-slave-windows-2016.ps1 b/gce/jenkins-slave-windows-2016.ps1
deleted file mode 100644
index 4a5087c..0000000
--- a/gce/jenkins-slave-windows-2016.ps1
+++ /dev/null
@@ -1,103 +0,0 @@
-# Stop on action error.
-$ErrorActionPreference = "Stop"
-
-if (-Not (Test-Path c:\bazel_ci)) {
- New-Item c:\bazel_ci -type directory
-}
-Set-Location c:\bazel_ci
-
-# TODO(philwo) remove if it turns out we don't need Chocolatey.
-# Upgrade Chocolatey.
-# Write-Host "Updating Chocolatey..."
-# & "C:\ProgramData\chocolatey\choco.exe" upgrade chocolatey
-# & "C:\ProgramData\chocolatey\choco.exe" upgrade all
-
-# Update MSYS2 once.
-Write-Host "Updating MSYS2 packages (round 1)..."
-Start-Process -Wait "c:\msys64\msys2_shell.cmd" -ArgumentList "-c", "pacman --noconfirm -Syuu"
-
-# Update again, in case the first round only upgraded core packages.
-Write-Host "Updating MSYS2 packages (round 2)..."
-Start-Process -Wait "c:\msys64\msys2_shell.cmd" -ArgumentList "-c", "pacman --noconfirm -Syuu"
-
-# Install a couple of Python modules required by TensorFlow.
-Write-Host "Updating Python packages..."
-& "C:\Python3\Scripts\pip.exe" install --upgrade `
- autograd `
- numpy `
- portpicker `
- protobuf `
- pyreadline `
- six `
- wheel
-
-# Fetch the instance ID from GCE.
-Write-Host "Fetching instance ID from GCE..."
-$webclient = (New-Object Net.WebClient)
-$webclient.Headers.Add("Metadata-Flavor", "Google")
-$jenkins_node = $webclient.DownloadString("http://metadata/computeMetadata/v1/instance/attributes/jenkins_node")
-
-# Get the latest release version number of Bazel.
-Write-Host "Grabbing latest Bazel version number from GitHub..."
-$url = "https://github.com/bazelbuild/bazel/releases/latest"
-$req = [system.Net.HttpWebRequest]::Create($url);
-$res = $req.getresponse();
-$res.Close();
-$bazel_version = $res.ResponseUri.AbsolutePath.TrimStart("/bazelbuild/bazel/releases/tag/")
-
-# Download the latest bazel.
-$folder = "c:\bazel_ci\installs\${bazel_version}"
-if (-Not (Test-Path "${folder}\bazel.exe")) {
- Write-Host "Downloading Bazel ${bazel_version}..."
- $url = "https://releases.bazel.build/${bazel_version}/release/bazel-${bazel_version}-without-jdk-windows-x86_64.exe"
- New-Item $folder -type directory -force
- (New-Object Net.WebClient).DownloadFile("${url}", "${folder}\bazel.exe")
-} else {
- Write-Host "Bazel ${bazel_version} was already downloaded, skipping..."
-}
-
-# Create a junction to the latest release.
-Write-Host "Creating helper junctions..."
-$latest_folder = "C:\bazel_ci\installs\latest"
-if (Test-Path $latest_folder) {
- Remove-Item -Force -Recurse $latest_folder
-}
-New-Item -ItemType Junction $latest_folder -Value $folder
-
-$bootstrap_folder = "C:\bazel_ci\installs\bootstrap"
-if (Test-Path $bootstrap_folder) {
- Remove-Item -Force -Recurse $bootstrap_folder
-}
-New-Item -ItemType Junction $bootstrap_folder -Value $folder
-
-# Find the JDK. The path changes frequently, so hardcoding it is not enough.
-$java = Get-ChildItem "c:\Program Files\Java\jdk*" | Select-Object -Index 0 | foreach { $_.FullName }
-Write-Host "Found latest JDK at ${java}..."
-
-# Save the Jenkins slave.jar to a suitable location.
-Write-Host "Downloading https://ci.bazel.build/jnlpJars/slave.jar..."
-Invoke-WebRequest https://ci.bazel.build/jnlpJars/slave.jar -OutFile slave.jar
-
-# Create the service that runs the Jenkins slave
-# We can't execute Java directly because then it mysteriously fails with
-# "Sockets error: 10106: create", so we redirect through Powershell
-# The path change is needed because Jenkins cannot execute a different git
-# binary on different nodes, so we need to simply use "git"
-Write-Host "Creating Jenkins slave startup script..."
-$jnlpUrl = "https://ci.bazel.build/computer/${jenkins_node}/slave-agent.jnlp"
-$agent_script = @"
-`$env:path="c:\tools\msys64\usr\bin;`$env:path"
-cd c:\bazel_ci
-# A path name with c:\ in the JNLP URL makes Java hang. I don't know why.
-# Jenkins tries to reconnect to the wrong port if the server is restarted.
-# -noReconnect makes the agent die, and it is then subsequently restarted by
-# Windows because it is a service, and then all is well.
-& "${java}\bin\java" -jar c:\bazel_ci\slave.jar -jnlpUrl ${jnlpUrl} -noReconnect
-"@
-Write-Output $agent_script | Out-File -Encoding ascii agent_script.ps1
-
-Write-Host "Creating Jenkins slave service..."
-& nssm install bazel_ci powershell c:\bazel_ci\agent_script.ps1
-& nssm set bazel_ci AppStdout c:\bazel_ci\stdout.log
-& nssm set bazel_ci AppStderr c:\bazel_ci\stderr.log
-& nssm start bazel_ci
diff --git a/gce/jenkins-slave.sh b/gce/jenkins-slave.sh
deleted file mode 100644
index f22451c..0000000
--- a/gce/jenkins-slave.sh
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2015 The Bazel 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.
-
-# Startup script for our various *nix executor nodes.
-# This is just setting up a slave to run.
-
-# We ignore errors on this script as we want to retry on errors.
-
-cat > /root/jenkins-startup <<'EOF'
-&> /root/jenkins-startup.log
-
-# Wait until the machine is set-up on creation.
-while ! (id ci >&/dev/null) || [ ! -f /home/ci/node_name ]; do
- sleep 60
-done
-
-# Reboot if required, before going into operation.
-if [ -f /var/run/reboot-required ]; then
- reboot
-fi
-
-NODE_NAME=$(cat /home/ci/node_name)
-
-# Setup NodeJS (only on Linux).
-if [[ ! -d /home/ci/node && $(uname) == "Linux" ]]; then
- mkdir -p /home/ci/node &&
- curl https://nodejs.org/dist/v8.9.4/node-v8.9.4-linux-x64.tar.xz | tar xJ -C /home/ci/node &&
- PATH=/home/ci/node/node-v8.9.4-linux-x64/bin:$PATH npm install -g typescript fried-twinkie
-fi
-
-cd /home/ci
-
-# Setup the various Android SDK paths.
-export ANDROID_SDK_PATH=$(echo /home/ci/android/android-sdk-*)
-export ANDROID_NDK_PATH=$(echo /home/ci/android/android-ndk-*)
-if [ -d "${ANDROID_SDK_PATH}" ]; then
- export ANDROID_SDK_BUILD_TOOLS_VERSION=$(ls $ANDROID_SDK_PATH/build-tools | sort -n | tail -1)
- export ANDROID_SDK_API_LEVEL=$(ls $ANDROID_SDK_PATH/platforms | cut -d '-' -f 2 | sort -n | tail -1)
-else
- unset ANDROID_SDK_PATH
-fi
-if [ -d "${ANDROID_NDK_PATH}" ]; then
- export ANDROID_NDK_API_LEVEL=$(ls $ANDROID_NDK_PATH/platforms | cut -d '-' -f 2 | sort -n | tail -1)
-else
- unset ANDROID_NDK_PATH
-fi
-
-# Keep the agent running, even if it crashes or the server is temporarily not available.
-while true; do
- wget -O slave.jar https://ci.bazel.build/jnlpJars/slave.jar &&
- sudo -u ci \
- ANDROID_SDK_PATH=$ANDROID_SDK_PATH \
- ANDROID_SDK_BUILD_TOOLS_VERSION=$ANDROID_SDK_BUILD_TOOLS_VERSION \
- ANDROID_SDK_API_LEVEL=$ANDROID_SDK_API_LEVEL \
- ANDROID_NDK_PATH=$ANDROID_NDK_PATH \
- ANDROID_NDK_API_LEVEL=$ANDROID_NDK_API_LEVEL \
- PATH=/home/ci/node/node-v8.9.4-linux-x64/bin:$PATH \
- $(which java) -jar slave.jar -jnlpUrl https://ci.bazel.build/computer/${NODE_NAME}/slave-agent.jnlp -noReconnect
-
- # Something went wrong. Sleep and retry in 1 minute.
- sleep 60
-done
-
-EOF
-
-# As this init script is called before the setup is complete, we have to do
-# some dance to make sure we only start the actual script once bash (optional
-# on some systems) is installed.
-
-cat > /root/call-jenkins-startup <<'EOF'
-PATH=$PATH:/usr/local/bin ; export PATH
-echo `date` PATH=$PATH >> /root/early-startup.log
-
-while [ -z "`which bash`" ] ; do
- echo `date` Waiting for bash to be installed >> /root/early-startup.log
- sleep 60
-done
-
-bash /root/jenkins-startup
-EOF
-
-# Start the actual jenkins daemon
-echo /bin/sh /root/call-jenkins-startup | batch
diff --git a/gce/jenkins.yml b/gce/jenkins.yml
deleted file mode 100644
index 2ed73f7..0000000
--- a/gce/jenkins.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-apiVersion: v1
-kind: Pod
-metadata:
- name: jenkins
-spec:
- containers:
- - name: jenkins-master
- image: gcr.io/bazel-public/jenkins-master
- imagePullPolicy: Always
- volumeMounts:
- - name: jenkins-home
- mountPath: /var/jenkins_home
- readOnly: false
- - name: secrets
- mountPath: /opt/secrets
- readOnly: true
- ports:
- - name: www
- containerPort: 8080
- hostPort: 80
- protocol: TCP
- - name: jenkins-slave
- containerPort: 50000
- hostPort: 50000
- protocol: TCP
- - name: deploy-slave
- image: gcr.io/bazel-public/deploy-slave
- imagePullPolicy: Always
- volumeMounts:
- - name: secrets
- mountPath: /opt/secrets
- readOnly: true
- - name: sync-gerrit-github
- image: gcr.io/bazel-public/sync-gerrit-github
- imagePullPolicy: Always
- volumeMounts:
- - name: secrets
- mountPath: /opt/secrets
- readOnly: true
- restartPolicy: Always
- dnsPolicy: Default
- volumes:
- - name: jenkins-home
- hostPath:
- path: /volumes/jenkins_home
- - name: secrets
- hostPath:
- path: /volumes/secrets
diff --git a/gce/linux-android.sh b/gce/linux-android.sh
deleted file mode 100644
index 09fc790..0000000
--- a/gce/linux-android.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright 2015 The Bazel 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.
-
-# Android support
-
-set -eu
-
-# NDK
-mkdir -p /home/ci/android
-cd /home/ci/android
-curl -o android-ndk.zip https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip
-unzip android-ndk.zip
-rm android-ndk.zip
-
-# Android SDK
-mkdir -p /home/ci/android/android-sdk-linux
-cd /home/ci/android/android-sdk-linux
-curl -o android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
-unzip android-sdk.zip
-rm android-sdk.zip
-expect -c '
-set timeout -1;
-spawn tools/bin/sdkmanager --update
-expect {
- "Accept? (y/N)" { exp_send "y\r" ; exp_continue }
- eof
-}
-'
-
-# platform-tools is necessary for ADB. build-tools 26.0.1 is the oldest version
-# that Bazel supports as of 0.5.4 and is necessary for aapt, dx, apksigner, etc.
-# platforms 24, 25 and 26 are installed in case any future test is written that
-# specifically relies on one of them. extras;android;m2repository is necessary
-# for tests of our support library integration.
-# This should be kept in sync with mac/mac-android.sh.
-yes | tools/bin/sdkmanager \
- "platform-tools" \
- "build-tools;27.0.3" \
- "platforms;android-24" \
- "platforms;android-25" \
- "platforms;android-26" \
- "platforms;android-27" \
- "extras;android;m2repository"
-chown -R ci /home/ci/android
diff --git a/gce/mount-volumes.sh b/gce/mount-volumes.sh
deleted file mode 100644
index 4b3c865..0000000
--- a/gce/mount-volumes.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright 2015 The Bazel 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.
-
-# Mount the permanent volumes for the Docker image.
-
-set -eu
-
-mkdir -p /volumes
-mount -t ext4 /dev/disk/by-id/google-volumes /volumes
-
-mkdir -p /volumes/{jenkins_home,secrets}
-# Allow ci (1000) user from docker images to access those directory.
-# We use the uid because the host do not have the ci user.
-chown 1000 /volumes/{jenkins_home,secrets}
diff --git a/gce/ubuntu-14-04-slave.sh b/gce/ubuntu-14-04-slave.sh
deleted file mode 100644
index b055ea3..0000000
--- a/gce/ubuntu-14-04-slave.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright 2015 The Bazel 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.
-
-# Setup scripts for Ubuntu 14.04
-
-# Android SDK requires 32-bits libraries.
-dpkg --add-architecture i386
-apt-get -y update
-apt-get -y dist-upgrade
-
-echo y | add-apt-repository ppa:webupd8team/java
-apt-get -y update
-apt-get -y install zip g++ zlib1g-dev wget git unzip python python3 curl realpath xvfb
-
-# Should accept the licence:
-yes | apt-get -y install oracle-java8-installer
-
-# Android SDK requires 32-bits libraries
-apt-get -y install libncurses5:i386 libstdc++6:i386 zlib1g:i386
-apt-get -y install expect # Needed to 'yes' the SDK licenses.
-
-# Dependencies for TensorFlow
-apt-get -y install python-numpy swig python-dev python-pip libcurl3-dev
-pip install mock
diff --git a/gce/ubuntu-16-04-slave.sh b/gce/ubuntu-16-04-slave.sh
deleted file mode 100644
index 0135872..0000000
--- a/gce/ubuntu-16-04-slave.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 2017 The Bazel 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.
-
-# Setup scripts for Ubuntu 16.04.
-
-# Android SDK requires 32-bits libraries.
-dpkg --add-architecture i386
-apt-get -y update
-apt-get -y dist-upgrade
-
-# Explicitly install the OpenJDK 8 before anything else to prevent
-# Ubuntu from pulling in OpenJDK 9.
-apt-get -y install \
- openjdk-8-jdk \
- openjdk-8-source
-
-packages=(
- # Bazel dependencies.
- build-essential
- curl
- git
- python
- python3
- unzip
- wget
- xvfb
- zip
- zlib1g-dev
-
- # Dependencies for Android SDK.
- # https://developer.android.com/studio/troubleshoot.html#linux-libraries
- # https://code.google.com/p/android/issues/detail?id=207212
- expect
- libbz2-1.0:i386
- libncurses5:i386
- libstdc++6:i386
- libz1:i386
-
- # Dependencies for TensorFlow.
- libcurl3-dev
- python-dev
- python-numpy
- python-pip
- python-wheel
- swig
-)
-apt-get -y install "${packages[@]}"
-
-pip install mock
diff --git a/gce/ubuntu-docker.sh b/gce/ubuntu-docker.sh
deleted file mode 100644
index f66f031..0000000
--- a/gce/ubuntu-docker.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/bash
-
-set -eu
-
-apt-get -y install apt-transport-https ca-certificates
-
-# From https://download.docker.com/linux/ubuntu/gpg
-cat <<'EOF' | apt-key add -
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-mQINBFit2ioBEADhWpZ8/wvZ6hUTiXOwQHXMAlaFHcPH9hAtr4F1y2+OYdbtMuth
-lqqwp028AqyY+PRfVMtSYMbjuQuu5byyKR01BbqYhuS3jtqQmljZ/bJvXqnmiVXh
-38UuLa+z077PxyxQhu5BbqntTPQMfiyqEiU+BKbq2WmANUKQf+1AmZY/IruOXbnq
-L4C1+gJ8vfmXQt99npCaxEjaNRVYfOS8QcixNzHUYnb6emjlANyEVlZzeqo7XKl7
-UrwV5inawTSzWNvtjEjj4nJL8NsLwscpLPQUhTQ+7BbQXAwAmeHCUTQIvvWXqw0N
-cmhh4HgeQscQHYgOJjjDVfoY5MucvglbIgCqfzAHW9jxmRL4qbMZj+b1XoePEtht
-ku4bIQN1X5P07fNWzlgaRL5Z4POXDDZTlIQ/El58j9kp4bnWRCJW0lya+f8ocodo
-vZZ+Doi+fy4D5ZGrL4XEcIQP/Lv5uFyf+kQtl/94VFYVJOleAv8W92KdgDkhTcTD
-G7c0tIkVEKNUq48b3aQ64NOZQW7fVjfoKwEZdOqPE72Pa45jrZzvUFxSpdiNk2tZ
-XYukHjlxxEgBdC/J3cMMNRE1F4NCA3ApfV1Y7/hTeOnmDuDYwr9/obA8t016Yljj
-q5rdkywPf4JF8mXUW5eCN1vAFHxeg9ZWemhBtQmGxXnw9M+z6hWwc6ahmwARAQAB
-tCtEb2NrZXIgUmVsZWFzZSAoQ0UgZGViKSA8ZG9ja2VyQGRvY2tlci5jb20+iQI3
-BBMBCgAhBQJYrefAAhsvBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEI2BgDwO
-v82IsskP/iQZo68flDQmNvn8X5XTd6RRaUH33kXYXquT6NkHJciS7E2gTJmqvMqd
-tI4mNYHCSEYxI5qrcYV5YqX9P6+Ko+vozo4nseUQLPH/ATQ4qL0Zok+1jkag3Lgk
-jonyUf9bwtWxFp05HC3GMHPhhcUSexCxQLQvnFWXD2sWLKivHp2fT8QbRGeZ+d3m
-6fqcd5Fu7pxsqm0EUDK5NL+nPIgYhN+auTrhgzhK1CShfGccM/wfRlei9Utz6p9P
-XRKIlWnXtT4qNGZNTN0tR+NLG/6Bqd8OYBaFAUcue/w1VW6JQ2VGYZHnZu9S8LMc
-FYBa5Ig9PxwGQOgq6RDKDbV+PqTQT5EFMeR1mrjckk4DQJjbxeMZbiNMG5kGECA8
-g383P3elhn03WGbEEa4MNc3Z4+7c236QI3xWJfNPdUbXRaAwhy/6rTSFbzwKB0Jm
-ebwzQfwjQY6f55MiI/RqDCyuPj3r3jyVRkK86pQKBAJwFHyqj9KaKXMZjfVnowLh
-9svIGfNbGHpucATqREvUHuQbNnqkCx8VVhtYkhDb9fEP2xBu5VvHbR+3nfVhMut5
-G34Ct5RS7Jt6LIfFdtcn8CaSas/l1HbiGeRgc70X/9aYx/V/CEJv0lIe8gP6uDoW
-FPIZ7d6vH+Vro6xuWEGiuMaiznap2KhZmpkgfupyFmplh0s6knymuQINBFit2ioB
-EADneL9S9m4vhU3blaRjVUUyJ7b/qTjcSylvCH5XUE6R2k+ckEZjfAMZPLpO+/tF
-M2JIJMD4SifKuS3xck9KtZGCufGmcwiLQRzeHF7vJUKrLD5RTkNi23ydvWZgPjtx
-Q+DTT1Zcn7BrQFY6FgnRoUVIxwtdw1bMY/89rsFgS5wwuMESd3Q2RYgb7EOFOpnu
-w6da7WakWf4IhnF5nsNYGDVaIHzpiqCl+uTbf1epCjrOlIzkZ3Z3Yk5CM/TiFzPk
-z2lLz89cpD8U+NtCsfagWWfjd2U3jDapgH+7nQnCEWpROtzaKHG6lA3pXdix5zG8
-eRc6/0IbUSWvfjKxLLPfNeCS2pCL3IeEI5nothEEYdQH6szpLog79xB9dVnJyKJb
-VfxXnseoYqVrRz2VVbUI5Blwm6B40E3eGVfUQWiux54DspyVMMk41Mx7QJ3iynIa
-1N4ZAqVMAEruyXTRTxc9XW0tYhDMA/1GYvz0EmFpm8LzTHA6sFVtPm/ZlNCX6P1X
-zJwrv7DSQKD6GGlBQUX+OeEJ8tTkkf8QTJSPUdh8P8YxDFS5EOGAvhhpMBYD42kQ
-pqXjEC+XcycTvGI7impgv9PDY1RCC1zkBjKPa120rNhv/hkVk/YhuGoajoHyy4h7
-ZQopdcMtpN2dgmhEegny9JCSwxfQmQ0zK0g7m6SHiKMwjwARAQABiQQ+BBgBCAAJ
-BQJYrdoqAhsCAikJEI2BgDwOv82IwV0gBBkBCAAGBQJYrdoqAAoJEH6gqcPyc/zY
-1WAP/2wJ+R0gE6qsce3rjaIz58PJmc8goKrir5hnElWhPgbq7cYIsW5qiFyLhkdp
-YcMmhD9mRiPpQn6Ya2w3e3B8zfIVKipbMBnke/ytZ9M7qHmDCcjoiSmwEXN3wKYI
-mD9VHONsl/CG1rU9Isw1jtB5g1YxuBA7M/m36XN6x2u+NtNMDB9P56yc4gfsZVES
-KA9v+yY2/l45L8d/WUkUi0YXomn6hyBGI7JrBLq0CX37GEYP6O9rrKipfz73XfO7
-JIGzOKZlljb/D9RX/g7nRbCn+3EtH7xnk+TK/50euEKw8SMUg147sJTcpQmv6UzZ
-cM4JgL0HbHVCojV4C/plELwMddALOFeYQzTif6sMRPf+3DSj8frbInjChC3yOLy0
-6br92KFom17EIj2CAcoeq7UPhi2oouYBwPxh5ytdehJkoo+sN7RIWua6P2WSmon5
-U888cSylXC0+ADFdgLX9K2zrDVYUG1vo8CX0vzxFBaHwN6Px26fhIT1/hYUHQR1z
-VfNDcyQmXqkOnZvvoMfz/Q0s9BhFJ/zU6AgQbIZE/hm1spsfgvtsD1frZfygXJ9f
-irP+MSAI80xHSf91qSRZOj4Pl3ZJNbq4yYxv0b1pkMqeGdjdCYhLU+LZ4wbQmpCk
-SVe2prlLureigXtmZfkqevRz7FrIZiu9ky8wnCAPwC7/zmS18rgP/17bOtL4/iIz
-QhxAAoAMWVrGyJivSkjhSGx1uCojsWfsTAm11P7jsruIL61ZzMUVE2aM3Pmj5G+W
-9AcZ58Em+1WsVnAXdUR//bMmhyr8wL/G1YO1V3JEJTRdxsSxdYa4deGBBY/Adpsw
-24jxhOJR+lsJpqIUeb999+R8euDhRHG9eFO7DRu6weatUJ6suupoDTRWtr/4yGqe
-dKxV3qQhNLSnaAzqW/1nA3iUB4k7kCaKZxhdhDbClf9P37qaRW467BLCVO/coL3y
-Vm50dwdrNtKpMBh3ZpbB1uJvgi9mXtyBOMJ3v8RZeDzFiG8HdCtg9RvIt/AIFoHR
-H3S+U79NT6i0KPzLImDfs8T7RlpyuMc4Ufs8ggyg9v3Ae6cN3eQyxcK3w0cbBwsh
-/nQNfsA6uu+9H7NhbehBMhYnpNZyrHzCmzyXkauwRAqoCbGCNykTRwsur9gS41TQ
-M8ssD1jFheOJf3hODnkKU+HKjvMROl1DK7zdmLdNzA1cvtZH/nCC9KPj1z8QC47S
-xx+dTZSx4ONAhwbS/LN3PoKtn8LPjY9NP9uDWI+TWYquS2U+KHDrBDlsgozDbs/O
-jCxcpDzNmXpWQHEtHU7649OXHP7UeNST1mCUCH5qdank0V1iejF6/CfTFU4MfcrG
-YT90qFF93M3v01BbxP+EIY2/9tiIPbrd
-=0YYh
------END PGP PUBLIC KEY BLOCK-----
-EOF
-
-add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
-
-apt-get -y update
-apt-get -y install docker-ce
-
-# Docker group
-usermod -aG docker ci
diff --git a/gce/utils/commands.sh b/gce/utils/commands.sh
deleted file mode 100644
index dca38e0..0000000
--- a/gce/utils/commands.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 The Bazel 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.
-
-# Some common methods to talk to GCE
-set -eu
-
-# Print a log message if VERBOSE is set to true
-function _log() {
- echo "[$(basename "$0"):${FUNCNAME[2]}:${BASH_LINENO[1]}]" "$@"
-}
-function log() {
- if [ "${VERBOSE-}" = yes ]; then
- echo -n "INFO: "
- _log "$@"
- fi
-}
-
-# Test whether $1 is the name of an existing instance on GCE
-function test_vm() {
- (( $(gcloud compute instances list --filter="name=$1" | wc -l) > 1 ))
-}
-
-# Wait for a VM $1 in zone $2 to be up and running using ssh.
-# This function will wait for at most $3 seconds.
-function wait_vm() {
- local vm="$1"
- local zone="$2"
- local timeout="${3-60}" # Wait for 1 minute maximum by default
- local cmd="${4-/bin/true}"
- local starttime="$(date +%s)"
- while (( "$(date +%s)" - "$starttime" < "$timeout" )); do
- # gcloud compute ssh forward the return code of the executed command.
- if gcloud compute ssh --zone="$zone" --command "${cmd}" "$vm" &>/dev/null
- then
- return 0
- fi
- done
- return 1
-}
-
-# SSH to a VM $1 on zone $2 and execute the command giving by the rest of
-# the arguments.
-function ssh_command() {
- local TAG="$1"
- local LOCATION="$2"
- local tmpdir="${TMPDIR:-/tmp}"
- # ${tmp} points to a file containing the list of commands to execute.
- local tmp="$(mktemp ${tmpdir%%/}/vm-ssh.XXXXXXXX)"
- trap "rm -f ${tmp}" EXIT
- shift 2
- # Truncate the list of commands
- echo -n >"${tmp}"
- # And then add the commands provided as argument.
- for i in "$@"; do
- if [ -f "$i" ]; then
- cat "$i" >>"${tmp}"
- else
- echo "$i" >>"${tmp}"
- fi
- done
- < "${tmp}" gcloud compute ssh --zone="${LOCATION}" \
- --command "cat >/tmp/s.sh; sudo bash /tmp/s.sh; rm /tmp/s.sh" \
- "${TAG}"
- rm -f "${tmp}"
- trap - EXIT
-}
diff --git a/gce/vm.sh b/gce/vm.sh
deleted file mode 100755
index 0550d5c..0000000
--- a/gce/vm.sh
+++ /dev/null
@@ -1,358 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 The Bazel 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.
-
-# Script to easily re-image the various vms on GCE
-set -eu
-
-# List of executor nodes in the following format:
-# GCE-VM-NAME GCE-BASE-IMAGE JENKINS-NODE LOCATION STARTUP-METADATA SETUP-SCRIPTS
-# Where
-# GCE-VM-NAME is the VM name on GCE
-# GCE-BASE-IMAGE is the name of the base image in GCE
-# (see `gcloud compute images list`)
-# JENKINS-NODE is the name of the node in Jenkins
-# LOCATION is the location in GCE (e.g. europe-west1-d)
-# NETWORK is the GCE network the instance has to be created on.
-# STARTUP-METADATA is the metadata argument to gcloud to launch the right
-# startup script.
-# SETUP-SCRIPTS is a list of shell scripts to adapt the executor node. It should
-# create a ci user with its home in /home/ci
-# and ends with writing to /home/ci/node_name the name
-# of the jenkins node.
-
-# Executor nodes for ci.bazel.build
-SLAVES=(
- "ubuntu-14-04-slave-1 ubuntu-1404-lts ubuntu_14.04-x86_64-1 europe-west1-d default startup-script=jenkins-slave.sh ubuntu-14-04-slave.sh ubuntu-docker.sh bootstrap-bazel.sh linux-android.sh cleanup-install.sh"
- "ubuntu-14-04-slave-2 ubuntu-1404-lts ubuntu_14.04-x86_64-2 europe-west1-d default startup-script=jenkins-slave.sh ubuntu-14-04-slave.sh ubuntu-docker.sh bootstrap-bazel.sh linux-android.sh cleanup-install.sh"
- "ubuntu-14-04-slave-3 ubuntu-1404-lts ubuntu_14.04-x86_64-3 europe-west1-d default startup-script=jenkins-slave.sh ubuntu-14-04-slave.sh ubuntu-docker.sh bootstrap-bazel.sh linux-android.sh cleanup-install.sh"
- "ubuntu-14-04-slave-4 ubuntu-1404-lts ubuntu_14.04-x86_64-4 europe-west1-d default startup-script=jenkins-slave.sh ubuntu-14-04-slave.sh ubuntu-docker.sh bootstrap-bazel.sh linux-android.sh cleanup-install.sh"
- "ubuntu-16-04-slave-1 ubuntu-1604-lts ubuntu_16.04-x86_64-1 europe-west1-d default startup-script=jenkins-slave.sh ubuntu-16-04-slave.sh ubuntu-docker.sh bootstrap-bazel.sh linux-android.sh cleanup-install.sh"
- "ubuntu-16-04-slave-2 ubuntu-1604-lts ubuntu_16.04-x86_64-2 europe-west1-d default startup-script=jenkins-slave.sh ubuntu-16-04-slave.sh ubuntu-docker.sh bootstrap-bazel.sh linux-android.sh cleanup-install.sh"
- "ubuntu-16-04-slave-3 ubuntu-1604-lts ubuntu_16.04-x86_64-3 europe-west1-d default startup-script=jenkins-slave.sh ubuntu-16-04-slave.sh ubuntu-docker.sh bootstrap-bazel.sh linux-android.sh cleanup-install.sh"
- "ubuntu-16-04-slave-4 ubuntu-1604-lts ubuntu_16.04-x86_64-4 europe-west1-d default startup-script=jenkins-slave.sh ubuntu-16-04-slave.sh ubuntu-docker.sh bootstrap-bazel.sh linux-android.sh cleanup-install.sh"
- "freebsd-11-slave-1 https://www.googleapis.com/compute/v1/projects/freebsd-org-cloud-dev/global/images/freebsd-11-1-stable-amd64-2017-12-28 freebsd-11-1 europe-west1-d default startup-script=jenkins-slave.sh freebsd-slave.sh freebsd-ci-homedir.sh"
- "freebsd-11-slave-2 https://www.googleapis.com/compute/v1/projects/freebsd-org-cloud-dev/global/images/freebsd-11-1-stable-amd64-2017-12-28 freebsd-11-2 europe-west1-d default startup-script=jenkins-slave.sh freebsd-slave.sh freebsd-ci-homedir.sh"
- "freebsd-12-slave-1 https://www.googleapis.com/compute/v1/projects/freebsd-org-cloud-dev/global/images/freebsd-12-0-current-amd64-2017-12-28 freebsd-12-1 europe-west1-d default startup-script=jenkins-slave.sh freebsd-slave.sh freebsd-ci-homedir.sh"
- "freebsd-12-slave-2 https://www.googleapis.com/compute/v1/projects/freebsd-org-cloud-dev/global/images/freebsd-12-0-current-amd64-2017-12-28 freebsd-12-2 europe-west1-d default startup-script=jenkins-slave.sh freebsd-slave.sh freebsd-ci-homedir.sh"
- # Fow Windows, we use a custom image with pre-installed MSVC.
- "windows-slave-1 windows-server-2016-dc-bazel-ci-v20180115 windows-x86_64-1 europe-west1-d default windows-startup-script-ps1=jenkins-slave-windows-2016.ps1"
- "windows-slave-2 windows-server-2016-dc-bazel-ci-v20180115 windows-x86_64-2 europe-west1-d default windows-startup-script-ps1=jenkins-slave-windows-2016.ps1"
-)
-
-# Jenkins controller for ci.bazel.build
-MASTER=(
- # VM name
- "jenkins"
- # Zone
- "europe-west1-d"
- # Metadata specification
- "google-container-manifest=jenkins.yml,startup-script=mount-volumes.sh"
- # Disk specification
- "name=jenkins-volumes-ssd,device-name=volumes"
- # Address name
- "ci"
- # Network name
- "default"
- # Instance group
- "ci-instance-group"
-)
-
-# You can use these VMs to test anything you want on this platform. They are not
-# connected to Jenkins.
-TESTING=(
- "ubuntu-14-04-testing ubuntu-1404-lts ubuntu_14.04-x86_64-testing europe-west1-d testing ubuntu-14-04-slave.sh bootstrap-bazel.sh linux-android.sh cleanup-install.sh"
- "ubuntu-16-04-testing ubuntu-1604-lts ubuntu_16.04-x86_64-testing europe-west1-d testing ubuntu-16-04-slave.sh bootstrap-bazel.sh linux-android.sh cleanup-install.sh"
- "freebsd-11-testing https://www.googleapis.com/compute/v1/projects/freebsd-org-cloud-dev/global/images/freebsd-11-1-stable-amd64-2017-12-28 freebsd-11-testing europe-west1-d testing freebsd-slave.sh freebsd-ci-homedir.sh"
- "freebsd-12-testing https://www.googleapis.com/compute/v1/projects/freebsd-org-cloud-dev/global/images/freebsd-12-0-current-amd64-2017-12-28 freebsd-12-testing europe-west1-d testing freebsd-slave.sh freebsd-ci-homedir.sh"
- "windows-testing windows-server-2016-dc-bazel-ci-v20180115 windows-x86_64-testing europe-west1-d testing"
-)
-
-cd "$(dirname "${BASH_SOURCE[0]}")"
-
-source utils/commands.sh
-
-# Create the container engine VM containing the jenkins instance.
-function create_master() {
- local flavour="${1:-}"
- local name="$1"
- local location="$2"
- local metadata="$3"
- local disk="$4"
- local address="$5"
- local network="$6"
- local group="$7"
-
- gcloud compute instances create "$name" --tags jenkins \
- --zone "$location" --machine-type n1-standard-16 \
- --image-family container-vm --image-project google-containers \
- --metadata-from-file "$metadata" \
- --min-cpu-platform "Intel Skylake" \
- --boot-disk-type pd-ssd --boot-disk-size 250GB \
- --network "$network" \
- --address "$address" --disk "$disk"
-
- gcloud compute instance-groups unmanaged add-instances \
- "$group" --instances "$name" --zone "$location"
-}
-
-# Create a node named $1 whose image is $2 (see `gcloud compute image list`)
-# and whose jenkins node name is $3. The other arguments are a list of setup
-# scripts to run as root on instance creation. The `jenkins-slave.sh` script
-# will be used as the startup script for the instance.
-function create_slave() {
- local TAG="$1"
- local IMAGE="$2"
- local JENKINS_NODE="$3"
- local LOCATION="$4"
- local NETWORK="$5"
- local STARTUP_METADATA="$6"
- shift 6
-
- if [[ $TAG == *-testing ]]; then
- MACHINE_TYPE="n1-standard-8"
- BOOT_DISK_SIZE="250GB"
- else
- MACHINE_TYPE="n1-standard-32"
- BOOT_DISK_SIZE="500GB"
- fi
-
- CPU_PLATFORM="Intel Skylake"
- if [[ $IMAGE == ubuntu-* ]]; then
- IMAGE_FLAG="--image-project=ubuntu-os-cloud --image-family=$IMAGE"
- LOCAL_SSD="--local-ssd interface=nvme"
- else
- IMAGE_FLAG="--image $IMAGE"
- LOCAL_SSD="--local-ssd interface=scsi"
- fi
-
- gcloud compute instances create "$TAG" \
- --zone "$LOCATION" \
- --machine-type "$MACHINE_TYPE" \
- --network "$NETWORK" \
- $IMAGE_FLAG \
- --metadata-from-file "$STARTUP_METADATA" \
- --metadata jenkins_node="$JENKINS_NODE" \
- --min-cpu-platform "$CPU_PLATFORM" \
- --boot-disk-type pd-ssd --boot-disk-size "$BOOT_DISK_SIZE" \
- $LOCAL_SSD
-
- case "$TAG" in
- windows-*)
- # Nothing to do here.
- ;;
-
- freebsd*)
- # Wait a bit for the VM to fully start.
- wait_vm "$TAG" "$LOCATION" 120 /usr/bin/true
-
- # Install bash directly calling gcloud, as the ssh_command function
- # already depends on bash being installed and in PATH.
- gcloud compute ssh --zone="${LOCATION}" --command "sudo pkg install -y bash" "${TAG}"
-
- # Create the jenkins user, run additional set-up scripts and mark
- # the install process as finished.
- ssh_command "$TAG" "$LOCATION" \
- "pw useradd -n ci -s /usr/local/bin/bash -d /home/ci -m -w no" \
- "$@" \
- "echo \"echo -n '$JENKINS_NODE' >/home/ci/node_name\" | su -m ci"
- ;;
-
- *)
- # Wait a bit for the VM to fully start.
- wait_vm "$TAG" "$LOCATION"
-
- # Create the jenkins user, run additional set-up scripts and mark
- # the install process as finished.
- ssh_command "$TAG" "$LOCATION" \
- "sudo adduser --system --home /home/ci ci" \
- "$@" \
- "su ci -s /bin/bash -c \"echo -n '$JENKINS_NODE' >/home/ci/node_name\""
- ;;
- esac
-}
-
-# Updates the --metadata and --metadata-from-file values of an existing VM.
-#
-# Primary purpose is to propagate changes to the startup scripts (e.g.
-# mount-volumes.sh for the jenkins controller, jenkins-slave.sh for Ubuntu nodes,
-# etc.) without recreating the VM. The update needs a VM reboot to take effect.
-function update_metadata() {
- local tag="${MASTER[0]}"
- local metadata_flag=""
- local location="${MASTER[1]}"
- local startup_metadata="${MASTER[2]}"
-
- if [ ! "$1" = jenkins ]; then
- local args="$(get_slave_by_name "$1")"
- [ -n "$args" ] || (echo "Unknown vm $1" >&2; exit 1)
-
- tag="$(echo $args | cut -d' ' -f1)"
- metadata_flag="--metadata jenkins_node=$(echo $args | cut -d' ' -f3)"
- location="$(echo $args | cut -d' ' -f4)"
- startup_metadata="$(echo $args | cut -d' ' -f6)"
- fi
-
- gcloud compute instances add-metadata "$tag" \
- --zone "$location" \
- $metadata_flag \
- --metadata-from-file "$startup_metadata"
-}
-
-function get_slave_by_name() {
- for i in "${SLAVES[@]}" "${TESTING[@]}"; do
- if [[ "$i" =~ ^"$1 " ]]; then
- echo "$i"
- fi
- done
-}
-
-function create_vm() {
- if [ "$1" = "jenkins" ]; then
- create_master "${MASTER[@]}"
- else
- local args="$(get_slave_by_name "$1")"
- [ -n "$args" ] || (echo "Unknown vm $1" >&2; exit 1)
- create_slave $args
- fi
-}
-
-function action() {
- local action=$1
- shift
- if (( $# == 0 )); then
- $action jenkins
- for i in "${SLAVES[@]}"; do
- $action "${i%% *}"
- done
- else
- for i in "$@"; do
- $action "$i"
- done
- fi
- wait %?gcloud 2>/dev/null || true # wait fails if the job already finished.
-}
-
-function test_slave() {
- local TAG=$1
- if test_vm $TAG; then
- if [ "$TAG" = "${MASTER[0]}" ]; then
- echo "${MASTER[1]}"
- else
- get_slave_by_name "$TAG" | cut -d " " -f 4
- fi
- fi
-}
-
-function vm_command() {
- local command=$1
- local TAG=$2
- local location="$(test_slave "$TAG")"
- shift 2
- if [ -n "$location" ]; then
- gcloud compute instances $command --quiet --zone=$location $TAG "$@"
- fi
-}
-
-function delete_vm() {
- vm_command delete "$@"
-}
-
-function stop_vm() {
- vm_command stop "$@"
-}
-
-function start_vm() {
- vm_command start "$@"
-}
-
-function do_ssh_command() {
- tag=$1
- shift
- location="$(test_slave "${tag}")"
- if [ -z "${location}" ]; then
- echo "Slave ${tag} was not found or is not running" >&2
- else
- ssh_command "$tag" "$location" "$@"
- fi
-}
-
-function print_vm_name() {
- echo $1
-}
-
-command="${1-}"
-shift || true
-
-case "${command}" in
- "stop")
- action stop_vm "$@"
- ;;
- "start")
- action start_vm "$@"
- ;;
- "create")
- action create_vm "$@"
- ;;
- "delete")
- action delete_vm "$@"
- ;;
- "reimage")
- action delete_vm "$@"
- action create_vm "$@"
- ;;
- "update_metadata")
- action update_metadata "$@"
- ;;
- "ssh_command")
- do_ssh_command "$@"
- ;;
- "vms"|"list")
- action print_vm_name "$@"
- ;;
- "ssh")
- tag=$1
- location="$(test_slave "${tag}")"
- if [ -z "${location}" ]; then
- echo "Slave ${tag} was not found or is not running" >&2
- else
- gcloud compute ssh "$tag" --zone "$location"
- fi
- ;;
- "kill_container")
- tag="$1"
- do_ssh_command "$1" 'sudo docker stop $(sudo docker ps -q -f status=running -f ancestor='"$2"')'
- ;;
- *)
- echo "Usage: $0 <command> ([<vm> ... <vm>])" >&2
- echo " $0 ssh_command <vm> <arg0> [<arg1>..<argN>]" >&2
- echo " $0 ssh <vm>" >&2
- echo " $0 kill_container <vm> <image>" >&2
- echo " - command can be:" >&2
- echo " create: create the VM, fails if the VM already exists." >&2
- echo " delete: delete the VM, fails if the VM does not exists." >&2
- echo " reimage: reimage the VM, equivalent to delete followed by create." >&2
- echo " update_metadata: update the VM metadata, the VM must already exists." >&2
- echo " start: start the VM, the VM must exists." >&2
- echo " stop: stop the VM, the VM must exists." >&2
- echo " - ssh_command executes a command via SSH on the specified VM." >&2
- echo " - ssh launch a secure shell on the specified VM." >&2
- echo " - kill_container kills container that runs the specified image on the" >&2
- echo " specified VM." >&2
- echo " Unless you specify a specific VM, this tool will operate on all VMs " >&2
- echo " (Jenkins master and slaves)." >&2
- exit 1
- ;;
-esac
diff --git a/gcr/BUILD b/gcr/BUILD
deleted file mode 100644
index e9e67c5..0000000
--- a/gcr/BUILD
+++ /dev/null
@@ -1,22 +0,0 @@
-load(
- "@io_bazel_rules_docker//docker:docker.bzl",
- "docker_bundle",
-)
-load(
- "@io_bazel_rules_docker//contrib:push-all.bzl",
- "docker_push",
-)
-
-docker_bundle(
- name = "bundle",
- images = {
- "gcr.io/bazel-public/jenkins-master:latest": "//jenkins:jenkins",
- "gcr.io/bazel-public/deploy-slave:latest": "//jenkins:deploy.docker",
- "gcr.io/bazel-public/sync-gerrit-github:latest": "//gerrit-github-sync:gerrit-github-sync",
- },
-)
-
-docker_push(
- name = "deploy",
- bundle = ":bundle",
-)
diff --git a/jenkins/BUILD b/jenkins/BUILD
deleted file mode 100644
index 2a01e1c..0000000
--- a/jenkins/BUILD
+++ /dev/null
@@ -1,257 +0,0 @@
-# Copyright 2015 The Bazel 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(default_visibility = ["//jenkins:__subpackages__"])
-
-# Configuration for our Jenkins instance
-load("@io_bazel_rules_docker//docker:docker.bzl", "docker_build")
-load("//jenkins/build_defs:templates.bzl", "expand_template")
-load("//jenkins/build_defs:jenkins.bzl", "jenkins_node", "jenkins_docker_build", "jenkins_job", "jenkins_nodes", "jenkins_node_names")
-
-#
-# Nodes
-#
-
-DARWIN_PREFIX = "darwin-x86_64"
-DARWIN_COUNT = 8
-
-FREEBSD_11_PREFIX = "freebsd-11"
-FREEBSD_11_COUNT = 2
-
-UBUNTU_1404_PREFIX = "ubuntu_14.04-x86_64"
-UBUNTU_1404_COUNT = 4
-
-UBUNTU_1604_PREFIX = "ubuntu_16.04-x86_64"
-UBUNTU_1604_COUNT = 4
-
-WINDOWS_PREFIX = "windows-x86_64"
-WINDOWS_COUNT = 2
-
-# Physical machines
-jenkins_nodes(
- DARWIN_PREFIX,
- DARWIN_COUNT,
- remote_fs = "/Users/ci",
- tunnel = "master.ci.bazel.io:50000",
-)
-
-# GCE machines
-jenkins_nodes(
- WINDOWS_PREFIX,
- WINDOWS_COUNT,
- remote_fs = "c:\\jenkins",
- tunnel = "jenkins.c.bazel-public.internal:50000",
-)
-
-jenkins_nodes(
- UBUNTU_1404_PREFIX,
- UBUNTU_1404_COUNT,
- labels = ["linux-x86_64"],
- tunnel = "jenkins.c.bazel-public.internal:50000",
-)
-
-# Non-release nodes
-jenkins_nodes(
- UBUNTU_1604_PREFIX,
- UBUNTU_1604_COUNT,
- labels = ["no-release"],
- tunnel = "jenkins.c.bazel-public.internal:50000",
-)
-
-jenkins_nodes(
- FREEBSD_11_PREFIX,
- FREEBSD_11_COUNT,
- labels = ["no-release"],
- tunnel = "jenkins.c.bazel-public.internal:50000",
-)
-
-#
-# A deploy slave used for release work and syncing
-# our repositories.
-#
-
-# A little hack to remove path consideration
-DEPLOY_FILES = [
- "hoedown",
- "github_release",
-]
-
-genrule(
- name = "deploy-files",
- srcs = ["@%s//file" % f for f in DEPLOY_FILES],
- outs = ["%s.tar.gz" % f for f in DEPLOY_FILES],
- cmd = "\n".join([
- "cp $(location @%s//file) $(location %s.tar.gz)" % (f, f)
- for f in DEPLOY_FILES
- ]),
-)
-
-docker_build(
- name = "deploy-base",
- base = "//base:ubuntu-xenial-amd64-deploy",
- directory = "/opt/data",
- env = {
- # We have to put those files on some secrets volume.
- "BOTO_CONFIG": "/opt/secrets/boto_config",
- "GITHUB_TOKEN_FILE": "/opt/secrets/github_token",
- "GSUTIL": "/opt/data/gsutil/gsutil",
- "GITHUB_RELEASE": "/opt/data/github-release/github-release",
- "HOEDOWN": "/opt/data/hoedown/hoedown",
- "APT_GPG_KEY_PATH": "/opt/secrets/apt-key.sec.gpg",
- "APT_GPG_KEY_ID_FILE": "/opt/secrets/apt-key.id",
- },
- files = [":deploy-files"],
- volumes = ["/opt/secrets"],
-)
-
-docker_build(
- name = "deploy-full",
- base = ":deploy-base",
- directory = "/opt/run",
- files = ["setup-deploy.sh"],
-)
-
-jenkins_node(
- name = "deploy",
- docker_base = "deploy-full",
- # Deploy slave have special access, do not allow to get reserved by accident.
- mode = "EXCLUSIVE",
- num_executors = 2,
- visibility = ["//visibility:public"],
- tunnel = "jenkins.c.bazel-public.internal:50000",
-)
-
-# Jenkins job for Gerrit vetting
-jenkins_job(
- name = "maintenance/gerrit-verifier",
- config = "gerrit-verifier.xml.tpl",
- project_url = "https://bazel-review.googlesource.com",
- deps = ["gerrit-verifier.groovy"],
-)
-
-#
-# Jenkins permissions
-#
-
-# Public permissions
-PUBLIC_PERMS = [
- "Hudson.Read", # Read the public dashboard
- "Item.Read", # Read the result of a build
- "Item.Workspace", # Read a job workspace
- "View.Read", # Read views
- "Computer.Connect", # Connect a new node, needed by the node themselves
-]
-
-# Permissions for @google.com emails
-AUTHENTICATED_PERMS = PUBLIC_PERMS
-
-# Permissions for admin users (Beware it is dangerous)
-ADMIN_PERMS = AUTHENTICATED_PERMS + [
- "Item.Build", # Launch a build
- "Item.Cancel", # Cancel a build
- "Run.Delete", # Delete one build's information
- "Run.Update", # Run one build's information
- "View.Configure", # Configure views
- "View.Create", # Create a new view
- "View.Delete", # Delete existing view
- # Dangerous area: touch to nodes
- "Computer.Disconnect", # Disconnect a node, normally never needed
- "Computer.Configure", # Configure a node, normally never needed
- "Computer.Delete", # Delete a node, almost never needed
- "Computer.Build", # Build on a node, needed for debugging
- # Very dangerous area, administer jenkins
- "Hudson.Administer", # Only used for restarting jenkins.
-]
-
-PERMS_TEMPLATE = "<permission>hudson.model.%s:%s</permission>"
-
-#
-# Creates the permissions info
-#
-# This is a config file generated by the build.sh script.
-load(":config.bzl", "ADMIN_USERS")
-
-SECURITY_CONFIG = """
- <useSecurity>true</useSecurity>
- <authorizationStrategy class="hudson.security.GlobalMatrixAuthorizationStrategy">
- %s
- </authorizationStrategy>
- <securityRealm class="org.jenkinsci.plugins.googlelogin.GoogleOAuth2SecurityRealm" plugin="google-login@1.1">
- <clientId>##SECRET:google.oauth.clientid##</clientId>
- <clientSecret>##SECRET:google.oauth.secret##</clientSecret>
- <domain>google.com</domain>
- </securityRealm>
-""" % "\n".join([
- PERMS_TEMPLATE % (perm, "anonymous")
- for perm in PUBLIC_PERMS
-] + [
- PERMS_TEMPLATE % (perm, "authenticated")
- for perm in AUTHENTICATED_PERMS
-] + [
- PERMS_TEMPLATE % (perm, user)
- for user in ADMIN_USERS
- for perm in ADMIN_PERMS
-])
-
-#
-# Finally the Jenkins image
-#
-jenkins_docker_build(
- name = "jenkins",
- configs = [
- ":config_xml",
- ":deploy",
- ":jenkins-common-configs",
- ":config/org.jenkinsci.plugins.ghprb.GhprbTrigger.xml",
- ] + jenkins_node_names(DARWIN_PREFIX, DARWIN_COUNT) +
- jenkins_node_names(FREEBSD_11_PREFIX, FREEBSD_11_COUNT) +
- jenkins_node_names(WINDOWS_PREFIX, WINDOWS_COUNT) +
- jenkins_node_names(UBUNTU_1404_PREFIX, UBUNTU_1404_COUNT) +
- jenkins_node_names(UBUNTU_1604_PREFIX, UBUNTU_1604_COUNT),
- jobs = [
- "//jenkins/jobs",
- ":maintenance/gerrit-verifier",
- ],
- tars = ["//jenkins/lib"],
- visibility = ["//visibility:public"],
-)
-
-expand_template(
- name = "config_xml",
- out = "config/config.xml",
- escape_xml = False,
- substitutions = {"SECURITY_CONFIG": SECURITY_CONFIG},
- template = "config/config.xml.tpl",
- deps = ["//:git-hash"],
-)
-
-expand_template(
- name = "config_xml-nosecurity",
- out = "config-nosecurity/config.xml",
- escape_xml = False,
- substitutions = {"SECURITY_CONFIG": "<useSecurity>false</useSecurity>"},
- template = "config/config.xml.tpl",
- deps = ["//:git-hash"],
-)
-
-filegroup(
- name = "jenkins-common-configs",
- srcs = glob(
- ["config/**"],
- exclude = [
- "config/org.jenkinsci.plugins.ghprb.GhprbTrigger.xml",
- "config/config.xml.tpl",
- ],
- ),
-)
diff --git a/jenkins/base/BUILD b/jenkins/base/BUILD
deleted file mode 100644
index ce48c63..0000000
--- a/jenkins/base/BUILD
+++ /dev/null
@@ -1,14 +0,0 @@
-load("@io_bazel_rules_docker//docker:docker.bzl", "docker_build")
-
-docker_build(
- name = "base",
- base = "@jenkins//:image",
- data_path = ".",
- directory = "/usr/local/bin",
- entrypoint = [
- "/bin/bash",
- "/usr/local/bin/jenkins.sh",
- ],
- files = ["jenkins.sh"],
- visibility = ["//jenkins:__pkg__"],
-)
diff --git a/jenkins/base/jenkins.sh b/jenkins/base/jenkins.sh
deleted file mode 100755
index aa5cb3a..0000000
--- a/jenkins/base/jenkins.sh
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 The Bazel 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.
-
-# Script to run Jenkins from the Docker image
-set -eux
-
-# Take file $1 and copy it to file $2, replacing all instance of
-# the string '##SECRET:filename##' by the content of the file
-# 'filename' for each file in /opt/secrets
-function replace_secrets() {
- if [ "${1##*.}" = "xml" ]; then
- # Only do replacement for xml files
- local content="$(cat $1)"
- for i in /opt/secrets/*; do
- local bi="$(basename $i)"
- if echo -n "${content}" | grep -qF "##SECRET:${bi}##"; then
- content="$(echo -n "${content}" | sed "s|##SECRET:${bi}##|$(cat $i)|g")"
- fi
- done
- # Environment
- for i in $(compgen -v); do
- if echo -n "${content}" | grep -qF "##ENV:${i}##"; then
- local var="$(printenv "$i")"
- content="$(echo -n "${content}" | sed "s|##ENV:${i}##|${var}|g")"
- fi
- done
- echo -n "${content}" >$2
- else
- cp $1 $2
- fi
-}
-export -f replace_secrets
-
-# Remove existing jobs configuration so we delete jobs
-# We do not use find because it goes too deep, use a function instead
-delete_jobs() {
- for i in "$1/jobs/"*; do
- if [ -d "$i" ]; then
- if [ -f "$i/config.xml" ]; then
- rm -f "$i/config.xml"
- fi
- delete_jobs "$i"
- fi
- done
-}
-delete_jobs /var/jenkins_home
-
-# Same for nodes
-rm -rf /var/jenkins_home/nodes
-# Remove existing plugins to ensure update of plugins
-rm -fr /var/jenkins_home/plugins
-
-# Copy the configuration files provided in the docker image
-(cd /usr/share/jenkins/ref && \
- find ./ -type f -exec bash -c \
- "mkdir -p /var/jenkins_home/\$(dirname '{}'); \
- rm -f '/var/jenkins_home/{}'; \
- replace_secrets '/usr/share/jenkins/ref/{}' '/var/jenkins_home/{}'" \;)
-
-# Transform /opt/lib to a git repository if exists to be used
-# as a pipeline library (GitSCM).
-if [ -d "/opt/lib" ]; then
- (cd /opt/lib && \
- git init && \
- git config user.email "nobody@nowhere.local" && \
- git config user.name "Nobody" && \
- git add . && \
- git commit -m "Jenkins library: commit from container")
-fi
-
-# Execute Jenkins
-JAVA_OPTS="${JAVA_OPTS-} -Dorg.jenkinsci.plugins.ghprb.GhprbTrigger.disableRegisterOnStartup=true"
-exec java ${JAVA_OPTS-} -jar /usr/share/jenkins/jenkins.war ${JENKINS_OPTS-} "$@"
diff --git a/jenkins/base/jenkins_base.bzl b/jenkins/base/jenkins_base.bzl
deleted file mode 100644
index 35aed52..0000000
--- a/jenkins/base/jenkins_base.bzl
+++ /dev/null
@@ -1,83 +0,0 @@
-# Copyright 2016 The Bazel 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.
-
-# Some definition to create a base image for jenkins in docker
-
-load("@io_bazel_rules_docker//docker:docker.bzl", "docker_pull")
-
-JENKINS_PLUGINS_URL = "http://updates.jenkins-ci.org/download/plugins/{name}/{version}/{name}.hpi"
-
-def _jenkins_image_impl(repository_ctx):
- repository_ctx.file("plugins/BUILD", """
-load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
-pkg_tar(
- name = "plugins",
- srcs = glob(["**/*.jpi"]),
- mode = "0644",
- strip_prefix = ".",
- package_dir = "/usr/share/jenkins/ref/plugins",
- visibility = ["//:__pkg__"],
-)
-""")
- for plugin in repository_ctx.attr.plugins:
- config = repository_ctx.attr.plugins[plugin]
- dest = "plugins/" + plugin + ".jpi"
- repository_ctx.download(
- JENKINS_PLUGINS_URL.format(name=plugin, version=config[0]), dest,
- config[1])
- if len(config) >= 3 and config[2] == "pinned":
- repository_ctx.file(dest + ".pinned", "")
- repository_ctx.file("BUILD", """
-load("@io_bazel_rules_docker//docker:docker.bzl", "docker_build")
-
-docker_build(
- name = "image",
- base = "{base}",
- tars = ["//plugins"],
- directory = "/",
- volumes = [{volumes}],
- visibility = ["//visibility:public"],
-)
-""".format(
- base = repository_ctx.attr.base,
- volumes = ", ".join(['"%s"' % f for f in repository_ctx.attr.volumes])
-))
-
-jenkins_image_ = repository_rule(
- implementation = _jenkins_image_impl,
- attrs = {
- "base": attr.string(mandatory=True),
- "plugins": attr.string_list_dict(mandatory=True),
- "volumes": attr.string_list(default=[]),
- })
-
-def jenkins_base(name, plugins, volumes=[], digest=None, version="1.642.4"):
- base = "jenkins_" + version.replace(".", "_")
- if not native.existing_rule(base):
- kwargs = {}
- if digest:
- kwargs["digest"] = digest
- else:
- kwargs["tag"] = version
- docker_pull(
- name = base,
- registry = "index.docker.io",
- repository = "jenkins/jenkins",
- **kwargs
- )
- jenkins_image_(
- name=name,
- plugins=plugins,
- base="@%s//image" % base,
- volumes=volumes)
diff --git a/jenkins/base/plugins.bzl b/jenkins/base/plugins.bzl
deleted file mode 100644
index 2edbd3e..0000000
--- a/jenkins/base/plugins.bzl
+++ /dev/null
@@ -1,234 +0,0 @@
-# Copyright 2015 The Bazel 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.
-
-# Plugins for Jenkins
-JENKINS_PLUGINS = {
- 'ace-editor': ['1.1',
- 'abc97028893c8a71581a5f559ea48e8e1f1a65164faee96dabfed9e95e9abad2'],
- 'ansicolor': ['0.5.2',
- '726c651a3ac8d080ff4aa5b962dd8b264801b8a3fde027da07fa1be30c709b31'],
- 'apache-httpcomponents-client-4-api': ['4.5.3-2.1',
- '998f57d1fb0ea9558706c8c4fe34f82d43ea70b8642884edb4357e694faa1079'],
- 'authentication-tokens': ['1.3',
- 'f05736bc7da0df3bba5ceb4d893089706812ced3134adb2edc9ae341467f1ae3'],
- 'blueocean': ['1.4.0',
- '9aafd3b29d0d4cfd8755aa1c6d893e61a6dfd8101c573f3d680e39c8a0da44b5'],
- 'blueocean-autofavorite': ['1.2.1',
- '91863ba4b29842c667a3cd264e5cd4e922e1770523a69f8cf903e54ea3441cd7'],
- 'blueocean-bitbucket-pipeline': ['1.4.0',
- 'a1c744dd16eef1ba7ce7f29bd67bb82246f0814786000a6deb5dace16378c880'],
- 'blueocean-commons': ['1.4.0',
- '8d1e6f100734660544c7cf126ddcc958e8721ac2c907b8413a8128e3425dfd43'],
- 'blueocean-config': ['1.4.0',
- 'c57f2f23c32eec10577382b221ff06cdea1bb13a96c8cd1cbc65d4b296f4f0cf'],
- 'blueocean-core-js': ['1.4.0',
- 'd372a49dbecab17e1519dec9111bfe758b444aa65bd9b1812129e1d5f9939015'],
- 'blueocean-dashboard': ['1.4.0',
- '48648e3911791aaccfa10b97e57f8e9320f0441a053f40cc81f3f8c71f88fbc7'],
- 'blueocean-display-url': ['2.2.0',
- '4392cff3f4d75c678abadb7aad040b782be7ea61c5c87bdd5e3a62fa633e10ca'],
- 'blueocean-events': ['1.4.0',
- '95fe2b28f7f5594526c8d9a280dbdf9418893becac90e21fb69162d3961bac6a'],
- 'blueocean-git-pipeline': ['1.4.0',
- '3f8adfbf23d6c8f57e8023a8daa0ae9ef382ec1811790f3c871ca5b3b9a041f1'],
- 'blueocean-github-pipeline': ['1.4.0',
- '567ecb28b55d4926d123ea106b26d555519a8939f3c1c885f93740b756ebc859'],
- 'blueocean-i18n': ['1.4.0',
- '2d7e065fc8ed026480769e4e6822f92ceacf8e507434ff058580b33636eb38da'],
- 'blueocean-jira': ['1.4.0',
- 'f82ddb6aa8cee3fde484debc8a0967e998e467d6abf422d0dc31221c9d37e3fc'],
- 'blueocean-jwt': ['1.4.0',
- 'c80347ade396bbb699fd1048fa0b67429244e67c953b301d54665e451ba90e4c'],
- 'blueocean-personalization': ['1.4.0',
- 'dd9d311467f86401ae7c9990ddeb1b6402960758e0941fa17edbd6a2c4858406'],
- 'blueocean-pipeline-api-impl': ['1.4.0',
- '4c8d2003983efad187f9ac32ecf606c0cae66fecd3f90d4023eaf93132f59416'],
- 'blueocean-pipeline-editor': ['1.4.0',
- 'ef91c098bb90086b6dea1a87fe8649382849dfdbb4d9d9fe8a3bc5acedae4d8d'],
- 'blueocean-pipeline-scm-api': ['1.4.0',
- '4676d8e1a8d38e3f98af9eb67d63ee418ea62f43a5bdbfacbb8efc51ac6264b3'],
- 'blueocean-rest': ['1.4.0',
- '891d18b90d06ea383e5ff38a855b49b7077dc453a3c4d0af4b642832a6641e70'],
- 'blueocean-rest-impl': ['1.4.0',
- 'e64d9eb32c4703f68802613e8b1a17184acf8d374855fe188338fb7ed0261523'],
- 'blueocean-web': ['1.4.0',
- '63b286c545716bd986e13e4e201815f2f91ca588d839345eab59bc5f8a915b9e'],
- 'bouncycastle-api': ['2.16.2',
- '6130c9a7132dfe50bde27e256942a7a45f568817e3ad9d5d40ce95330076fad6'],
- 'branch-api': ['2.0.18',
- 'a338715ff2006ec7d7f92d4897fa9d40769adf7ec3dc726aba494f505dec5c31'],
- 'build-monitor-plugin': ['1.12+build.201708172343',
- '1b00d08120d2a7b1ac8a0c8eec83cd224a103cf8c2c7e60aa87d470690d9ee5c'],
- 'build-timeout': ['1.19',
- 'a92b43adb9c668e3fd0ad307db43c2277cf15ea75c084b5bdc74fb294f80583d'],
- 'cloudbees-bitbucket-branch-source': ['2.2.9',
- '74687f0c9b51a9a9ae4b26958e44d9011a4dd9a3c7cec7013187c5dd9ef0337c'],
- 'cloudbees-folder': ['6.3',
- '4f21d3dedd352fe1fb0c6adea1d39dcb190180615e5cc5aa5ffac18b47c5a71a'],
- 'conditional-buildstep': ['1.3.6',
- '4b550bc136fe66bb4eb396605f4036935963327b9c94662f7c441888adb99f77'],
- 'copyartifact': ['1.39',
- '5014383a87922b6c2915c6323d43685801f0272e4e311dd4584fd4ac48c1e520'],
- 'credentials': ['2.1.16',
- 'b151673bb77ef585900d901684a4197c3018b6baa83ddd0dac8327e42aedfef9'],
- 'credentials-binding': ['1.15',
- 'c973fd463308e9777ccc55df94b8cdc217e06e2f9211d225aef886c1d23bc844'],
- 'display-url-api': ['2.2.0',
- 'f9a7acb09a0c649d2cfe25ed52d6a974e664f3a00e76d9dccf24f845d20bb754'],
- 'docker-commons': ['1.11',
- '4cbb7cec0ceaec1b398b2f3620bcaf1116e177802c6f3339e0b3d176547a3998'],
- 'docker-workflow': ['1.15',
- '6658aea35784ff821cc8a5ac4567e1c34c19f5fd02f4d53cdb3f408301c72e0d'],
- 'durable-task': ['1.17',
- '54b0c95d15508274e583952e5056a34424b464530caa9483736134b5c96eef20'],
- 'email-ext': ['2.61',
- '46a8a2cbfac75e086af031667b5eac459854b4646be13b5442df47e945c13e58'],
- 'embeddable-build-status': ['1.9',
- '9d950ce4bfdcb67e1b1198ea2b54e18de95ec3214b1cf1135141b5b54a62edb2'],
- 'fail-the-build-plugin': ['1.0',
- 'c97db02dc6fef269780b77d2001a9bfb49bcdc9ac2ee242cd10445709bb7d09e'],
- 'favorite': ['2.3.1',
- 'b847647271830a3cec63035dea8fffe79b91331678cd306967cbc64227d4db28'],
- 'ghprb': ['1.40.0',
- '58e9411089233a6630a11623a557c385c2271b64a9c57fe3ad8decf1adb600b2'],
- 'git': ['3.7.0',
- '1cb33ab6027557d54bb6fb8ee31c211bef9ff217b71166f8423ba20fa7e7137c'],
- 'git-client': ['2.7.1',
- '192f32b9d8c60c2471d99517b512316c2398e582eeb153290508b4319d7b03ab'],
- 'git-parameter': ['0.9.0',
- '329d5dad9bd84bcf75e396a0be73cfc6cfcc9ab0ee75bb505777f32991d57574'],
- 'git-server': ['1.7',
- '1a5dc733495681a6d1a6adce07e614e50f4e5d22580e6fafbd5ca260aa4367fc'],
- 'github': ['1.29.0',
- '041d244289810f4adfa320563db4db7444cbeafb9563ea2f2167a13aa0009350'],
- 'github-api': ['1.90',
- '8ec10c98b4cc103d826e2e2a101b4bf44b3b91b395c33de7448003431ba736ce'],
- 'github-branch-source': ['2.3.2',
- '107951a8b3baa2964d045a009aa7c50de2a6329f35da0227e3f66caa0a4710b5'],
- 'google-login': ['1.3',
- '4b1482347ddd0a2a54c1fdedfe46a519cc2ada60dfc774d2435f554287c52d25'],
- 'greenballs': ['1.15',
- '6c3722fb9ce2a446f0266e1911d87ef50898a10f38890bb6963e7e1e1c4296fb'],
- 'handlebars': ['1.1.1',
- 'bc5cc7b3eca17ba6cec0a8def94f3aa78ad7a19387a19aa3a56f857a18966afa'],
- 'handy-uri-templates-2-api': ['2.1.6-1.0',
- '09446d387f5e87a846469334579292f3047b3d4cabf3dd05cd057a2f34b39814'],
- 'htmlpublisher': ['1.14',
- '08802f5f0a3915ac06432f432f2d4e5b051f1c976fd6251d7696b0f98ac02771'],
- 'jackson2-api': ['2.8.10.1',
- 'ea5cda3192e890500d1c09a123962cd576e2a6c8946f9f720511493b0cd7666a'],
- 'javadoc': ['1.4',
- '2236e563d057a98b1bb2e56975756a008986289aa01a61c4655a31b62c760a22'],
- 'jenkins-design-language': ['1.4.0',
- '80f4951adcf7c2a58804b21d44cf31213623cee4fc3af8cb649f60bf88f82de9'],
- 'jira': ['2.5',
- 'cee72ce7d24e0c0b7ec0404322c6ea3fe84947265de77adaa19785cd6d13832c'],
- 'jquery': ['1.12.4-0',
- 'fdfb8c7b0370ecaf10985c8be8dd3f7f651c3bddd84c709df14c26508d2aeb1e'],
- 'jquery-detached': ['1.2.1',
- 'a05273cd20c11557ffcb7dcb75150f21d35dc8be28355548b831c2960d7f11c0'],
- 'jsch': ['0.1.54.1',
- '5e979207485bd7c7c42eb2b1ff5dac4e5c10e6d717b89ab2a1052c404d6963bb'],
- 'junit': ['1.24',
- '9a65d385aa88705f9639777f326c5a0f8052ef4367c440d23e3430e1e42803fa'],
- 'mailer': ['1.20',
- 'e78b7bb32957d11dcf58e57f2d7b60903bf31ace7858d19febb3b11a374a1187'],
- 'matrix-auth': ['2.2',
- '56ea5d8313f3481196d73c60367eab037005d37d2b2aa8b40ac0abeb21d7c86f'],
- 'matrix-project': ['1.12',
- 'bc3300877704d41d42813d6cef18ea017dcb4be5e8faae45a7da4ce6c9b540e1'],
- 'maven-plugin': ['3.1',
- 'c937c1a4f1991104a7d7a30ddc5abf7e8dde79918b6bf7947d79f046b683231c'],
- 'mercurial': ['2.2',
- '7b22e37164107e4dca7b2970a14cf8a1a2d7e7be7ebee29868ed0f617e4b7931'],
- 'metrics': ['3.1.2.10',
- 'e694a10ea265186775c37fd1dc6b7ec66de864ef5d57dcd6b92fb61158814a40'],
- 'momentjs': ['1.1.1',
- 'ca3c2d264cff55f71e900dc7de1f13c0bfbffdb9b3419b854dce175bcb8a4848'],
- 'nodelabelparameter': ['1.7.2',
- '0f556ae48573db6bae28b24eae561121ed9931e8b1bc31ac4e586bc8d3238edf'],
- 'parameterized-trigger': ['2.35.2',
- '36228ae6c41cf828cf472deabaeff50f8b4e9b69e742deab38d4a9b9a093fd97'],
- 'pipeline-build-step': ['2.7',
- 'd02fd27988328435c0bc4211e4e45fee88b28b5d633c3bbce6cb4dca9480a9cb'],
- 'pipeline-graph-analysis': ['1.6',
- 'a20cedaa0b847f31cf88b51ee490c49eea8aa1052511b12d5af2a140af45e7e3'],
- 'pipeline-input-step': ['2.8',
- '8e9fa1654ec0c0ec726c894b079828737b8ce6d9ea3d05cd4378c37acc3235db'],
- 'pipeline-milestone-step': ['1.3.1',
- 'd3a26629b656821c60a14fe403ab8afc50f084e338406dbc27e2b6b403f7cb20'],
- 'pipeline-model-api': ['1.2.7',
- '7101529b2838d28a114c3fce48d52ab943adc7667e2fbbee2845f5f62be184a1'],
- 'pipeline-model-declarative-agent': ['1.1.1',
- 'd5540c3973bf5f568910f93b3a002c413148b9d3dd4211ce5faf4a2a1214d4ef'],
- 'pipeline-model-definition': ['1.2.7',
- '2a9efd78e535726fcad701df1a33e6c91ad5ca2a46711c76f026d2f56fbff6b3'],
- 'pipeline-model-extensions': ['1.2.7',
- '278853b8ddb95bc8b767bdd9b0b412f86389a6c377f6c58d84c317bd1ce3a5f2'],
- 'pipeline-rest-api': ['2.9',
- '38d9f5dd0750a3ce3113ff3eeed32864ed4e0655ec5e3a5556f529d8c3cf86a8'],
- 'pipeline-stage-step': ['2.3',
- 'f6caab90742664289b0cb57b27755c3b8b963c3764894129fb954efbf796d310'],
- 'pipeline-stage-tags-metadata': ['1.2.7',
- '0c7b805b5660ac5370646795564a1525da9044542b1ddaeabecaa320a0882b80'],
- 'pipeline-stage-view': ['2.9',
- '52879f4fc756bbe95c5ef9802ef9da15c4938833555046b23c9fc78c914b6525'],
- 'plain-credentials': ['1.4',
- '4f1834f99ffd7f2a7db1972fe46ee42d06af819b27297193ac89eb33a14292d8'],
- 'pubsub-light': ['1.12',
- '666cbc579d82849bef8d0396a57335c9994222e8b0ba52f07be76dab9fb56c40'],
- 'run-condition': ['1.0',
- '4e55ebf4bde1202784404d856f98f7de85470ed145cde06feb45f641891780fb'],
- 'sauce-ondemand': ['1.171',
- '5a7a1e1eccb199d82227e41e9bce655d33b2e33219f40a9cd0c884780cc26ae8'],
- 'scm-api': ['2.2.6',
- 'be7cb7c513ebeb361a8ccb5c636541313c1c54b3119566b969fe10a3552cca14'],
- 'script-security': ['1.40',
- '058912d20896b44658141f350a5f061fae9042c1a1b9d1e2cd764f62816fdd99'],
- 'sse-gateway': ['1.15',
- '56b19b7a48f646dc8269bae4aca41ec11f71756d618d302b1f8b9d688441850f'],
- 'ssh-agent': ['1.15',
- 'd1c955b883a3e82522a1b97ff044812193bc325c5eb095e23ba8673c2b16e181'],
- 'ssh-credentials': ['1.13',
- 'd4f979223cc543dfd9bf72a1177471bb08748d2c79e1115d7bb12198bbbf2010'],
- 'structs': ['1.13',
- '7e788b7c254d1188c8b6cec89260f0756ffa3839f36925c99ec302f851a62a15'],
- 'test-results-analyzer': ['0.3.4',
- 'b3aa8c11d59a5c1ac007f86a054a259766bc64ee0ad91be0c2dd1981bce3c6f8'],
- 'token-macro': ['2.3',
- 'c3da743e97e958dcbe7f9a41c64ee693c3174824be7faf2ad4625d3dcc7d17f8'],
- 'variant': ['1.1',
- '971893fb05da213631b8ea977a32a5d4953f1cb7ab6fbdec9020d503550275ff'],
- 'windows-slaves': ['1.3.1',
- '4364f88286745a48962b86b53df3739a6978886e72ec83289a3cfc750f1adcc6'],
- 'workflow-api': ['2.25',
- 'f92fe4de3c4cb814833a875b070844d540f3401b27e1683ac153bf128b35c5c3'],
- 'workflow-basic-steps': ['2.6',
- 'ba6bc7f586b902ba6aacae571a8ae78916e7f3e106d8a7da14c348ea933f0016'],
- 'workflow-cps': ['2.44',
- 'ac3bf296bb811c2bbedc46b956b3b5ceee716903bcee10aaf51e4891328f1704'],
- 'workflow-cps-global-lib': ['2.9',
- 'b5a141c4896be15e09d76fc5b60df3fe701e94d2c2d2015a99ca5147a78b09d1'],
- 'workflow-durable-task-step': ['2.18',
- '8643e6fe9bbcc06151cc0b392854649b5d078bde562e81700582531b4c569231'],
- 'workflow-job': ['2.17',
- '054f7b128a96628c19d3cb92cae44f70b7eb89c065ea2d7af76e351a7d8fd3a9'],
- 'workflow-multibranch': ['2.17',
- '51e37b5016541cb73c2fd9334ab5c25d505900657be0b007b27a3aaa5f52e3c3'],
- 'workflow-scm-step': ['2.6',
- 'a382864adaf0fc80d58243568157a1450028e6d0503a03b81111d4c4de8275d0'],
- 'workflow-step-api': ['2.14',
- '4a0c25d4bb9f985a786774f14c1bdaa02853173e18ad40d49dd13d4c7c8f420e'],
- 'workflow-support': ['2.18',
- 'bafb72d98af4ffb8fd2836d06dba4bdb117eb394fa1f302a071a373a32d4264f']}
diff --git a/jenkins/base/update_plugins.py b/jenkins/base/update_plugins.py
deleted file mode 100644
index 56db5a8..0000000
--- a/jenkins/base/update_plugins.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/env python3
-
-import hashlib
-import importlib.machinery
-import json
-import os
-import os.path
-import pprint
-import sys
-import types
-import urllib.request
-
-CACHE_DIR = os.path.expanduser("~/.update_jenkins_plugins")
-
-def get_json_url(name):
- return "https://plugins.jenkins.io/api/plugin/%s" % name
-
-def get_download_url(name, version):
- return "http://updates.jenkins-ci.org/download/plugins/%s/%s/%s.hpi" % (name, version, name)
-
-def download_url(url):
- h = hashlib.sha256(url.encode("utf-8")).hexdigest()
- fname = os.path.join(CACHE_DIR, h)
- try:
- with open(fname, "rb") as f:
- return f.read()
- except OSError:
- with open(fname, "wb") as f:
- data = urllib.request.urlopen(url).read()
- f.write(data)
- return data
-
-def get_plugin_sha256(name, version):
- url = get_download_url(name, version)
- data = download_url(url)
- return hashlib.sha256(data).hexdigest()
-
-def load_plugins_bzl():
- # Load the current plugins.bzl.
- loader = importlib.machinery.SourceFileLoader("plugins", "plugins.bzl")
- plugins = types.ModuleType(loader.name)
- loader.exec_module(plugins)
- return plugins.JENKINS_PLUGINS
-
-def get_plugin_json(name):
- url = get_json_url(name)
- data = download_url(url)
- return json.loads(data.decode("utf-8"))
-
-os.makedirs(CACHE_DIR, exist_ok=True)
-
-plugins = load_plugins_bzl()
-
-# Update all plugins to the latest version.
-current_versions = {name: metadata[0] for name, metadata in plugins.items()}
-queue = [(name, metadata) for name, metadata in plugins.items()]
-new_plugins = {}
-rdeps = {}
-
-while queue:
- name, metadata = queue.pop(0)
-
- if name in new_plugins:
- continue
-
- # Get information from the Jenkins API.
- plugin_json = get_plugin_json(name)
- latest_version = plugin_json["version"]
-
- if name not in current_versions:
- print("New plug-in: %s (%s)" % (name, latest_version), file=sys.stderr)
- new_plugins[name] = [latest_version, get_plugin_sha256(name, latest_version)]
- elif current_versions[name] != latest_version:
- print("Updated plug-in: %s (%s -> %s)" % (name, metadata[0], latest_version), file=sys.stderr)
- new_plugins[name] = [latest_version, get_plugin_sha256(name, latest_version)]
- else:
- print("Unchanged plug-in: %s (%s)" % (name, metadata[0]), file=sys.stderr)
- new_plugins[name] = metadata[0:2]
-
- for dep in plugin_json['dependencies']:
- if dep["optional"]:
- continue
-
- queue.append((dep["name"], None))
- if dep["name"] not in rdeps:
- rdeps[dep["name"]] = []
- rdeps[dep["name"]].append(name)
-
-for name, metadata in new_plugins.items():
- if name in rdeps:
- print("%s is depended on by %s" % (name, sorted(rdeps[name])), file=sys.stderr)
- else:
- print("%s is depended on by nothing" % name, file=sys.stderr)
-
-# Generate a new plugins.bzl.
-print("""# Copyright 2015 The Bazel 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.
-
-# Plugins for Jenkins
-JENKINS_PLUGINS = {
- %s""" % pprint.pformat(new_plugins)[1:])
diff --git a/jenkins/build_defs/BUILD b/jenkins/build_defs/BUILD
deleted file mode 100644
index c5d9fa2..0000000
--- a/jenkins/build_defs/BUILD
+++ /dev/null
@@ -1,12 +0,0 @@
-load("//jenkins/lib:def.bzl", "bazel_job_configuration_test")
-
-exports_files(glob([
- "bazel-job*.tpl",
- "folder.xml",
- "default.json",
-]))
-
-bazel_job_configuration_test(
- name = "default-config-test",
- configs = ["default.json"],
-)
diff --git a/jenkins/build_defs/bazel-job-Gerrit.xml.tpl b/jenkins/build_defs/bazel-job-Gerrit.xml.tpl
deleted file mode 100644
index 6602948..0000000
--- a/jenkins/build_defs/bazel-job-Gerrit.xml.tpl
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<flow-definition plugin="workflow-job">
- <actions/>
- <description>Test Gerrit code review for {{ variables.PROJECT_NAME }}.
-
-This job is for testing changes submitted to the Gerrit project: {{ variables.GERRIT_PROJECT }}.
-</description>
- <keepDependencies>false</keepDependencies>
- <properties>
- {% if variables.RUN_SEQUENTIAL == "true" %}
- <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
- {% endif %}
- <jenkins.model.BuildDiscarderProperty>
- <strategy class="hudson.tasks.LogRotator">
- <daysToKeep>90</daysToKeep>
- <numToKeep>-1</numToKeep>
- <artifactDaysToKeep>-1</artifactDaysToKeep>
- <artifactNumToKeep>-1</artifactNumToKeep>
- </strategy>
- </jenkins.model.BuildDiscarderProperty>
- {% if variables.github == "True" %}
- <com.coravy.hudson.plugins.github.GithubProjectProperty>
- <projectUrl>{{ variables.GITHUB_URL }}</projectUrl>
- </com.coravy.hudson.plugins.github.GithubProjectProperty>
- {% endif %}
- <hudson.model.ParametersDefinitionProperty>
- <parameterDefinitions>
- <hudson.model.StringParameterDefinition>
- <name>REFSPEC</name>
- <description>Refs to pull</description>
- <defaultValue>+refs/heads/*:refs/remotes/origin/*</defaultValue>
- </hudson.model.StringParameterDefinition>
- <hudson.model.StringParameterDefinition>
- <name>BRANCH</name>
- <description>Branch to build</description>
- <defaultValue>master</defaultValue>
- </hudson.model.StringParameterDefinition>
- <hudson.model.StringParameterDefinition>
- <name>CHANGE_NUMBER</name>
- <description>Number of the change being tested, for information only.</description>
- <defaultValue>no-change</defaultValue>
- </hudson.model.StringParameterDefinition>
- </parameterDefinitions>
- </hudson.model.ParametersDefinitionProperty>
- <org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- <triggers/>
- </org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- </properties>
- <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps">
- <script><![CDATA[
-gerritReview("https://bazel-review.googlesource.com/",
- "/opt/secrets/gerritcookies",
- "Bazel CI <ci.bazel@gmail.com>",
- params.CHANGE_NUMBER,
- params.BRANCH) {
- bazelCiConfiguredJob(
- repository: "https://bazel.googlesource.com/{{ variables.GERRIT_PROJECT }}",
- branch: params.BRANCH,
- refspec: params.REFSPEC,
- bazel_version: "latest",
- configuration: '''{{ raw_imports['JSON_CONFIGURATION'].replace('\\', '\\\\').replace("'", "\\'") }}''',
- workspace: "{{ variables.WORKSPACE }}",
- {% if variables.SAUCE_ENABLED == "true" %}
- sauce: "61b4846b-279d-4369-ae20-31e9d8b9bc66",
- {% endif %}
- run_sequentially: {{ variables.RUN_SEQUENTIAL }}
- )
-}
- ]]></script>
- <sandbox>true</sandbox>
- </definition>
- <triggers/>
- <quietPeriod>5</quietPeriod>
- <disabled>{{ variables.disabled }}</disabled>
-</flow-definition>
diff --git a/jenkins/build_defs/bazel-job-Global.xml.tpl b/jenkins/build_defs/bazel-job-Global.xml.tpl
deleted file mode 100644
index df2a4a1..0000000
--- a/jenkins/build_defs/bazel-job-Global.xml.tpl
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<flow-definition plugin="workflow-job">
- <actions/>
- <description>Test the {{ variables.PROJECT_NAME }} project located at {{ variables.GIT_URL }}.
-
- Job for Global tests with Bazel at HEAD.
- </description>
- <keepDependencies>false</keepDependencies>
- <properties>
- {% if variables.RUN_SEQUENTIAL == "true" %}
- <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
- {% endif %}
- {% if variables.github == "True" %}
- <com.coravy.hudson.plugins.github.GithubProjectProperty>
- <projectUrl>{{ variables.GITHUB_URL }}</projectUrl>
- </com.coravy.hudson.plugins.github.GithubProjectProperty>
- {% endif %}
- <hudson.model.ParametersDefinitionProperty>
- <parameterDefinitions>
- <hudson.model.TextParameterDefinition>
- <name>EXTRA_BAZELRC</name>
- <description>Extraneous content for the .bazelrc file</description>
- <defaultValue></defaultValue>
- </hudson.model.TextParameterDefinition>
-{% if variables.GLOBAL_USE_UPSTREAM_BRANCH == "True" %}
- <hudson.model.StringParameterDefinition>
- <name>REPOSITORY</name>
- <description>Repository to build</description>
- <defaultValue>{{ variables.GIT_URL }}</defaultValue>
- </hudson.model.StringParameterDefinition>
- <hudson.model.StringParameterDefinition>
- <name>BRANCH</name>
- <description>Branch to build</description>
- <defaultValue>{{ variables.BRANCH }}</defaultValue>
- </hudson.model.StringParameterDefinition>
- <hudson.model.TextParameterDefinition>
- <name>REFSPEC</name>
- <description>Refspec to fetch</description>
- <defaultValue>+refs/heads/*:refs/remotes/origin/*</defaultValue>
- </hudson.model.TextParameterDefinition>
-{% endif %}
- </parameterDefinitions>
- </hudson.model.ParametersDefinitionProperty>
- <org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- <triggers/>
- </org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- </properties>
- <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps">
- <script><![CDATA[
-bazelCiConfiguredJob(
- bazel_version: "custom",
-{% if variables.GLOBAL_USE_UPSTREAM_BRANCH == "True" %}
- repository: params.REPOSITORY,
- refspec: params.REFSPEC,
- branch: params.BRANCH,
-{% else %}
- repository: "{{ variables.GIT_URL }}",
- branch: "{{ variables.BRANCH }}",
-{% endif %}
- extra_bazelrc: params.EXTRA_BAZELRC,
- configuration: '''{{ raw_imports['JSON_CONFIGURATION'].replace('\\', '\\\\').replace("'", "\\'") }}''',
- workspace: "{{ variables.WORKSPACE }}",
- {% if variables.SAUCE_ENABLED == "true" %}
- sauce: "61b4846b-279d-4369-ae20-31e9d8b9bc66",
- {% endif %}
- run_sequentially: {{ variables.RUN_SEQUENTIAL }}
-)
- ]]></script>
- <sandbox>true</sandbox>
- </definition>
- <triggers/>
- <disabled>{{ variables.disabled }}</disabled>
-</flow-definition>
diff --git a/jenkins/build_defs/bazel-job-PR.xml.tpl b/jenkins/build_defs/bazel-job-PR.xml.tpl
deleted file mode 100644
index 8e505a0..0000000
--- a/jenkins/build_defs/bazel-job-PR.xml.tpl
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<flow-definition plugin="workflow-job">
- <actions/>
- <description>Test Github pull requests for {{ variables.PROJECT_NAME }}.</description>
- <keepDependencies>false</keepDependencies>
- <properties>
- {% if variables.RUN_SEQUENTIAL == "true" %}
- <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
- {% endif %}
- <jenkins.model.BuildDiscarderProperty>
- <strategy class="hudson.tasks.LogRotator">
- <daysToKeep>90</daysToKeep>
- <numToKeep>-1</numToKeep>
- <artifactDaysToKeep>-1</artifactDaysToKeep>
- <artifactNumToKeep>-1</artifactNumToKeep>
- </strategy>
- </jenkins.model.BuildDiscarderProperty>
- <com.coravy.hudson.plugins.github.GithubProjectProperty>
- <projectUrl>{{ variables.GITHUB_URL }}</projectUrl>
- </com.coravy.hudson.plugins.github.GithubProjectProperty>
- <org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- <triggers>
- <org.jenkinsci.plugins.ghprb.GhprbTrigger>
- <spec>H/5 * * * *</spec>
- <configVersion>3</configVersion>
- <adminlist></adminlist>
- <allowMembersOfWhitelistedOrgsAsAdmin>true</allowMembersOfWhitelistedOrgsAsAdmin>
- <orgslist>google bazelbuild abseil</orgslist>
- <cron>H/5 * * * *</cron>
- <buildDescTemplate></buildDescTemplate>
- <onlyTriggerPhrase>false</onlyTriggerPhrase>
- <useGitHubHooks>true</useGitHubHooks>
- <permitAll>false</permitAll>
- <whitelist></whitelist>
- <autoCloseFailedPullRequests>false</autoCloseFailedPullRequests>
- <displayBuildErrorsOnDownstreamBuilds>false</displayBuildErrorsOnDownstreamBuilds>
- <whiteListTargetBranches>
- <org.jenkinsci.plugins.ghprb.GhprbBranch>
- <branch></branch>
- </org.jenkinsci.plugins.ghprb.GhprbBranch>
- </whiteListTargetBranches>
- <blackListTargetBranches>
- <org.jenkinsci.plugins.ghprb.GhprbBranch>
- <branch></branch>
- </org.jenkinsci.plugins.ghprb.GhprbBranch>
- </blackListTargetBranches>
- <gitHubAuthId>58f0694f-1760-4610-b4f2-73ffb34c61a3</gitHubAuthId>
- <triggerPhrase></triggerPhrase>
- <skipBuildPhrase>.*\[skip\W+ci\].*</skipBuildPhrase>
- <blackListCommitAuthor></blackListCommitAuthor>
- <blackListLabels></blackListLabels>
- <whiteListLabels></whiteListLabels>
- <includedRegions></includedRegions>
- <excludedRegions></excludedRegions>
- <extensions>
- <org.jenkinsci.plugins.ghprb.extensions.status.GhprbSimpleStatus>
- <commitStatusContext>ci.bazel.build - {{ variables.NAME }}</commitStatusContext>
- <triggeredStatus></triggeredStatus>
- <startedStatus></startedStatus>
- <statusUrl>${RUN_DISPLAY_URL}</statusUrl>
- <addTestResults>false</addTestResults>
- </org.jenkinsci.plugins.ghprb.extensions.status.GhprbSimpleStatus>
- </extensions>
- </org.jenkinsci.plugins.ghprb.GhprbTrigger>
- </triggers>
- </org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- </properties>
- <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps">
- <script><![CDATA[
- bazelCiConfiguredJob(
- repository: "{{ variables.GIT_URL }}",
- branch: env.sha1,
- refspec: "+refs/pull/*:refs/remotes/origin/pr/*",
- bazel_version: "latest",
- configuration: '''{{ raw_imports['JSON_CONFIGURATION'].replace('\\', '\\\\').replace("'", "\\'") }}''',
- workspace: "{{ variables.WORKSPACE }}",
- {% if variables.SAUCE_ENABLED == "true" %}
- sauce: "61b4846b-279d-4369-ae20-31e9d8b9bc66",
- {% endif %}
- run_sequentially: {{ variables.RUN_SEQUENTIAL }}
- )
- ]]></script>
- <sandbox>true</sandbox>
- </definition>
- <triggers/>
- <quietPeriod>5</quietPeriod>
- <disabled>{{ variables.disabled }}</disabled>
-</flow-definition>
diff --git a/jenkins/build_defs/bazel-job.xml.tpl b/jenkins/build_defs/bazel-job.xml.tpl
deleted file mode 100644
index f8622ec..0000000
--- a/jenkins/build_defs/bazel-job.xml.tpl
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<flow-definition plugin="workflow-job">
- <actions/>
- <description>Test the {{ variables.PROJECT_NAME }} project located at {{ variables.GIT_URL }}.</description>
- <keepDependencies>false</keepDependencies>
- <properties>
- <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
- <jenkins.model.BuildDiscarderProperty>
- <strategy class="hudson.tasks.LogRotator">
- <daysToKeep>90</daysToKeep>
- <numToKeep>-1</numToKeep>
- <artifactDaysToKeep>-1</artifactDaysToKeep>
- <artifactNumToKeep>-1</artifactNumToKeep>
- </strategy>
- </jenkins.model.BuildDiscarderProperty>
- {% if variables.github == "True" %}
- <com.coravy.hudson.plugins.github.GithubProjectProperty>
- <projectUrl>{{ variables.GITHUB_URL }}</projectUrl>
- </com.coravy.hudson.plugins.github.GithubProjectProperty>
- {% endif %}
- <org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- <triggers>
- <com.cloudbees.jenkins.GitHubPushTrigger>
- <spec></spec>
- </com.cloudbees.jenkins.GitHubPushTrigger>
- <hudson.triggers.SCMTrigger>
- <spec>H/15 * * * *</spec>
- </hudson.triggers.SCMTrigger>
- </triggers>
- </org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- </properties>
- <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps">
- <script><![CDATA[
-bazelCiConfiguredJob(
- repository: "{{ variables.GIT_URL }}",
- branch: "{{ variables.BRANCH }}",
- bazel_version: "latest",
- configuration: '''{{ raw_imports['JSON_CONFIGURATION'].replace('\\', '\\\\').replace("'", "\\'") }}''',
- workspace: "{{ variables.WORKSPACE }}",
- {% if variables.SAUCE_ENABLED == "true" %}
- sauce: "61b4846b-279d-4369-ae20-31e9d8b9bc66",
- {% endif %}
- run_sequentially: {{ variables.RUN_SEQUENTIAL }}
-)
- ]]></script>
- <sandbox>true</sandbox>
- </definition>
- <triggers/>
- <quietPeriod>5</quietPeriod>
- <disabled>{{ variables.disabled }}</disabled>
-</flow-definition>
diff --git a/jenkins/build_defs/default.json b/jenkins/build_defs/default.json
deleted file mode 100644
index b21e68d..0000000
--- a/jenkins/build_defs/default.json
+++ /dev/null
@@ -1,7 +0,0 @@
-// This is a relaxed JSON format, you can have comments in it.
-// This is a list of configuration for the job that does not specify a configuration.
-[
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
-]
diff --git a/jenkins/build_defs/folder.xml b/jenkins/build_defs/folder.xml
deleted file mode 100644
index 080c411..0000000
--- a/jenkins/build_defs/folder.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<com.cloudbees.hudson.plugins.folder.Folder>
- <properties/>
- <folderViews class="com.cloudbees.hudson.plugins.folder.views.DefaultFolderViewHolder">
- <views>
- <hudson.model.AllView>
- <owner class="com.cloudbees.hudson.plugins.folder.Folder" reference="../../../.."/>
- <name>All</name>
- <filterExecutors>false</filterExecutors>
- <filterQueue>false</filterQueue>
- <properties class="hudson.model.View$PropertyList"/>
- </hudson.model.AllView>
- </views>
- <tabBar class="hudson.views.DefaultViewsTabBar"/>
- </folderViews>
- <healthMetrics/>
- <icon class="com.cloudbees.hudson.plugins.folder.icons.StockFolderIcon"/>
-</com.cloudbees.hudson.plugins.folder.Folder>
diff --git a/jenkins/build_defs/jenkins.bzl b/jenkins/build_defs/jenkins.bzl
deleted file mode 100644
index 53d45f7..0000000
--- a/jenkins/build_defs/jenkins.bzl
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2017 The Bazel 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.
-
-# Some definition to setup jenkins and build the corresponding docker images
-load(":jenkins_docker_build.bzl", "jenkins_docker_build")
-load(":jenkins_node.bzl", "jenkins_node")
-load(":jenkins_nodes.bzl", "jenkins_nodes", "jenkins_node_names")
-load(":jenkins_job.bzl", "jenkins_job", "bazel_git_job", "bazel_github_job")
-
diff --git a/jenkins/build_defs/jenkins_docker_build.bzl b/jenkins/build_defs/jenkins_docker_build.bzl
deleted file mode 100644
index c13788f..0000000
--- a/jenkins/build_defs/jenkins_docker_build.bzl
+++ /dev/null
@@ -1,108 +0,0 @@
-# Copyright 2015 The Bazel 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.
-
-# Creation of the docker container for the jenkins master.
-
-load("@io_bazel_rules_docker//docker:docker.bzl", "docker_build")
-load(":templates.bzl", "merge_files")
-load(":vars.bzl", "MAIL_SUBSTITUTIONS")
-
-def _build_jobs_impl(ctx):
- output = ctx.outputs.out
- folders_to_create = {}
- args = [
- "--output=" + output.path,
- "--mode=0644",
- "--directory=/usr/share/jenkins/ref/jobs",
- ]
- # Group fob by folders
- for f in ctx.files.jobs:
- if f.owner and "/" in f.owner.name:
- segments = f.owner.name.split("/")
- for i in range(1, len(segments)):
- folders_to_create["/jobs/".join(segments[:i])] = True
- p = f.owner.name.replace("/", "/jobs/")
- args.append("--file=%s=%s/config.xml" % (f.path, p))
- else:
- p = f.basename[:-len(f.extension)-1]
- args.append("--file=%s=%s/config.xml" % (f.path, p))
-
- for folder in folders_to_create:
- args.append("--file=%s=%s/config.xml" % (ctx.file._folder_xml.path, folder))
-
- ctx.action(
- executable = ctx.executable._build_tar,
- arguments = args,
- inputs = ctx.files.jobs + [ctx.file._folder_xml],
- outputs = [output],
- mnemonic="TarJobs"
- )
-
-_build_jobs = rule(
- attrs = {
- "jobs": attr.label_list(allow_files=True),
- "_folder_xml": attr.label(
- default=Label("//jenkins/build_defs:folder.xml"),
- allow_files=True,
- single_file=True),
- "_build_tar": attr.label(
- default=Label("@bazel_tools//tools/build_defs/pkg:build_tar"),
- cfg="host",
- executable=True,
- allow_files=True),
- },
- outputs = {"out": "%{name}.tar"},
- implementation = _build_jobs_impl,
-)
-
-
-def jenkins_docker_build(name, plugins = None, base = "//jenkins/base", configs = [],
- jobs = [], substitutions = {}, visibility = None, tars = []):
- """Build the docker image for the Jenkins instance."""
- substitutions = substitutions + MAIL_SUBSTITUTIONS
- # Expands config files in a tar ball
- merge_files(
- name = "%s-configs" % name,
- srcs = configs,
- directory = "/usr/share/jenkins/ref",
- strip_prefixes = [
- "jenkins/config",
- "jenkins",
- ],
- substitutions = substitutions)
- tars += ["%s-configs" % name]
-
- # Create the structures for jobs
- _build_jobs(name=name + "-jobs", jobs=jobs)
- tars += ["%s-jobs" % name]
-
- ### FINAL IMAGE ###
- docker_build(
- name = name,
- tars = tars,
- # Workaround no way to specify owner in pkg_tar
- # TODO(dmarting): use https://cr.bazel.build/10255 when it hits a release.
- user = "root",
- entrypoint = [
- "/sbin/tini",
- "--",
- "/bin/bash",
- "-c",
- "[ -d /opt/lib ] && chown -R jenkins /opt/lib; su jenkins -c /usr/local/bin/jenkins.sh",
- ],
- # End of workaround
- base = base,
- directory = "/",
- visibility = visibility,
- )
diff --git a/jenkins/build_defs/jenkins_job.bzl b/jenkins/build_defs/jenkins_job.bzl
deleted file mode 100644
index f3588fe..0000000
--- a/jenkins/build_defs/jenkins_job.bzl
+++ /dev/null
@@ -1,166 +0,0 @@
-# Copyright 2017 The Bazel 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.
-
-# Jenkins job creation
-
-load(":templates.bzl", "expand_template")
-load(":vars.bzl", "MAIL_SUBSTITUTIONS")
-
-def _to_groovy_list(lst):
- return "[%s]" % (",".join(['"%s"' % e for e in lst]))
-
-def jenkins_job(name, config, substitutions = {}, deps = [], deps_aliases = {},
- project='bazel', org='bazelbuild', git_url=None, project_url=None,
- folder=None, create_filegroups=True):
- """Create a job configuration on Jenkins.
-
- Args:
- name: the name of the job to create
- config: the configuration file for the job
- substitutions: additional substitutions to pass to the template generation
- deps: list of dependencies (templates included by the config file)
- project: the project name on github
- org: the project organization on github, default 'bazelbuild'
- git_url: the URL to the git project, defaulted to the Github URL
- project_url: the project url, defaulted to the Git URL
- create_filegroups: create filegroups named <name>/all and <name>/test that
- contain the files that have to be included to include that job. This is
- to be set to false if the calling macros already creates those
- filegroups.
- """
- github_project = "%s/%s" % (org, project)
- github_url = "https://github.com/" + github_project
- if not git_url:
- git_url = github_url
- if not project_url:
- project_url = git_url
- deps = deps + [deps_aliases[k] for k in deps_aliases]
- substitutions = substitutions + {
- "GITHUB_URL": github_url,
- "GIT_URL": git_url,
- "GITHUB_PROJECT": github_project,
- "PROJECT_URL": project_url,
- } + MAIL_SUBSTITUTIONS
- substitutions["SEND_EMAIL"] = "1"
- expand_template(
- name = name,
- template = config,
- out = "%s.xml" % name,
- deps = deps,
- deps_aliases = deps_aliases,
- substitutions = substitutions,
- )
- if create_filegroups:
- native.filegroup(name = name + "/all", srcs = [name])
-
-def bazel_git_job(**kwargs):
- """Override bazel_github_job to test a project that is not on GitHub."""
- kwargs["github_enabled"] = False
- if not "git_url" in kwargs:
- if not "project_url" in kwargs:
- fail("Neither project_url nor git_url was specified")
- kwargs["git_url"] = kwargs
- bazel_github_job(**kwargs)
-
-def bazel_github_job(name, branch="master", project=None, org="bazelbuild",
- project_url=None, workspace=".", git_url=None,
- config="//jenkins/build_defs:default.json",
- enable_trigger=True,
- gerrit_project=None,
- enabled=True,
- pr_enabled=True,
- github_enabled=True,
- run_sequential=False,
- sauce_enabled=False,
- use_upstream_branch=False):
- """Create a generic github job configuration to build against Bazel head."""
- if not project:
- project = name
-
- substitutions = {
- "WORKSPACE": workspace,
- "PROJECT_NAME": project,
- "BRANCH": branch,
- "NAME": name,
- "disabled": str(not enabled).lower(),
- "enable_trigger": str(enable_trigger and github_enabled).lower(),
- "github": str(github_enabled),
- "GERRIT_PROJECT": str(gerrit_project) if gerrit_project else "",
- "RUN_SEQUENTIAL": str(run_sequential).lower(),
- "SAUCE_ENABLED": str(sauce_enabled).lower(),
- "GLOBAL_USE_UPSTREAM_BRANCH": str(use_upstream_branch)
- }
-
- all_files = [name + ".xml"]
-
- kwargs = {}
- if not github_enabled:
- kwargs["git_url"] = git_url
-
- jenkins_job(
- name = name,
- config = "//jenkins/build_defs:bazel-job.xml.tpl",
- deps_aliases = {
- "JSON_CONFIGURATION": config,
- },
- substitutions=substitutions,
- project=project,
- org=org,
- project_url=project_url,
- create_filegroups=False,
- **kwargs)
-
- if enabled and config:
- jenkins_job(
- name = "Global/" + name,
- config = "//jenkins/build_defs:bazel-job-Global.xml.tpl",
- deps_aliases = {
- "JSON_CONFIGURATION": config,
- },
- substitutions=substitutions,
- git_url=git_url,
- project=project,
- org=org,
- project_url=project_url,
- create_filegroups=False)
- all_files.append("Global/%s.xml" % name)
-
- if pr_enabled and config:
- jenkins_job(
- name = "PR/" + name,
- config = "//jenkins/build_defs:bazel-job-PR.xml.tpl",
- deps_aliases = {
- "JSON_CONFIGURATION": config,
- },
- substitutions=substitutions,
- project=project,
- org=org,
- project_url=project_url,
- create_filegroups=False)
- all_files.append("PR/%s.xml" % name)
-
- if gerrit_project:
- jenkins_job(
- name = "CR/" + name,
- config = "//jenkins/build_defs:bazel-job-Gerrit.xml.tpl",
- deps_aliases = {
- "JSON_CONFIGURATION": config,
- },
- substitutions=substitutions,
- project=project,
- org=org,
- project_url=project_url)
- all_files.append("CR/%s.xml" % name)
-
- native.filegroup(name = "%s/all" % name, srcs = all_files)
diff --git a/jenkins/build_defs/jenkins_node.bzl b/jenkins/build_defs/jenkins_node.bzl
deleted file mode 100644
index 4b99bd4..0000000
--- a/jenkins/build_defs/jenkins_node.bzl
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright 2017 The Bazel 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.
-
-# Setup jenkins and build the corresponding docker images
-
-load("@io_bazel_rules_docker//docker:docker.bzl", "docker_build")
-load(":templates.bzl", "expand_template")
-
-JENKINS_SERVER = "http://jenkins:80"
-
-def jenkins_node(name, remote_fs = "/home/ci", num_executors = 1, mode = "NORMAL",
- labels = [], docker_base = None, visibility = None,
- tunnel = None):
- """Create a node configuration on Jenkins, with possible docker image.
-
- Args:
- name: Name of the node on Jenkins.
- remote_fs: path to the home of the Jenkins user.
- num_executors: number of executors (i.e. concurrent build) this machine can have.
- mode: NORMAL for "Utilize this node as much as possible"
- EXCLUSIVE for "Only build jobs with label restrictions matching this node"
- labels: list of Jenkins labels for this node (the node name is always added).
- docker_base: base for the corresponding docker image to create if we should create one
- (if docker_base is not specified, then a corresponding machine should be configured
- to connect to the Jenkins master).
- visibility: rule visibility.
- """
- if tunnel:
- tunnel = "<tunnel>%s</tunnel>" % tunnel
- else:
- tunnel = ""
- native.genrule(
- name = name,
- cmd = """cat >$@ <<'EOF'
-<?xml version='1.0' encoding='UTF-8'?>
-<slave>
- <name>%s</name>
- <description></description>
- <remoteFS>%s</remoteFS>
- <numExecutors>%s</numExecutors>
- <mode>%s</mode>
- <retentionStrategy class="hudson.slaves.RetentionStrategy$$Always"/>
- <launcher class="hudson.slaves.JNLPLauncher">%s</launcher>
- <label>%s</label>
-</slave>
-EOF
-""" % (name, remote_fs, num_executors, mode, tunnel, " ".join([name] + labels)),
- outs = ["nodes/%s/config.xml" % name],
- visibility = visibility,
- )
- if docker_base:
- # Generate docker image startup script
- expand_template(
- name = name + ".docker-launcher",
- out = name + ".docker-launcher.sh",
- template = "slave_setup.sh",
- substitutions = {
- "NODE_NAME": name,
- "HOME_FS": remote_fs,
- "JENKINS_SERVER": JENKINS_SERVER,
- },
- executable = True,
- )
- # Generate docker image
- docker_build(
- name = name + ".docker",
- base = docker_base,
- volumes = [remote_fs],
- files = [":%s.docker-launcher.sh" % name],
- data_path = ".",
- entrypoint = [
- "/bin/bash",
- "/%s.docker-launcher.sh" % name,
- ],
- visibility = visibility,
- )
diff --git a/jenkins/build_defs/jenkins_nodes.bzl b/jenkins/build_defs/jenkins_nodes.bzl
deleted file mode 100644
index c8f45dc..0000000
--- a/jenkins/build_defs/jenkins_nodes.bzl
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright 2016 The Bazel 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.
-
-# Macros to ease the creation of machines
-load(":jenkins_node.bzl", "jenkins_node")
-
-def jenkins_node_names(name, count):
- """Returns the names for `count` jenkins nodes prefixed by `name`."""
- return ["%s-%s" % (name, i) for i in range(1, count+1)]
-
-def _extend_kwargs(kwargs, extra_args):
- result = {}
- for k,v in kwargs.items():
- result[k] = v
- if extra_args:
- for k,v in extra_args.items():
- result[k] = v
- return result
-
-def jenkins_nodes(name,
- count,
- labels=None,
- install_bazel=True,
- **kwargs):
- """Create a set of Jenkins nodes on the system.
-
- It creates `count` Jenkins nodes with name prefix `name`.
-
- Example:
- If `name` is `darwin-x86_64` and `count` is two, it will
- create two nodes `darwin-x86_64-1` and `darwin-x86_64-2`.
-
- Args:
- name: prefix of each node name, it should be the platform
- name (e.g., darwin-x86_64, ubuntu-14.04-x86_64, ...).
- count: number of nodes to create.
- labels: Jenkins node labels to apply to this node (in addition to
- the "install-bazel" label and the `name` itself).
- install_bazel: if the "install-bazel" label should be added to labels.
- **kwargs: other arguments to be passed verbatim to `jenkins_node`.
- """
- labels = [
- name] + (["install-bazel"] if install_bazel else []) + (labels if labels else [])
- [jenkins_node(
- name = n,
- labels = labels,
- **kwargs
- ) for n in jenkins_node_names(name, count)]
diff --git a/jenkins/build_defs/templates.bzl b/jenkins/build_defs/templates.bzl
deleted file mode 100644
index 42b4b5c..0000000
--- a/jenkins/build_defs/templates.bzl
+++ /dev/null
@@ -1,198 +0,0 @@
-# Copyright 2017 The Bazel 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.
-
-# Rules for templating / files layout
-
-def _expand_template_impl(ctx):
- """Simply spawn the template-engine in a rule."""
- variables = [
- "--variable=%s=%s" % (k, ctx.attr.substitutions[k])
- for k in ctx.attr.substitutions
- ]
- if not ctx.attr.escape_xml:
- variables += ["--noescape_xml"]
- d = {str(ctx.attr.deps[i].label): ctx.files.deps[i].path
- for i in range(0, len(ctx.attr.deps))}
- imports = ["--imports=%s=%s" % (k, d[k]) for k in d]
- imports += ["--imports=%s=%s" % (k, d[str(ctx.label.relative(ctx.attr.deps_aliases[k]))])
- for k in ctx.attr.deps_aliases]
- ctx.action(
- executable = ctx.executable._engine,
- arguments = [
- "--executable" if ctx.attr.executable else "--noexecutable",
- "--template=%s" % ctx.file.template.path,
- "--output=%s" % ctx.outputs.out.path,
- ] + variables + imports,
- inputs = [ctx.file.template] + ctx.files.deps,
- outputs = [ctx.outputs.out],
- )
-
-expand_template = rule(
- attrs = {
- "template": attr.label(
- mandatory = True,
- allow_files = True,
- single_file = True,
- ),
- "deps": attr.label_list(default = [], allow_files = True),
- "deps_aliases": attr.string_dict(default = {}),
- "substitutions": attr.string_dict(mandatory = True),
- "out": attr.output(mandatory = True),
- "executable": attr.bool(default = True),
- "escape_xml": attr.bool(default = True),
- "_engine": attr.label(
- default = Label("//templating:template_engine"),
- executable = True,
- cfg="host"),
- },
- implementation = _expand_template_impl,
-)
-"""Expand a jinja2 template file.
-
-This rules expands the file given in template, into the file given by out.
-
-Args:
- template: The template file to expand.
- deps: additional files to expand, they will be accessible as imports[label]
- in the template environment. If a file ends with .tpl, it is considered
- a template itself and will be expanded.
- deps_aliases: a dictionary of name to label. Each label in that dictionary
- should be present in the deps attribute, and will be make accessible as
- imports[name] in the template environment.
- substitutions: a dictionary of key => values that will appear as variables.key
- in the template environment.
- out: the name of the output file to generate.
- executable: mark the result as excutable if set to True.
-"""
-
-def strip_prefix(path, prefixes):
- for prefix in prefixes:
- if path.startswith(prefix):
- return path[len(prefix):]
- return path
-
-def _dest_path(f, strip_prefixes):
- """Returns the short path of f, stripped of strip_prefixes."""
- return strip_prefix(f.short_path, strip_prefixes)
-
-def _format_path(path_format, path):
- dirsep = path.rfind("/")
- dirname = path[:dirsep] if dirsep > 0 else ""
- basename = path[dirsep+1:] if dirsep > 0 else path
- extsep = basename.rfind(".")
- extension = basename[extsep+1:] if extsep > 0 else ""
- basename = basename[:extsep] if extsep > 0 else basename
- return path_format.format(
- path=path,
- dirname=dirname,
- basename=basename,
- extension=extension
- )
-
-def _append_inputs(args, inputs, f, path, path_format):
- args.append("--file=%s=%s" % (
- f.path,
- _format_path(path_format, path)
- ))
- inputs.append(f)
-
-def _merge_files_impl(ctx):
- """Merge a list of config files in a tar ball with the correct layout."""
- output = ctx.outputs.out
- build_tar = ctx.executable._build_tar
- inputs = []
- args = [
- "--output=" + output.path,
- "--directory=" + ctx.attr.directory,
- "--mode=0644",
- ]
- variables = [
- "--variable=%s=%s" % (k, ctx.attr.substitutions[k])
- for k in ctx.attr.substitutions
- ]
- for f in ctx.files.srcs:
- path = _dest_path(f, ctx.attr.strip_prefixes)
- if path.endswith(ctx.attr.template_extension):
- path = path[:-4]
- f2 = ctx.new_file(ctx.label.name + "/" + path)
- ctx.action(
- executable = ctx.executable._engine,
- arguments = [
- "--template=%s" % f.path,
- "--output=%s" % f2.path,
- "--noescape_xml",
- ] + variables,
- inputs = [f],
- outputs = [f2],
- )
- _append_inputs(args, inputs, f2, path, ctx.attr.path_format)
- else:
- _append_inputs(args, inputs, f, path, ctx.attr.path_format)
- ctx.action(
- executable = build_tar,
- arguments = args,
- inputs = inputs,
- outputs = [output],
- mnemonic="MergeFiles"
- )
-
-merge_files = rule(
- attrs = {
- "srcs": attr.label_list(allow_files=True),
- "template_extension": attr.string(default=".tpl"),
- "directory": attr.string(default="/"),
- "strip_prefixes": attr.string_list(default=[]),
- "substitutions": attr.string_dict(default={}),
- "path_format": attr.string(default="{path}"),
- "_build_tar": attr.label(
- default=Label("@bazel_tools//tools/build_defs/pkg:build_tar"),
- cfg="host",
- executable=True,
- allow_files=True),
- "_engine": attr.label(
- cfg="host",
- default = Label("//templating:template_engine"),
- executable = True),
- },
- outputs = {"out": "%{name}.tar"},
- implementation = _merge_files_impl,
-)
-"""Merge a set of files in a single tarball.
-
-This rule merge a set of files into one tarball, each file will appear in the
-tarball as a file determined by path_format, strip_prefixes and directory.
-
-Outputs:
- <name>.tar: the tarball containing all the files in srcs.
-
-Args:
- srcs: The list of files to merge. If a file is ending with ".tpl" (see
- template_extension), it will get expanded like a template passed to
- expand_template.
- template_extension: extension of files to be considered as template, ".tpl"
- by default.
- directory: base directory for all the files in the resulting tarball.
- strip_prefixes: list of prefixes to strip from the path of the srcs to obtain
- the final path (see path_format).
- substitutions: map of substitutions to make available during template
- expansion. Values of that map will be available as "variables.name" in
- the template environment.
- path_format: format of the final files. Each file will appear in the final
- tarball under "{directory}/{path_format}" where the following string of
- path_format are replaced:
- {path}: path of the input file, removed from prefixes and suffixes,
- {dirname}: directory name of path,
- {basename}: base filename of path,
- {extension}: extension of path
-"""
diff --git a/jenkins/build_defs/vars.bzl b/jenkins/build_defs/vars.bzl
deleted file mode 100644
index 3203bf3..0000000
--- a/jenkins/build_defs/vars.bzl
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2017 The Bazel 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.
-
-# Global constants for jenkins jobs substitutions
-
-MAIL_SUBSTITUTIONS = {
- "BAZEL_BUILD_RECIPIENT": "bazel-ci@googlegroups.com",
- "BAZEL_RELEASE_RECIPIENT": "bazel-discuss+release@googlegroups.com",
-}
diff --git a/jenkins/config.bzl b/jenkins/config.bzl
deleted file mode 100644
index da34eca..0000000
--- a/jenkins/config.bzl
+++ /dev/null
@@ -1,17 +0,0 @@
-ADMIN_USERS = [
- "dslomov@google.com",
- "laszlocsomor@google.com",
- "lberki@google.com",
- "pcloudy@google.com",
- "yueg@google.com",
- "jcater@google.com",
- "aehlig@google.com",
- "elenairina@google.com",
- "hlopko@google.com",
- "vladmos@google.com",
- "fisherii@google.com",
- "philwo@google.com",
- "buchgr@google.com",
- "davidstanke@google.com",
- "jingwen@google.com",
-]
diff --git a/jenkins/config/com.cloudbees.jenkins.GitHubPushTrigger.xml b/jenkins/config/com.cloudbees.jenkins.GitHubPushTrigger.xml
deleted file mode 100644
index 1412ffe..0000000
--- a/jenkins/config/com.cloudbees.jenkins.GitHubPushTrigger.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<com.cloudbees.jenkins.GitHubPushTrigger_-DescriptorImpl plugin="github@1.11.3">
- <manageHook>false</manageHook>
- <credentials/>
-</com.cloudbees.jenkins.GitHubPushTrigger_-DescriptorImpl>
diff --git a/jenkins/config/config.xml.tpl b/jenkins/config/config.xml.tpl
deleted file mode 100644
index 9b48972..0000000
--- a/jenkins/config/config.xml.tpl
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<hudson>
- <disabledAdministrativeMonitors>
- <string>hudson.diagnosis.ReverseProxySetupMonitor</string>
- </disabledAdministrativeMonitors>
- <version>2.101</version>
- <installState class="jenkins.install.InstallState$5">
- <isSetupComplete>true</isSetupComplete>
- <name>RESTART</name>
- </installState>
- <numExecutors>0</numExecutors>
- <mode>NORMAL</mode>
- {{ variables.SECURITY_CONFIG }}
- <disableRememberMe>false</disableRememberMe>
- <projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
- <workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULLNAME}</workspaceDir>
- <buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
- <systemMessage>Jenkins configuration built from HEAD={{ imports['//:git-hash'] }}</systemMessage>
- <markupFormatter class="hudson.markup.EscapedMarkupFormatter"/>
- <jdks/>
- <viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
- <myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
- <clouds/>
- <quietPeriod>5</quietPeriod>
- <scmCheckoutRetryCount>0</scmCheckoutRetryCount>
- <views>
- <listView>
- <owner class="hudson" reference="../../.."/>
- <name>Projects</name>
- <description>All projects</description>
- <filterExecutors>false</filterExecutors>
- <filterQueue>false</filterQueue>
- <properties class="hudson.model.View$PropertyList"/>
- <jobNames/>
- <jobFilters/>
- <columns>
- <hudson.views.StatusColumn/>
- <hudson.views.WeatherColumn/>
- <hudson.views.JobColumn/>
- <hudson.views.LastSuccessColumn/>
- <hudson.views.LastFailureColumn/>
- <hudson.views.LastDurationColumn/>
- <hudson.views.BuildButtonColumn/>
- </columns>
- <includeRegex>(?!^(bazel|PR|CR|maintenance|Global)$).*</includeRegex>
- <recurse>false</recurse>
- <statusFilter>true</statusFilter>
- </listView>
- <listView>
- <owner class="hudson" reference="../../.."/>
- <name>Bazel bootstrap and maintenance</name>
- <filterExecutors>false</filterExecutors>
- <filterQueue>false</filterQueue>
- <properties class="hudson.model.View$PropertyList"/>
- <jobNames/>
- <jobFilters/>
- <columns>
- <hudson.views.StatusColumn/>
- <hudson.views.WeatherColumn/>
- <hudson.views.JobColumn/>
- <hudson.views.LastSuccessColumn/>
- <hudson.views.LastFailureColumn/>
- <hudson.views.LastDurationColumn/>
- <hudson.views.BuildButtonColumn/>
- </columns>
- <includeRegex>(bazel|PR|CR|maintenance|Global)</includeRegex>
- <recurse>false</recurse>
- <statusFilter>true</statusFilter>
- </listView>
- <com.smartcodeltd.jenkinsci.plugins.buildmonitor.BuildMonitorView plugin="build-monitor-plugin@1.12+build.201708172343">
- <owner class="hudson" reference="../../.."/>
- <name>Dashboard</name>
- <filterExecutors>false</filterExecutors>
- <filterQueue>false</filterQueue>
- <properties class="hudson.model.View$PropertyList"/>
- <jobNames/>
- <jobFilters/>
- <columns/>
- <includeRegex>(bazel/nightly|bazel/release|(?!.*/).*)</includeRegex>
- <recurse>true</recurse>
- <statusFilter>true</statusFilter>
- <title>Bazel Tests</title>
- <config>
- <displayCommitters>false</displayCommitters>
- <order class="com.smartcodeltd.jenkinsci.plugins.buildmonitor.order.ByStatus"/>
- </config>
- </com.smartcodeltd.jenkinsci.plugins.buildmonitor.BuildMonitorView>
- <com.smartcodeltd.jenkinsci.plugins.buildmonitor.BuildMonitorView>
- <owner class="hudson" reference="../../.."/>
- <name>Global Dashboard</name>
- <filterExecutors>false</filterExecutors>
- <filterQueue>false</filterQueue>
- <properties class="hudson.model.View$PropertyList"/>
- <jobNames/>
- <jobFilters/>
- <columns/>
- <title>Global Dashboard</title>
- <config>
- <displayCommitters>false</displayCommitters>
- <order class="com.smartcodeltd.jenkinsci.plugins.buildmonitor.order.ByStatus"/>
- </config>
- <includeRegex>Global/.*</includeRegex>
- <recurse>true</recurse>
- <statusFilter>true</statusFilter>
- </com.smartcodeltd.jenkinsci.plugins.buildmonitor.BuildMonitorView>
- </views>
- <primaryView>Projects</primaryView>
- <slaveAgentPort>50000</slaveAgentPort>
- <disabledAgentProtocols>
- <string>JNLP-connect</string>
- <string>JNLP2-connect</string>
- </disabledAgentProtocols>
- <label></label>
- <nodeProperties/>
- <globalNodeProperties/>
-</hudson>
diff --git a/jenkins/config/credentials.xml b/jenkins/config/credentials.xml
deleted file mode 100644
index a5f664e..0000000
--- a/jenkins/config/credentials.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<com.cloudbees.plugins.credentials.SystemCredentialsProvider>
- <domainCredentialsMap class="hudson.util.CopyOnWriteMap$Hash">
- <entry>
- <com.cloudbees.plugins.credentials.domains.Domain>
- <specifications/>
- </com.cloudbees.plugins.credentials.domains.Domain>
- <java.util.concurrent.CopyOnWriteArrayList>
- <com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl>
- <scope>GLOBAL</scope>
- <id>3b53d1b7-9c6b-4822-b2d0-82022ade718f</id>
- <description>bazel-io @ github</description>
- <username>bazel-io</username>
- <password>##SECRET:github.bazel-io.jenkins.password##</password>
- </com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl>
- <hudson.plugins.sauce_ondemand.credentials.SauceCredentials>
- <scope>GLOBAL</scope>
- <id>61b4846b-279d-4369-ae20-31e9d8b9bc66</id>
- <description>bazel_rules_webtesting @ Sauce Labs</description>
- <username>bazel_rules_webtesting</username>
- <apiKey>##SECRET:saucelabs.bazel_rules_webtesting.access_key##</apiKey>
- </hudson.plugins.sauce_ondemand.credentials.SauceCredentials>
- <org.jenkinsci.plugins.plaincredentials.impl.FileCredentialsImpl plugin="plain-credentials@1.4">
- <scope>GLOBAL</scope>
- <id>remote-execution</id>
- <description>credentials for remote execution</description>
- <fileName>bazel-public-d5508ebd72fb.json</fileName>
- <secretBytes>##SECRET:remote-execution-secret-bytes##</secretBytes>
- </org.jenkinsci.plugins.plaincredentials.impl.FileCredentialsImpl>
- </java.util.concurrent.CopyOnWriteArrayList>
- </entry>
- <entry>
- <com.cloudbees.plugins.credentials.domains.Domain>
- <name>api.github.com</name>
- <description>Auto generated credentials domain</description>
- <specifications>
- <com.cloudbees.plugins.credentials.domains.HostnameSpecification>
- <includes>api.github.com</includes>
- </com.cloudbees.plugins.credentials.domains.HostnameSpecification>
- <com.cloudbees.plugins.credentials.domains.SchemeSpecification>
- <schemes class="linked-hash-set">
- <string>https</string>
- </schemes>
- </com.cloudbees.plugins.credentials.domains.SchemeSpecification>
- <com.cloudbees.plugins.credentials.domains.PathSpecification>
- <includes>/</includes>
- <caseSensitive>false</caseSensitive>
- </com.cloudbees.plugins.credentials.domains.PathSpecification>
- </specifications>
- </com.cloudbees.plugins.credentials.domains.Domain>
- <list>
- <org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl>
- <scope>GLOBAL</scope>
- <id>6b2a31e0-cd98-4ed9-bb19-a5e013c68e8a</id>
- <description>https://api.github.com GitHub auto generated token credentials</description>
- <secret>##SECRET:github_token_ghprb##</secret>
- </org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl>
- </list>
- </entry>
- </domainCredentialsMap>
-</com.cloudbees.plugins.credentials.SystemCredentialsProvider>
diff --git a/jenkins/config/hudson.plugins.emailext.ExtendedEmailPublisher.xml b/jenkins/config/hudson.plugins.emailext.ExtendedEmailPublisher.xml
deleted file mode 100644
index 3f43c84..0000000
--- a/jenkins/config/hudson.plugins.emailext.ExtendedEmailPublisher.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<hudson.plugins.emailext.ExtendedEmailPublisherDescriptor plugin="email-ext@2.40.5">
- <defaultSuffix>@bazel.build</defaultSuffix>
- <smtpAuthUsername>##SECRET:smtp.auth.username##</smtpAuthUsername>
- <smtpAuthPassword>##SECRET:smtp.auth.password##</smtpAuthPassword>
- <smtpHost>smtp.gmail.com</smtpHost>
- <useSsl>true</useSsl>
- <smtpPort>465</smtpPort>
- <charset>UTF-8</charset>
- <defaultContentType>text/plain</defaultContentType>
- <defaultSubject>$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!</defaultSubject>
- <defaultBody>$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
-
-Check console output at $BUILD_URL to view the results.</defaultBody>
- <defaultPresendScript></defaultPresendScript>
- <defaultPostsendScript></defaultPostsendScript>
- <defaultClasspath/>
- <defaultTriggerIds>
- <string>hudson.plugins.emailext.plugins.trigger.FailureTrigger</string>
- </defaultTriggerIds>
- <maxAttachmentSize>-1</maxAttachmentSize>
- <recipientList></recipientList>
- <defaultReplyTo></defaultReplyTo>
- <excludedCommitters></excludedCommitters>
- <overrideGlobalSettings>true</overrideGlobalSettings>
- <precedenceBulk>false</precedenceBulk>
- <debugMode>false</debugMode>
- <requireAdminForTemplateTesting>false</requireAdminForTemplateTesting>
- <enableWatching>false</enableWatching>
- <enableAllowUnregistered>false</enableAllowUnregistered>
-</hudson.plugins.emailext.ExtendedEmailPublisherDescriptor>
diff --git a/jenkins/config/hudson.tasks.Mailer.xml.tpl b/jenkins/config/hudson.tasks.Mailer.xml.tpl
deleted file mode 100644
index 0bfc407..0000000
--- a/jenkins/config/hudson.tasks.Mailer.xml.tpl
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<hudson.tasks.Mailer_-DescriptorImpl plugin="mailer@1.20">
- <defaultSuffix>@bazel.build</defaultSuffix>
- <hudsonUrl>https://ci.bazel.build/</hudsonUrl>
- <smtpAuthUsername>##SECRET:smtp.auth.username##</smtpAuthUsername>
- <smtpAuthPassword>##SECRET:smtp.auth.password##</smtpAuthPassword>
- <replyToAddress>bazel-ci@googlegroups.com</replyToAddress>
- <smtpHost>smtp.gmail.com</smtpHost>
- <useSsl>true</useSsl>
- <smtpPort>465</smtpPort>
- <charset>UTF-8</charset>
-</hudson.tasks.Mailer_-DescriptorImpl>
diff --git a/jenkins/config/hudson.triggers.SCMTrigger.xml b/jenkins/config/hudson.triggers.SCMTrigger.xml
deleted file mode 100644
index 70867ab..0000000
--- a/jenkins/config/hudson.triggers.SCMTrigger.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<hudson.triggers.SCMTrigger_-DescriptorImpl>
- <synchronousPolling>false</synchronousPolling>
- <maximumThreads>0</maximumThreads>
-</hudson.triggers.SCMTrigger_-DescriptorImpl>
\ No newline at end of file
diff --git a/jenkins/config/init.groovy.d/configure-jnlp-agent-protocols.groovy b/jenkins/config/init.groovy.d/configure-jnlp-agent-protocols.groovy
deleted file mode 100644
index 94e1bba..0000000
--- a/jenkins/config/init.groovy.d/configure-jnlp-agent-protocols.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- Copyright (c) 2015-2017 Sam Gleske - https://github.com/samrocketman/jenkins-bootstrap-shared
- 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.
- */
-/*
- Disable all JNLP protocols except for JNLP4. JNLP4 is the most secure agent
- protocol because it is using standard TLS.
- */
-import jenkins.model.Jenkins
-
-Jenkins j = Jenkins.instance
-
-if(!j.isQuietingDown()) {
- Set<String> agentProtocolsList = ['JNLP4-connect', 'Ping']
- if(!j.getAgentProtocols().equals(agentProtocolsList)) {
- j.setAgentProtocols(agentProtocolsList)
- println "JNLP Agent Protocols have changed. Setting: ${agentProtocolsList}"
- j.save()
- }
- else {
- println "Nothing changed. JNLP Agent Protocols already configured: ${j.getAgentProtocols()}"
- }
-}
-else {
- println 'Shutdown mode enabled. Configure JNLP Agent Protocols SKIPPED.'
-}
diff --git a/jenkins/config/jenkins.model.JenkinsLocationConfiguration.xml.tpl b/jenkins/config/jenkins.model.JenkinsLocationConfiguration.xml.tpl
deleted file mode 100644
index 6482442..0000000
--- a/jenkins/config/jenkins.model.JenkinsLocationConfiguration.xml.tpl
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!--
- Copyright 2015 The Bazel 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.
--->
-<jenkins.model.JenkinsLocationConfiguration>
- <adminAddress>Bazel Jenkins CI server <noreply@bazel.build></adminAddress>
- <jenkinsUrl>https://ci.bazel.build/</jenkinsUrl>
-</jenkins.model.JenkinsLocationConfiguration>
diff --git a/jenkins/config/org.jenkinsci.main.modules.sshd.SSHD.xml b/jenkins/config/org.jenkinsci.main.modules.sshd.SSHD.xml
deleted file mode 100644
index a1ef923..0000000
--- a/jenkins/config/org.jenkinsci.main.modules.sshd.SSHD.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<org.jenkinsci.main.modules.sshd.SSHD>
- <port>-1</port>
-</org.jenkinsci.main.modules.sshd.SSHD>
\ No newline at end of file
diff --git a/jenkins/config/org.jenkinsci.plugins.ghprb.GhprbTrigger.xml b/jenkins/config/org.jenkinsci.plugins.ghprb.GhprbTrigger.xml
deleted file mode 100644
index 4bfd091..0000000
--- a/jenkins/config/org.jenkinsci.plugins.ghprb.GhprbTrigger.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<org.jenkinsci.plugins.ghprb.GhprbTrigger_-DescriptorImpl plugin="ghprb@1.39.0">
- <configVersion>1</configVersion>
- <whitelistPhrase>.*add\W+to\W+whitelist.*</whitelistPhrase>
- <okToTestPhrase>.*ok\W+to\W+test.*</okToTestPhrase>
- <retestPhrase>.*test\W+this\W+please.*</retestPhrase>
- <skipBuildPhrase>.*\[skip\W+ci\].*</skipBuildPhrase>
- <blackListCommitAuthor></blackListCommitAuthor>
- <cron>H/5 * * * *</cron>
- <useComments>false</useComments>
- <useDetailedComments>false</useDetailedComments>
- <manageWebhooks>false</manageWebhooks>
- <unstableAs>FAILURE</unstableAs>
- <autoCloseFailedPullRequests>false</autoCloseFailedPullRequests>
- <displayBuildErrorsOnDownstreamBuilds>false</displayBuildErrorsOnDownstreamBuilds>
- <githubAuth>
- <org.jenkinsci.plugins.ghprb.GhprbGitHubAuth>
- <serverAPIUrl>https://api.github.com</serverAPIUrl>
- <credentialsId>6b2a31e0-cd98-4ed9-bb19-a5e013c68e8a</credentialsId>
- <id>58f0694f-1760-4610-b4f2-73ffb34c61a3</id>
- <description></description>
- <secret>##SECRET:github_token_ghprb2##</secret>
- </org.jenkinsci.plugins.ghprb.GhprbGitHubAuth>
- </githubAuth>
- <adminlist></adminlist>
- <requestForTestingPhrase>Can one of the admins verify this patch?</requestForTestingPhrase>
- <extensions>
- <org.jenkinsci.plugins.ghprb.extensions.status.GhprbSimpleStatus>
- <commitStatusContext>ci.bazel.build</commitStatusContext>
- <triggeredStatus></triggeredStatus>
- <startedStatus></startedStatus>
- <statusUrl></statusUrl>
- </org.jenkinsci.plugins.ghprb.extensions.status.GhprbSimpleStatus>
- </extensions>
-</org.jenkinsci.plugins.ghprb.GhprbTrigger_-DescriptorImpl>
diff --git a/jenkins/config/org.jenkinsci.plugins.workflow.libs.GlobalLibraries.xml b/jenkins/config/org.jenkinsci.plugins.workflow.libs.GlobalLibraries.xml
deleted file mode 100644
index bb584f3..0000000
--- a/jenkins/config/org.jenkinsci.plugins.workflow.libs.GlobalLibraries.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<org.jenkinsci.plugins.workflow.libs.GlobalLibraries>
- <libraries>
- <org.jenkinsci.plugins.workflow.libs.LibraryConfiguration>
- <name>opt-lib</name>
- <retriever class="org.jenkinsci.plugins.workflow.libs.SCMSourceRetriever">
- <scm class="jenkins.plugins.git.GitSCMSource">
- <id>f97d1277-16e1-4a66-ab25-c876be722f50</id>
- <remote>file:///opt/lib</remote>
- <credentialsId></credentialsId>
- <remoteName>origin</remoteName>
- <rawRefSpecs>+refs/heads/*:refs/remotes/origin/*</rawRefSpecs>
- <includes>*</includes>
- <excludes></excludes>
- <ignoreOnPushNotifications>false</ignoreOnPushNotifications>
- </scm>
- </retriever>
- <defaultVersion>master</defaultVersion>
- <implicit>true</implicit>
- <allowVersionOverride>true</allowVersionOverride>
- </org.jenkinsci.plugins.workflow.libs.LibraryConfiguration>
- </libraries>
-</org.jenkinsci.plugins.workflow.libs.GlobalLibraries>
diff --git a/jenkins/config/secrets/slave-to-master-security-kill-switch b/jenkins/config/secrets/slave-to-master-security-kill-switch
deleted file mode 100644
index 02e4a84..0000000
--- a/jenkins/config/secrets/slave-to-master-security-kill-switch
+++ /dev/null
@@ -1 +0,0 @@
-false
\ No newline at end of file
diff --git a/jenkins/gerrit-verifier.groovy b/jenkins/gerrit-verifier.groovy
deleted file mode 100644
index d8a291f..0000000
--- a/jenkins/gerrit-verifier.groovy
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors.
-//
-// 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.
-
-import build.bazel.ci.GerritUtils
-import build.bazel.ci.JenkinsUtils
-
-GerritUtils gerrit = new GerritUtils(
- "https://bazel-review.googlesource.com/",
- "/opt/secrets/gerritcookies",
- "Bazel CI <ci.bazel@gmail.com>")
-
-// Build the jobs associated to a given change.
-def buildChange(gerrit, change) {
- def refspec = "+" + change.ref + ":" + change.ref.replaceAll('ref/', 'ref/remotes/origin/')
- def jobs = JenkinsUtils.jobsWithDescription("CR", "Gerrit project: " + change.project + ".")
-
- if (jobs != null && !jobs.empty) {
- gerrit.startReview(change.number)
- for(job in jobs) {
- build job: "/CR/${job}", propagate: false, wait: false, parameters: [
- [$class: 'StringParameterValue', name: 'REFSPEC', value: refspec],
- [$class: 'StringParameterValue', name: 'BRANCH', value: change.sha1],
- [$class: 'StringParameterValue', name: 'CHANGE_NUMBER', value: change.number.toString()]]
- }
- }
-}
-
-// Run the global presubmit job for a given change
-def globalPresubmit(gerrit, change) {
- def refspec = "+" + change.ref + ":" + change.ref.replaceAll('ref/', 'ref/remotes/origin/')
- gerrit.startReview(change.number)
- build job: "/bazel/presubmit", propagate: false, wait: false, parameters: [
- [$class: 'StringParameterValue', name: 'REFSPEC', value: refspec],
- [$class: 'StringParameterValue', name: 'BRANCH', value: change.sha1],
- [$class: 'StringParameterValue', name: 'CHANGE_NUMBER', value: change.number.toString()]]
-}
-
-timeout(2) {
- def changes = [:]
- // Get open gerrit changes that were verified but not yet processed
- stage("Get changes") {
- def acceptedChanges = gerrit.getVerifiedChanges()
- def changesForGlobalPresubmit = gerrit.getVerifiedChanges("project:bazel", 2)
- if (acceptedChanges) {
- echo "Gerrit has " + acceptedChanges.size() + " change(s) to be verified"
- for (int i = 0; i < acceptedChanges.size(); i++) {
- def change = acceptedChanges[i]
- changes[change.number] = { -> buildChange(gerrit, change) }
- }
- }
- if (changesForGlobalPresubmit) {
- echo "Gerrit has " + changesForGlobalPresubmit.size() + " change(s) waiting for global presubmit"
- for (int i = 0; i < changesForGlobalPresubmit.size(); i++) {
- def change = changesForGlobalPresubmit[i]
- changes[change.number] = { -> globalPresubmit(gerrit, change) }
- }
- }
- if (!changes && !changesForGlobalPresubmit) {
- echo "No change to be verified"
- }
- }
-
- // And build accepted changes
- stage("Verify") {
- parallel changes
- }
-}
diff --git a/jenkins/gerrit-verifier.xml.tpl b/jenkins/gerrit-verifier.xml.tpl
deleted file mode 100644
index fcfe377..0000000
--- a/jenkins/gerrit-verifier.xml.tpl
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<flow-definition plugin="workflow-job">
- <actions/>
- <description></description>
- <keepDependencies>false</keepDependencies>
- <properties>
- <jenkins.model.BuildDiscarderProperty>
- <strategy class="hudson.tasks.LogRotator">
- <daysToKeep>-1</daysToKeep>
- <numToKeep>25</numToKeep>
- <artifactDaysToKeep>-1</artifactDaysToKeep>
- <artifactNumToKeep>-1</artifactNumToKeep>
- </strategy>
- </jenkins.model.BuildDiscarderProperty>
- <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
- <org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- <triggers>
- <hudson.triggers.TimerTrigger>
- <spec>* * * * *</spec>
- </hudson.triggers.TimerTrigger>
- </triggers>
- </org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- </properties>
- <assignedNode>deploy</assignedNode>
- <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps">
- <script>{{ imports['//jenkins:gerrit-verifier.groovy'] }}</script>
- <sandbox>true</sandbox>
- </definition>
- <triggers/>
-</flow-definition>
diff --git a/jenkins/jobs/BUILD b/jenkins/jobs/BUILD
deleted file mode 100644
index 68d2fc7..0000000
--- a/jenkins/jobs/BUILD
+++ /dev/null
@@ -1,218 +0,0 @@
-load("//jenkins/build_defs:jenkins.bzl", "jenkins_job", "bazel_github_job", "bazel_git_job")
-load(":jobs.bzl", "job_lists")
-load("//jenkins/lib:def.bzl", "bazel_job_configuration_test")
-
-# Tests
-[bazel_job_configuration_test(
- name = s + "-test",
- configs = [s],
-) for s in glob(["configs/*.json"])]
-
-# Some common jobs
-[jenkins_job(
- name = "bazel/" + job,
- config = "global/%s.xml.tpl" % job,
- deps = [
- ":configs/bootstrap.json",
- ],
-) for job in [
- "nightly",
- "presubmit",
- "release",
-]]
-
-jenkins_job(
- name = "maintenance/install-bazel",
- config = "install-bazel.xml.tpl",
- deps = [":install-bazel.groovy"],
-)
-
-##
-## list of projects
-##
-
-# Jobs from the tensorflow org
-bazel_github_job(
- name = "TensorFlow",
- config = ":configs/tensorflow.json",
- org = "tensorflow",
- project = "tensorflow",
- project_url = "https://tensorflow.org",
-)
-
-bazel_github_job(
- name = "TensorFlow_Serving",
- config = ":configs/tensorflow_serving.json",
- org = "tensorflow",
- project = "serving",
-)
-
-bazel_github_job(
- name = "tf_models_syntaxnet",
- config = ":configs/tf_models_syntaxnet.json",
- org = "tensorflow",
- project = "models",
- workspace = "research/syntaxnet",
-)
-
-# Job for testing Gerrit
-bazel_git_job(
- name = "gerrit",
- config = ":configs/gerrit.json",
- git_url = "https://gerrit.googlesource.com/gerrit",
- org = "GerritCodeReview",
- project_url = "https://www.gerritcodereview.com",
-)
-
-# Jobs from the bazelbuild org with customization
-bazel_github_job(
- name = "tutorial",
- config = ":configs/tutorial.json",
- project = "examples",
- workspace = "tutorial",
-)
-
-bazel_github_job(
- name = "eclipse",
- gerrit_project = "eclipse",
-)
-
-bazel_github_job(
- name = "continuous-integration",
- config = ":configs/continuous-integration.json",
- gerrit_project = "continuous-integration",
-)
-
-bazel_github_job(
- name = "bazel-tests-remote",
- config = ":configs/empty.json",
- gerrit_project = "bazel",
- git_url = "https://bazel.googlesource.com/bazel",
- pr_enabled = False, # Do not vet PR because it seems to cancel bazel-tests.
- project = "bazel",
- use_upstream_branch = True,
-)
-
-bazel_github_job(
- name = "bazel-tests",
- config = ":configs/empty.json",
- gerrit_project = "bazel",
- git_url = "https://bazel.googlesource.com/bazel",
- project = "bazel",
- use_upstream_branch = True,
-)
-
-bazel_github_job(
- name = "buildtools",
- config = ":configs/buildtools.json",
-)
-
-bazel_github_job(
- name = "bazel-toolchains",
- config = ":configs/empty.json",
- gerrit_project = "bazel-toolchains",
- git_url = "https://bazel.googlesource.com/bazel-toolchains",
-)
-
-bazel_github_job(
- name = "rules_webtesting",
- config = ":configs/rules_webtesting.json",
- run_sequential = True,
- sauce_enabled = True,
-)
-
-bazel_github_job(
- name = "intellij",
- config = ":configs/intellij.json",
- project_url = "https://ij.bazel.build",
-)
-
-# Jobs from the bazelbuild org that have a specific config on continuous-integration
-# side.
-# TODO(dmarting): merge with the next list once we move those configuration file
-# on the repository side.
-[bazel_github_job(
- name = n,
- config = ":configs/%s.json" % n,
-) for n in [
- "rules_dotnet",
- "rules_jsonnet",
- "rules_rust",
- "rules_scala",
-]]
-
-# Jobs from the bazelbuild org using the default configuration
-[bazel_github_job(name = n) for n in [
- "bazel-watcher",
- "migration-tooling",
- "rules_appengine",
- "rules_closure",
- "rules_d",
- "rules_docker",
- "rules_go",
- "rules_perl",
- "rules_sass",
- "skydoc",
-]]
-
-# Jobs without tests
-[bazel_github_job(
- name = n,
- config = ":configs/no-tests.json",
-) for n in [
- "rules_groovy",
- "rules_gwt",
-]]
-
-# Jobs from the bazelbuild org using a dummy configuration
-[bazel_github_job(
- name = n,
- config = ":configs/empty.json",
-) for n in [
- "bazel-integration-testing",
- "BUILD_file_generator",
- "rules_apple",
- "rules_k8s",
- "rules_nodejs",
- "rules_python",
- "rules_typescript",
-]]
-
-# Jobs from the abseil org
-[bazel_github_job(
- name = n,
- config = ":configs/empty.json",
- org = "abseil",
-) for n in [
- "abseil-cpp",
- "abseil-py",
-]]
-
-# Jobs from the google org
-bazel_github_job(
- name = "glog",
- org = "google",
-)
-
-bazel_github_job(
- name = "re2",
- config = ":configs/re2.json",
- org = "google",
-)
-
-bazel_github_job(
- name = "protobuf",
- config = ":configs/protobuf.json",
- org = "google",
-)
-
-bazel_github_job(
- name = "subpar",
- org = "google",
-)
-
-# End of project list
-job_lists(
- name = "jobs",
- visibility = ["//jenkins:__pkg__"],
-)
diff --git a/jenkins/jobs/configs/bootstrap.json b/jenkins/jobs/configs/bootstrap.json
deleted file mode 100644
index 80b8fa1..0000000
--- a/jenkins/jobs/configs/bootstrap.json
+++ /dev/null
@@ -1,64 +0,0 @@
-// DO NOT MODIFY!
-// This file is used only for older tree of Bazel, new tree includes it.
-// Please modify https://github.com/bazelbuild/bazel/blob/master/scripts/ci/bootstrap.json
-[
- {
- "node": "linux-x86_64",
- "parameters": {
- "archive": {
- "bazel-bin/src/bazel": "bazel",
- "bazel-bin/scripts/packages/with-jdk/install.sh": "bazel-%{release_name}-installer-linux-x86_64.sh",
- "bazel-bin/scripts/packages/without-jdk/install.sh": "bazel-%{release_name}-without-jdk-installer-linux-x86_64.sh",
- "bazel-bin/scripts/packages/debian/bazel-debian.deb": "bazel_%{release_name}-linux-x86_64.deb",
- "bazel-genfiles/bazel-distfile.zip": "bazel-%{release_name}-dist.zip"
- },
- "stash": {
- "bazel-genfiles/scripts/packages/debian/bazel.dsc": "bazel.dsc",
- "bazel-genfiles/scripts/packages/debian/bazel.tar.gz": "bazel.tar.gz",
- "bazel-genfiles/site/jekyll-tree.tar": "docs.bazel.build.tar",
- },
- "targets": [
- "//scripts/packages",
- "//site:jekyll-tree",
- ]
- }
- },
- { "node": "ubuntu_16.04-x86_64" },
- {
- "node": "darwin-x86_64",
- "parameters": {
- "archive": {
- "bazel-bin/src/bazel": "bazel",
- "bazel-bin/scripts/packages/with-jdk/install.sh": "bazel-%{release_name}-installer-darwin-x86_64.sh",
- "bazel-bin/scripts/packages/without-jdk/install.sh": "bazel-%{release_name}-without-jdk-installer-darwin-x86_64.sh"
- },
- "targets": [
- "//scripts/packages"
- ],
- // TODO(dmarting): Do we still needs that? this could be done as an external repo
- // instead.
- "opts": ["--define IPHONE_SDK=1"]
- }
- },
- {
- "node": "windows-x86_64",
- "parameters": {
- "archive": {
- "bazel-bin/src/bazel": ["bazel.exe", "bazel-%{release_name}-without-jdk-windows-x86_64.exe"],
- "bazel-bin/src/bazel_with_jdk": "bazel-%{release_name}-windows-x86_64.exe",
- "bazel-genfiles/scripts/packages/bazel.zip": "bazel-%{release_name}-without-jdk-windows-x86_64.zip",
- "bazel-genfiles/scripts/packages/bazel_with_jdk.zip": "bazel-%{release_name}-windows-x86_64.zip"
- },
- "targets": [
- "//scripts/packages"
- ],
- "opts": [
- "--copt=-w",
- "--host_copt=-w",
- // TODO(pcloudy):
- // Remove it after wrapper-less CROSSTOOL becomes default
- "--action_env=NO_MSVC_WRAPPER=1"
- ]
- }
- }
-]
diff --git a/jenkins/jobs/configs/buildtools.json b/jenkins/jobs/configs/buildtools.json
deleted file mode 100644
index 02debc2..0000000
--- a/jenkins/jobs/configs/buildtools.json
+++ /dev/null
@@ -1,17 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
- ],
- "parameters": {
- "targets": [],
- "tests": [":tests"]
- }
- }
-]
diff --git a/jenkins/jobs/configs/continuous-integration.json b/jenkins/jobs/configs/continuous-integration.json
deleted file mode 100644
index b60446b..0000000
--- a/jenkins/jobs/configs/continuous-integration.json
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- {
- "node": "linux-x86_64",
- }
-]
diff --git a/jenkins/jobs/configs/empty.json b/jenkins/jobs/configs/empty.json
deleted file mode 100644
index f04086a..0000000
--- a/jenkins/jobs/configs/empty.json
+++ /dev/null
@@ -1,3 +0,0 @@
-// This configuration file is for new project so that they can setup the configuration
-// on the repository side. It build nothing, just create an empty project.
-[]
diff --git a/jenkins/jobs/configs/gerrit.json b/jenkins/jobs/configs/gerrit.json
deleted file mode 100644
index 16383da..0000000
--- a/jenkins/jobs/configs/gerrit.json
+++ /dev/null
@@ -1,31 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
- ],
- "parameters": {
- "tests": ["//..."],
- "test_tag_filters": ["-slow"],
- "targets": ["//:release"],
- }
- }, {
- "configurations": [
- {"node": "windows-x86_64"}
- ],
- "parameters": {
- "build_opts": [
- "--workspace_status_command=tools/workspace-status.cmd",
- "--verbose_failures"
- ],
- "tests": ["//javatests/..."],
- "test_tag_filters": ["-slow", "-no_windows"],
- "targets": ["//:headless"]
- }
- }
-]
diff --git a/jenkins/jobs/configs/intellij.json b/jenkins/jobs/configs/intellij.json
deleted file mode 100644
index 706c9da..0000000
--- a/jenkins/jobs/configs/intellij.json
+++ /dev/null
@@ -1,57 +0,0 @@
-[
- {
- "product": "intellij",
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
- ],
- "parameters": {
- "targets": ["ijwb:ijwb_bazel"],
- "test_opts": ["--define=ij_product=intellij-latest"],
- "build_opts": ["--define=ij_product=intellij-latest"],
- "tests": [":ijwb_tests"]
- }
- },
- {
- "product": "clion",
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
- ],
- "parameters": {
- "targets": ["clwb:clwb_bazel"],
- "test_opts": ["--define=ij_product=clion-latest"],
- "build_opts": ["--define=ij_product=clion-latest"],
- "tests": [":clwb_tests"]
- }
- }//,
- // TODO(dmarting): Reenable android-studio when upstream is fixed
- // {
- // "name": "android-studio",
- // "configurations": [
- // {
- // "configurations": [
- // {"node": "linux-x86_64"},
- // {"node": "ubuntu_16.04-x86_64"},
- // {"node": "darwin-x86_64"}
- // ]
- // }
- // ],
- // "parameters": {
- // "targets": ["aswb:aswb_bazel"],
- // "test_opts": ["--define=ij_product=android-studio-latest"],
- // "build_opts": ["--define=ij_product=android-studio-latest"],
- // "tests": [":aswb_tests"]
- // }
- // }
-]
diff --git a/jenkins/jobs/configs/no-tests.json b/jenkins/jobs/configs/no-tests.json
deleted file mode 100644
index 5d48a0b..0000000
--- a/jenkins/jobs/configs/no-tests.json
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- {
- "parameters": {"tests": []},
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
-]
diff --git a/jenkins/jobs/configs/protobuf.json b/jenkins/jobs/configs/protobuf.json
deleted file mode 100644
index 4cd968f..0000000
--- a/jenkins/jobs/configs/protobuf.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
- ],
- "parameters": {
- "targets": [],
- // on Linux protobuf tries to build objc target so filter by test only
- "tests": ["//:all"]
- }
- }
-]
diff --git a/jenkins/jobs/configs/re2.json b/jenkins/jobs/configs/re2.json
deleted file mode 100644
index 30e46b9..0000000
--- a/jenkins/jobs/configs/re2.json
+++ /dev/null
@@ -1,17 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
- ],
- "parameters": {
- "targets": [],
- "tests": ["//:all"]
- }
- }
-]
diff --git a/jenkins/jobs/configs/rules_dotnet.json b/jenkins/jobs/configs/rules_dotnet.json
deleted file mode 100644
index eccffde..0000000
--- a/jenkins/jobs/configs/rules_dotnet.json
+++ /dev/null
@@ -1,9 +0,0 @@
-[
- {
- // rules_dotnet is disabled on Linux until bazelbuild/rules_dotnet#13 is fixed.
- "node": "darwin-x86_64",
- "parameters": {
- "build_opts": ["--spawn_strategy=standalone"]
- }
- }
-]
diff --git a/jenkins/jobs/configs/rules_jsonnet.json b/jenkins/jobs/configs/rules_jsonnet.json
deleted file mode 100644
index d983e09..0000000
--- a/jenkins/jobs/configs/rules_jsonnet.json
+++ /dev/null
@@ -1,17 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
- ],
- "parameters": {
- "targets": ["//...", "@examples//..."],
- "tests": ["//...", "@examples//..."]
- }
- }
-]
diff --git a/jenkins/jobs/configs/rules_rust.json b/jenkins/jobs/configs/rules_rust.json
deleted file mode 100644
index d983e09..0000000
--- a/jenkins/jobs/configs/rules_rust.json
+++ /dev/null
@@ -1,17 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
- ],
- "parameters": {
- "targets": ["//...", "@examples//..."],
- "tests": ["//...", "@examples//..."]
- }
- }
-]
diff --git a/jenkins/jobs/configs/rules_scala.json b/jenkins/jobs/configs/rules_scala.json
deleted file mode 100644
index 325df58..0000000
--- a/jenkins/jobs/configs/rules_scala.json
+++ /dev/null
@@ -1,17 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
- ],
- "parameters": {
- "targets": ["//test/..."],
- "tests": ["//test/..."]
- }
- }
-]
diff --git a/jenkins/jobs/configs/rules_webtesting.json b/jenkins/jobs/configs/rules_webtesting.json
deleted file mode 100644
index e2dcb75..0000000
--- a/jenkins/jobs/configs/rules_webtesting.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
- ],
- "parameters": {
- // Disable chrome55-win10 test until https://github.com/bazelbuild/rules_webtesting/issues/188
- // is resolved.
- "tests": ["tests(//...) - //go/launcher/webdriver:go_default_test_chrome55-win10"],
- }
- }
-]
diff --git a/jenkins/jobs/configs/tensorflow.json b/jenkins/jobs/configs/tensorflow.json
deleted file mode 100644
index 1a203e7..0000000
--- a/jenkins/jobs/configs/tensorflow.json
+++ /dev/null
@@ -1,46 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"}
- ]
- }
- ],
- "parameters": {
- "configure": [
- "echo -e '\nimport %workspace%/.bazelrc' >>bazel.bazelrc",
- "touch .bazelrc",
- "./tensorflow/tools/ci_build/builds/configured CPU"
- ],
- "test_opts": ["--test_timeout=1800"],
- "build_opts": ["-c opt"],
- "tests": ["filter(':(lib|platform)_.*', kind(test, //tensorflow/core:all))"],
- "targets": ["//tensorflow/tools/pip_package:build_pip_package"]
- }
- }, {
- "toolchain": "msvc",
- "configurations": [{
- "configurations": [{"node": "windows-x86_64"}]
- }],
- "parameters": {
- "configure": [
- "if not exist C:\\tmp md C:\\tmp",
- "echo.>>bazel.bazelrc",
- "echo import .bazelrc>>bazel.bazelrc",
- "echo.>>.bazelrc",
- "yes '' | python ./configure.py"
- ],
- "startup_opts": [
- "--output_base=c:/tmp" // Use a short output root to avoid potential long path issue
- ],
- "build_opts": [
- "-c opt",
- "--define=override_eigen_strong_inline=true" // speed up the compiling, see https://github.com/tensorflow/tensorflow/issues/10521
- ],
- "targets": ["//tensorflow/tools/pip_package:build_pip_package"],
- "tests": []
- }
- }
-]
diff --git a/jenkins/jobs/configs/tensorflow_serving.json b/jenkins/jobs/configs/tensorflow_serving.json
deleted file mode 100644
index daf2ff2..0000000
--- a/jenkins/jobs/configs/tensorflow_serving.json
+++ /dev/null
@@ -1,22 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"}
- ]
- }
- ],
- "parameters": {
- "configure": [
- "(cd tensorflow && ./tensorflow/tools/ci_build/builds/configured CPU)",
- "echo -e '\nimport %workspace%/tensorflow/.tf_configure.bazelrc' >>bazel.bazelrc",
- "$BAZEL clean" // Clean to work around bazelbuild/bazel#3664
- ],
- "tests": ["tensorflow_serving/... - //tensorflow_serving/model_servers:tensorflow_model_server_test"],
- "build_opts": ["--config=monolithic"],
- "targets": []
- }
- }
-]
diff --git a/jenkins/jobs/configs/tf_models_syntaxnet.json b/jenkins/jobs/configs/tf_models_syntaxnet.json
deleted file mode 100644
index da51600..0000000
--- a/jenkins/jobs/configs/tf_models_syntaxnet.json
+++ /dev/null
@@ -1,22 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"}
- ]
- }
- ],
- "parameters": {
- "configure": [
- "(cd tensorflow && ./tensorflow/tools/ci_build/builds/configured CPU)",
- "echo -e '\nimport %workspace%/tensorflow/.tf_configure.bazelrc' >>bazel.bazelrc",
- "$BAZEL clean" // Clean to work around bazelbuild/bazel#3664
- ],
- "tests": ["syntaxnet/... - //syntaxnet:beam_reader_ops_test - //syntaxnet:graph_builder_test - //syntaxnet:lexicon_builder_test - //syntaxnet:parser_trainer_test - //syntaxnet:reader_ops_test - //syntaxnet:text_formats_test - //syntaxnet/util:check_test - //syntaxnet/util:registry_test", "util/utf8/..."],
- "build_opts": ["--config=monolithic"],
- "targets": []
- }
- }
-]
diff --git a/jenkins/jobs/configs/tutorial.json b/jenkins/jobs/configs/tutorial.json
deleted file mode 100644
index c949ffe..0000000
--- a/jenkins/jobs/configs/tutorial.json
+++ /dev/null
@@ -1,30 +0,0 @@
-[
- {
- "configurations": [
- {
- "configurations": [
- {"node": "linux-x86_64"},
- {"node": "ubuntu_16.04-x86_64"},
- {"node": "darwin-x86_64"}
- ]
- }
- ],
- "parameters": {
- "configure": [
- "echo >>WORKSPACE",
- "cat >>WORKSPACE <<EOF",
- "android_sdk_repository(",
- " name = \"androidsdk\",",
- " path = \"${ANDROID_SDK_PATH}\",",
- ")",
- "android_ndk_repository(",
- " name = \"androidndk\",",
- " path = \"${ANDROID_NDK_PATH}\",",
- ")",
- "EOF"
- ],
- "targets": ["//:all"],
- "tests": []
- }
- }
-]
diff --git a/jenkins/jobs/global/nightly.xml.tpl b/jenkins/jobs/global/nightly.xml.tpl
deleted file mode 100644
index 1ec4c55..0000000
--- a/jenkins/jobs/global/nightly.xml.tpl
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<flow-definition>
- <actions/>
- <description>Global pipeline to bootstrap bazel and runs all downstream jobs</description>
- <keepDependencies>false</keepDependencies>
- <properties>
- <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
- <com.coravy.hudson.plugins.github.GithubProjectProperty>
- <projectUrl>https://github.com/bazelbuild/bazel/</projectUrl>
- <displayName></displayName>
- </com.coravy.hudson.plugins.github.GithubProjectProperty>
- <jenkins.model.BuildDiscarderProperty>
- <strategy class="hudson.tasks.LogRotator">
- <daysToKeep>90</daysToKeep>
- <numToKeep>-1</numToKeep>
- <artifactDaysToKeep>-1</artifactDaysToKeep>
- <artifactNumToKeep>-1</artifactNumToKeep>
- </strategy>
- </jenkins.model.BuildDiscarderProperty>
- <hudson.model.ParametersDefinitionProperty>
- <parameterDefinitions>
- <hudson.model.TextParameterDefinition>
- <name>EXTRA_BAZELRC</name>
- <description>To inject new option to the .bazelrc file in downstream projects.</description>
- <defaultValue></defaultValue>
- </hudson.model.TextParameterDefinition>
- </parameterDefinitions>
- </hudson.model.ParametersDefinitionProperty>
- <org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- <triggers>
- <hudson.triggers.TimerTrigger>
- <spec>@midnight</spec>
- </hudson.triggers.TimerTrigger>
- </triggers>
- </org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- </properties>
- <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition">
- <script>
- globalBazelTest(
- repository: "https://bazel.googlesource.com/bazel",
- branch: "master",
- extra_bazelrc: params.EXTRA_BAZELRC,
- refspec: "+refs/heads/*:refs/remotes/origin/*",
- configuration: '''{{ raw_imports['//jenkins/jobs:configs/bootstrap.json'].replace('\\', '\\\\').replace("'", "\\'") }}''')
- </script>
- <sandbox>true</sandbox>
- </definition>
- <triggers/>
-</flow-definition>
diff --git a/jenkins/jobs/global/presubmit.xml.tpl b/jenkins/jobs/global/presubmit.xml.tpl
deleted file mode 100644
index 6e26601..0000000
--- a/jenkins/jobs/global/presubmit.xml.tpl
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<flow-definition>
- <actions/>
- <description>Global pipeline to bootstrap bazel and runs all downstream jobs</description>
- <keepDependencies>false</keepDependencies>
- <properties>
- <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
- <com.coravy.hudson.plugins.github.GithubProjectProperty>
- <projectUrl>https://github.com/bazelbuild/bazel/</projectUrl>
- <displayName></displayName>
- </com.coravy.hudson.plugins.github.GithubProjectProperty>
- <jenkins.model.BuildDiscarderProperty>
- <strategy class="hudson.tasks.LogRotator">
- <daysToKeep>90</daysToKeep>
- <numToKeep>-1</numToKeep>
- <artifactDaysToKeep>-1</artifactDaysToKeep>
- <artifactNumToKeep>-1</artifactNumToKeep>
- </strategy>
- </jenkins.model.BuildDiscarderProperty>
- <hudson.model.ParametersDefinitionProperty>
- <parameterDefinitions>
- <hudson.model.StringParameterDefinition>
- <name>REPOSITORY</name>
- <description>The repository to build</description>
- <defaultValue>https://bazel.googlesource.com/bazel</defaultValue>
- </hudson.model.StringParameterDefinition>
- <hudson.model.StringParameterDefinition>
- <name>BRANCH</name>
- <description>The branch to build</description>
- <defaultValue>master</defaultValue>
- </hudson.model.StringParameterDefinition>
- <hudson.model.StringParameterDefinition>
- <name>REFSPEC</name>
- <description>The refspec to fetch</description>
- <defaultValue>+refs/heads/*:refs/remotes/origin/*</defaultValue>
- </hudson.model.StringParameterDefinition>
- <hudson.model.TextParameterDefinition>
- <name>EXTRA_BAZELRC</name>
- <description>To inject new option to the .bazelrc file in downstream projects.</description>
- <defaultValue></defaultValue>
- </hudson.model.TextParameterDefinition>
- <hudson.model.StringParameterDefinition>
- <name>CHANGE_NUMBER</name>
- <description>Number of the change being tested, for information only.</description>
- <defaultValue></defaultValue>
- </hudson.model.StringParameterDefinition>
- </parameterDefinitions>
- </hudson.model.ParametersDefinitionProperty>
- <org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- <triggers/>
- </org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
- </properties>
- <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition">
- <script>
-gerritReview("https://bazel-review.googlesource.com/",
- "/opt/secrets/gerritcookies",
- "Bazel CI <ci.bazel@gmail.com>",
- params.CHANGE_NUMBER,
- params.BRANCH) {
- globalBazelTest(
- repository: params.REPOSITORY,
- branch: params.BRANCH,
- extra_bazelrc: params.EXTRA_BAZELRC,
- refspec: params.REFSPEC,
- configuration: '''{{ raw_imports['//jenkins/jobs:configs/bootstrap.json'].replace('\\', '\\\\').replace("'", "\\'") }}''')
- delegate.reportUrl = "${currentBuild.getAbsoluteUrl()}Downstream_projects/"
-}</script>
- <sandbox>true</sandbox>
- </definition>
- <triggers/>
-</flow-definition>
diff --git a/jenkins/jobs/global/release.xml.tpl b/jenkins/jobs/global/release.xml.tpl
deleted file mode 100644
index 62b766f..0000000
--- a/jenkins/jobs/global/release.xml.tpl
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<flow-definition>
- <actions/>
- <description>Global pipeline to bootstrap bazel and runs all downstream jobs</description>
- <keepDependencies>false</keepDependencies>
- <properties>
- <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
- <com.coravy.hudson.plugins.github.GithubProjectProperty>
- <projectUrl>https://github.com/bazelbuild/bazel/</projectUrl>
- <displayName></displayName>
- </com.coravy.hudson.plugins.github.GithubProjectProperty>
- <jenkins.model.BuildDiscarderProperty>
- <strategy class="hudson.tasks.LogRotator">
- <daysToKeep>90</daysToKeep>
- <numToKeep>-1</numToKeep>
- <artifactDaysToKeep>-1</artifactDaysToKeep>
- <artifactNumToKeep>-1</artifactNumToKeep>
- </strategy>
- </jenkins.model.BuildDiscarderProperty>
- <hudson.model.ParametersDefinitionProperty>
- <parameterDefinitions>
- <hudson.model.StringParameterDefinition>
- <name>payload</name>
- <description>Payload sent by GitHub</description>
- <defaultValue></defaultValue>
- </hudson.model.StringParameterDefinition>
- <hudson.model.TextParameterDefinition>
- <name>EXTRA_BAZELRC</name>
- <description>To inject new option to the .bazelrc file in downstream projects.</description>
- <defaultValue></defaultValue>
- </hudson.model.TextParameterDefinition>
- </parameterDefinitions>
- </hudson.model.ParametersDefinitionProperty>
- </properties>
- <authToken>##SECRET:github_trigger_auth_token##</authToken>
- <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition">
- <script>
-githubHook(refs: '^refs/(heads/release-|tags/).*$') {
- globalBazelTest(
- repository: delegate.url,
- branch: delegate.branch,
- extra_bazelrc: params.EXTRA_BAZELRC,
- refspec: "+refs/heads/*:refs/remotes/origin/* +refs/notes/*:refs/notes/*",
- configuration: '''{{ raw_imports['//jenkins/jobs:configs/bootstrap.json'].replace('\\', '\\\\').replace("'", "\\'") }}''')
-}
- </script>
- <sandbox>true</sandbox>
- </definition>
- <triggers/>
-</flow-definition>
diff --git a/jenkins/jobs/install-bazel.groovy b/jenkins/jobs/install-bazel.groovy
deleted file mode 100644
index 3b42eea..0000000
--- a/jenkins/jobs/install-bazel.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-// Install the bazel release on all the machine
-
-import build.bazel.ci.JenkinsUtils
-
-jobs = [:]
-nodes = JenkinsUtils.nodeNames("install-bazel")
-latest = "latest"
-
-stage("Get latest version of Bazel") {
- latest = installBazel.getLatestBazelVersion()
- echo "Latest bazel version is ${latest}"
-}
-
-for (int k = 0; k < nodes.size(); k++) {
- def node = nodes[k]
- if (!node.startsWith("freebsd")) {
- // Skip FreeBSD, because we install Bazel via ports on that platform.
- jobs[node] = {
- stage("Install Bazel on ${node}") {
- installBazel(node: node,
- version: latest,
- alias: "latest")
- }
- }
- }
-}
-
-stage("Install on all nodes") {
- // We fail after 4h in case a node is offline and doesn't come back online.
- timeout(240) {
- parallel jobs
- }
-}
diff --git a/jenkins/jobs/install-bazel.xml.tpl b/jenkins/jobs/install-bazel.xml.tpl
deleted file mode 100644
index 1e7948b..0000000
--- a/jenkins/jobs/install-bazel.xml.tpl
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<flow-definition>
- <actions/>
- <description>Job to install Bazel on all nodes</description>
- <keepDependencies>false</keepDependencies>
- <properties>
- <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
- <jenkins.model.BuildDiscarderProperty>
- <strategy class="hudson.tasks.LogRotator">
- <daysToKeep>-1</daysToKeep>
- <numToKeep>25</numToKeep>
- <artifactDaysToKeep>-1</artifactDaysToKeep>
- <artifactNumToKeep>-1</artifactNumToKeep>
- </strategy>
- </jenkins.model.BuildDiscarderProperty>
- </properties>
- <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition">
- <script>{{ imports['//jenkins/jobs:install-bazel.groovy'] }}</script>
- <sandbox>true</sandbox>
- </definition>
- <triggers/>
-</flow-definition>
diff --git a/jenkins/jobs/jobs.bzl b/jenkins/jobs/jobs.bzl
deleted file mode 100644
index 817b80c..0000000
--- a/jenkins/jobs/jobs.bzl
+++ /dev/null
@@ -1,8 +0,0 @@
-def job_lists(name, visibility):
- jobs = native.existing_rules()
-
- native.filegroup(
- name = name,
- srcs = [j for j in jobs if j.endswith("/all")],
- visibility = visibility,
- )
diff --git a/jenkins/lib/BUILD b/jenkins/lib/BUILD
deleted file mode 100644
index 1cfd15f..0000000
--- a/jenkins/lib/BUILD
+++ /dev/null
@@ -1,24 +0,0 @@
-package(default_visibility = ["//jenkins:__subpackages__"])
-
-load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
-load("@io_bazel_rules_groovy//groovy:groovy.bzl", "groovy_library")
-
-filegroup(
- name = "vars-files",
- srcs = glob(["vars/**"]),
-)
-
-filegroup(
- name = "lib-files",
- srcs = [
- ":vars-files",
- "//jenkins/lib/src/build/bazel/ci",
- ],
-)
-
-pkg_tar(
- name = "lib",
- srcs = [":lib-files"],
- package_dir = "/opt/lib",
- strip_prefix = ".",
-)
diff --git a/jenkins/lib/def.bzl b/jenkins/lib/def.bzl
deleted file mode 100644
index 4dc207d..0000000
--- a/jenkins/lib/def.bzl
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (C) 2017 The Bazel Authors.
-#
-# 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.
-
-def bazel_job_configuration_test(name, configs):
- """A simple test that test that all config files can be parsed."""
- native.java_test(
- name = name,
- size = "small",
- runtime_deps = [
- "//3rdparty/jvm/org/codehaus/groovy:groovy_all",
- "//3rdparty/jvm/org/hamcrest:hamcrest_all",
- "//jenkins/lib/tests/build/bazel/ci:BazelConfigurationParsingTest"],
- data = configs,
- test_class = "build.bazel.ci.BazelConfigurationParsingTest",
- )
diff --git a/jenkins/lib/src/build/bazel/ci/BUILD b/jenkins/lib/src/build/bazel/ci/BUILD
deleted file mode 100644
index ec14c62..0000000
--- a/jenkins/lib/src/build/bazel/ci/BUILD
+++ /dev/null
@@ -1,33 +0,0 @@
-package(default_visibility = ["//jenkins/lib:__subpackages__"])
-
-load("@io_bazel_rules_groovy//groovy:groovy.bzl", "groovy_library")
-
-filegroup(
- name = "ci",
- srcs = glob(
- ["**"],
- exclude = ["BUILD"],
- ),
-)
-
-groovy_library(
- name = "BazelConfiguration",
- srcs = ["BazelConfiguration.groovy"],
- deps = ["//3rdparty/jvm/com/cloudbees:groovy_cps"],
-)
-
-groovy_library(
- name = "JsonUtils",
- srcs = ["JsonUtils.groovy"],
- deps = ["//3rdparty/jvm/com/cloudbees:groovy_cps"],
-)
-
-groovy_library(
- name = "lib",
- srcs = glob(["*.groovy"]),
- deps = [
- "//3rdparty/jvm/com/cloudbees:groovy_cps",
- "//3rdparty/jvm/org/jenkins_ci/main:jenkins_core",
- "//3rdparty/jvm/org/jenkins_ci/plugins/workflow:workflow_support",
- ],
-)
diff --git a/jenkins/lib/src/build/bazel/ci/BazelConfiguration.groovy b/jenkins/lib/src/build/bazel/ci/BazelConfiguration.groovy
deleted file mode 100644
index 72cb8a8..0000000
--- a/jenkins/lib/src/build/bazel/ci/BazelConfiguration.groovy
+++ /dev/null
@@ -1,230 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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 build.bazel.ci
-
-import com.cloudbees.groovy.cps.NonCPS
-import groovy.json.JsonSlurper
-import groovy.json.JsonParserType
-
-/**
- * A class that stores configuration for a Bazel job.
- *
- * A configuration is composed of a descriptor and a list of parameters.
- * A descriptor is a key-value map describing the configuration itself and
- * parameters are parameters for the job common to all configurations but for
- * which the value is configuration specific. E.g. test options or targets to
- * build.
- *
- * A configuration can contains several other configurations. In which case the
- * child configurations get factored with the parent configuration to create N
- * configurations that inherit the parameters and descriptor of the parent
- * configuration. If a child configuration specify a value already present in the
- * parent configuration, the parent configuration value will be ignored and the child
- * configuration value will be used.
- *
- * Example:
- * BazelConfiguration(["descriptor": "yeah"],
- * ["params1": false],
- * [BazelConfiguration(["descriptor2": "a"], [], [params2: true]),
- * BazelConfiguration(["descriptor2": "b"], [], [params1: true, params2: false])])
- *
- * would expand to the following configurations:
- *
- * BazelConfiguration(["descriptor": "yeah", "descriptor2": "a"], [params1: false, params2: true])])
- * BazelConfiguration(["descriptor": "yeah", "descriptor2": "b"], [params1: true, params2: false])])
- */
-class BazelConfiguration implements java.io.Serializable {
- private Map<String, String> descriptor
- private Map<String, Object> parameters
- private List<BazelConfiguration> configurations
-
- private static def EMPTY_CONFIGURATION = new BazelConfiguration([:], [:], [])
-
- static public interface ConfigurationContainer {
- def addConfiguration(BazelConfiguration)
- }
-
- private static List<BazelConfiguration> parseJson(Object json) {
- List<BazelConfiguration> result = []
- for (Object o in json) {
- result.add(new BazelConfiguration(o))
- }
- return result
- }
-
- private static Object toSerializable(Object jsonObject) {
- // JsonSlurper map and list are not serializable, which make them unsuitable for
- // usage inside a Jenkins pipeline, convert them to HashMap and ArrayList
- if (jsonObject instanceof Map) {
- def result = [:]
- for (e in jsonObject) {
- result[e.key] = toSerializable(e.value)
- }
- return result
- } else if (jsonObject instanceof List) {
- def result = []
- for (it in jsonObject) {
- result.add(toSerializable(it))
- }
- return result
- } else {
- return jsonObject
- }
- }
-
- /**
- * Parse a list of configurations for a JSON string.
- * A JSON configuration is an object whose key -> values are the entries
- * of the configuration descriptor, except for "configurations" and "parameters"
- * keys which correspond respectively to the child configurations and the parameters.
- */
- public static List<BazelConfiguration> parse(String jsonString) {
- // There is a subtle bug in the parser so skip the first comment line
- while (jsonString.trim().startsWith("//")) {
- def pos = jsonString.indexOf("\n")
- jsonString = pos < 0 ? "" : jsonString.substring(pos + 1)
- }
- def jsonObject = new JsonSlurper().setType(JsonParserType.LAX).parseText(jsonString);
- return parseJson(toSerializable(jsonObject))
- }
-
- /** Parse a list of configurations from a JSON file. */
- public static List<BazelConfiguration> parse(File jsonFile) {
- return parse(jsonFile.text)
- }
-
- /**
- * Flatten a list of configurations into a map of descriptor -> parameters.
- *
- * excludeConfigurations can be used to specifically deny certain configuration.
- * A configuration will be selected only if, for any key k in the descriptor, either the k
- * is not a key of excludeConfigurations or the value of the descriptor is NOT in
- * excludeConfigurations[k].
- *
- * Examples:
- * - excludeConfigurations = ["a": ["a", "b"]] would NOT match descriptor
- * ["a": "a"], ["a": "b"] but would match ["b": "whatever"] or ["a": "c"].
- * - excludeConfigurations = ["node": ["linux-x86_64"]] would match descriptors
- * that DO NOT point to an execution on a linux node.
- */
- public static Map<Map<String, String>, Map<String, Object>> flattenConfigurations(
- List<BazelConfiguration> configurations,
- Map<String, List<String>> excludeConfigurations = [:]) {
- def result = [:]
- for (conf in configurations) {
- result += conf.restrict(excludeConfigurations).flatten()
- }
- return result
- }
-
- private BazelConfiguration(Object json) {
- this.parameters = ("parameters" in json) ? json["parameters"] : [:]
- this.configurations = ("configurations" in json) ?
- json["configurations"].collect { it -> new BazelConfiguration(it) } : []
- this.descriptor = json.findAll { k, v -> k != "configurations" && k != "parameters" }
- }
-
- public BazelConfiguration(Map<String, String> descriptor,
- Map<String, Object> parameters,
- List<BazelConfiguration> configurations = []) {
- this.descriptor = descriptor
- this.parameters = parameters
- this.configurations = configurations
- }
-
- def getDescriptor() {
- return descriptor
- }
-
- def getParameters() {
- return parameters
- }
-
- def getConfigurations() {
- return configurations
- }
-
- private boolean matchRestriction(excludeConfigurations) {
- // Avoid closures because CPS is having trouble with it
- for (def e : descriptor.entrySet()) {
- if ((e.key in excludeConfigurations) && (e.value in excludeConfigurations[e.key])) {
- return true
- }
- }
- return false
- }
-
- private BazelConfiguration restrict(excludeConfigurations) {
- if (!excludeConfigurations.isEmpty()) {
- if (matchRestriction(excludeConfigurations)) {
- return EMPTY_CONFIGURATION
- }
- if (configurations.isEmpty()) {
- return this
- } else {
- def newConfigs = []
- for (configuration in configurations) {
- def conf = configuration.restrict(excludeConfigurations)
- if (conf != EMPTY_CONFIGURATION) {
- newConfigs << conf
- }
- }
- if (newConfigs.isEmpty()) {
- return EMPTY_CONFIGURATION;
- } else {
- return new BazelConfiguration(descriptor, parameters, newConfigs)
- }
- }
- }
- return this
- }
-
- private Map<Map<String, String>, Map<String, Object>> flatten() {
- Map<Map<String, String>, Map<String, Object>> result = [:]
-
- if (configurations.isEmpty()) {
- if (!descriptor.isEmpty()) {
- result[descriptor] = parameters
- }
- return result
- } else {
- for (conf in configurations) {
- def configs = conf.flatten()
- for (e in configs) {
- def descr2 = [:]
- descr2.putAll(descriptor)
- descr2.putAll(e.key)
- result[descr2] = [:]
- result[descr2].putAll(parameters)
- result[descr2].putAll(e.value)
- }
- }
- if (result.isEmpty() && !descriptor.isEmpty()) {
- result[descriptor] = parameters
- }
- return result
- }
- }
-
- public String toString() {
- return "BazelConfiguration({descriptor=${descriptor}, parameters=${parameters}, configurations=${configurations})"
- }
-
- /** Convert a map descriptor to a one line description */
- @NonCPS
- public static def descriptorToString(descriptor) {
- return descriptor.collect { "${it.key}=${it.value}" }.join(",")
- }
-}
diff --git a/jenkins/lib/src/build/bazel/ci/BazelTestFailure.groovy b/jenkins/lib/src/build/bazel/ci/BazelTestFailure.groovy
deleted file mode 100644
index ec854ca..0000000
--- a/jenkins/lib/src/build/bazel/ci/BazelTestFailure.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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 build.bazel.ci
-
-/** An exception thrown when a test failure occur */
-public class BazelTestFailure extends Exception {
- static final long serialVersionUID = 1L;
-
- BazelTestFailure() {
- super("Test failures")
- }
-}
diff --git a/jenkins/lib/src/build/bazel/ci/BazelUtils.groovy b/jenkins/lib/src/build/bazel/ci/BazelUtils.groovy
deleted file mode 100644
index a48aba2..0000000
--- a/jenkins/lib/src/build/bazel/ci/BazelUtils.groovy
+++ /dev/null
@@ -1,248 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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 build.bazel.ci
-
-import com.cloudbees.groovy.cps.NonCPS
-
-/**
- * A set of utility methods to call Bazel inside Jenkins
- */
-class BazelUtils implements Serializable {
- private static final TEST_EVENTS_FILE = "bazel-events-test.json"
- private static final BUILD_EVENTS_FILE = "bazel-events-build.json"
- private String bazel;
- private String ws;
- private def script;
- private boolean isWindows;
- private def envs = [];
-
- // Accessors
- def setBazel(value) {
- bazel = value
- }
-
- def getBazel() {
- bazel
- }
-
- def setScript(value) {
- script = value
- ws = script.pwd()
- isWindows = !script.isUnix()
- if (isWindows) {
- def bazel_sh = script.sh(script: "cygpath --windows /bin/bash",
- returnStdout: true).trim()
- envs = ["BAZEL_SH=${bazel_sh}"]
- }
- }
-
- def getScript() {
- script
- }
-
- // Actual method
-
- private def execute(script, returnStatus = false, returnStdout = false) {
- if (isWindows) {
- if (returnStdout) {
- // @ removes the command lines from the output
- script = "@${script}"
- }
- // exit /b !ERRORLEVEL! actually returns the exit code
- return this.script.bat(script: "${script}\r\n@exit /b %ERRORLEVEL%",
- returnStatus: returnStatus, returnStdout: returnStdout)
- } else {
- return this.script.sh(script: script, returnStatus: returnStatus, returnStdout: returnStdout)
- }
- }
-
- def bazelCommand(String args, returnStatus = false, returnStdout = false) {
- script.withEnv(envs + ["BAZEL=" + this.bazel]) {
- owner.script.ansiColor("xterm") {
- return execute("${this.bazel} --bazelrc=${this.ws}/bazel.bazelrc ${args}",
- returnStatus, returnStdout)
- }
- }
- }
-
- // Execute a shell/batch command with bazel as a command on the path
- def commandWithBazelOnPath(script) {
- def pathWithBazel = ""
- if (isWindows) {
- def bazelDir = bazel.substring(0, bazel.lastIndexOf("\\"))
- pathWithBazel = "${bazelDir};${this.script.env.PATH}"
- } else {
- def bazelDir = bazel.substring(0, bazel.lastIndexOf("/"))
- pathWithBazel = "${bazelDir}:${this.script.env.PATH}"
- }
- this.script.withEnv(["PATH=${pathWithBazel}",
- "BAZEL=${this.bazel}"] + envs) {
- if (isWindows) {
- this.script.bat script
- } else {
- this.script.sh "#!/bin/sh -x\n${script}"
- }
- }
- }
-
- // Write a RC file to consume by the other step
- def writeRc(build_opts = [],
- test_opts = [],
- startup_opts = [],
- extra_bazelrc = "") {
- def rc_file_content = [
- "common --color=yes",
- "test --test_output=errors",
- "build --verbose_failures"
- ]
-
- rc_file_content.addAll(build_opts.collect { "build ${it}" })
- rc_file_content.addAll(test_opts.collect { "test ${it}" })
- rc_file_content.addAll(startup_opts.collect { "startup ${it}" })
- // Store the BEP events on a json file.
- // TODO(dmarting): We should archive it and generate a good HTML report instead of
- // the hard to read jenkins dashboard.
- rc_file_content.add("build --experimental_build_event_json_file=${BUILD_EVENTS_FILE}")
- rc_file_content.add("test --experimental_build_event_json_file=${TEST_EVENTS_FILE}")
- script.writeFile(file: "${ws}/bazel.bazelrc",
- text: rc_file_content.join("\n") + "\n${extra_bazelrc}")
- }
-
- def showFailedActions(events) {
- def eventsstring = ""
- for(event in events) {
- if ("action" in event) {
- eventsstring += event.toString() + "\n"
- }
- }
- if (eventsstring == "") {
- script.echo("No failed actions reported in the event stream")
- } else {
- script.echo("Failed actions:\n" + eventsstring)
- }
- }
-
- // Execute a bazel build
- def build(targets = ["//..."]) {
- if (!targets.isEmpty()) {
- try {
- bazelCommand("build ${targets.join ' '}")
- } finally {
- showFailedActions(buildEvents())
- }
- }
- }
-
- @NonCPS
- private def makeTestQuery(tests) {
- // Lambda are not working well with CPS, so NonCPS...
- def quote = isWindows ? { s -> s.replace('"', '""') } : { s -> s.replace("'", "'\\''") }
- def q = isWindows ? '"' : "'"
- return "query ${q}${tests.collect(quote).join(' + ')}${q}"
- }
-
- // Execute a bazel tests
- def test(tests = ["//..."]) {
- if (!tests.isEmpty()) {
- def filteredTests = bazelCommand(makeTestQuery(tests), false, true)
- if (filteredTests == null || filteredTests.isEmpty()) {
- script.echo "Skipped tests (no tests found)"
- } else {
- def status = bazelCommand("test ${filteredTests.replaceAll("\n", " ")}", true)
- showFailedActions(testEvents())
- if (status == 3) {
- // Bazel returns 3 if there was a test failures but no breakage, that is unstable
- throw new BazelTestFailure()
- } else if (status != 0) {
- // TODO(dmarting): capturing the output mark the wrong step at failure, there is
- // no good way to do so, it would probably better to have better output in the failing
- // step
- throw new Exception("`bazel test` returned status ${status}")
- }
- }
- }
- }
-
- private def parseEventsFile(String fileName) {
- if (script.fileExists(fileName)) {
- return JsonUtils.parseJsonStream(script.readFile(fileName))
- }
- // The file does not exists (probably because empty set of targets / tests), just return
- // an empty list.
- return []
- }
-
- def buildEvents() {
- return parseEventsFile("${this.ws}/${BUILD_EVENTS_FILE}")
- }
-
- def testEvents() {
- return parseEventsFile("${this.ws}/${TEST_EVENTS_FILE}")
- }
-
- @NonCPS
- private def copyCommands(cp_lines, log, test_folder) {
- if (log != null) {
- def uri = URI.create(log.uri)
- def path = uri.path
- if (isWindows) {
- // on windows the host is the drive letter, add it to the path.
- path = "/${uri.host}${path}"
- }
- def relativePath = path.substring(path.indexOf("/testlogs/") + 10)
- cp_lines.add("mkdir -p \$(dirname '${test_folder}/${relativePath}')")
- cp_lines.add("cp -r '${path}' '${test_folder}/${relativePath}'")
- }
- }
-
- @NonCPS
- def generateTestLogsCopy(events, test_folder) {
- // To avoid looking at all the files, including the stalled output log, we parse the events
- // from the build.
- // This is NonCPS because lambdas
- def cp_lines = []
- events.each { event ->
- if("testResult" in event) {
- copyCommands(cp_lines,
- event.testResult.testActionOutput.find { it.name == "test.xml" },
- test_folder)
- // Also copy the test log
- copyCommands(cp_lines,
- event.testResult.testActionOutput.find { it.name == "test.log" },
- test_folder)
- }
- }
- return cp_lines.join('\n')
- }
-
- // Archive test results
- def testlogs(test_folder) {
- // JUnit test result does not look at test result if they are "old", copying them to a new
- // location, unique accross configurations.
- def res = script.sh(script: """#!/bin/sh
-echo 'Copying test outputs and events file for archiving'
-rm -fr ${test_folder}
-mkdir -p ${test_folder}
-touch ${BUILD_EVENTS_FILE} ${TEST_EVENTS_FILE}
-cp -f ${BUILD_EVENTS_FILE} ${TEST_EVENTS_FILE} ${test_folder}
-""" + generateTestLogsCopy(testEvents(), test_folder),
- returnStatus: true)
- if (res == 0) {
- // Archive the test logs and xml files
- script.archiveArtifacts artifacts: "${test_folder}/**/test.log,${test_folder}/*.json"
- script.junit testResults: "${test_folder}/**/test.xml", allowEmptyResults: true
- }
- }
-}
diff --git a/jenkins/lib/src/build/bazel/ci/GerritUtils.groovy b/jenkins/lib/src/build/bazel/ci/GerritUtils.groovy
deleted file mode 100644
index 778124c..0000000
--- a/jenkins/lib/src/build/bazel/ci/GerritUtils.groovy
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-// Inspired by https://gerrit.googlesource.com/gerrit-ci-scripts/+/master/jenkins/gerrit-verifier-flow.groovy
-package build.bazel.ci
-
-import com.cloudbees.groovy.cps.NonCPS
-import groovy.json.JsonOutput
-import groovy.json.JsonSlurper
-
-/*
- * This is a class to communicate with Gerrit (basically add code reviews).
- *
- * All methods to talk to gerrit are NonCPS to avoid serialization issues from Jenkins
- * and make them atomic.
- */
-class GerritUtils implements java.io.Serializable {
- private String server
- private String cookies
- private String reviewer
- private String reviewerEmail
-
- // Parse a cookie file from cURL, ignoring most of the field
- @NonCPS
- private static def loadCookiesFile(String host, String cookieFile) {
- def url = new URI(host)
- host = url.host
- try {
- String[] fileContent = new File(cookieFile).text.split("\n")
- def result = []
- for (line in fileContent) {
- if (!line.startsWith("#") && !line.isEmpty()) {
- def elements = line.split("\t")
- if (elements.length > 0 && host.endsWith(elements[0])) {
- result << "${elements[5]}=${elements[6]}"
- }
- }
- }
- return result.join("; ")
- } catch(IOException exn) {
- return []
- }
- }
-
- // Initialize the utilities to connect to ${server} using cookies
- // from ${cookiesFile} and user ${reviewer} as the bot user.
- def GerritUtils(String server, String cookiesFile, String reviewer) {
- this.server = server
- if (!this.server.endsWith("/")) {
- this.server += "/"
- }
- this.cookies = loadCookiesFile(server, cookiesFile)
- this.reviewer = reviewer
- def m = reviewer =~ /^.*<([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)>$/
- if (!m) {
- // This is fine to use non checked exception since it's for bubbling up
- // to jenkins
- throw new Exception(
- "Reviewer argument does not match the pattern 'Name <email@domain>'")
- }
- this.reviewerEmail = m[0][1]
- }
-
- // Getters
- def getServer() {
- return server
- }
-
- def getCookies() {
- return cookies
- }
-
- def getReviewer() {
- return reviewer
- }
-
- def getReviewerEmail() {
- return reviewerEmail
- }
-
- // Return the URL of a change
- def url(changeNum, patchNum = 0) {
- return patchNum ? "${this.server}#/c/${changeNum}/${patchNum}" : "${this.server}#/c/${changeNum}"
- }
-
- // Post a JSON payload to the given url setting the correct cookies for authentication.
- @NonCPS
- private def post(path, data) {
- def payload = JsonOutput.toJson(data)
- def url = new URL(this.server + path)
- URLConnection con = url.openConnection()
- con.setDoOutput(true)
- con.setRequestMethod("POST")
- con.setRequestProperty("Cookie", cookies)
- con.setRequestProperty("Content-Type", "application/json")
- def wr = con.getOutputStream()
- wr.write(payload.getBytes())
- wr.flush()
- wr.close()
-
- int responseCode = con.getResponseCode()
- return responseCode == 200
- }
-
- // Add the Gerrit bot as reviewer to change ${changeNum}
- @NonCPS
- def addReviewer(changeNum) {
- return post("a/changes/${changeNum}/reviewers", [reviewer: this.reviewer])
- }
-
- // Set a change to verified +1/-1
- // Parameters:
- // changeNum: number of the change to mark as verified
- // sha1: SHA-1 sum of the commit to mark as verified
- // verified: +1/-1 value for the verified flag on Gerrit
- @NonCPS
- def review(changeNum, sha1, verified, message = null) {
- def payload = [
- labels: ["Code-Review": 0, "Verified": verified],
- notify: (verified < 0 ? "OWNER" : "NONE")
- ]
- if (message != null) {
- payload["message"] = message
- }
- return post("a/changes/${changeNum}/revisions/${sha1}/review", payload)
- }
-
- // Add a comment without notifying everybody on the change.
- // buildUrl: URL of the build corresponding to that message
- // changeNum: change to comment on
- // sha1: SHA-1 of the commit to comment on
- // msgPrefix: the prefix of the message, the result message will be: <msgPrefix> Bazel CI: <buildUrl>
- @NonCPS
- def comment(changeNum, sha1, message) {
- return post("a/changes/${changeNum}/revisions/${sha1}/review",
- ["message": message, "notify": "NONE"])
- }
-
- // Query for gerrit for a list of change and return a list of
- // changes as returned by the Gerrit API.
- // See https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#list-changes
- // Args:
- // query: the query of changes
- // maxChanges: maximum number of changes to return, default to 0 means no maximum
- // Returns:
- // An object translated from JSON as returned by the list-changes operation when asked
- // for DETAILED_LABELS and CURRENT_REVISION.
- // Note: this method is mostly for used by GerritUtils itself.
- @NonCPS
- def query(query, maxChanges = 0) {
- def url = server + "changes/?pp=0&o=DETAILED_LABELS&o=CURRENT_REVISION"
- if (maxChanges > 0) {
- url += "&n=${maxChanges}"
- }
- url += "&q=${java.net.URLEncoder.encode(query.toString())}"
- def changes = new URL(url).getText().substring(5)
- def jsonSlurper = new JsonSlurper()
- return jsonSlurper.parseText(changes)
- }
-
- @NonCPS
- def removeVote(changeNumber, label, reviewer) {
- def rev = java.net.URLEncoder.encode(reviewer.toString())
- this.post("a/changes/${changeNumber}/reviewers/${rev}/votes/${label}/delete",
- ["notify": "NONE"])
- }
-
- @NonCPS
- def removeVotes(changeNumber, label) {
- def changeLabels = query(changeNumber)[0].labels
- if (label in changeLabels) {
- for (reviewer in changeLabels[label].all) {
- if (reviewer.value > 0) {
- this.removeVote(changeNumber, label, reviewer._account_id)
- }
- }
- }
- }
-
- // Mark a code review as review started
- @NonCPS
- def startReview(changeNumber) {
- this.addReviewer(changeNumber)
- this.removeVotes(changeNumber, "Presubmit-Ready")
- this.removeVote(changeNumber, "Verified", this.reviewer)
- }
-
- // Returns the list of verified changes not reviewed by the Gerrit reviewer and matching
- // the given filter. The result is a list of dictionnary of matching change, containing the
- // sha1 of the last patch, the number of this patch, the number of the change, the reference
- // of the patch and the project of the change.
- @NonCPS
- def getVerifiedChanges(filter = "", verifiedLevel = 1, maxChanges = 0) {
- def changesJson = query("status:open ${filter}",
- maxChanges).findAll { change ->
- def verified = change.labels.get("Presubmit-Ready", [])
- return verified.all.any({ it.value == verifiedLevel })
- }.collect {
- it ->
- def sha1 = it.current_revision
- def patch = it.revisions.get(sha1)
- return [
- "sha1": sha1,
- "number": it._number,
- "patchNumber": patch._number,
- "ref": patch.ref,
- "project": it.project]
- }
- return changesJson
- }
-}
diff --git a/jenkins/lib/src/build/bazel/ci/JenkinsUtils.groovy b/jenkins/lib/src/build/bazel/ci/JenkinsUtils.groovy
deleted file mode 100644
index 60d0991..0000000
--- a/jenkins/lib/src/build/bazel/ci/JenkinsUtils.groovy
+++ /dev/null
@@ -1,249 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors.
-//
-// 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 build.bazel.ci
-
-// Automatic import in Jenkins but we need them to compile outside of Jenkins
-import com.cloudbees.groovy.cps.NonCPS
-import hudson.model.*
-import jenkins.model.*
-
-import hudson.FilePath
-import hudson.remoting.Channel
-import org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper
-
-/**
- * This class provide utility methods of the Jenkins API
- */
-class JenkinsUtils {
- /** A list of regex aliases to know that ubuntu is linux */
- private static def NODE_ALIASES = [
- "ubuntu.*": "linux-x86_64",
- "darwin.*": "darwin-x86_64",
- ]
-
- /** Normalize the node label into a compatible platform */
- // TODO(dmarting): does that really belongs here?
- @NonCPS
- static def normalizeNodeLabel(node_label) {
- for (e in NODE_ALIASES) {
- if (node_label.matches(e.key)) {
- return e.value
- }
- }
- return node_label
- }
-
- /** Returns the list of all slave' names (optionally filtering by label) */
- @NonCPS
- static def nodeNames(label = null) {
- def nodes = jenkins.model.Jenkins.instance.nodes
- if (label != null) {
- nodes = nodes.findAll { node -> label in node.labelString.split() }
- }
- return nodes.collect { node -> node.name }
- }
-
- /** Returns the list of job in the folder `folderName` (empty or null for top folder). */
- @NonCPS
- private static def folderJobs(folderName) {
- if (folderName == null || folderName.isEmpty()) {
- return jenkins.model.Jenkins.instance.items
- } else {
- return jenkins.model.Jenkins.instance.getItemByFullName(folderName).getAllJobs()
- }
- }
-
- /**
- * Returns the list of names of jobs in the folder `folderName` (empty or null for the
- * top folder).
- */
- @NonCPS
- static def jobs(folderName) {
- return folderJobs(folderName).collect { job -> job.name }
- }
-
- /**
- * Returns the list of names of jobs in the folder `folder` (empty or null for the top
- * folder) whose description contains the string `descr`
- */
- @NonCPS
- static def jobsWithDescription(folder, descr) {
- def items = jenkins.model.Jenkins.instance.items
- def jobs = folderJobs(folder)
- return jobs.findAll {
- job -> job.description != null && job.description.contains(descr) }.collect {
- job -> job.name }
- }
-
- /** Returns the last build of a job in a specific folder */
- @NonCPS
- static def getLastRun(folder, job) {
- def j = folderJobs(folder).find { it -> it.name.equals(job) }
- if (j != null) {
- def run = j.getLastCompletedBuild()
- if (run != null) {
- return new org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper(run, false)
- }
- }
- return null
- }
-
- /** Returns the URL of the console for a job run */
- @NonCPS
- static def getConsoleUrl(RunWrapper run) {
- return "${run.absoluteUrl}console"
- }
-
- /** Returns the URL of the blue ocean view for a job run */
- @NonCPS
- static def getBlueOceanUrl(RunWrapper run) {
- def name = java.net.URLEncoder.encode(run.fullProjectName, "UTF-8")
- def url = new URL(run.absoluteUrl)
- def path = "/blue/organizations/jenkins/${name}/detail/${run.projectName}/${run.number}/pipeline/"
- return new URL(url.protocol, url.host, url.port, path).toString()
- }
-
- /** Returns the URL to the small icon for a run */
- @NonCPS
- static def getSmallIconUrl(RunWrapper run) {
- return "${Jenkins.RESOURCE_PATH}/images/16x16/${run.rawBuild.getIconColor()}.png"
- }
-
- /**
- * A utility method that look for an artifact matching a pattern in upstream
- * builds.
- */
- @NonCPS
- static def findAndCopyUpstreamArtifacts(run, pattern) {
- def build = findLastBuildWithUpstream(run.rawBuild)
- if (build == null) {
- return null
- }
- return _findAndCopyUpstreamArtifacts(build.getCauses(), pattern)
- }
-
- @NonCPS
- private static def _findAndCopyUpstreamArtifacts(causes, pattern) {
- for (cause in causes) {
- if (cause instanceof Cause.UpstreamCause) {
- def upstreamRun = cause.getUpstreamRun()
- def artifacts = upstreamRun.getArtifacts()
- for (artifact in artifacts) {
- if (artifact.toString().matches(pattern)) {
- return [artifactPath: artifact.toString(),
- artifactName: artifact.getFileName(),
- upstreamBuild: cause.getUpstreamBuild(),
- upstreamProject: cause.getUpstreamProject()]
- }
- }
- def res = _findAndCopyUpstreamArtifacts(cause.upstreamCauses, pattern)
- if (res != null && !res.isEmpty()) {
- return res;
- }
- }
- }
- return null
- }
-
- /**
- * Find the latest build that was run by upstream.
- * In case of re-run, the current build will not be triggered by upstream project.
- * In that case we want to look at build history to fetch the latest one that was build
- * with upstream.
- */
- @NonCPS
- private static def findLastBuildWithUpstream(run) {
- while (run != null) {
- if (run.getCauses().any { it.class.toString().contains("UpstreamCause") }) {
- return run
- }
- run = run.getPreviousBuild()
- }
- return run
- }
-
- @NonCPS
- private static def _pruneIfOlderThan(file, timestamp) throws IOException {
- if (file.isDirectory()) {
- boolean empty = true
- for (child in file.list()) {
- if (!_pruneIfOlderThan(child, timestamp)) {
- empty = false
- }
- }
- if (empty) {
- if (file.delete()) {
- return true
- }
- }
- } else if (file.lastModified() < timestamp) {
- if (file.delete()) {
- return true
- }
- }
- return false
- }
-
- @NonCPS
- private static def createFilePath(env, path) {
- if (env['NODE_NAME'].equals("master")) {
- return new FilePath(path);
- } else {
- return new FilePath(Jenkins.getInstance().getComputer(env['NODE_NAME']).getChannel(), path);
- }
- }
-
- /** Prune file that are older than timestamp on the current node. */
- @NonCPS
- public static def pruneIfOlderThan(env, path, timestamp) {
- return _pruneIfOlderThan(createFilePath(env, path), timestamp)
- }
-
- /** Touch a file anywhere on the FS on the current node. */
- @NonCPS
- public static def touchFileIfExists(env, path) {
- FilePath f = createFilePath(env, path)
- def r = f.exists()
- if (r) {
- try {
- f.touch(System.currentTimeMillis())
- } catch(IOException ex) {
- // The file might be busy, especially on windows, swallowing exception
- }
- }
- return r;
- }
-
- /** Read a file from the node, but without reporting anything in the Jenkins UI. */
- @NonCPS
- public static def readFile(env, path) {
- return createFilePath(env, path).readToString()
- }
-
- /** Save the current log to a file on the current node. */
- @NonCPS
- public static void saveLog(env, RunWrapper run, path) {
- createFilePath(env, path).copyFrom(run.getRawBuild().getLogInputStream())
- }
-
- /** Returns the recursive list of files of a folder, ignoring some files. */
- @NonCPS
- public static def list(env, dir, excludes) {
- def directory = createFilePath(env, dir)
- def results = directory.list("**", excludes.join(","))
- def directoryUri = directory.toURI()
- return results.collect { it -> directoryUri.relativize(it.toURI()) }
- }
-}
diff --git a/jenkins/lib/src/build/bazel/ci/JsonUtils.groovy b/jenkins/lib/src/build/bazel/ci/JsonUtils.groovy
deleted file mode 100644
index b774875..0000000
--- a/jenkins/lib/src/build/bazel/ci/JsonUtils.groovy
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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 build.bazel.ci
-
-import com.cloudbees.groovy.cps.NonCPS
-import groovy.json.JsonSlurperClassic
-
-/**
- * A set of utility methods to handle JSON format emitted by Bazel.
- * This is a separate class to be able to test it without pulling in a lot
- * of dependency.
- */
-class JsonUtils {
-
- @NonCPS
- private static def tokenToText(token) {
- if (token.getType() == groovy.json.JsonTokenType.STRING) {
- return groovy.json.JsonOutput.toJson(token.value)
- } else {
- return token.text
- }
- }
-
- @NonCPS
- public static def parseJsonStream(String stream) {
- // We require that weirdness because the format of the events are not one JSON object
- // but a sequence of JSON Object. Note that even hacking an input stream and iterating
- // over is not enough because JsonSlurper seems like to consume all the stream even
- // though it returns only the first element.
- def lexer = new groovy.json.JsonLexer(new StringReader(stream))
- def parser = new JsonSlurperClassic()
- def res = []
- def builder = new StringBuffer()
- def counter = 0
- while (lexer.hasNext()) {
- def tok = lexer.next()
- if (tok.getType() == groovy.json.JsonTokenType.OPEN_CURLY) {
- counter++;
- builder.append("{")
- } else if (tok.getType() == groovy.json.JsonTokenType.CLOSE_CURLY) {
- counter--;
- if (counter == 0) {
- res <<= parser.parseText(builder.toString() + "}")
- builder.setLength(0)
- } else {
- builder.append("}")
- }
- } else {
- builder.append(tokenToText(tok))
- }
- }
- // We might have trailing tokens, just ignore them as they would mean
- // an incomplete file.
- // TODO(dmarting): we should probably print a warning here.
- return res
- }
-}
diff --git a/jenkins/lib/tests/build/bazel/ci/BUILD b/jenkins/lib/tests/build/bazel/ci/BUILD
deleted file mode 100644
index 81ab68d..0000000
--- a/jenkins/lib/tests/build/bazel/ci/BUILD
+++ /dev/null
@@ -1,29 +0,0 @@
-package(default_visibility = ["//jenkins/lib/test:__subpackages__"])
-
-load("@io_bazel_rules_groovy//groovy:groovy.bzl", "groovy_library")
-load(":def.bzl", "bazel_groovy_test", "jenkins_library_test")
-
-groovy_library(
- name = "BazelConfigurationParsingTest",
- srcs = ["BazelConfigurationParsingTest.groovy"],
- visibility = ["//jenkins:__subpackages__"],
- deps = ["//jenkins/lib/src/build/bazel/ci:BazelConfiguration"],
-)
-
-bazel_groovy_test(
- name = "BazelConfigurationTests",
- srcs = ["BazelConfigurationTests.groovy"],
- deps = ["//jenkins/lib/src/build/bazel/ci:BazelConfiguration"],
-)
-
-jenkins_library_test(
- name = "BazelJobTest",
- size = "small",
- srcs = ["BazelJobTest.groovy"],
-)
-
-bazel_groovy_test(
- name = "JsonUtilsTests",
- srcs = ["JsonUtilsTests.groovy"],
- deps = ["//jenkins/lib/src/build/bazel/ci:JsonUtils"],
-)
diff --git a/jenkins/lib/tests/build/bazel/ci/BazelConfigurationParsingTest.groovy b/jenkins/lib/tests/build/bazel/ci/BazelConfigurationParsingTest.groovy
deleted file mode 100644
index a12cfc5..0000000
--- a/jenkins/lib/tests/build/bazel/ci/BazelConfigurationParsingTest.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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 build.bazel.ci
-
-import groovy.io.FileType
-import org.junit.Test
-
-/** Test that assert that all json files in the runfiles can be parsed with {@link BazelConguration} */
-class BazelConfigurationParsingTest {
- private def findJSONFiles(File baseDir) {
- def result = []
- baseDir.eachFileRecurse(FileType.FILES) {
- if(it.name.endsWith('.json')) {
- result.add(it)
- }
- }
- return result
- }
-
- @Test
- void testParse() {
- def runfileDir = System.getenv("JAVA_RUNFILES")
- for (File f : findJSONFiles(new File(runfileDir))) {
- // Just test that parsing succeed to ensure that we can at least load the
- // file on Jenkins.
- BazelConfiguration.parse(f)
- }
- }
-}
diff --git a/jenkins/lib/tests/build/bazel/ci/BazelConfigurationTests.groovy b/jenkins/lib/tests/build/bazel/ci/BazelConfigurationTests.groovy
deleted file mode 100644
index a4c3863..0000000
--- a/jenkins/lib/tests/build/bazel/ci/BazelConfigurationTests.groovy
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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 build.bazel.ci
-
-import org.junit.Test
-
-/** Tests for {@link BazelConguration} */
-class BazelConfigurationTests {
-
- // The contents of this JSON string don't matter, i.e. it doesn't have to
- // refer to existing target patterns for example.
- // The test only asserts the structure of the JSON.
- static final String JSON_TEST = '''
-
-// This is a test
-// Double comment to test the workaround the parser issue
-
-// more comment
-// And now the initial bazel tests
-[
- {
- // This is a configuration that have 3 subconfiguration: linux, ubuntu and darwin
- "configurations": [
- {
- "node": "linux-x86_64"
- },
- {
- "node": "ubuntu_16.04-x86_64"
- },
- {
- "node": "darwin-x86_64"
- }
- ],
- // And specify the parameters for these configurations.
- "parameters": {
- "configure": [
- "source scripts/ci/build.sh",
- "setup_android_repositories"
- ],
- "test_opts": ["-k", "--build_tests_only"],
- "tests": [
- "//dummy_path1/...",
- "//dummy_path2/...",
- "//dummy/path3/..."
- ],
- "targets": []
- }
- }, {
- "configurations": [{
- "node": "windows-x86_64",
- }],
- "parameters": {
- "test_opts": ["-k", "--build_tests_only"],
- "tests": [
- "//some/dummy/java_test/...",
- "//some/dummy/cpp_test/...",
- "//some/dummy/native_test:all_tests"
- ],
- "targets": ["//src:bazel"]
- }
- }
-]
-
-// Ending comment
-'''
-
- private void assertConfigurationCorrect(confs) {
- assert confs.size() == 2
- assert confs[0].parameters.size() == 4
- assert confs[0].parameters["configure"] == [
- "source scripts/ci/build.sh",
- "setup_android_repositories"
- ]
- assert confs[0].configurations.size() == 3
- assert confs[1].parameters.size() == 3
- assert confs[1].configurations.size() == 1
- }
-
- @Test
- void testParseJsonString() {
- assertConfigurationCorrect(BazelConfiguration.parse(JSON_TEST))
- }
-
- @Test
- void testSerialization() {
- // Just test that the object from parsing JSON is serializable
- new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(BazelConfiguration.parse(JSON_TEST));
- }
-
- @Test
- void testParseJsonFile() {
- def tempDir = System.getenv("TEST_TMPDIR")
- def tempDirFile = null
- if (tempDir != null) {
- tempDirFile = new File(tempDir)
- }
- def testFile = File.createTempFile('temp', '.json', tempDirFile)
- try {
- testFile.write(JSON_TEST)
- assertConfigurationCorrect(BazelConfiguration.parse(testFile))
- } finally {
- testFile.delete()
- }
- }
-
- @Test
- void testFlatten() {
- def result = BazelConfiguration.flattenConfigurations(BazelConfiguration.parse(JSON_TEST))
- def allKeys = result.collect {
- k, v -> k.collect { k1, v1 -> "${k1}=${v1}" }.toSorted().join(",") }.toSorted()
- assert allKeys.join("\n") == '''node=darwin-x86_64
-node=linux-x86_64
-node=ubuntu_16.04-x86_64
-node=windows-x86_64'''
- }
-
- @Test
- void testFlattenWithExclusion() {
- def result = BazelConfiguration.flattenConfigurations(
- BazelConfiguration.parse(JSON_TEST),
- [node: ["ubuntu_16.04-x86_64", "darwin-x86_64"]])
- def allKeys = result.collect {
- k, v -> k.collect { k1, v1 -> "${k1}=${v1}" }.toSorted().join(",") }.toSorted()
- assert allKeys.join("\n") == '''node=linux-x86_64
-node=windows-x86_64'''
- }
-}
diff --git a/jenkins/lib/tests/build/bazel/ci/BazelJobTest.groovy b/jenkins/lib/tests/build/bazel/ci/BazelJobTest.groovy
deleted file mode 100644
index 7ce8dd2..0000000
--- a/jenkins/lib/tests/build/bazel/ci/BazelJobTest.groovy
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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 build.bazel.ci
-
-import build.bazel.ci.utils.BaseLibraryTest
-import org.junit.Test
-
-// Test the bazelJob pipeline step
-class BazelJobTest extends BaseLibraryTest {
-
- @Test
- void testSimpleBazelJob() {
- evalScript('''
-bazelJob(binary: "/path/to/bazel",
- targets: ["//a", "//b"],
- tests: ["//test1", "//test2"])
-''')
- // TODO(dmarting): verify the stack trace
- printCallStack()
- }
-}
diff --git a/jenkins/lib/tests/build/bazel/ci/JsonUtilsTests.groovy b/jenkins/lib/tests/build/bazel/ci/JsonUtilsTests.groovy
deleted file mode 100644
index a575639..0000000
--- a/jenkins/lib/tests/build/bazel/ci/JsonUtilsTests.groovy
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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 build.bazel.ci
-
-import org.junit.Test
-
-/** Tests for {@link JsonUtils} */
-class JsonUtilsTests {
-
- private static assertJsonResult(result) {
- assert result.size() == 2
- assert result[0].size() == 1
- assert "a" in result[0]
- assert "b" in result[0].a
- assert "c".equals(result[0].a.b)
- assert result[1].size() == 1
- assert "c" in result[1]
- assert "d" in result[1].c
- assert "e".equals(result[1].c.d)
- }
-
- @Test
- void testParseJsonStreamOneLine() {
- assertJsonResult(JsonUtils.parseJsonStream('{"a": {"b":"c"}}{"c": {"d":"e"}}'))
- }
-
- @Test
- void testParseJsonStreamMultiLine() {
- assertJsonResult(JsonUtils.parseJsonStream('{"a": {"b":"c"}}\n{"c": {"d":"e"}}\n'))
- }
-
- @Test
- void testParseJsonStreamMultiMultiLine() {
- assertJsonResult(JsonUtils.parseJsonStream('{"a": \n{\n"b":"c"\n}\n}\n{\n"c": \n{\n"d":"e"\n}\n}\n'))
- }
-
- @Test
- void testParseTimestampLike() {
- // Just test we do not raise an error
- JsonUtils.parseJsonStream('{"a": "static const char kTimestampFormat[] = \\"%E4Y-%m-%dT%H:%M:%S\\";"}')
- }
-
- @Test
- void testSerializable() {
- // Try to serialize the output
- def m = JsonUtils.parseJsonStream('{"a": \n{\n"b":"c"\n}\n}\n{\n"c": \n{\n"d":"e"\n}\n}\n')
- def ostream = new PipedOutputStream()
- def istream = new PipedInputStream(ostream)
- new ObjectOutputStream(ostream).writeObject(m)
- new ObjectInputStream(istream).readObject()
- }
-}
diff --git a/jenkins/lib/tests/build/bazel/ci/def.bzl b/jenkins/lib/tests/build/bazel/ci/def.bzl
deleted file mode 100644
index e703ed3..0000000
--- a/jenkins/lib/tests/build/bazel/ci/def.bzl
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (C) 2017 The Bazel Authors.
-#
-# 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.
-load("@io_bazel_rules_groovy//groovy:groovy.bzl", "groovy_library")
-
-def bazel_groovy_test(name=None, test_class=None, size="small", deps=[], srcs=[], **kwargs):
- """A wrapper around groovy test to use the Bazel test runner."""
- test_class = "build.bazel.ci." + name if test_class == None else test_class
- groovy_library(
- name = name + "-lib",
- deps = deps,
- srcs = srcs)
- native.java_test(
- name = name,
- test_class = test_class,
- size = size,
- runtime_deps = deps + [
- "@org_codehaus_groovy_groovy_all//jar",
- "@org_hamcrest_hamcrest_all//jar",
- name + "-lib"],
- **kwargs)
-
-def jenkins_library_test(deps=[], data=[], **kwargs):
- bazel_groovy_test(
- deps=deps+[
- "//jenkins/lib/tests/build/bazel/ci/utils",
- "//jenkins/lib/src/build/bazel/ci:lib"],
- data=data+["//jenkins/lib:lib-files"],
- **kwargs)
diff --git a/jenkins/lib/tests/build/bazel/ci/utils/BUILD b/jenkins/lib/tests/build/bazel/ci/utils/BUILD
deleted file mode 100644
index f11c961..0000000
--- a/jenkins/lib/tests/build/bazel/ci/utils/BUILD
+++ /dev/null
@@ -1,16 +0,0 @@
-package(default_visibility = ["//jenkins/lib/tests:__subpackages__"])
-
-load("@io_bazel_rules_groovy//groovy:groovy.bzl", "groovy_library")
-
-groovy_library(
- name = "utils",
- srcs = glob(
- ["**"],
- exclude = ["BUILD"],
- ),
- deps = [
- "//3rdparty/jvm/com/lesfurets:jenkins_pipeline_unit",
- "//3rdparty/jvm/junit",
- "//3rdparty/jvm/org/jenkins_ci/plugins/workflow:workflow_step_api",
- ],
-)
diff --git a/jenkins/lib/tests/build/bazel/ci/utils/BaseLibraryTest.groovy b/jenkins/lib/tests/build/bazel/ci/utils/BaseLibraryTest.groovy
deleted file mode 100644
index ebe8ea9..0000000
--- a/jenkins/lib/tests/build/bazel/ci/utils/BaseLibraryTest.groovy
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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 build.bazel.ci.utils
-
-import org.junit.Before
-import com.lesfurets.jenkins.unit.BasePipelineTest
-import com.lesfurets.jenkins.unit.global.lib.LibraryConfiguration
-
-// A base class for all test testing the library as a whole using PipelineUnitTest
-abstract class BaseLibraryTest extends BasePipelineTest {
-
- @Override
- @Before
- void setUp() throws Exception {
- def library = LibraryConfiguration.library()
- .name('opt-lib')
- .retriever(new FsSource("${System.getenv('TEST_SRCDIR')}/io_bazel_ci/jenkins/lib"))
- .targetPath("does/not/matter")
- .implicit(true)
- .defaultVersion("master")
- .build()
- helper.registerSharedLibrary(library)
- registerAllowedMethods()
- super.setUp()
- }
-
- void registerAllowedMethods() {
- // TODO(dmarting): these are dumnies, we probably want to control that more
- // to test all codepaths.
- helper.registerAllowedMethod("pwd", [], { -> "/some/path"})
- helper.registerAllowedMethod("isUnix", [], { -> true})
- helper.registerAllowedMethod("file", [Map.class], { m ->
- def fileContent = "/path/to/${m.credentialsId})"
- binding.setVariable(m['variable'], fileContent)
- return fileContent
- })
- helper.registerAllowedMethod("writeFile", [Map.class], { m -> })
- helper.registerAllowedMethod("withEnv", [List.class, Closure.class], { l, c -> c() })
- helper.registerAllowedMethod("ansiColor", [String.class, Closure.class], { l, c -> c() })
- helper.registerAllowedMethod("fileExists", [String.class], { f -> false })
- }
-
- def mktemp(fileName) {
- def tempDir = new File(System.getenv("TEST_TMPDIR"))
- def counter = 0
- while (new File(tempDir, "${counter}${fileName}").exists()) {
- counter++
- }
- return new File(tempDir, "${counter}${fileName}")
- }
-
- def evalScript(String script) {
- def tempFile = mktemp("script.groovy")
- try {
- tempFile.write script
- loadScript(tempFile.path)
- } finally {
- tempFile.delete()
- }
- }
-}
diff --git a/jenkins/lib/tests/build/bazel/ci/utils/FsSource.groovy b/jenkins/lib/tests/build/bazel/ci/utils/FsSource.groovy
deleted file mode 100644
index 5a02cb1..0000000
--- a/jenkins/lib/tests/build/bazel/ci/utils/FsSource.groovy
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-// An implementation of SourceRetriever that simply reads a directory
-// LocalSource expect a sub-directory 'repository@branch', so we cannot use it.
-package build.bazel.ci.utils
-
-import com.lesfurets.jenkins.unit.global.lib.SourceRetriever
-import javax.annotation.concurrent.Immutable
-import groovy.transform.CompileStatic
-
-@Immutable
-@CompileStatic
-class FsSource implements SourceRetriever {
- private final String directory
-
- public FsSource(String directory) {
- this.directory = directory;
- }
-
- @Override
- List<URL> retrieve(String repository, String branch, String targetPath) {
- def sourceDir = new File(directory)
- if (sourceDir.exists()) {
- return [sourceDir.toURI().toURL()]
- }
- throw new IllegalStateException("Directory ${directory} does not exists")
- }
-
- @Override
- String toString() {
- return "FsSource{directory='${directory}'}"
- }
-}
diff --git a/jenkins/lib/vars/bazelCiConfiguredJob.groovy b/jenkins/lib/vars/bazelCiConfiguredJob.groovy
deleted file mode 100644
index d06f550..0000000
--- a/jenkins/lib/vars/bazelCiConfiguredJob.groovy
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-def createJobsFromConfiguration(config, configNames, script) {
- def cfgs = []
- def name = currentBuild.projectName
- // Convert to an array to avoid serialization issue with Jenkins
- def entrySet = readConfiguration(files: [".ci/${name}.json", "scripts/ci/${name}.json"],
- repository: config.repository,
- branch: config.branch,
- refspec: config.refspec,
- default_configuration: config.configuration
- ).entrySet().toArray()
- for (int k = 0; k < entrySet.length; k++) {
- def params = entrySet[k].value
- def conf = entrySet[k].key
- def configName = build.bazel.ci.BazelConfiguration.descriptorToString(conf)
- configNames.add(configName)
- cfgs.add({ ->
- script.bazelCiJob(name: configName,
- repository: config.repository,
- branch: config.branch,
- refspec: config.refspec,
- node_label: conf["node"],
- targets: params.get("targets", ["//..."]),
- tests: params.get("tests", ["//..."]),
- configuration: params.get("configure", []),
- build_opts: params.get("build_opts", []),
- test_opts: params.get("test_opts", []),
- startup_opts: params.get("startup_opts", []),
- bazel_version: config.bazel_version,
- extra_bazelrc: config.extra_bazelrc,
- build_tag_filters: params.get("build_tag_filters", []),
- test_tag_filters: params.get("test_tag_filters", []),
- workspace: config.workspace,
- sauce: config.sauce
- )
- })
- }
- entrySet = null
- return cfgs
-}
-
-/**
- * This define a Jenkins step "bazelCiConfiguredJob" that use git and Bazel
- * with various configurations given by a list of platforms.
- * Each arguments is set by a variable in the body of the step and the list of possible arguments
- * is:
- * - bazel_version is the baseline for the version of Bazel, generally a parameter for the job.
- * If set to 'custom', the job will try to fetch the Bazel binary from upstream.
- * - configuration: JSON configuration, see BazelConfiguration
- * - extra_bazelrc: extraneous content for the rc file, will go after all other options.
- * Generally to be provided as a parameter of the job.
- * - workspace: a directory, relative to the root of the repository, that contains
- * the workspace file, default to the top directory.
- * - repository: git repository to clone.
- * - branch: branch of the repository to clone (default: master).
- * - refspec: specification of the references to fetch
- * - sauce: identifier of the crendentials to connect to SauceLabs.
- * - run_sequentially: run each configuration sequentially rather than in parallel
- */
-def call(config = [:]) {
- config["bazel_version"] = config.get("bazel_version", "latest")
- config["configuration"] = config.get("configuration", "[]")
- config["extra_bazelrc"] = config.get("extra_bazelrc", "")
- config["workspace"] = config.get("workspace", "")
- config["repository"] = config.get("repository", "")
- config["branch"] = config.get("branch", "master")
- config["refspec"] = config.get("refspec", "+refs/heads/*:refs/remotes/origin/*")
- config["sauce"] = config.get("sauce", "")
- config["run_sequentially"] = config.get("run_sequentially", false)
-
- // Remove special characters from bazel_version (which can be coming from a URL post):
- // everything except [a-zA-Z0-9_-.]
- config.bazel_version = config.bazel_version.replaceAll("[^a-zA-Z0-9_\\.-]", "")
-
- def configs = [:]
- // Keep a list of keys of configs in configNames to workaround
- // https://issues.jenkins-ci.org/browse/JENKINS-27421
- def configNames = []
- stage("Setting-up configurations") {
- def cfgs = createJobsFromConfiguration(config, configNames, this)
- for (int i = 0; i < cfgs.size; i++) {
- configs[configNames[i]] = cfgs[i]
- }
- cfgs = null
- }
-
-
- timeout(240) {
- try {
- stage("Run configurations") {
- if (config.run_sequentially) {
- for (configName in configNames) {
- configs[configName]()
- }
- } else {
- parallel configs
- }
- }
- } catch(build.bazel.ci.BazelTestFailure ex) {
- // Do not mark the build as error with a test failure
- currentBuild.result = "UNSTABLE"
- }
- }
-}
diff --git a/jenkins/lib/vars/bazelCiJob.groovy b/jenkins/lib/vars/bazelCiJob.groovy
deleted file mode 100644
index b4969b7..0000000
--- a/jenkins/lib/vars/bazelCiJob.groovy
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-@NonCPS
-private def getPlatformFromNodeName(node_label) {
- def platforms = ["windows": "windows",
- "darwin": "darwin",
- "freebsd": "freebsd",
- "": "linux"]
- return platforms.find { e -> node_label.startsWith(e.key) }.value
-}
-
-/**
- * This define a Jenkins step "bazelCiJob" that use git and Bazel to test one configuration.
- * Each arguments is set by a variable in the body of the step and the list of possible arguments
- * is:
- * - name
- * - bazel_version is the baseline for the version of Bazel, generally a parameter for the job.
- * If set to 'custom.*', the job will try to fetch the Bazel binary from upstream.
- * - targets: list of targets to build
- * - tests: list of targets to test
- * - configuration: list of shell step to configure the project
- * - build_opts, test_opts: option for build and test (build options also applies for tests)
- * - extra_bazelrc: extraneous content for the rc file, will go after all other options.
- * Generally to be provided as a parameter of the job.
- * - build_tag_filters, test_tag_filters: tag filters to pass to bazel
- * - workspace: a directory, relative to the root of the repository, that contains
- * the workspace file, default to the top directory.
- * - repository: git repository to clone.
- * - branch: branch of the repository to clone (default: master).
- * - refspec: specification of the references to fetch
- * - sauce: identifier of the credentials to connect to SauceLabs.
- * - node_label: label of the node to run on
- */
-def call(config = [:]) {
- config["bazel_version"] = config.get("bazel_version", "latest")
- config["targets"] = config.get("targets", ["//..."])
- config["tests"] = config.get("tests", ["//..."])
- config["configuration"] = config.get("configuration", [])
- config["build_opts"] = config.get("build_opts", [])
- config["test_opts"] = config.get("test_opts", [])
- config["startup_opts"] = config.get("startup_opts", [])
- config["extra_bazelrc"] = config.get("extra_bazelrc", "")
- config["build_tag_filters"] = config.get("build_tag_filters", [])
- config["test_tag_filters"] = config.get("test_tag_filters", [])
- config["workspace"] = config.get("workspace", "")
- config["repository"] = config.get("repository", "")
- config["sauce"] = config.get("sauce", "")
- config["branch"] = config.get("branch", "master")
- config["refspec"] = config.get("refspec", "+refs/heads/*:refs/remotes/origin/*")
-
- def prefix = config.get("name", "${config.node_label}-${config.bazel_version}")
- def workspace = ""
-
- config.test_tag_filters += ["-noci", "-manual"]
- def build_options = [
- "--build_tag_filters=${config.build_tag_filters.join ','}"
- ] + config.build_opts
- def test_options = [
- "--test_tag_filters=${config.test_tag_filters.join ','}",
- "--build_tests_only",
- "-k"
- ] + config.test_opts
- if (getPlatformFromNodeName(config.node_label) == "linux") {
- build_options << "--sandbox_tmpfs_path=/tmp"
- }
- machine(config.node_label) {
- ws("workspace/${currentBuild.fullProjectName}-${prefix}") {
- maybeSauce(config.sauce) {
- // Checkout the code
- echo "Checkout ${config.repository}"
- recursiveGit(repository: config.repository,
- refspec: config.refspec,
- branch: config.branch)
-
- // And build
- maybeDir(config.workspace) {
- def bazel = bazelPath(config.bazel_version, config.node_label)
- def extrarc = config.extra_bazelrc
- if (config.bazel_version.startsWith("custom")) {
- // Make the server dies after 10 minutes on custom bazel version.
- // Other bazel servers stays alive for 3 hours, which is ok for
- // release but not for custom binaries used for Global tests. We
- // do not set the max_idle_secs to 1 because we still want the
- // server to survive between steps.
- extrarc += "\nstartup --max_idle_secs 600\n"
- }
- bazelJob(binary: bazel,
- build_opts: build_options,
- test_opts: test_options,
- startup_opts: config.startup_opts,
- extra_bazelrc: extrarc,
- targets: config.targets,
- tests: config.tests,
- configuration: config.configuration,
- stage_name: prefix
- )
- }
- }
- }
- }
-}
-
diff --git a/jenkins/lib/vars/bazelJob.groovy b/jenkins/lib/vars/bazelJob.groovy
deleted file mode 100644
index 1546cc7..0000000
--- a/jenkins/lib/vars/bazelJob.groovy
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-import build.bazel.ci.BazelUtils
-
-/**
- * This define a Jenkins step "bazelJob" that write a rc file, execute shell configuration steps,
- * run build and test with bazel and publish the XML reports.
- * Each arguments is set by a variable in the body of the step and the list of possible arguments
- * is:
- * - binary: the path to the bazel binary
- * - targets: list of targets to build
- * - tests: list of targets to test
- * - configuration: list of shell step to configure the project
- * - build_opts, test_opts: option for build and test (build options also applies for tests)
- * - extra_bazelrc: extraneous content for the rc file, will go after all other options.
- * Generally to be provided as a parameter of the job.
- * - stage_name: Name of the stage, for prefixing substages
- */
-def call(config = [:]) {
- config["binary"] = config.get("binary", "bazel")
- config["targets"] = config.get("targets", ["//..."])
- config["tests"] = config.get("tests", ["//..."])
- config["configuration"] = config.get("configuration", [])
- config["build_opts"] = config.get("build_opts", [])
- config["test_opts"] = config.get("test_opts", [])
- config["startup_opts"] = config.get("startup_opts", [])
- config["extra_bazelrc"] = config.get("extra_bazelrc", "")
- config["stage_name"] = config.get("stage_name", "")
-
- // Now configure the utility class
- def utils = new BazelUtils();
- utils.bazel = config.binary
- utils.script = this;
-
- withCredentials([file(credentialsId: 'remote-execution', variable: 'AUTH_FILE')]) {
-
- // And now the various stage
- def stage_prefix = config.stage_name.isEmpty() ? "" : "[${config.stage_name}] "
- utils.writeRc(config.build_opts, config.test_opts, config.startup_opts, config.extra_bazelrc + "\nbuild --auth_credentials=${AUTH_FILE}")
- stage("${stage_prefix}Bazel version") {
- utils.bazelCommand("version")
- }
-
- if(!config.configuration.isEmpty()) {
- stage("${stage_prefix}Configuration") {
- utils.commandWithBazelOnPath(config.configuration.join("\n"))
- }
- }
-
- stage("${stage_prefix}Build") {
- utils.build(config.targets)
- }
-
- try {
- stage("${stage_prefix}Tests") {
- utils.test(config.tests)
- }
- } finally {
- stage("${stage_prefix}Results") {
- utils.testlogs("tests-${config.stage_name.replaceAll(',', '-')}")
- }
- }
- }
-}
diff --git a/jenkins/lib/vars/bazelPath.groovy b/jenkins/lib/vars/bazelPath.groovy
deleted file mode 100644
index db5bdec..0000000
--- a/jenkins/lib/vars/bazelPath.groovy
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-import build.bazel.ci.JenkinsUtils
-
-private def pruneOldCustomBazel(node_label) {
- try {
- // TODO(dmarting): unfortunately, this will trigger a RPC per file operation
- // but using FilePath.act needs a class that can be shiped to the client, so
- // needs to be in the client classpath. If the number of RPC became a problem,
- // maybe we can use a Jenkins plugins.
- JenkinsUtils.pruneIfOlderThan(env,
- getBazelInstallBase(node_label) + "custom",
- System.currentTimeMillis() - 172800000 /* 2 days */)
- } catch(IOException ex) {
- // Several error can occurs, we ignore them all as this step
- // is just for convenience, not critical.
- }
-}
-
-private def getBazelInstallBase(node_label) {
- return node_label.startsWith("windows") ?
- "c:\\bazel_ci\\installs\\" :
- "${env.HOME}/.bazel/"
-}
-
-private def getBazelInstallPath(node_label, String... segments) {
- def lastPart = node_label.startsWith("windows") ?
- "${segments.join '\\'}\\bazel.exe" :
- "${segments.join '/'}/binary/bazel"
- return getBazelInstallBase(node_label) + lastPart
-}
-
-/**
- * A step that returns the path of a specific version of the bazel binary. If that version is
- * set to "custom", it will for look for the bazel binary in the list of artifacts transmitted
- * by upstream job (not yet implemented). In the other case, it looks for bazel in a well
- * known location.
- */
-def call(String bazel_version, String node_label) {
- // Grab bazel
- if (bazel_version.startsWith("custom")) {
- node_label = JenkinsUtils.normalizeNodeLabel(node_label)
- def cause = JenkinsUtils.findAndCopyUpstreamArtifacts(
- currentBuild,
- "^node=${node_label}/bazel(\\.exe)?\$")
-
- if (cause == null) {
- error("Failed to find upstream cause while asked to build with custom Bazel")
- }
-
- echo "Using Bazel binary from upstream project ${cause.upstreamProject} build #${cause.upstreamBuild} at path ${cause.artifactPath}"
- def bazel = getBazelInstallPath(
- node_label,
- "custom",
- cause.upstreamProject.toString().replaceAll("/", "_"),
- cause.upstreamBuild.toString())
- if (!JenkinsUtils.touchFileIfExists(env, bazel)) {
- dir(".bazel") { deleteDir() }
- step([$class: 'CopyArtifact',
- filter: cause.artifactPath,
- fingerprintArtifacts: true,
- flatten: true,
- projectName: cause.upstreamProject,
- selector: [$class: 'SpecificBuildSelector',
- buildNumber: "${cause.upstreamBuild}"],
- target: ".bazel/"])
- if (node_label.startsWith("windows")) {
- // File.parent is null, use custom substring
- def bazelDir = bazel.substring(0, bazel.lastIndexOf("\\"))
- bat "mkdir \"${bazelDir}\"\r\nmove /Y \"${pwd()}\\.bazel\\bazel.exe\" \"${bazel}\""
- } else {
- def bazelDir = bazel.substring(0, bazel.lastIndexOf("/"))
- sh "mkdir -p ${bazelDir}; mv -f .bazel/bazel ${bazel}; chmod +x ${bazel}"
- }
- }
- pruneOldCustomBazel(node_label)
- echo "Using custom version of Bazel at ${bazel}"
- return bazel
- } else {
- def bazel = getBazelInstallPath(node_label, bazel_version)
- echo "Using released version of Bazel at ${bazel}"
- return bazel
- }
-}
diff --git a/jenkins/lib/vars/bootstrapBazel.groovy b/jenkins/lib/vars/bootstrapBazel.groovy
deleted file mode 100644
index fd849c0..0000000
--- a/jenkins/lib/vars/bootstrapBazel.groovy
+++ /dev/null
@@ -1,114 +0,0 @@
-// 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.
-
-import build.bazel.ci.BazelUtils
-
-@NonCPS
-def createCopyCommand(rootDir, toCopy, release_name) {
- def replaceFn = { o -> o.replace("%{release_name}", release_name) }
- def replacements = toCopy.collect(
- { e ->
- (e.value instanceof List) ?
- e.value.collect { it -> "${e.key} ${replaceFn(it)}" }
- : "${e.key} ${replaceFn(e.value)}"
- }).flatten()
- return replacements.collect({ e -> "cp ${rootDir}/${e}" }).join("\n")
-}
-
-// A step to bootstrap bazel on one platform
-def call(config = [:]) {
- def repository = config.get("repository", "https://bazel.googlesource.com/bazel")
- def branch = config.get("branch", "master")
- def refspec = config.get("refspec", "+refs/heads/*:refs/remotes/origin/*")
- def targets = config.get("targets", [])
-
- machine(config.node) {
- def utils = new BazelUtils()
- def release_name = ""
- def isWindows = !isUnix()
- utils.script = this
- utils.bazel = bazelPath("latest", config.node)
- stage("[${config.node}] clone") {
- recursiveGit(repository: repository,
- refspec: refspec,
- branch: branch)
- }
- stage("[${config.node}] get_version") {
- release_name =
- sh(script: "bash -c 'source scripts/release/common.sh; get_full_release_name'",
- returnStdout: true).trim()
- def opts = config.get("opts", [])
- opts <<= "--stamp"
- if (!isWindows) {
- // TODO(dmarting): Windows status command fails :/
- opts <<= "--workspace_status_command=scripts/ci/build_status_command.sh"
- }
- if (!release_name.isEmpty()) {
- opts <<= "--embed_label ${release_name}"
- }
- utils.writeRc(opts)
- }
-
- // Configure, if necessary
- def configuration = config.get("configure", [])
- if (!configuration.isEmpty()) {
- stage("[${config.node}] configure") {
- if (isUnix()) {
- sh "#!/bin/sh -x\n${configuration.join('\n')}"
- } else {
- bat configuration.join('\n')
- }
- }
- }
-
- stage("[${config.node}] bootstrap") {
- def envs = ["BUILD_BY=Jenkins",
- "GIT_REPOSITORY_URL=${env.GIT_URL}"]
- utils.build(["//src:bazel"] + targets)
- }
-
- // Archive artifacts
- def toArchive = config.get("archive", [:])
- def toStash = config.get("stash", [:])
- toArchive = toArchive == null ? [:] : toArchive
- toStash = toStash == null ? [:] : toStash
-
- if (!toArchive.isEmpty() || !toStash.isEmpty()) {
- stage("[${config.node}] archive") {
- def rootDir = pwd()
- if (isWindows) {
- rootDir = sh(script: 'cygpath -u '+rootDir.replace("\\", "/"),
- returnStdout: true).trim()
- }
- dir("output") {
- deleteDir()
- }
- if(!toArchive.isEmpty()) {
- dir("output/node=${config.node}") {
- sh createCopyCommand(rootDir, toArchive, release_name)
- }
- dir("output") {
- archiveArtifacts artifacts: "**", fingerprint:true
- }
- }
- if (!toStash.isEmpty()) {
- dir("output/node=${config.node}") {
- sh createCopyCommand(rootDir, toStash, release_name)
- }
- }
- dir("output") {
- stash name: "bazel--node=${config.node}"
- }
- }
- }
- }
-}
diff --git a/jenkins/lib/vars/bootstrapBazelAll.groovy b/jenkins/lib/vars/bootstrapBazelAll.groovy
deleted file mode 100644
index c975cee..0000000
--- a/jenkins/lib/vars/bootstrapBazelAll.groovy
+++ /dev/null
@@ -1,59 +0,0 @@
-// 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.
-
-// A step to bootstrap bazel on several platforms
-def call(config = [:]) {
- def repository = config.get("repository", "https://bazel.googlesource.com/bazel")
- def branch = config.get("branch", "master")
- def refspec = config.get("refspec", "+refs/heads/*:refs/remotes/origin/*")
- def configuration = config.get("configuration", "")
-
- def jobs = [:]
- // Convert to an array to avoid serialization issue with Jenkins
- def entrySet = readConfiguration(files: ["scripts/ci/bootstrap.json"],
- repository: config.repository,
- branch: config.branch,
- refspec: config.refspec,
- default_configuration: config.get("configuration", null)
- ).entrySet().toArray()
- def values = []
- def keys = []
- for (int k = 0; k < entrySet.length; k++) {
- values << entrySet[k].value
- keys << entrySet[k].key
- }
- entrySet = null
- config = null
- flattenConfigurations = null
-
- for (int k = 0; k < values.size; k++) {
- def key = keys[k]
- def value = values[k]
- def name = build.bazel.ci.BazelConfiguration.descriptorToString(key)
- jobs[name] = { ->
- stage("Bootstrapping on ${name}") {
- bootstrapBazel(repository: repository,
- branch: branch,
- refspec: refspec,
- node: key.node,
- archive: value.get("archive"),
- stash: value.get("stash"),
- targets: value.get("targets", []),
- configure: value.get("configure", []),
- opts: value.get("opts", []))
- }
- }
- }
-
- // The actual job
- parallel jobs
-}
diff --git a/jenkins/lib/vars/gerritReview.groovy b/jenkins/lib/vars/gerritReview.groovy
deleted file mode 100644
index 230bdaa..0000000
--- a/jenkins/lib/vars/gerritReview.groovy
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-import build.bazel.ci.GerritUtils
-import build.bazel.ci.JenkinsUtils
-
-/**
- * Define a step "gerritReview" that wrap a build to be a "Gerrit review": the change
- * will be commented according to the result of the build and the verified bit will be
- * updated.
- * except if that argument is empty (in which case the body is executed directly).
- */
-def call(String server, String cookiesFile, String reviewer, changeNum, branch, Closure body) {
- GerritUtils gerrit = new GerritUtils(server, cookiesFile, reviewer)
- def url = gerrit.url(changeNum)
- this.gerritBuild = currentBuild
- stage("Start Gerrit review") {
- echo "Reviewing change ${url} (${branch})"
- gerrit.startReview(changeNum)
- gerrit.comment(changeNum, branch,
- "Starting build at ${JenkinsUtils.getBlueOceanUrl(currentBuild)}")
- }
- def config = [gerritBuild: currentBuild, gerrit: gerrit, reportUrl: null]
- def result = null
- try {
- body.delegate = config
- body()
- } catch(Exception ex) {
- result = "ERROR"
- throw ex
- } finally {
- if (result == null) {
- result = config.gerritBuild.result == null ? "SUCCESS" : config.gerritBuild.result
- }
- def reportUrl = config.reportUrl ? config.reportUrl : JenkinsUtils.getBlueOceanUrl(config.gerritBuild)
- def verified = result == "SUCCESS" ? "+" : "-"
- echo "Setting ${verified}Verified to change ${url} after build returned ${result}"
- gerrit.review(changeNum, branch, result == "SUCCESS" ? 1 : -1,
- "Build ${reportUrl} finished with status ${result}")
- }
-}
diff --git a/jenkins/lib/vars/githubHook.groovy b/jenkins/lib/vars/githubHook.groovy
deleted file mode 100644
index 355da0b..0000000
--- a/jenkins/lib/vars/githubHook.groovy
+++ /dev/null
@@ -1,49 +0,0 @@
-// 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.
-
-import groovy.json.JsonSlurper
-
-@NonCPS
-private def parseGithubPayload(def payload) {
- def json = new JsonSlurper().parseText(payload)
- if (json.deleted) {
- return null
- }
- return ["branch": json.ref, "repository": json.repository.full_name, "url": json.repository.url]
-}
-
-// A step that executes a subcommand if a given payload coming from Github describe an update
-// to a given branch / tag.
-// Parameters:
-// - payload: the name of the parameters containing the Github webhook JSON payload.
-// - refs: a regex to match the ref that was passed.
-// - repositories: a list of allowed repositories.
-// Note that the body is executed either if there is a payload and the payload matche the
-// criteria or no payload was provided. The body will be passed as delegate a map containing
-// the branch ref ('branch'), the repository name ('repository') and url ('url'). They will be
-// null if no payload was provided.
-def call(def config, Closure body) {
- def payloadName = config.get("payload", "payload")
- def refs = config.get("refs", ".*")
- def repositories = config.get("repositories", ["bazelbuild/bazel"])
-
- body.delegate = ["branch": null, "repository": null, "url": null]
- if (params[payloadName]) {
- def payload = parseGithubPayload(params[payloadName])
- if (payload && payload.branch.matches(refs) && payload.repository in repositories) {
- body.delegate = payload
- body()
- }
- } else {
- body()
- }
-}
diff --git a/jenkins/lib/vars/globalBazelTest.groovy b/jenkins/lib/vars/globalBazelTest.groovy
deleted file mode 100644
index 357f370..0000000
--- a/jenkins/lib/vars/globalBazelTest.groovy
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-// A pipeline step that control a global test for Bazel:
-// - Bootstrap bazel and do some basic tests
-// - Deploy the artifacts (site, releases) and send mails
-// - Run all downstream job
-def call(config = [:]) {
- def repository = config.get("repository", "https://bazel.googlesource.com/bazel")
- def branch = config.get("branch", "master")
- def extra_bazelrc = config.get("extra_bazelrc", "")
- def refspec = config.get("refspec", "+refs/heads/*:refs/remotes/origin/*")
- def json_config = config.configuration
-
- stage("Startup global test") {
- echo "Running global test for branch ${branch} (refspec: ${refspec})"
- }
-
- // First we bootstrap bazel on all platform
- stage("Bootstrap on all platforms") {
- bootstrapBazelAll(repository: repository,
- branch: branch,
- refspec: refspec,
- configuration: json_config)
- }
-
-
- // Deployment steps
- def is_master = branch.matches('^(.*/)?master$')
- def is_rc = branch.matches('^(refs/heads/)?release-.*$')
- def is_release = branch.matches('^refs/tags/.*$')
- if(is_master || is_rc | is_release) {
- stage(is_master ? "Push website" : "Push release") {
- machine("deploy") {
- recursiveGit(repository: repository,
- refspec: refspec,
- branch: branch)
- if (!is_master) {
- def r_name = sh(script: "bash -c 'source scripts/release/common.sh; get_full_release_name'",
- returnStdout: true).trim()
- if (!r_name.isEmpty()) {
- pushRelease(name: r_name,
- configuration: json_config,
- excludes: ["**/*.bazel.build.tar*", "**/bazel", "**/bazel.exe"])
- if (is_release) {
- stage("Install new release on all nodes") {
- build(job: "/maintenance/install-bazel", wait: false, propagate: false)
- }
- }
- }
- }
- }
- }
- }
-
- // Then we run all jobs in the Global folder except the global pipeline job (the current job).
- report = null
- stage("Test downstream jobs") {
- report = runAll(folder: "Global",
- parameters: [
- [$class: 'TextParameterValue',
- name: 'EXTRA_BAZELRC',
- value: "${extra_bazelrc}"],
- [$class: 'StringParameterValue',
- name: 'REPOSITORY',
- value: "${repository}"],
- [$class: 'StringParameterValue',
- name: 'BRANCH',
- value: "${branch}"],
- [$class: 'StringParameterValue',
- name: 'REFSPEC',
- value: "${refspec}"]
- ],
- excludes: ["pipeline", currentBuild.getProjectName()])
- }
-
- stage("Publish report") {
- reportAB report: report, name: "Downstream projects"
- }
-}
diff --git a/jenkins/lib/vars/installBazel.groovy b/jenkins/lib/vars/installBazel.groovy
deleted file mode 100644
index a0d1398..0000000
--- a/jenkins/lib/vars/installBazel.groovy
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors.
-//
-// 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.
-
-import java.nio.channels.Channels
-
-// Returns the latest Bazel version available on github
-@NonCPS
-def getLatestBazelVersion() {
- def url = new URL("https://github.com/bazelbuild/bazel/releases/latest")
- def conn = url.openConnection()
- conn.setInstanceFollowRedirects(false)
- String location = conn.getHeaderField("Location").trim()
- return location.replaceAll("^.*/", "") // Last component of the location is the release tag
-}
-
-// Install bazel version X from the web
-private def installBazel(script, version, platform) {
- def release_url = "https://releases.bazel.build/${version}/release"
- if (platform.startsWith("windows")) {
- def url = "${release_url}/bazel-${version}-windows-x86_64.exe"
- def dir = "c:\\bazel_ci\\installs\\${version}"
- def to = "${dir}\\bazel.exe"
- script.bat "powershell -Command \"New-Item -ItemType directory -Force -Path ${dir}; (New-Object Net.WebClient).DownloadFile('${url}', '${to}')\""
- } else {
- def destination ="${env.HOME}/.bazel/${version}"
- script.sh """#!/bin/bash -x
-curl -L -o install.sh '${release_url}/bazel-${version}-without-jdk-installer-${platform}.sh'
-chmod 0755 install.sh
-./install.sh --base='${destination}' --bin='${destination}/binary'
-"""
- }
-}
-
-@NonCPS
-private def getPlatformFromNodeName(node) {
- def platforms = ["windows": "windows-x86_64",
- "darwin": "darwin-x86_64",
- "": "linux-x86_64"]
- return platforms.find { e -> node.startsWith(e.key) }.value
-}
-
-// A step to install a released version of Bazel
-// parameters:
-// version: the version to install, default to latest
-// alias: alias of the version, if version is latest, this is set to "latest" too
-def call(params = [:]) {
- params["version"] = params.get("version", "latest")
- params["alias"] = params.get("alias", params.version == "latest" ? "latest" : "")
-
- if (params.version == "latest") {
- params.version = getLatestBazelVersion()
- }
-
- machine(params.node) {
- // Determine the platform
- def platform = getPlatformFromNodeName(params.node)
-
- // install bazel
- installBazel(this, params.version, platform)
-
- // Symlinks
- if (!params.alias.isEmpty()) {
- def from = "${params.version}"
- def to = "${params.alias}"
- if (platform.startsWith("windows")) {
- bat """
-rmdir /q c:\\bazel_ci\\installs\\${to}
-mklink /J c:\\bazel_ci\\installs\\${to} c:\\bazel_ci\\installs\\${from}
-"""
- } else {
- sh "rm -f ~/.bazel/${to}; ln -s ~/.bazel/${from} ~/.bazel/${to}"
- }
- }
- }
-}
diff --git a/jenkins/lib/vars/machine.groovy b/jenkins/lib/vars/machine.groovy
deleted file mode 100644
index a7a8bc2..0000000
--- a/jenkins/lib/vars/machine.groovy
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-/**
- * Define a step "machine" that wrap the "node" step but adding a line showing information
- * about the node it is being executed on.
- */
-def call(String node_label, Closure body) {
- // We only do full node label matching to avoid people trying to book
- // sensitive workers.
- node_label = node_label.replaceAll('"', '')
- node("\"${node_label}\"") {
- stage("Node information") {
- echo "node = ${env.NODE_NAME}\nworkspace = ${pwd()}"
- }
- body()
- }
-}
diff --git a/jenkins/lib/vars/maybeDir.groovy b/jenkins/lib/vars/maybeDir.groovy
deleted file mode 100644
index 87f427d..0000000
--- a/jenkins/lib/vars/maybeDir.groovy
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-/**
- * Define a step "maybeDir" that executes its body under the directory passed as argument,
- * except if that argument is empty (in which case the body is executed directly).
- */
-def call(String directory, Closure body) {
- if (directory.isEmpty()) {
- body()
- } else {
- dir(directory) {
- body()
- }
- }
-}
diff --git a/jenkins/lib/vars/maybeSauce.groovy b/jenkins/lib/vars/maybeSauce.groovy
deleted file mode 100644
index d40f503..0000000
--- a/jenkins/lib/vars/maybeSauce.groovy
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-/**
- * Define a step "maybeSauce" that executes its body under the SauceLabs wrapper with the
- * credentials identifier given in argument, except if that argument is empty (in which
- * case the body is executed directly).
- */
-def call(String id, Closure body) {
- if (id.isEmpty()) {
- body()
- } else {
- sauce(id) {
- sauceconnect(useGeneratedTunnelIdentifier: true) {
- body()
- }
- }
- }
-}
diff --git a/jenkins/lib/vars/pushRelease.groovy b/jenkins/lib/vars/pushRelease.groovy
deleted file mode 100644
index e6c0d8d..0000000
--- a/jenkins/lib/vars/pushRelease.groovy
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-import build.bazel.ci.JenkinsUtils
-import build.bazel.ci.BazelConfiguration
-
-private def ensureGpgSecretKeyImported() {
- sh '''#!/bin/bash
-echo "Import GPG Secret key"
-(gpg --list-secret-keys | grep "${APT_GPG_KEY_ID}" > /dev/null) || \\
- gpg --allow-secret-key-import --import "${APT_GPG_KEY_PATH}"
-# Make sure we use stronger digest algorithm.
-# We use reprepro to generate the debian repository,
-# but there is no way to pass flags to gpg using reprepro, so writting it into
-# ~/.gnupg/gpg.conf
-(grep "digest-algo sha256" ~/.gnupg/gpg.conf > /dev/null) || \\
- echo "digest-algo sha256" >> ~/.gnupg/gpg.conf
-'''
-}
-
-// Generate the SHA-256 checksum and the GPG signature for a list of artifacts.
-// Returns a new list of artifacts that include the generated checksum and signature files.
-private def signArtifacts(files) {
- def result = []
- def script = []
- for (def file : files) {
- script <<= "echo 'Signing ${file}'"
- script <<= "(cd \"\$(dirname '${file}')\" && sha256sum \"\$(basename '${file}')\") > '${file}.sha256'"
- script <<= "gpg --no-tty --detach-sign -u \"\${APT_GPG_KEY_ID}\" '${file}'"
- result <<= file
- result <<= "${file}.sha256"
- result <<= "${file}.sig"
- }
- sh "#!/bin/bash \n${script.join '\n'}"
- return result
-}
-
-@NonCPS
-private def listArtifacts(ws, dir, excludes) {
- return JenkinsUtils.list(env, "${ws}/${dir}", excludes).collect { "${dir}/${it}" }
-}
-
-private def listStashes(configuration) {
- def result = []
- def conf = BazelConfiguration.flattenConfigurations(
- BazelConfiguration.parse(configuration))
- for (k in conf.keySet()) {
- if ("stash" in conf[k] || "archive" in conf[k]) {
- result.add("bazel--node=${k.node}")
- }
- }
- return result
-}
-
-// A step that push a release for Bazel.
-def call(params = [:]) {
- // Parameters
- def r_name = params.name
- def bucket = params.get("bucket", "bazel")
- def release_script = params.get("release_script", "source scripts/ci/build.sh; deploy_release")
- def email_script = params.get("email_script", "source scripts/ci/build.sh; generate_email")
- def repository = params.get("repository", "https://github.com/bazelbuild/bazel")
- def replyTo = params.get("replyTo", "bazel-ci@googlegroups.com")
-
- def ws = pwd()
-
- // Save the build log
- JenkinsUtils.saveLog(env, currentBuild, "${ws}/build.log")
-
- // unstash all the things
- dir("artifacts") {
- def stashNames = listStashes(params.configuration)
- for (def stashName : stashNames) {
- unstash stashName
- }
- }
- def artifacts = listArtifacts(ws, "artifacts", params.get("excludes", []))
-
- // Now the actual release
- withEnv(["GCS_BUCKET=${bucket}",
- "GIT_REPOSITORY_URL=${repository}",
- "GITHUB_TOKEN=${readFile(env.GITHUB_TOKEN_FILE).trim()}",
- "APT_GPG_KEY_ID=${readFile(env.APT_GPG_KEY_ID_FILE).trim()}",
- // TODO(dmarting): hack to work with release_to_apt(), we should get rid of it.
- "tmpdir=${ws}/artifacts/node=linux-x86_64"]) {
- // Sign artifacts
- ensureGpgSecretKeyImported()
- def artifact_list = signArtifacts(artifacts)
-
- // Release
- sh "#!/bin/bash\n${release_script} build.log ${artifact_list.join ' '}"
-
- // Send email announcement
- stage("Announcement mail") {
- def email = sh(script: "bash -c '${email_script}'", returnStdout: true)
- echo "Mail to: ${email}"
- if (r_name.contains("test")) {
- echo "Test release, skipping announcement mail."
- } else {
- def splittedEmail = email.split("\n", 3)
- mail(subject: splittedEmail[1],
- to: splittedEmail[0],
- replyTo: replyTo,
- body: splittedEmail[2])
- }
- }
- }
-}
diff --git a/jenkins/lib/vars/readConfiguration.groovy b/jenkins/lib/vars/readConfiguration.groovy
deleted file mode 100644
index c981830..0000000
--- a/jenkins/lib/vars/readConfiguration.groovy
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-import build.bazel.ci.BazelConfiguration
-
-// Step to read a configuration from the repository
-// Parameters:
-// - repository, branch, refspec: which repository to fetch, see recursiveGit
-// - files: the list of files to read from the repository (if the first one
-// does not exists, try the second one and so on...), default to .ci/bazel.json.
-// - default_configuration: default json content to use if the file cannot be found
-def call(config = [:]) {
- def conf = null
- def files = config.get("files", [".ci/bazel.json"])
- def filename = null
- if ("repository" in config) {
- node {
- recursiveGit(repository: config.repository,
- branch: config.get("branch", "master"),
- refspec: config.get("refspec", "+refs/heads/*:refs/remotes/origin/*"))
- for(int k = 0; k < files.size() && conf == null; k++) {
- if (fileExists(files[k])) {
- filename = files[k]
- conf = readFile(filename)
- }
- }
- }
- }
- if (conf == null) {
- conf = config.get("default_configuration")
- if (conf == null) {
- error(
- """Cannot read configuration file from the repository and no fallback was provided.
-Please check a configuration file under one of: ${files.join ', '}.""")
- }
- }
- try {
- // We exclude the deploy slaves from being selected by the configuration, they
- // have access to secrets.
- return BazelConfiguration.flattenConfigurations(
- BazelConfiguration.parse(conf), ["node": ["deploy"]])
- } catch (Exception ex) {
- error(filename != null ? "Failed to validate configuration (file was ${filename}): ${ex.message}"
- : "Failed to validate default configuration: ${ex.message}")
- }
-}
diff --git a/jenkins/lib/vars/recursiveGit.groovy b/jenkins/lib/vars/recursiveGit.groovy
deleted file mode 100644
index a0daa42..0000000
--- a/jenkins/lib/vars/recursiveGit.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2017 The Bazel Authors
-//
-// 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.
-
-/**
- * A step for our custom git, the normal git step does not allow to recurse
- * into submodule, nor to specify a custom refs.
- *
- * Params:
- * repository (mandatory): the name of the repository to fetch
- * branch (default to master): the name of the branch to checkout (can be a hash too)
- * refspec (default to refs/heads/*): the list of refs to fetch
- */
-def call(config = [:]) {
- config["branch"] = config.get("branch", "master")
- config["refspec"] = config.get("refspec", "+refs/heads/*:refs/remotes/origin/*")
- if (!("repository" in config)) {
- error("recursiveGit needs a repository parameter")
- }
- def branch = config.branch.matches('^([a-f0-9]+|(origin|refs)/.*)$') ? config.branch : ("*/" + config.branch)
- checkout(scm: [$class: 'GitSCM',
- branches: [[name: branch]],
- doGenerateSubmoduleConfigurations: false,
- extensions: [[$class: "SubmoduleOption",
- disableSubmodules: false,
- parentCredentials: false,
- recursiveSubmodules: true,
- reference: "",
- trackingSubmodules: false],
- [$class: 'CleanBeforeCheckout']],
- submoduleCfg: [],
- userRemoteConfigs: [[url: config.repository, refspec: config.refspec]]],
- poll: true)
-}
diff --git a/jenkins/lib/vars/reportAB.groovy b/jenkins/lib/vars/reportAB.groovy
deleted file mode 100644
index 084c33e..0000000
--- a/jenkins/lib/vars/reportAB.groovy
+++ /dev/null
@@ -1,82 +0,0 @@
-// 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.
-
-// Step to report failure of a set of jobs and comparing the result with
-// the latest jobs with the same name on another folder
-import build.bazel.ci.JenkinsUtils
-
-@NonCPS
-def formatRun(run) {
- if (run == null) {
- return "unkown status"
- }
- def console = JenkinsUtils.getConsoleUrl(run)
- def url = JenkinsUtils.getBlueOceanUrl(run)
- def icon = JenkinsUtils.getSmallIconUrl(run)
- return "<a href=\"${console}\"><img src=\"${icon}\"/></a> <a href=\"${url}\">#${run.number}</a>"
-}
-
-@NonCPS
-def collectJobs(report, beforeFolder) {
- def successes = []
- def failures = []
- def alreadyFailing = []
- for (e in report) {
- def key = e.key
- def value = e.value
- def beforeJob = JenkinsUtils.getLastRun(beforeFolder, key)
- def element = "${key} ${formatRun(value)} (was ${formatRun(beforeJob)})"
- if (value.result == "SUCCESS") {
- successes <<= element
- } else if (beforeJob == null || beforeJob.rawBuild.result.isWorseOrEqualTo(value.rawBuild.result)) {
- alreadyFailing <<= element
- } else {
- failures <<= element
- }
- }
- return [failures: failures, alreadyFailing: alreadyFailing, successes: successes]
-}
-
-@NonCPS
-def toHTMLList(lst) {
- def listItems = lst.collect { "<li>${it}</li>" }
- return "<ul>${listItems.join('\n')}</ul>"
-}
-
-def call(args = [:]) {
- node {
- def name = args.name
- def jobs = collectJobs(args.report, args.get("beforeFolder", ""))
- writeFile file: (".report/${name}.html"), text: """
-<html>
-<h2>Newly failing jobs</h2>
-<ul>${toHTMLList(jobs.failures)}</ul>
-<h2>Already failing jobs</h2>
-<ul>${toHTMLList(jobs.alreadyFailing)}</ul>
-<h2>Passing jobs</h2>
-<ul>${toHTMLList(jobs.successes)}</ul>
-</html>
-"""
- publishHTML target: [
- allowMissing: false,
- alwaysLinkToLastBuild: false,
- keepAll: true,
- reportDir: ".report",
- reportFiles: "${name}.html",
- reportName: name
- ]
-
- if (args.get("unstableOnNewFailure", true) && !jobs.failures.empty) {
- currentBuild.result = "UNSTABLE"
- }
- }
-}
diff --git a/jenkins/lib/vars/runAll.groovy b/jenkins/lib/vars/runAll.groovy
deleted file mode 100644
index 09ba730..0000000
--- a/jenkins/lib/vars/runAll.groovy
+++ /dev/null
@@ -1,50 +0,0 @@
-// 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.
-
-// Step to run all job matching certain criterium
-import build.bazel.ci.JenkinsUtils
-
-def call(params = [:]) {
- def folder = params.get("folder", null)
- def excludes = params.get("excludes", [currentBuild.getProjectName()])
- def parameters = params.get("parameters", [])
- def wait = params.get("wait", true)
- def catchError = params.get("catchError", false)
- def jobs = JenkinsUtils.jobs(folder).toArray()
- def toRun = [:]
- def report = [:]
- for (int k = 0; k < jobs.length; k++) {
- def jobName = jobs[k]
- if (!(jobName in excludes)) {
- toRun[jobName] = { ->
- r = build(job: folder ? "/${folder}/${jobName}" : jobName,
- parameters: parameters,
- wait: wait,
- propagate: false)
- report.put(jobName, r)
- echo "Details of ${jobName}: ${JenkinsUtils.getBlueOceanUrl(r)}"
- if (r.result == "FAILURE" || r.result == "UNSTABLE"
- || r.result == "ABORTED") {
- throw new Exception("Failed on " + jobName + ": " + r.result);
- }
- }
- }
- }
- jobs = null
- try {
- parallel(toRun)
- } catch(Exception e) {
- // back to normal execution, to have the report available
- }
-
- return report
-}
diff --git a/jenkins/setup-deploy.sh b/jenkins/setup-deploy.sh
deleted file mode 100755
index 3b22bcf..0000000
--- a/jenkins/setup-deploy.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 The Bazel 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.
-
-# Setup the various utilities for the deploy image (image that deploy releases).
-# This script will be run inside the deploy docker image at the docker instance
-# startup.
-
-pushd /opt/data
-
-# gsutil does change, we cannot use http_file as the SHA-256 would change over
-# time.
-wget https://storage.googleapis.com/pub/gsutil.tar.gz
-
-tar zxf hoedown.tar.gz && rm hoedown.tar.gz
-tar zxf github_release.tar.gz && rm github_release.tar.gz
-tar zxf gsutil.tar.gz && rm gsutil.tar.gz
-
-mv hoedown-* hoedown
-pushd hoedown
-make CC=gcc hoedown
-popd
-
-mv github-release-* github-release
-pushd github-release
-make
-popd
-
-popd
diff --git a/jenkins/slave_setup.sh b/jenkins/slave_setup.sh
deleted file mode 100644
index f3a380f..0000000
--- a/jenkins/slave_setup.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 The Bazel 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.
-
-# Scripts to configure a Jenkins executor node in a docker image.
-
-# {{ variables.HOME_FS }} is replaced by the template engine.
-HOME_FS={{ variables.HOME_FS }}
-
-# Install certificates
-(cd /usr/share/ca-certificates && find . -type f -name '*.crt' \
- | sed -e 's|^\./||') > /etc/ca-certificates.conf
-update-ca-certificates
-
-# Create the Jenkins user.
-groupadd -g 1000 ci
-useradd -d ${HOME_FS} -r -g 1000 -u 1000 ci
-chown ci.ci ${HOME_FS}
-cd ${HOME_FS}
-
-# Execute additional setup scripts.
-for i in /opt/run/*.{,ba}sh; do
- if [ -f "$i" ]; then
- /bin/bash $i
- fi
-done
-
-# Run the Jenkins agent.
-wget -O slave.jar https://ci.bazel.build/jnlpJars/slave.jar || exit 1
-su ci -c "${JAVA_HOME}/bin/java -jar slave.jar -jnlpUrl https://ci.bazel.build/computer/{{ variables.NODE_NAME }}/slave-agent.jnlp -noReconnect"
diff --git a/templating/BUILD b/templating/BUILD
deleted file mode 100644
index c0a525d..0000000
--- a/templating/BUILD
+++ /dev/null
@@ -1,22 +0,0 @@
-py_binary(
- name = "template_engine",
- srcs = ["main.py"],
- main = "main.py",
- visibility = ["//visibility:public"],
- deps = [
- "@com_github_google_python_gflags//:gflags",
- "@org_pocoo_jinja_jinja2//:jinja2",
- ],
-)
-
-py_test(
- name = "integration_test",
- srcs = [
- "integration_test.py",
- "main.py",
- ],
- deps = [
- "@com_github_google_python_gflags//:gflags",
- "@org_pocoo_jinja_jinja2//:jinja2",
- ],
-)
diff --git a/templating/integration_test.py b/templating/integration_test.py
deleted file mode 100644
index 2217ef7..0000000
--- a/templating/integration_test.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# Copyright 2016 The Bazel 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.
-"""End-to-end test of the template engine."""
-
-from collections import namedtuple, OrderedDict
-import templating.main as main
-import os
-import tempfile
-import unittest
-
-class IntegrationTest(unittest.TestCase):
-
- def setUp(self):
- self._tmpDir = os.getenv('TEST_TMPDIR')
- os.chdir(self._tmpDir)
- self._tmpFiles = []
-
- def tearDown(self):
- for f in self._tmpFiles:
- os.remove(f)
- self._tmpFiles = []
-
- def _get_tmp(self):
- tmp = tempfile.mkstemp(dir=self._tmpDir)
- os.close(tmp[0])
- self._tmpFiles.append(tmp[1])
- return tmp[1]
-
- def assert_template(self, expected, template, variables={},
- imports={}, escape_xml=True, executable=False):
- tempfile = self._get_tmp()
- outfile = self._get_tmp()
- with open(tempfile, 'w') as f:
- f.write(template)
- imp = []
- for v in imports:
- fn = self._get_tmp()
- imp.append((v[0], fn))
- with open(fn, 'w') as f:
- f.write(v[1])
- MyStruct = namedtuple(
- 'MyStruct',
- 'template output variable imports escape_xml executable')
- main.main(MyStruct(
- template=tempfile,
- output=outfile,
- escape_xml=escape_xml,
- executable=executable,
- variable=['%s=%s' % (k, v) for k, v in variables.iteritems()],
- imports=['%s=%s' % v for v in imp],
- ), None)
- with open(outfile, 'r') as f:
- self.assertEquals(expected, f.read())
-
- def test_no_substitution(self):
- self.assert_template('toto', 'toto')
-
- def test_one_substitution(self):
- self.assert_template('toto', '{{ variables.toto }}',
- variables={'toto': 'toto'})
-
- def test_one_import(self):
- self.assert_template('toto', '{{ imports.toto }}',
- imports=[('toto', 'toto')])
-
- def test_cascaded_imports(self):
- self.assert_template(
- 'd',
- '{{ imports.a }}',
- imports=[
- ('c', 'd'),
- ('b', '{{ imports.c }}'),
- ('a', '{{ imports.b }}'),
- ])
-
- def test_escape_xml(self):
- self.assert_template('&', '{{ variables.a }}',
- variables={'a': '&'})
- self.assert_template('&', '{{ imports.a }}',
- imports=[('a', '&')])
- self.assert_template('&', '{{ imports.b }}',
- imports=[('a', '&'), ('b', '{{ imports.a }}')])
- self.assert_template('&', '{{ variables.a }}', escape_xml=False,
- variables={'a': '&'})
- self.assert_template('&', '{{ imports.a }}', escape_xml=False,
- imports=[('a', '&')])
- self.assert_template('&', '{{ imports.b }}', escape_xml=False,
- imports=[('a', '&'), ('b', '{{ imports.a }}')])
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/templating/main.py b/templating/main.py
deleted file mode 100644
index c3da715..0000000
--- a/templating/main.py
+++ /dev/null
@@ -1,116 +0,0 @@
-# Copyright 2016 The Bazel 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.
-"""A template engine based on jinja2 to use as a tool for Skylark rules."""
-
-import gflags
-import jinja2
-import os
-import os.path
-import sys
-import xml.sax.saxutils as saxutils
-
-gflags.DEFINE_string('output', None, 'The output file, mandatory.')
-gflags.MarkFlagAsRequired('output')
-
-gflags.DEFINE_string('template', None, 'The input file, mandatory.')
-gflags.MarkFlagAsRequired('template')
-
-gflags.DEFINE_multistring(
- 'variable', [],
- 'A variable to expand in the template, in the format NAME=VALUE. Each '
- 'variable provided here will be available via the variables.NAME '
- 'variable.')
-
-gflags.DEFINE_multistring(
- 'imports', [],
- 'A file to import as another template, in the format NAME=filename. '
- 'Each file imported here will be considered as template and expanded '
- 'as such. The order of expansion happens in the order it is given on '
- 'the command line, making each file available for consumption for the '
- 'next one. All file content will be available via the imports.NAME '
- 'variable.')
-
-gflags.DEFINE_boolean(
- 'escape_xml', True,
- 'Whether to escape XML special characters in the import templates. '
- 'If set to True, all files specified through --imports and all values '
- 'specified through --variable will be escaped for XML characters '
- 'before inclusion in the main template.')
-
-gflags.DEFINE_boolean(
- 'executable', False, 'Whether to adds the executable bit to the output.')
-
-FLAGS = gflags.FLAGS
-
-class OneFileLoader(jinja2.BaseLoader):
- """A file system loader that allows loading only one file."""
- def __init__(self, path):
- self.path = path
-
- def get_source(self, environment, template):
- if template != self.path or not os.path.exists(self.path):
- raise TemplateNotFound(template)
- mtime = os.path.getmtime(self.path)
- source = ''
- with file(self.path) as f:
- source = f.read().decode('utf-8')
- return source, self.path, lambda: mtime == os.path.getmtime(self.path)
-
-
-def expand_template(template, variables, imports, raw_imports=None):
- """Expand a template."""
- if raw_imports is None:
- raw_imports = imports
- env = jinja2.Environment(loader=OneFileLoader(template))
- template = env.get_template(template)
- return template.render(imports=imports, variables=variables, raw_imports=raw_imports)
-
-def quote_xml(d):
- """Returns a copy of d where all values where escaped for XML."""
- return {k: saxutils.escape(v) for k,v in d.iteritems()}
-
-def construct_imports(variables, imports):
- """Construct the list of imports by expanding all command line arguments."""
- result = {}
- for i in imports:
- kv = i.split('=', 1)
- if len(kv) != 2:
- print 'Invalid value for --imports: %s. See --help.' % i
- sys.exit(1)
- result[kv[0]] = expand_template(kv[1], variables, result)
- return result
-
-def main(flags, unused_argv):
- """Main method."""
- variables = {}
- for v in flags.variable:
- kv = v.split('=', 1)
- if len(kv) != 2:
- print 'Invalid value for --variable: %s. See --help.' % v
- sys.exit(-1)
- variables[kv[0]] = kv[1]
- imports = construct_imports(variables, flags.imports)
- raw_imports = imports
- if flags.escape_xml:
- imports = quote_xml(imports)
- variables = quote_xml(variables)
- result = expand_template(flags.template, variables, imports, raw_imports)
- with open(flags.output, "w") as f:
- f.write(result)
- if flags.executable:
- os.chmod(flags.output, 0o755)
-
-if __name__ == '__main__':
- unused_argv = FLAGS(sys.argv)
- main(FLAGS, unused_argv)