diff --git a/etc/evergreen_yml_components/configuration.yml b/etc/evergreen_yml_components/configuration.yml index e2725e6a0af..1b11ba8c33c 100644 --- a/etc/evergreen_yml_components/configuration.yml +++ b/etc/evergreen_yml_components/configuration.yml @@ -129,6 +129,7 @@ post: - func: "save unsymbolized stacktraces and local invocation" - func: "save mongo coredumps" - func: "generate hang analyzer tasks" + - func: "attach bazel invocation text" - func: "save failed unittests" - func: "save hang analyzer debugger files" - func: "save disk statistics" diff --git a/etc/evergreen_yml_components/definitions.yml b/etc/evergreen_yml_components/definitions.yml index afb7b1216c5..e7ea10b90bd 100644 --- a/etc/evergreen_yml_components/definitions.yml +++ b/etc/evergreen_yml_components/definitions.yml @@ -2965,6 +2965,37 @@ functions: display_name: Command To Run Failed Unit Tests on Workstation optional: true + "upload bazel build invocation": &upload_bazel_build_invocation + command: s3.put + params: + aws_key: ${aws_key} + aws_secret: ${aws_secret} + local_file: src/.bazel_build_invocation + remote_file: ${project}/${build_variant}/${revision}/unittests/${build_id}-${task_name}-${execution}/bazel_build_invocation.txt + bucket: mciuploads + permissions: public-read + content_type: text/plain + display_name: Build Command + optional: true + + "upload engflow link": &upload_engflow_link + command: s3.put + params: + aws_key: ${aws_key} + aws_secret: ${aws_secret} + local_file: src/.engflow_link + remote_file: ${project}/${build_variant}/${revision}/unittests/${build_id}-${task_name}-${execution}/engflow_link.txt + bucket: mciuploads + permissions: public-read + content_type: text/plain + display_name: EngFlow Link + optional: true + + "attach bazel invocation text": + - *f_expansions_write + - *upload_bazel_build_invocation + - *upload_engflow_link + "save failed unittests": - *f_expansions_write - *gather_failed_unittests_resmoke diff --git a/etc/evergreen_yml_components/tasks/compile_tasks.yml b/etc/evergreen_yml_components/tasks/compile_tasks.yml index d56c9eac439..e65b9029d6e 100644 --- a/etc/evergreen_yml_components/tasks/compile_tasks.yml +++ b/etc/evergreen_yml_components/tasks/compile_tasks.yml @@ -51,6 +51,7 @@ variables: - func: "save code coverage data" - func: "save mongo coredumps" - func: "generate hang analyzer tasks" + - func: "attach bazel invocation text" - func: "save failed unittests" - func: "save bazel headers" - func: "save bazel jvm dump" diff --git a/etc/evergreen_yml_components/tasks/compile_tasks_shared.yml b/etc/evergreen_yml_components/tasks/compile_tasks_shared.yml index 65e6cf6ce98..081573a3fad 100644 --- a/etc/evergreen_yml_components/tasks/compile_tasks_shared.yml +++ b/etc/evergreen_yml_components/tasks/compile_tasks_shared.yml @@ -25,6 +25,7 @@ variables: - func: "save code coverage data" - func: "save mongo coredumps" - func: "generate hang analyzer tasks" + - func: "attach bazel invocation text" - func: "save failed unittests" - func: "save bazel headers" - func: "save bazel jvm dump" diff --git a/etc/evergreen_yml_components/tasks/resmoke/server_divisions/clusters_and_integrations/tasks.yml b/etc/evergreen_yml_components/tasks/resmoke/server_divisions/clusters_and_integrations/tasks.yml index ba75fd6c8cd..2671114bb0a 100644 --- a/etc/evergreen_yml_components/tasks/resmoke/server_divisions/clusters_and_integrations/tasks.yml +++ b/etc/evergreen_yml_components/tasks/resmoke/server_divisions/clusters_and_integrations/tasks.yml @@ -144,6 +144,7 @@ variables: - func: "save code coverage data" - func: "save mongo coredumps" - func: "generate hang analyzer tasks" + - func: "attach bazel invocation text" - func: "save failed unittests" - func: "save hang analyzer debugger files" - func: "save disk statistics" diff --git a/evergreen/bazel_compile.sh b/evergreen/bazel_compile.sh index 924e437b566..27094ba0730 100755 --- a/evergreen/bazel_compile.sh +++ b/evergreen/bazel_compile.sh @@ -121,12 +121,17 @@ bazel_evergreen_shutils::ensure_server_and_print_pid "$BAZEL_BINARY" ALL_FLAGS="--verbose_failures ${LOCAL_ARG} ${bazel_args:-} ${bazel_compile_flags:-} ${task_compile_flags:-} --define=MONGO_VERSION=${version} ${patch_compile_flags:-}" echo "${ALL_FLAGS}" >.bazel_build_flags +# Save the entire bazel build invocation to attach to the task for re-running locally +echo "bazel build ${ALL_FLAGS} ${targets}" >.bazel_build_invocation + set +o errexit bazel_evergreen_shutils::retry_bazel_cmd 3 "$BAZEL_BINARY" \ build ${ALL_FLAGS} ${targets} RET=$? +bazel_evergreen_shutils::write_last_engflow_link + set -o errexit if [[ "$RET" -eq 124 ]]; then diff --git a/evergreen/bazel_evergreen_shutils.sh b/evergreen/bazel_evergreen_shutils.sh index 2a7e640fb2f..d9b752b5f64 100644 --- a/evergreen/bazel_evergreen_shutils.sh +++ b/evergreen/bazel_evergreen_shutils.sh @@ -229,6 +229,11 @@ bazel_evergreen_shutils::ensure_server_and_print_pid() { bazel_evergreen_shutils::print_bazel_server_pid "$BAZEL_BINARY" } +bazel_evergreen_shutils::write_last_engflow_link() { + engflow_link=$(grep -Eo 'https://[a-zA-Z0-9./?_=-]+' ${last_command_log_path} | grep 'sodalite\.cluster\.engflow\.com' | tail -n 1) + echo ${engflow_link} >.engflow_link +} + # Generic retry wrapper: # $1: attempts # $3: bazel binary @@ -245,6 +250,9 @@ bazel_evergreen_shutils::retry_bazel_cmd() { local timeout_str="$(bazel_evergreen_shutils::timeout_prefix "${evergreen_remote_exec:-}")" + # Get command log path for usage afterwards + last_command_log_path=$(bazel info command_log) + # Everything else is the Bazel subcommand + flags (and possibly redirections/pipes). # We *intentionally* keep it as raw words and reassemble to a single string for eval. local raw_rest=("$@") diff --git a/evergreen/bazel_test.sh b/evergreen/bazel_test.sh index d533e019e9b..145c178114e 100644 --- a/evergreen/bazel_test.sh +++ b/evergreen/bazel_test.sh @@ -59,6 +59,8 @@ if [[ "$RET" == "0" ]]; then fi fi +bazel_evergreen_shutils::write_last_engflow_link + set -o errexit # The --config flag needs to stay consistent between invocations to avoid evicting the previous results.