From 596ce5c43f028168944694bd5f3218f495b9e730 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Fri, 17 Apr 2026 11:23:20 -0400 Subject: [PATCH 01/10] feat(bigframes): add specific build script for doctest to control execution --- .../presubmit/presubmit-doctest-bigframes.cfg | 6 +++ packages/bigframes/scripts/run_doctest.sh | 42 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100755 packages/bigframes/scripts/run_doctest.sh diff --git a/.kokoro/presubmit/presubmit-doctest-bigframes.cfg b/.kokoro/presubmit/presubmit-doctest-bigframes.cfg index 7f514f762f3a..c8298623ff9d 100644 --- a/.kokoro/presubmit/presubmit-doctest-bigframes.cfg +++ b/.kokoro/presubmit/presubmit-doctest-bigframes.cfg @@ -9,4 +9,10 @@ env_vars: { env_vars: { key: "GOOGLE_CLOUD_PROJECT" value: "bigframes-testing" +} + +# Override the build file to only run for bigframes. +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/google-cloud-python/packages/bigframes/scripts/run_doctest.sh" } \ No newline at end of file diff --git a/packages/bigframes/scripts/run_doctest.sh b/packages/bigframes/scripts/run_doctest.sh new file mode 100755 index 000000000000..dc758fdb59a0 --- /dev/null +++ b/packages/bigframes/scripts/run_doctest.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# `-e` enables the script to automatically fail when a command fails +# `-o pipefail` sets the exit code to non-zero if any command fails, +# or zero if all commands in the pipeline exit successfully. +set -eo pipefail + +# Disable buffering, so that the logs stream through. +export PYTHONUNBUFFERED=1 + +# Assume we are running from the repo root or we need to find it. +# If this script is in packages/bigframes/scripts/run_doctest.sh, +# then repo root is 3 levels up. +export PROJECT_ROOT=$(realpath $(dirname "${BASH_SOURCE[0]}")/../../..) +cd "$PROJECT_ROOT" + +# This is needed in order for `git diff` to succeed +git config --global --add safe.directory $(realpath .) + +package_name="bigframes" +package_path="packages/${package_name}" + +# Determine if we should skip based on git diff +files_to_check="${package_path}" + +echo "checking changes with 'git diff ${KOKORO_GITHUB_PULL_REQUEST_TARGET_BRANCH}...${KOKORO_GITHUB_PULL_REQUEST_COMMIT} -- ${files_to_check}'" +set +e +package_modified=$(git diff "${KOKORO_GITHUB_PULL_REQUEST_TARGET_BRANCH}...${KOKORO_GITHUB_PULL_REQUEST_COMMIT}" -- ${files_to_check} | wc -l) +set -e + +if [[ "${package_modified}" -gt 0 || "$KOKORO_BUILD_ARTIFACTS_SUBDIR" == *"continuous"* ]]; then + echo "------------------------------------------------------------" + echo "Running doctest for: ${package_name}" + echo "------------------------------------------------------------" + + export GOOGLE_CLOUD_PROJECT="bigframes-testing" + export NOX_SESSION="cleanup doctest" + + cd "${package_path}" + python3 -m nox -s "${NOX_SESSION}" +else + echo "No changes in ${package_name} and not a continuous build, skipping." +fi From 397fdd88798cffd8406a740d257946493792c004 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Fri, 17 Apr 2026 15:36:11 -0400 Subject: [PATCH 02/10] fix(bigframes): apply reviewer feedback to run_doctest.sh --- packages/bigframes/scripts/run_doctest.sh | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/bigframes/scripts/run_doctest.sh b/packages/bigframes/scripts/run_doctest.sh index dc758fdb59a0..089c38bba246 100755 --- a/packages/bigframes/scripts/run_doctest.sh +++ b/packages/bigframes/scripts/run_doctest.sh @@ -10,11 +10,11 @@ export PYTHONUNBUFFERED=1 # Assume we are running from the repo root or we need to find it. # If this script is in packages/bigframes/scripts/run_doctest.sh, # then repo root is 3 levels up. -export PROJECT_ROOT=$(realpath $(dirname "${BASH_SOURCE[0]}")/../../..) +export PROJECT_ROOT=$(realpath "$(dirname "${BASH_SOURCE[0]}")/../../..") cd "$PROJECT_ROOT" # This is needed in order for `git diff` to succeed -git config --global --add safe.directory $(realpath .) +git config --global --add safe.directory "$(realpath .)" package_name="bigframes" package_path="packages/${package_name}" @@ -22,10 +22,14 @@ package_path="packages/${package_name}" # Determine if we should skip based on git diff files_to_check="${package_path}" -echo "checking changes with 'git diff ${KOKORO_GITHUB_PULL_REQUEST_TARGET_BRANCH}...${KOKORO_GITHUB_PULL_REQUEST_COMMIT} -- ${files_to_check}'" -set +e -package_modified=$(git diff "${KOKORO_GITHUB_PULL_REQUEST_TARGET_BRANCH}...${KOKORO_GITHUB_PULL_REQUEST_COMMIT}" -- ${files_to_check} | wc -l) -set -e +if [[ -n "${KOKORO_GITHUB_PULL_REQUEST_TARGET_BRANCH}" && -n "${KOKORO_GITHUB_PULL_REQUEST_COMMIT}" ]]; then + echo "checking changes with 'git diff ${KOKORO_GITHUB_PULL_REQUEST_TARGET_BRANCH}...${KOKORO_GITHUB_PULL_REQUEST_COMMIT} -- ${files_to_check}'" + set +e + package_modified=$(git diff "${KOKORO_GITHUB_PULL_REQUEST_TARGET_BRANCH}...${KOKORO_GITHUB_PULL_REQUEST_COMMIT}" -- "${files_to_check}" | wc -l) + set -e +else + package_modified=0 +fi if [[ "${package_modified}" -gt 0 || "$KOKORO_BUILD_ARTIFACTS_SUBDIR" == *"continuous"* ]]; then echo "------------------------------------------------------------" @@ -33,10 +37,8 @@ if [[ "${package_modified}" -gt 0 || "$KOKORO_BUILD_ARTIFACTS_SUBDIR" == *"conti echo "------------------------------------------------------------" export GOOGLE_CLOUD_PROJECT="bigframes-testing" - export NOX_SESSION="cleanup doctest" - cd "${package_path}" - python3 -m nox -s "${NOX_SESSION}" + python3 -m nox -s cleanup -s doctest else echo "No changes in ${package_name} and not a continuous build, skipping." fi From 0b369bc420fe2c6561e6cca699a34e800db36832 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Fri, 17 Apr 2026 15:59:59 -0400 Subject: [PATCH 03/10] feat(bigframes): enable doctest session by removing skip --- packages/bigframes/noxfile.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/bigframes/noxfile.py b/packages/bigframes/noxfile.py index 537d417e9145..3b636399fd0c 100644 --- a/packages/bigframes/noxfile.py +++ b/packages/bigframes/noxfile.py @@ -392,9 +392,6 @@ def system_noextras(session: nox.sessions.Session): @nox.session(python="3.12") def doctest(session: nox.sessions.Session): """Run the system test suite.""" - session.skip( - "Temporary skip to enable a PR merge. Remove skip as part of closing https://github.com/googleapis/google-cloud-python/issues/16489" - ) run_system( session=session, From 4f1854c9ff79a0a8a2004aa448cd8205df3a78c5 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Fri, 17 Apr 2026 16:13:30 -0400 Subject: [PATCH 04/10] fix(bigframes): add credential setup and separate nox sessions in run_doctest.sh --- packages/bigframes/scripts/run_doctest.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/bigframes/scripts/run_doctest.sh b/packages/bigframes/scripts/run_doctest.sh index 089c38bba246..cddbcc0497da 100755 --- a/packages/bigframes/scripts/run_doctest.sh +++ b/packages/bigframes/scripts/run_doctest.sh @@ -36,9 +36,16 @@ if [[ "${package_modified}" -gt 0 || "$KOKORO_BUILD_ARTIFACTS_SUBDIR" == *"conti echo "Running doctest for: ${package_name}" echo "------------------------------------------------------------" + # Ensure credentials are set for system tests in Kokoro + if [[ -z "${GOOGLE_APPLICATION_CREDENTIALS}" && -f "${KOKORO_GFILE_DIR}/service-account.json" ]]; then + export GOOGLE_APPLICATION_CREDENTIALS="${KOKORO_GFILE_DIR}/service-account.json" + fi + export GOOGLE_CLOUD_PROJECT="bigframes-testing" cd "${package_path}" - python3 -m nox -s cleanup -s doctest + + python3 -m nox -s cleanup + python3 -m nox -s doctest else echo "No changes in ${package_name} and not a continuous build, skipping." fi From 4c593a87c58aa3931e4b5a2e0c12e6f4cc328146 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Fri, 17 Apr 2026 16:25:46 -0400 Subject: [PATCH 05/10] fix(bigframes): make cleanup non-fatal and use professional language in run_doctest.sh --- packages/bigframes/scripts/run_doctest.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bigframes/scripts/run_doctest.sh b/packages/bigframes/scripts/run_doctest.sh index cddbcc0497da..2ac12033251f 100755 --- a/packages/bigframes/scripts/run_doctest.sh +++ b/packages/bigframes/scripts/run_doctest.sh @@ -44,7 +44,7 @@ if [[ "${package_modified}" -gt 0 || "$KOKORO_BUILD_ARTIFACTS_SUBDIR" == *"conti export GOOGLE_CLOUD_PROJECT="bigframes-testing" cd "${package_path}" - python3 -m nox -s cleanup + python3 -m nox -s cleanup || echo "Warning: Cleanup session failed, proceeding to doctest." python3 -m nox -s doctest else echo "No changes in ${package_name} and not a continuous build, skipping." From 7d63adb231e09c00019b3ce42ed7cb5305974426 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Fri, 17 Apr 2026 18:39:52 -0400 Subject: [PATCH 06/10] fix(bigframes): ignore dtype in divmod tests due to pandas instability --- packages/bigframes/tests/system/small/test_series.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bigframes/tests/system/small/test_series.py b/packages/bigframes/tests/system/small/test_series.py index 5de7ce4256f9..0ac8f1eb61e9 100644 --- a/packages/bigframes/tests/system/small/test_series.py +++ b/packages/bigframes/tests/system/small/test_series.py @@ -1234,7 +1234,7 @@ def test_divmods_series(scalars_dfs, col_x, col_y, method): # BigQuery's mod functions return NUMERIC values for non-INT64 inputs. if bf_div_result.dtype == pd.Int64Dtype(): bigframes.testing.utils.assert_series_equal( - pd_div_result, bf_div_result.to_pandas() + pd_div_result, bf_div_result.to_pandas(), check_dtype=False ) else: bigframes.testing.utils.assert_series_equal( @@ -1279,7 +1279,7 @@ def test_divmods_scalars(scalars_dfs, col_x, other, method): # BigQuery's mod functions return NUMERIC values for non-INT64 inputs. if bf_div_result.dtype == pd.Int64Dtype(): bigframes.testing.utils.assert_series_equal( - pd_div_result, bf_div_result.to_pandas() + pd_div_result, bf_div_result.to_pandas(), check_dtype=False ) else: bigframes.testing.utils.assert_series_equal( From b94c5bb9e01878b17ca6e88beb5a287d675d53e3 Mon Sep 17 00:00:00 2001 From: Chalmer Lowe Date: Mon, 20 Apr 2026 05:29:02 -0400 Subject: [PATCH 07/10] testing an element of the configuration --- packages/bigframes/scripts/run_doctest.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/bigframes/scripts/run_doctest.sh b/packages/bigframes/scripts/run_doctest.sh index 2ac12033251f..a7a8b7169773 100755 --- a/packages/bigframes/scripts/run_doctest.sh +++ b/packages/bigframes/scripts/run_doctest.sh @@ -44,8 +44,9 @@ if [[ "${package_modified}" -gt 0 || "$KOKORO_BUILD_ARTIFACTS_SUBDIR" == *"conti export GOOGLE_CLOUD_PROJECT="bigframes-testing" cd "${package_path}" - python3 -m nox -s cleanup || echo "Warning: Cleanup session failed, proceeding to doctest." - python3 -m nox -s doctest + # python3 -m nox -s cleanup || echo "Warning: Cleanup session failed, proceeding to doctest." + # python3 -m nox -s doctest + echo "DINOSAURS" else echo "No changes in ${package_name} and not a continuous build, skipping." fi From c23c949160a8ffd2382ccf9c36967f5579a750c2 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Mon, 20 Apr 2026 05:45:17 -0400 Subject: [PATCH 08/10] Adds comment to noxfile to confirm non-activation of non-bigframes packages --- packages/sqlalchemy-bigquery/noxfile.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sqlalchemy-bigquery/noxfile.py b/packages/sqlalchemy-bigquery/noxfile.py index 615ac0c30f5c..610bb123d245 100644 --- a/packages/sqlalchemy-bigquery/noxfile.py +++ b/packages/sqlalchemy-bigquery/noxfile.py @@ -142,6 +142,8 @@ def wrapper(*args, **kwargs): return wrapper +# COMMENT ADDED FOR TESTING PURPOSES ONLY. REMOVE BEFORE MERGE. + nox.options.sessions = [ "unit", From 637b4af4b0e7915a198f19581954d6c4c534b689 Mon Sep 17 00:00:00 2001 From: Chalmer Lowe Date: Tue, 21 Apr 2026 11:40:46 -0400 Subject: [PATCH 09/10] Remove comments from two lines in script. --- packages/bigframes/scripts/run_doctest.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bigframes/scripts/run_doctest.sh b/packages/bigframes/scripts/run_doctest.sh index a7a8b7169773..0d76df02bb22 100755 --- a/packages/bigframes/scripts/run_doctest.sh +++ b/packages/bigframes/scripts/run_doctest.sh @@ -44,8 +44,8 @@ if [[ "${package_modified}" -gt 0 || "$KOKORO_BUILD_ARTIFACTS_SUBDIR" == *"conti export GOOGLE_CLOUD_PROJECT="bigframes-testing" cd "${package_path}" - # python3 -m nox -s cleanup || echo "Warning: Cleanup session failed, proceeding to doctest." - # python3 -m nox -s doctest + python3 -m nox -s cleanup || echo "Warning: Cleanup session failed, proceeding to doctest." + python3 -m nox -s doctest echo "DINOSAURS" else echo "No changes in ${package_name} and not a continuous build, skipping." From b60e7036764d2098f215b56982a9f2f57be1b7be Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Tue, 21 Apr 2026 14:10:05 -0400 Subject: [PATCH 10/10] updates linting --- packages/sqlalchemy-bigquery/noxfile.py | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/sqlalchemy-bigquery/noxfile.py b/packages/sqlalchemy-bigquery/noxfile.py index 610bb123d245..dd68b8cf67e5 100644 --- a/packages/sqlalchemy-bigquery/noxfile.py +++ b/packages/sqlalchemy-bigquery/noxfile.py @@ -142,6 +142,7 @@ def wrapper(*args, **kwargs): return wrapper + # COMMENT ADDED FOR TESTING PURPOSES ONLY. REMOVE BEFORE MERGE.