From b35b2891cf44ed33afb2edd3ccc711730bc63f34 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 14 Dec 2025 10:47:03 -0600 Subject: [PATCH 1/5] PYTHON-5513 Use the perfcomp tool on pull requests --- .evergreen/generated_configs/functions.yml | 16 ++++++++++++ .evergreen/generated_configs/tasks.yml | 5 +++- .evergreen/scripts/configure-env.sh | 2 ++ .evergreen/scripts/generate_config.py | 21 +++++++++++++++ .evergreen/scripts/perf-pr-comment.sh | 30 ++++++++++++++++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100755 .evergreen/scripts/perf-pr-comment.sh diff --git a/.evergreen/generated_configs/functions.yml b/.evergreen/generated_configs/functions.yml index bd983abb3e..32847cfe79 100644 --- a/.evergreen/generated_configs/functions.yml +++ b/.evergreen/generated_configs/functions.yml @@ -85,6 +85,22 @@ 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 + type: test + # Run server run server: - command: subprocess.exec diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index e3f5492ac9..1c574ab36a 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -2334,7 +2334,10 @@ tasks: SUB_TEST_NAME: sync - func: attach benchmark test results - func: send dashboard data - tags: [perf] + - 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 5937d72964..3e4cfd696b 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -934,6 +934,11 @@ 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") + comment_vars = dict(TASK_NAME=task_name) + comment_func = FunctionCall(func="create perf comment", vars=comment_vars) + commands.append(comment_func) tasks.append(EvgTask(name=task_name, tags=tags, commands=commands)) return tasks @@ -1225,6 +1230,22 @@ 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", + ] + 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..be0d061c5a --- /dev/null +++ b/.evergreen/scripts/perf-pr-comment.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# Generate a PR comment with the perf report + +set -eu + +VERSION_ID=${version_id} +BASE_SHA=${revision} +HEAD_SHA=${github_commit} +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 From 3d41c57d4fcc08965d550ee5f8f1d0d594a3eb63 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 14 Dec 2025 13:24:20 -0600 Subject: [PATCH 2/5] pass DRIVERS_TOOLS --- .evergreen/generated_configs/functions.yml | 1 + .evergreen/scripts/generate_config.py | 8 +------- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/.evergreen/generated_configs/functions.yml b/.evergreen/generated_configs/functions.yml index 32847cfe79..3028b004f2 100644 --- a/.evergreen/generated_configs/functions.yml +++ b/.evergreen/generated_configs/functions.yml @@ -99,6 +99,7 @@ functions: - github_commit - project - TASK_NAME + - DRIVERS_TOOLS type: test # Run server diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index 3e4cfd696b..becb271b7e 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -1231,13 +1231,7 @@ def create_send_dashboard_data_func(): def create_perf_comment_func(): - includes = [ - "version_id", - "revision", - "github_commit", - "project", - "TASK_NAME", - ] + includes = ["version_id", "revision", "github_commit", "project", "TASK_NAME", "DRIVERS_TOOLS"] cmds = [ get_subprocess_exec( include_expansions_in_env=includes, args=[".evergreen/scripts/perf-pr-comment.sh"] From 5b54fa1c5ac89cfe67e38c85795cd4c967818ae9 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 15 Dec 2025 06:41:00 -0600 Subject: [PATCH 3/5] assume evergreen role --- .evergreen/generated_configs/functions.yml | 3 +++ .evergreen/generated_configs/tasks.yml | 1 + .evergreen/scripts/generate_config.py | 15 +++++++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.evergreen/generated_configs/functions.yml b/.evergreen/generated_configs/functions.yml index 3028b004f2..dcdde96e24 100644 --- a/.evergreen/generated_configs/functions.yml +++ b/.evergreen/generated_configs/functions.yml @@ -100,6 +100,9 @@ functions: - project - TASK_NAME - DRIVERS_TOOLS + - AWS_ACCESS_KEY_ID + - AWS_SECRET_ACCESS_KEY + - AWS_SESSION_TOKEN type: test # Run server diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index 1c574ab36a..942e661ed9 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -2334,6 +2334,7 @@ tasks: SUB_TEST_NAME: sync - func: attach benchmark test results - func: send dashboard data + - func: assume ec2 role - func: create perf comment vars: TASK_NAME: perf-8.0-standalone-ssl diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index becb271b7e..49615ce55b 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -936,9 +936,10 @@ def create_perf_tasks(): 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.append(comment_func) + commands.extend([assume_func, comment_func]) tasks.append(EvgTask(name=task_name, tags=tags, commands=commands)) return tasks @@ -1231,7 +1232,17 @@ def create_send_dashboard_data_func(): def create_perf_comment_func(): - includes = ["version_id", "revision", "github_commit", "project", "TASK_NAME", "DRIVERS_TOOLS"] + 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"] From 99368fada0fe237e350c1b3aa01ab937b411e129 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 15 Dec 2025 07:58:10 -0600 Subject: [PATCH 4/5] fix exports --- .evergreen/scripts/perf-pr-comment.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.evergreen/scripts/perf-pr-comment.sh b/.evergreen/scripts/perf-pr-comment.sh index be0d061c5a..903c568f53 100755 --- a/.evergreen/scripts/perf-pr-comment.sh +++ b/.evergreen/scripts/perf-pr-comment.sh @@ -3,10 +3,10 @@ set -eu -VERSION_ID=${version_id} -BASE_SHA=${revision} -HEAD_SHA=${github_commit} -PROJECT=${project} +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" From e7310893cc57880bda4f2ea3cac1d7f34ce12e0a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 17 Dec 2025 11:06:47 -0600 Subject: [PATCH 5/5] fix shellcheck --- .evergreen/scripts/perf-pr-comment.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/scripts/perf-pr-comment.sh b/.evergreen/scripts/perf-pr-comment.sh index 903c568f53..28df9d53b0 100755 --- a/.evergreen/scripts/perf-pr-comment.sh +++ b/.evergreen/scripts/perf-pr-comment.sh @@ -1,5 +1,6 @@ #!/bin/bash # Generate a PR comment with the perf report +#shellcheck disable=SC2154 set -eu