diff --git a/.evergreen/generated_configs/functions.yml b/.evergreen/generated_configs/functions.yml index bd983abb3e..dcdde96e24 100644 --- a/.evergreen/generated_configs/functions.yml +++ b/.evergreen/generated_configs/functions.yml @@ -85,6 +85,26 @@ functions: params: directory: src + # Perf comment + create perf comment: + - command: subprocess.exec + params: + binary: bash + args: + - .evergreen/scripts/perf-pr-comment.sh + working_dir: src + include_expansions_in_env: + - version_id + - revision + - github_commit + - project + - TASK_NAME + - DRIVERS_TOOLS + - AWS_ACCESS_KEY_ID + - AWS_SECRET_ACCESS_KEY + - AWS_SESSION_TOKEN + type: test + # Run server run server: - command: subprocess.exec diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index 6e75170ec9..7592584e37 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -2426,7 +2426,11 @@ tasks: SUB_TEST_NAME: sync - func: attach benchmark test results - func: send dashboard data - tags: [perf] + - func: assume ec2 role + - func: create perf comment + vars: + TASK_NAME: perf-8.0-standalone-ssl + tags: [perf, pr] - name: perf-8.0-standalone-ssl-async commands: - func: run server diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 8dc328aab3..618082c090 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -76,6 +76,8 @@ EOT rm -rf $DRIVERS_TOOLS BRANCH=master ORG=mongodb-labs +BRANCH=PYTHON-5513 +ORG=blink1073 git clone --branch $BRANCH https://github.com/$ORG/drivers-evergreen-tools.git $DRIVERS_TOOLS cat < ${DRIVERS_TOOLS}/.env diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index 2d9c478d79..2e92edca9c 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -958,6 +958,12 @@ def create_perf_tasks(): task_name += "-async" tags = ["perf"] commands = [server_func, test_func, attach_func, send_func] + if ssl == "ssl" and sync == "sync": + tags.append("pr") + assume_func = FunctionCall(func="assume ec2 role") + comment_vars = dict(TASK_NAME=task_name) + comment_func = FunctionCall(func="create perf comment", vars=comment_vars) + commands.extend([assume_func, comment_func]) tasks.append(EvgTask(name=task_name, tags=tags, commands=commands)) return tasks @@ -1249,6 +1255,26 @@ def create_send_dashboard_data_func(): return "send dashboard data", cmds +def create_perf_comment_func(): + includes = [ + "version_id", + "revision", + "github_commit", + "project", + "TASK_NAME", + "DRIVERS_TOOLS", + "AWS_ACCESS_KEY_ID", + "AWS_SECRET_ACCESS_KEY", + "AWS_SESSION_TOKEN", + ] + cmds = [ + get_subprocess_exec( + include_expansions_in_env=includes, args=[".evergreen/scripts/perf-pr-comment.sh"] + ) + ] + return "create perf comment", cmds + + mod = sys.modules[__name__] write_variants_to_file(mod) write_tasks_to_file(mod) diff --git a/.evergreen/scripts/perf-pr-comment.sh b/.evergreen/scripts/perf-pr-comment.sh new file mode 100755 index 0000000000..28df9d53b0 --- /dev/null +++ b/.evergreen/scripts/perf-pr-comment.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Generate a PR comment with the perf report +#shellcheck disable=SC2154 + +set -eu + +export VERSION_ID=${version_id} +export BASE_SHA=${revision} +export HEAD_SHA=${github_commit} +export PROJECT=${project} + +if [ "${PROJECT}" != "mongo-python-driver" ]; then + echo "Skipping PR Perf comment" + exit 0 +fi + + +pushd $DRIVERS_TOOLS/.evergreen >/dev/null +CONTEXT="PyMongo triage context" TASK="${TASK_NAME}" VARIANT="performance-benchmarks" sh run-perf-comp.sh + +if [[ -n "${BASE_SHA+set}" && -n "${HEAD_SHA+set}" && "$BASE_SHA" != "$HEAD_SHA" ]]; then + # Make the PR comment. + target=github_app/create_or_modify_comment.sh + bash $target -m "## 🧪 Performance Results" -c "$(pwd)/perfcomp/perf-report.md" -h $HEAD_SHA -o "mongodb" -n $PROJECT + rm ./perfcomp/perf-report.md +else + # Skip comment if it isn't a PR run. + echo "Skipping Perf PR comment" +fi + +popd >/dev/null