Build our Linux binaries on CentOS 7 instead of Ubuntu 16.04. (#738)
* Build the standard Linux binary on CentOS 7 and use that one on all Linux downstream platforms
* Remove the check that we build Bazel on all platforms during downstream
* Switch the release and Java Tools pipelines to CentOS 7
diff --git a/buildkite/bazelci.py b/buildkite/bazelci.py
index a71820c..cc715c0 100755
--- a/buildkite/bazelci.py
+++ b/buildkite/bazelci.py
@@ -386,7 +386,7 @@
"name": "CentOS 7, Java 8",
"emoji-name": ":centos: 7 (Java 8)",
"downstream-root": "/var/lib/buildkite-agent/builds/${BUILDKITE_AGENT_NAME}/${BUILDKITE_ORGANIZATION_SLUG}-downstream-projects",
- "publish_binary": [],
+ "publish_binary": ["ubuntu1404", "centos7", "linux"],
"docker-image": "gcr.io/bazel-public/centos7:java8",
"python": "python3.6",
},
@@ -394,7 +394,7 @@
"name": "Ubuntu 16.04, OpenJDK 8",
"emoji-name": ":ubuntu: 16.04 (OpenJDK 8)",
"downstream-root": "/var/lib/buildkite-agent/builds/${BUILDKITE_AGENT_NAME}/${BUILDKITE_ORGANIZATION_SLUG}-downstream-projects",
- "publish_binary": ["ubuntu1404", "ubuntu1604", "linux"],
+ "publish_binary": ["ubuntu1604"],
"docker-image": "gcr.io/bazel-public/ubuntu1604:java8",
"python": "python3.6",
},
@@ -445,6 +445,11 @@
# The platform used for various steps (e.g. stuff that formerly ran on the "pipeline" workers).
DEFAULT_PLATFORM = "ubuntu1804"
+# In order to test that "the one Linux binary" that we build for our official releases actually
+# works on all Linux distributions that we test on, we use the Linux binary built on our official
+# release platform for all Linux downstream tests.
+LINUX_BINARY_PLATFORM = "centos7"
+
DEFAULT_XCODE_VERSION = "10.2.1"
XCODE_VERSION_REGEX = re.compile(r"^\d+\.\d+(\.\d+)?$")
@@ -691,12 +696,18 @@
else:
git_repository = os.getenv("BUILDKITE_REPO")
+ # We use one binary for all Linux platforms (because we also just release one binary for all
+ # Linux versions and we have to ensure that it works on all of them).
+ binary_platform = platform if platform in ["macos", "windows"] else LINUX_BINARY_PLATFORM
+
if use_bazel_at_commit:
print_collapsed_group(":gcloud: Downloading Bazel built at " + use_bazel_at_commit)
- bazel_binary = download_bazel_binary_at_commit(tmpdir, platform, use_bazel_at_commit)
+ bazel_binary = download_bazel_binary_at_commit(
+ tmpdir, binary_platform, use_bazel_at_commit
+ )
elif use_but:
print_collapsed_group(":gcloud: Downloading Bazel Under Test")
- bazel_binary = download_bazel_binary(tmpdir, platform)
+ bazel_binary = download_bazel_binary(tmpdir, binary_platform)
else:
bazel_binary = "bazel"
if bazel_version:
@@ -971,10 +982,6 @@
def download_bazel_binary_at_commit(dest_dir, platform, bazel_git_commit):
- # We have a few Ubuntu platforms for which we don't build binaries. It should be OK to use the
- # ones from Ubuntu 16.04 on them.
- if "ubuntu" in platform and not should_publish_binaries_for_platform(platform):
- platform = "ubuntu1604"
bazel_binary_path = os.path.join(dest_dir, "bazel.exe" if platform == "windows" else "bazel")
try:
execute_command(
@@ -2190,13 +2197,6 @@
pipeline_steps = []
task_configs = filter_tasks_that_should_be_skipped(task_configs, pipeline_steps)
- configured_platforms = set(get_platform_for_task(t, c) for t, c in task_configs.items())
- if configured_platforms != set(PLATFORMS):
- raise BuildkiteException(
- "Bazel downstream pipeline needs to build Bazel on all supported platforms (has=%s vs. want=%s)."
- % (sorted(configured_platforms), sorted(set(PLATFORMS)))
- )
-
pipeline_steps = []
info_box_step = print_disabled_projects_info_box_step()
@@ -2460,7 +2460,7 @@
try:
bazel_binary_path = download_bazel_binary(tmpdir, platform_name)
# One platform that we build on can generate binaries for multiple platforms, e.g.
- # the ubuntu1604 platform generates binaries for the "ubuntu1604" platform, but also
+ # the centos7 platform generates binaries for the "centos7" platform, but also
# for the generic "linux" platform.
for target_platform_name in platform["publish_binary"]:
execute_command(