diff options
author | 2017-12-04 12:14:18 -0800 | |
---|---|---|
committer | 2017-12-04 12:14:18 -0800 | |
commit | 9a434371e2f582675880239c1d0d5d85081761d8 (patch) | |
tree | 935e23c511274413add36f5c175a6c2bee8afe1d /tools | |
parent | 4ca35636fe3c5d1e936d4cc03d18efb4be2824b8 (diff) | |
parent | c3b1e55a3c6af7c39ed1a6d7dea3463ba6194449 (diff) |
Merge branch 'master' into rq-fix
Diffstat (limited to 'tools')
-rw-r--r-- | tools/doxygen/Doxyfile.c++ | 1 | ||||
-rw-r--r-- | tools/doxygen/Doxyfile.c++.internal | 1 | ||||
-rw-r--r-- | tools/doxygen/Doxyfile.core | 1 | ||||
-rw-r--r-- | tools/doxygen/Doxyfile.core.internal | 2 | ||||
-rwxr-xr-x | tools/gce/linux_kokoro_performance_worker_init.sh | 13 | ||||
-rw-r--r-- | tools/internal_ci/helper_scripts/prepare_build_linux_perf_multilang_rc | 40 | ||||
-rw-r--r-- | tools/internal_ci/linux/grpc_bazel_on_foundry.sh | 55 | ||||
-rw-r--r-- | tools/internal_ci/linux/grpc_full_performance_master.cfg | 25 | ||||
-rwxr-xr-x | tools/internal_ci/linux/grpc_full_performance_master.sh | 59 | ||||
-rw-r--r-- | tools/interop_matrix/client_matrix.py | 17 | ||||
-rw-r--r-- | tools/run_tests/artifacts/distribtest_targets.py | 17 | ||||
-rw-r--r-- | tools/run_tests/generated/sources_and_headers.json | 37 | ||||
-rw-r--r-- | tools/run_tests/generated/tests.json | 48 | ||||
-rwxr-xr-x | tools/run_tests/run_performance_tests.py | 12 |
14 files changed, 259 insertions, 69 deletions
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++ index bd641c2542..e62278cb9f 100644 --- a/tools/doxygen/Doxyfile.c++ +++ b/tools/doxygen/Doxyfile.c++ @@ -913,7 +913,6 @@ include/grpc/support/atm_windows.h \ include/grpc/support/avl.h \ include/grpc/support/cmdline.h \ include/grpc/support/cpu.h \ -include/grpc/support/histogram.h \ include/grpc/support/host_port.h \ include/grpc/support/log.h \ include/grpc/support/log_windows.h \ diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 09f668d847..d09b325c97 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -914,7 +914,6 @@ include/grpc/support/atm_windows.h \ include/grpc/support/avl.h \ include/grpc/support/cmdline.h \ include/grpc/support/cpu.h \ -include/grpc/support/histogram.h \ include/grpc/support/host_port.h \ include/grpc/support/log.h \ include/grpc/support/log_windows.h \ diff --git a/tools/doxygen/Doxyfile.core b/tools/doxygen/Doxyfile.core index 97bb43a423..6ce9041747 100644 --- a/tools/doxygen/Doxyfile.core +++ b/tools/doxygen/Doxyfile.core @@ -853,7 +853,6 @@ include/grpc/support/atm_windows.h \ include/grpc/support/avl.h \ include/grpc/support/cmdline.h \ include/grpc/support/cpu.h \ -include/grpc/support/histogram.h \ include/grpc/support/host_port.h \ include/grpc/support/log.h \ include/grpc/support/log_windows.h \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 28b7d396e0..1aff0075a6 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -853,7 +853,6 @@ include/grpc/support/atm_windows.h \ include/grpc/support/avl.h \ include/grpc/support/cmdline.h \ include/grpc/support/cpu.h \ -include/grpc/support/histogram.h \ include/grpc/support/host_port.h \ include/grpc/support/log.h \ include/grpc/support/log_windows.h \ @@ -1294,7 +1293,6 @@ src/core/lib/support/env_posix.cc \ src/core/lib/support/env_windows.cc \ src/core/lib/support/fork.cc \ src/core/lib/support/fork.h \ -src/core/lib/support/histogram.cc \ src/core/lib/support/host_port.cc \ src/core/lib/support/log.cc \ src/core/lib/support/log_android.cc \ diff --git a/tools/gce/linux_kokoro_performance_worker_init.sh b/tools/gce/linux_kokoro_performance_worker_init.sh index ac3d39383b..460f639f9f 100755 --- a/tools/gce/linux_kokoro_performance_worker_init.sh +++ b/tools/gce/linux_kokoro_performance_worker_init.sh @@ -114,6 +114,19 @@ sudo apt-get update sudo apt-get install -y dotnet-dev-1.0.0-preview2.1-003155 sudo apt-get install -y dotnet-dev-1.0.1 +# C# 1.0.4 SDK +curl -O https://download.microsoft.com/download/2/4/A/24A06858-E8AC-469B-8AE6-D0CEC9BA982A/dotnet-ubuntu.16.04-x64.1.0.5.tar.gz +sudo mkdir -p /opt/dotnet +sudo tar zxf dotnet-ubuntu.16.04-x64.1.0.5.tar.gz -C /opt/dotnet +sudo ln -s /opt/dotnet/dotnet /usr/local/bin + +# C# .NET dependencies +wget http://security.ubuntu.com/ubuntu/pool/main/i/icu/libicu52_52.1-8ubuntu0.2_amd64.deb +sudo dpkg -i libicu52_52.1-8ubuntu0.2_amd64.deb +wget http://security.ubuntu.com/ubuntu/pool/main/i/icu/libicu55_55.1-7ubuntu0.3_amd64.deb +sudo dpkg -i libicu55_55.1-7ubuntu0.3_amd64.deb +sudo apt-get update && sudo apt-get install -y libicu55 + # Ruby dependencies gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 curl -sSL https://get.rvm.io | bash -s stable --ruby diff --git a/tools/internal_ci/helper_scripts/prepare_build_linux_perf_multilang_rc b/tools/internal_ci/helper_scripts/prepare_build_linux_perf_multilang_rc new file mode 100644 index 0000000000..f1031aedf3 --- /dev/null +++ b/tools/internal_ci/helper_scripts/prepare_build_linux_perf_multilang_rc @@ -0,0 +1,40 @@ +#!/bin/bash +# Copyright 2017 gRPC 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. + +# Source this rc script to prepare the environment for linux perf builds + +# Need to increase open files limit and size for perf test +ulimit -n 32768 +ulimit -c unlimited + +# Download non-core gRPC repos +git clone --recursive https://github.com/grpc/grpc-go ./../grpc-go +git clone --recursive https://github.com/grpc/grpc-java ./../grpc-java +git clone --recursive https://github.com/grpc/grpc-node ./../grpc-node + +sudo pip install tabulate + +# Set up Ruby +export PATH="$HOME/.rbenv/bin:$PATH" +eval "$(rbenv init -)" +gem list bundler +gem install bundler --no-ri --no-rdoc + +# Allow SSH to Kokoro performance workers without explicit key verification +gsutil cp gs://grpc-testing-secrets/grpc_kokoro_performance_ssh_keys/id_rsa ~/.ssh +echo -e 'Host grpc-kokoro-performance*\n\tStrictHostKeyChecking no' >> ~/.ssh/config +chmod 600 ~/.ssh/id_rsa ~/.ssh/config + +git submodule update --init diff --git a/tools/internal_ci/linux/grpc_bazel_on_foundry.sh b/tools/internal_ci/linux/grpc_bazel_on_foundry.sh new file mode 100644 index 0000000000..e328be8aab --- /dev/null +++ b/tools/internal_ci/linux/grpc_bazel_on_foundry.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +# Copyright 2017 gRPC 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. + +set -ex + +# A temporary solution to give Kokoro credentials. +# The file name 4321_grpc-testing-service needs to match auth_credential in +# the build config. +mkdir -p ${KOKORO_KEYSTORE_DIR} +cp ${KOKORO_GFILE_DIR}/GrpcTesting-d0eeee2db331.json ${KOKORO_KEYSTORE_DIR}/4321_grpc-testing-service + +mkdir -p /tmpfs/tmp/bazel-canary +ln -f "${KOKORO_GFILE_DIR}/bazel-canary" /tmpfs/tmp/bazel-canary/bazel +chmod 755 "${KOKORO_GFILE_DIR}/bazel-canary" +export PATH="/tmpfs/tmp/bazel-canary:${PATH}" +# This should show /tmpfs/tmp/bazel-canary/bazel +which bazel +chmod +x "${KOKORO_GFILE_DIR}/bazel_wrapper.py" + +# change to grpc repo root +cd $(dirname $0)/../../.. + +source tools/internal_ci/helper_scripts/prepare_build_linux_rc + +"${KOKORO_GFILE_DIR}/bazel_wrapper.py" \ + --host_jvm_args=-Dbazel.DigestFunction=SHA1 \ + test --jobs="50" \ + --test_timeout="300,450,1200,3600" \ + --test_output=errors \ + --verbose_failures=true \ + --keep_going \ + --remote_accept_cached=true \ + --spawn_strategy=remote \ + --remote_local_fallback=false \ + --remote_timeout=3600 \ + --strategy=Javac=remote \ + --strategy=Closure=remote \ + --genrule_strategy=remote \ + --experimental_strict_action_env=true \ + --experimental_remote_platform_override='properties:{name:"container-image" value:"docker://gcr.io/asci-toolchain/nosla-debian8-clang-fl@sha256:aa20628a902f06a11a015caa94b0432eb60690de2d2525bd046b9eea046f5d8a" }' \ + --crosstool_top=@bazel_toolchains//configs/debian8_clang/0.2.0/bazel_0.7.0:toolchain \ + --define GRPC_PORT_ISOLATED_RUNTIME=1 \ + -- //test/... diff --git a/tools/internal_ci/linux/grpc_full_performance_master.cfg b/tools/internal_ci/linux/grpc_full_performance_master.cfg new file mode 100644 index 0000000000..8852130a13 --- /dev/null +++ b/tools/internal_ci/linux/grpc_full_performance_master.cfg @@ -0,0 +1,25 @@ +# Copyright 2017 gRPC 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. + +# Config file for the internal CI (in protobuf text format) + +# Location of the continuous shell script in repository. +build_file: "grpc/tools/internal_ci/linux/grpc_full_performance_master.sh" +timeout_mins: 600 +action { + define_artifacts { + regex: "**/*sponge_log.xml" + regex: "**/perf_reports/**" + } +} diff --git a/tools/internal_ci/linux/grpc_full_performance_master.sh b/tools/internal_ci/linux/grpc_full_performance_master.sh new file mode 100755 index 0000000000..18468395f6 --- /dev/null +++ b/tools/internal_ci/linux/grpc_full_performance_master.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +# Copyright 2017 gRPC 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. +set -ex + +# Enter the gRPC repo root +cd $(dirname $0)/../../.. + +source tools/internal_ci/helper_scripts/prepare_build_linux_perf_multilang_rc + +# run 8core client vs 8core server +tools/run_tests/run_performance_tests.py \ + -l c++ csharp ruby java python go php7 php7_protobuf_c \ + --netperf \ + --category scalable \ + --remote_worker_host grpc-kokoro-performance-server-8core grpc-kokoro-performance-client-8core grpc-kokoro-performance-client2-8core \ + -u kbuilder \ + --bq_result_table performance_test.kokoro_performance_experiment \ + --xml_report reports/8core/sponge_log.xml \ + || EXIT_CODE=1 + +# prevent pushing leftover build files to remote hosts in the next step. +git clean -fdxq -e reports + +# scalability with 32cores (and upload to a different BQ table) +tools/run_tests/run_performance_tests.py \ + -l c++ java csharp go \ + --netperf \ + --category scalable \ + --remote_worker_host grpc-kokoro-performance-server-32core grpc-kokoro-performance-client-32core grpc-kokoro-performance-client2-32core \ + -u kbuilder \ + --bq_result_table performance_test.kokoro_performance_experiment_32core \ + --xml_report reports/32core/sponge_log.xml \ + || EXIT_CODE=1 + +# prevent pushing leftover build files to remote hosts in the next step. +git clean -fdxq -e reports + +# selected scenarios on Windows +tools/run_tests/run_performance_tests.py \ + -l csharp \ + --category scalable \ + --remote_worker_host grpc-kokoro-performance-windows1 grpc-kokoro-performance-windows2 \ + --bq_result_table performance_test.kokoro_performance_experiment_windows \ + --xml_report reports/windows/sponge_log.xml \ + || EXIT_CODE=1 + +exit $EXIT_CODE diff --git a/tools/interop_matrix/client_matrix.py b/tools/interop_matrix/client_matrix.py index ee24ae7b28..c9a4996029 100644 --- a/tools/interop_matrix/client_matrix.py +++ b/tools/interop_matrix/client_matrix.py @@ -78,23 +78,6 @@ LANG_RELEASE_MATRIX = { 'v1.3.9', 'v1.4.2', 'v1.6.6', - ], - 'python': [ - 'v1.0.x', - 'v1.1.4', - 'v1.2.5', - 'v1.3.9', - 'v1.4.2', - 'v1.6.6', - 'v1.7.2', - ], - 'python': [ - 'v1.0.x', - 'v1.1.4', - 'v1.2.5', - 'v1.3.9', - 'v1.4.2', - 'v1.6.6', 'v1.7.2', ], 'node': [ diff --git a/tools/run_tests/artifacts/distribtest_targets.py b/tools/run_tests/artifacts/distribtest_targets.py index 9959651b6c..7ba0e0ebc9 100644 --- a/tools/run_tests/artifacts/distribtest_targets.py +++ b/tools/run_tests/artifacts/distribtest_targets.py @@ -49,7 +49,8 @@ def create_docker_jobspec(name, dockerfile_dir, shell_command, environ={}, def create_jobspec(name, cmdline, environ=None, shell=False, flake_retries=0, timeout_retries=0, - use_workspace=False): + use_workspace=False, + timeout_seconds=10*60): """Creates jobspec.""" environ = environ.copy() if use_workspace: @@ -60,7 +61,7 @@ def create_jobspec(name, cmdline, environ=None, shell=False, cmdline=cmdline, environ=environ, shortname='distribtest.%s' % (name), - timeout_seconds=10*60, + timeout_seconds=timeout_seconds, flake_retries=flake_retries, timeout_retries=timeout_retries, shell=shell) @@ -214,7 +215,10 @@ class CppDistribTest(object): """Tests Cpp make intall by building examples.""" def __init__(self, platform, arch, docker_suffix=None, testcase=None): - self.name = 'cpp_%s_%s_%s_%s' % (platform, arch, docker_suffix, testcase) + if platform == 'linux': + self.name = 'cpp_%s_%s_%s_%s' % (platform, arch, docker_suffix, testcase) + else: + self.name = 'cpp_%s_%s_%s' % (platform, arch, testcase) self.platform = platform self.arch = arch self.docker_suffix = docker_suffix @@ -231,6 +235,12 @@ class CppDistribTest(object): self.docker_suffix, self.arch), 'test/distrib/cpp/run_distrib_test_%s.sh' % self.testcase) + elif self.platform == 'windows': + return create_jobspec(self.name, + ['test\\distrib\\cpp\\run_distrib_test_%s.bat' % self.testcase], + environ={}, + timeout_seconds=30*60, + use_workspace=True) else: raise Exception("Not supported yet.") @@ -242,6 +252,7 @@ def targets(): """Gets list of supported targets""" return [CppDistribTest('linux', 'x64', 'jessie', 'routeguide'), CppDistribTest('linux', 'x64', 'jessie', 'cmake'), + CppDistribTest('windows', 'x86', testcase='cmake'), CSharpDistribTest('linux', 'x64', 'wheezy'), CSharpDistribTest('linux', 'x64', 'jessie'), CSharpDistribTest('linux', 'x86', 'jessie'), diff --git a/tools/run_tests/generated/sources_and_headers.json b/tools/run_tests/generated/sources_and_headers.json index c868acf8d3..ae7ddb2475 100644 --- a/tools/run_tests/generated/sources_and_headers.json +++ b/tools/run_tests/generated/sources_and_headers.json @@ -711,21 +711,6 @@ "headers": [], "is_filegroup": false, "language": "c", - "name": "gpr_histogram_test", - "src": [ - "test/core/support/histogram_test.cc" - ], - "third_party": false, - "type": "target" - }, - { - "deps": [ - "gpr", - "gpr_test_util" - ], - "headers": [], - "is_filegroup": false, - "language": "c", "name": "gpr_host_port_test", "src": [ "test/core/support/host_port_test.cc" @@ -1245,6 +1230,21 @@ { "deps": [ "gpr", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c", + "name": "histogram_test", + "src": [ + "test/core/util/histogram_test.cc" + ], + "third_party": false, + "type": "target" + }, + { + "deps": [ + "gpr", "gpr_test_util", "grpc", "grpc_test_util" @@ -7766,7 +7766,6 @@ "src/core/lib/support/env_posix.cc", "src/core/lib/support/env_windows.cc", "src/core/lib/support/fork.cc", - "src/core/lib/support/histogram.cc", "src/core/lib/support/host_port.cc", "src/core/lib/support/log.cc", "src/core/lib/support/log_android.cc", @@ -7813,7 +7812,6 @@ "include/grpc/support/avl.h", "include/grpc/support/cmdline.h", "include/grpc/support/cpu.h", - "include/grpc/support/histogram.h", "include/grpc/support/host_port.h", "include/grpc/support/log.h", "include/grpc/support/log_windows.h", @@ -7863,7 +7861,6 @@ "include/grpc/support/avl.h", "include/grpc/support/cmdline.h", "include/grpc/support/cpu.h", - "include/grpc/support/histogram.h", "include/grpc/support/host_port.h", "include/grpc/support/log.h", "include/grpc/support/log_windows.h", @@ -8928,6 +8925,7 @@ "test/core/iomgr/endpoint_tests.h", "test/core/util/debugger_macros.h", "test/core/util/grpc_profiler.h", + "test/core/util/histogram.h", "test/core/util/memory_counters.h", "test/core/util/mock_endpoint.h", "test/core/util/parse_hexstring.h", @@ -8956,6 +8954,8 @@ "test/core/util/debugger_macros.h", "test/core/util/grpc_profiler.cc", "test/core/util/grpc_profiler.h", + "test/core/util/histogram.cc", + "test/core/util/histogram.h", "test/core/util/memory_counters.cc", "test/core/util/memory_counters.h", "test/core/util/mock_endpoint.cc", @@ -8966,6 +8966,7 @@ "test/core/util/passthru_endpoint.h", "test/core/util/port.cc", "test/core/util/port.h", + "test/core/util/port_isolated_runtime_environment.cc", "test/core/util/port_server_client.cc", "test/core/util/port_server_client.h", "test/core/util/slice_splitter.cc", diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json index 929ed15918..ce698cb709 100644 --- a/tools/run_tests/generated/tests.json +++ b/tools/run_tests/generated/tests.json @@ -854,30 +854,6 @@ "flaky": false, "gtest": false, "language": "c", - "name": "gpr_histogram_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "uses_polling": false - }, - { - "args": [], - "benchmark": false, - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": false, - "language": "c", "name": "gpr_host_port_test", "platforms": [ "linux", @@ -1538,6 +1514,30 @@ "flaky": false, "gtest": false, "language": "c", + "name": "histogram_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "uses_polling": false + }, + { + "args": [], + "benchmark": false, + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": false, + "language": "c", "name": "hpack_parser_test", "platforms": [ "linux", diff --git a/tools/run_tests/run_performance_tests.py b/tools/run_tests/run_performance_tests.py index 1bbab9e894..aa305be466 100755 --- a/tools/run_tests/run_performance_tests.py +++ b/tools/run_tests/run_performance_tests.py @@ -196,7 +196,7 @@ def archive_repo(languages): def prepare_remote_hosts(hosts, prepare_local=False): """Prepares remote hosts (and maybe prepare localhost as well).""" - prepare_timeout = 5*60 + prepare_timeout = 10*60 prepare_jobs = [] for host in hosts: user_at_host = '%s@%s' % (_REMOTE_HOST_USERNAME, host) @@ -229,6 +229,8 @@ def prepare_remote_hosts(hosts, prepare_local=False): def build_on_remote_hosts(hosts, languages=scenario_config.LANGUAGES.keys(), build_local=False): """Builds performance worker on remote hosts (and maybe also locally).""" build_timeout = 15*60 + # Kokoro VMs (which are local only) do not have caching, so they need more time to build + local_build_timeout = 30*60 build_jobs = [] for host in hosts: user_at_host = '%s@%s' % (_REMOTE_HOST_USERNAME, host) @@ -245,7 +247,7 @@ def build_on_remote_hosts(hosts, languages=scenario_config.LANGUAGES.keys(), bui cmdline=['tools/run_tests/performance/build_performance.sh'] + languages, shortname='local_build', environ = {'CONFIG': 'opt'}, - timeout_seconds=build_timeout)) + timeout_seconds=local_build_timeout)) jobset.message('START', 'Building.', do_newline=True) num_failures, _ = jobset.run( build_jobs, newline_on_success=True, maxjobs=10) @@ -483,9 +485,15 @@ def main(): 'generating flamegraphs (e.g., "--perf_args=stat ...")')) argp.add_argument('-f', '--flame_graph_reports', default='perf_reports', type=str, help='Name of directory to output flame graph profiles to, if any are created.') + argp.add_argument('-u', '--remote_host_username', default='', type=str, + help='Use a username that isn\'t "Jenkins" to SSH into remote workers.') args = argp.parse_args() + global _REMOTE_HOST_USERNAME + if args.remote_host_username: + _REMOTE_HOST_USERNAME = args.remote_host_username + languages = set(scenario_config.LANGUAGES[l] for l in itertools.chain.from_iterable( six.iterkeys(scenario_config.LANGUAGES) if x == 'all' |