From 01d47536522c5082127757b8d28fea529e6752be Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Thu, 11 Jun 2026 17:21:04 -0700 Subject: [PATCH 01/39] added unit test sharding --- .github/workflows/unittest.yml | 43 ++++++++++++++++++++++++++++------ ci/run_conditional_tests.sh | 34 ++++++++++++++++++++++++++- 2 files changed, 69 insertions(+), 8 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 83a8280132e9..0c7882624447 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -13,11 +13,40 @@ permissions: contents: read jobs: + discover: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.10" + - name: Get package shards + id: set-matrix + env: + BUILD_TYPE: presubmit + TARGET_BRANCH: ${{ github.base_ref || github.event.merge_group.base_ref }} + run: | + if [ -n "$TARGET_BRANCH" ]; then + git fetch origin "$TARGET_BRANCH" --deepen=200 + fi + echo "matrix=$(python ci/get_package_shards.py)" >> $GITHUB_OUTPUT + unit: + needs: discover + if: needs.discover.outputs.matrix != '[]' && needs.discover.outputs.matrix != '' runs-on: ubuntu-22.04 strategy: + fail-fast: false matrix: python: ['3.9', '3.10', "3.11", "3.12", "3.13", "3.14"] + package_shard: ${{ fromJson(needs.discover.outputs.matrix) }} + name: unit (${{ matrix.package_shard.name }}, ${{ matrix.python }}) steps: - name: Checkout uses: actions/checkout@v4 @@ -36,17 +65,18 @@ jobs: python -m pip install nox - name: Run unit tests env: - COVERAGE_FILE: .coverage-${{ matrix.python }} + COVERAGE_FILE: ${{ github.workspace }}/.coverage-${{ matrix.python }} BUILD_TYPE: presubmit TARGET_BRANCH: ${{ github.base_ref || github.event.merge_group.base_ref }} TEST_TYPE: unit PY_VERSION: ${{ matrix.python }} + PACKAGE_LIST: ${{ matrix.package_shard.packages }} run: | ci/run_conditional_tests.sh - name: Upload coverage results uses: actions/upload-artifact@v4 with: - name: coverage-artifact-${{ '{{' }} matrix.python {{ '}}' }} + name: coverage-artifact-${{ matrix.python }}-${{ matrix.package_shard.index }} path: .coverage-${{ matrix.python }} cover: @@ -67,20 +97,19 @@ jobs: python-version: "3.10" - name: Set number of files changes in packages directory id: packages - run: echo "::set-output name=num_files_changed::$(git diff HEAD~1 -- packages | wc -l)" + run: echo "num_files_changed=$(git diff HEAD~1 -- packages | wc -l)" >> $GITHUB_OUTPUT - name: Install coverage - if: steps.packages.num_files_changed > 0 + if: steps.packages.outputs.num_files_changed > 0 run: | python -m pip install --upgrade setuptools pip wheel python -m pip install coverage - name: Download coverage results - if: ${{ steps.date.packages.num_files_changed > 0 }} + if: steps.packages.outputs.num_files_changed > 0 uses: actions/download-artifact@v4 with: path: .coverage-results/ - name: Report coverage results - if: ${{ steps.date.packages.num_files_changed > 0 }} + if: steps.packages.outputs.num_files_changed > 0 run: | - find .coverage-results -type f -name '*.zip' -exec unzip {} \; coverage combine .coverage-results/**/.coverage* coverage report --show-missing --fail-under=100 diff --git a/ci/run_conditional_tests.sh b/ci/run_conditional_tests.sh index 9b8eaee52e5b..12b02c127ae9 100755 --- a/ci/run_conditional_tests.sh +++ b/ci/run_conditional_tests.sh @@ -82,10 +82,42 @@ subdirs=( packages ) +if [ -n "${PACKAGE_LIST}" ]; then + echo "Using provided PACKAGE_LIST" + to_test=(${PACKAGE_LIST}) + RETVAL=0 + for d in ${to_test[@]}; do + echo "running test in ${d}" + pushd ${d} + set +e + ${test_script} + ret=$? + set -e + if [ ${ret} -ne 0 ]; then + RETVAL=${ret} + fi + popd + done + exit ${RETVAL} +fi + +# Sharding logic (fallback for manual runs) +TOTAL_SHARDS="${TOTAL_SHARDS:-1}" +SHARD_INDEX="${SHARD_INDEX:-1}" +count=0 + RETVAL=0 for subdir in ${subdirs[@]}; do - for d in `ls -d ${subdir}/*/`; do + # Sort the directories to ensure consistent sharding across jobs + for d in `ls -d ${subdir}/*/ | sort`; do + # Sharding logic: only process directories that belong to this shard + if (( count % TOTAL_SHARDS != SHARD_INDEX - 1 )); then + ((count++)) + continue + fi + ((count++)) + should_test=false if [ -n "${GIT_DIFF_ARG}" ]; then echo "checking changes with 'git diff --quiet ${GIT_DIFF_ARG} ${d}'" From a7502d4e8a0969010a2eb6a641092a9e879326f9 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Thu, 11 Jun 2026 17:21:14 -0700 Subject: [PATCH 02/39] run system tests concurrently --- .kokoro/system.sh | 88 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 86 insertions(+), 2 deletions(-) diff --git a/.kokoro/system.sh b/.kokoro/system.sh index 469d0e81c7fa..52550987340b 100755 --- a/.kokoro/system.sh +++ b/.kokoro/system.sh @@ -39,6 +39,9 @@ run_package_test() { local package_name=$1 local package_path="packages/${package_name}" + # Isolate gcloud config for parallel execution + export CLOUDSDK_CONFIG=$(mktemp -d) + # Declare local overrides to prevent bleeding into the next loop iteration local PROJECT_ID local GOOGLE_APPLICATION_CREDENTIALS @@ -87,12 +90,52 @@ run_package_test() { set -e popd > /dev/null + # Clean up isolated gcloud config + rm -rf "${CLOUDSDK_CONFIG}" + return $res } # A file for running system tests system_test_script="${PROJECT_ROOT}/.kokoro/system-single.sh" +# Parallel execution settings +MAX_PARALLEL=4 +running_pids=() +declare -A pid_to_pkg +declare -A pid_to_log +declare -A pid_to_resfile + +# Array to keep track of results for the final summary +results=() + +handle_finished_job() { + local pid=$1 + local pkg=${pid_to_pkg[$pid]} + local log=${pid_to_log[$pid]} + local resfile=${pid_to_resfile[$pid]} + + # wait $pid might fail if it was already reaped by wait -n, + # so we ignore its exit code and use the resfile. + wait "$pid" 2>/dev/null || true + + local res=$(cat "$resfile") + rm "$resfile" + + echo "------------------------------------------------------------" + echo "System tests for ${pkg} finished (Exit code: ${res})" + echo "------------------------------------------------------------" + cat "$log" + rm "$log" + + if [ "${res}" -ne 0 ]; then + RETVAL=${res} + results+=("${pkg}: FAILED") + else + results+=("${pkg}: PASSED") + fi +} + # Run system tests for each package with directory packages/*/tests/system for path in `find 'packages' \ \( -type d -wholename 'packages/*/tests/system' \) -o \ @@ -140,10 +183,51 @@ for path in `find 'packages' \ set -e if [[ "${package_modified}" -gt 0 || "$KOKORO_BUILD_ARTIFACTS_SUBDIR" == *"continuous"* ]]; then - # Call the function - its internal exports won't affect the next loop - run_package_test "$package_name" || RETVAL=$? + # Wait if we have reached MAX_PARALLEL + while [[ ${#running_pids[@]} -ge $MAX_PARALLEL ]]; do + wait -n + # Find which job finished + new_pids=() + for pid in "${running_pids[@]}"; do + if kill -0 "$pid" 2>/dev/null; then + new_pids+=("$pid") + else + handle_finished_job "$pid" + fi + done + running_pids=("${new_pids[@]}") + done + + # Start the next test in the background + log_file=$(mktemp) + res_file=$(mktemp) + ( + run_package_test "$package_name" > "$log_file" 2>&1 + echo $? > "$res_file" + ) & + pid=$! + running_pids+=($pid) + pid_to_pkg[$pid]=$package_name + pid_to_log[$pid]=$log_file + pid_to_resfile[$pid]=$res_file + echo "Started system tests for ${package_name} (PID: ${pid})" else echo "No changes in ${package_name} and not a continuous build, skipping." fi done + +# Wait for all remaining jobs +for pid in "${running_pids[@]}"; do + handle_finished_job "$pid" +done + +echo "------------------------------------------------------------" +echo "System Test Summary" +echo "------------------------------------------------------------" +for res in "${results[@]}"; do + echo "$res" +done +echo "------------------------------------------------------------" + exit ${RETVAL} + From 9ad0f0c2abb24862dbbd6ea8e1212130acf12b5d Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Thu, 11 Jun 2026 17:24:57 -0700 Subject: [PATCH 03/39] added changes to many packages for testing --- packages/django-google-spanner/SHARD_TEST.txt | 1 + packages/google-cloud-appoptimize/SHARD_TEST.txt | 1 + packages/google-cloud-artifact-registry/SHARD_TEST.txt | 1 + packages/google-cloud-asset/SHARD_TEST.txt | 1 + packages/google-cloud-assured-workloads/SHARD_TEST.txt | 1 + packages/google-cloud-audit-log/SHARD_TEST.txt | 1 + packages/google-cloud-auditmanager/SHARD_TEST.txt | 1 + packages/google-cloud-automl/SHARD_TEST.txt | 1 + packages/google-cloud-backupdr/SHARD_TEST.txt | 1 + packages/google-cloud-bare-metal-solution/SHARD_TEST.txt | 1 + packages/google-cloud-batch/SHARD_TEST.txt | 1 + packages/google-cloud-beyondcorp-appconnections/SHARD_TEST.txt | 1 + packages/google-cloud-beyondcorp-appconnectors/SHARD_TEST.txt | 1 + packages/google-cloud-beyondcorp-appgateways/SHARD_TEST.txt | 1 + .../SHARD_TEST.txt | 1 + packages/google-cloud-beyondcorp-clientgateways/SHARD_TEST.txt | 1 + packages/google-cloud-biglake-hive/SHARD_TEST.txt | 1 + packages/google-cloud-biglake/SHARD_TEST.txt | 1 + packages/google-cloud-bigquery-analyticshub/SHARD_TEST.txt | 1 + packages/google-cloud-bigquery-biglake/SHARD_TEST.txt | 1 + packages/google-cloud-bigquery-connection/SHARD_TEST.txt | 1 + packages/google-cloud-bigquery-data-exchange/SHARD_TEST.txt | 1 + packages/google-cloud-bigquery-datapolicies/SHARD_TEST.txt | 1 + packages/google-cloud-bigquery-datatransfer/SHARD_TEST.txt | 1 + packages/google-cloud-bigquery-logging/SHARD_TEST.txt | 1 + packages/google-cloud-bigquery-migration/SHARD_TEST.txt | 1 + packages/google-cloud-bigquery-reservation/SHARD_TEST.txt | 1 + packages/google-cloud-bigquery-storage/SHARD_TEST.txt | 1 + packages/google-cloud-bigquery/SHARD_TEST.txt | 1 + packages/google-cloud-bigtable/SHARD_TEST.txt | 1 + packages/google-cloud-container/SHARD_TEST.txt | 1 + packages/google-cloud-containeranalysis/SHARD_TEST.txt | 1 + packages/google-cloud-contentwarehouse/SHARD_TEST.txt | 1 + packages/google-cloud-core/SHARD_TEST.txt | 1 + packages/google-cloud-data-fusion/SHARD_TEST.txt | 1 + packages/google-cloud-data-qna/SHARD_TEST.txt | 1 + packages/google-cloud-databasecenter/SHARD_TEST.txt | 1 + .../SHARD_TEST.txt | 1 + packages/google-cloud-datacatalog-lineage/SHARD_TEST.txt | 1 + packages/google-cloud-datacatalog/SHARD_TEST.txt | 1 + packages/google-cloud-dataflow-client/SHARD_TEST.txt | 1 + packages/google-cloud-dataform/SHARD_TEST.txt | 1 + packages/google-cloud-datalabeling/SHARD_TEST.txt | 1 + packages/google-cloud-dataplex/SHARD_TEST.txt | 1 + packages/google-cloud-dataproc-metastore/SHARD_TEST.txt | 1 + packages/google-cloud-dataproc/SHARD_TEST.txt | 1 + packages/google-cloud-datastore/SHARD_TEST.txt | 1 + packages/google-cloud-datastream/SHARD_TEST.txt | 1 + packages/google-cloud-deploy/SHARD_TEST.txt | 1 + packages/google-cloud-developerconnect/SHARD_TEST.txt | 1 + packages/google-cloud-essential-contacts/SHARD_TEST.txt | 1 + packages/google-cloud-eventarc-publishing/SHARD_TEST.txt | 1 + packages/google-cloud-eventarc/SHARD_TEST.txt | 1 + packages/google-cloud-filestore/SHARD_TEST.txt | 1 + packages/google-cloud-financialservices/SHARD_TEST.txt | 1 + packages/google-cloud-firestore/SHARD_TEST.txt | 1 + packages/google-cloud-functions/SHARD_TEST.txt | 1 + packages/google-cloud-gdchardwaremanagement/SHARD_TEST.txt | 1 + packages/google-cloud-geminidataanalytics/SHARD_TEST.txt | 1 + packages/google-cloud-gke-backup/SHARD_TEST.txt | 1 + packages/google-cloud-gke-connect-gateway/SHARD_TEST.txt | 1 + packages/google-cloud-gke-hub/SHARD_TEST.txt | 1 + packages/google-cloud-gke-multicloud/SHARD_TEST.txt | 1 + packages/google-cloud-gkerecommender/SHARD_TEST.txt | 1 + packages/google-cloud-gsuiteaddons/SHARD_TEST.txt | 1 + packages/google-cloud-hypercomputecluster/SHARD_TEST.txt | 1 + packages/google-cloud-iam-logging/SHARD_TEST.txt | 1 + packages/google-cloud-iam/SHARD_TEST.txt | 1 + packages/google-cloud-iamconnectorcredentials/SHARD_TEST.txt | 1 + packages/google-cloud-iap/SHARD_TEST.txt | 1 + packages/google-cloud-ids/SHARD_TEST.txt | 1 + packages/google-cloud-kms-inventory/SHARD_TEST.txt | 1 + packages/google-cloud-kms/SHARD_TEST.txt | 1 + packages/google-cloud-pubsub/SHARD_TEST.txt | 1 + packages/google-cloud-quotas/SHARD_TEST.txt | 1 + packages/google-cloud-rapidmigrationassessment/SHARD_TEST.txt | 1 + packages/google-cloud-recaptcha-enterprise/SHARD_TEST.txt | 1 + packages/google-cloud-recommendations-ai/SHARD_TEST.txt | 1 + packages/google-cloud-recommender/SHARD_TEST.txt | 1 + packages/google-cloud-redis-cluster/SHARD_TEST.txt | 1 + packages/google-cloud-redis/SHARD_TEST.txt | 1 + packages/google-cloud-resource-manager/SHARD_TEST.txt | 1 + packages/google-cloud-retail/SHARD_TEST.txt | 1 + packages/google-cloud-run/SHARD_TEST.txt | 1 + packages/sqlalchemy-bigquery/SHARD_TEST.txt | 1 + packages/sqlalchemy-spanner/SHARD_TEST.txt | 1 + 86 files changed, 86 insertions(+) create mode 100644 packages/django-google-spanner/SHARD_TEST.txt create mode 100644 packages/google-cloud-appoptimize/SHARD_TEST.txt create mode 100644 packages/google-cloud-artifact-registry/SHARD_TEST.txt create mode 100644 packages/google-cloud-asset/SHARD_TEST.txt create mode 100644 packages/google-cloud-assured-workloads/SHARD_TEST.txt create mode 100644 packages/google-cloud-audit-log/SHARD_TEST.txt create mode 100644 packages/google-cloud-auditmanager/SHARD_TEST.txt create mode 100644 packages/google-cloud-automl/SHARD_TEST.txt create mode 100644 packages/google-cloud-backupdr/SHARD_TEST.txt create mode 100644 packages/google-cloud-bare-metal-solution/SHARD_TEST.txt create mode 100644 packages/google-cloud-batch/SHARD_TEST.txt create mode 100644 packages/google-cloud-beyondcorp-appconnections/SHARD_TEST.txt create mode 100644 packages/google-cloud-beyondcorp-appconnectors/SHARD_TEST.txt create mode 100644 packages/google-cloud-beyondcorp-appgateways/SHARD_TEST.txt create mode 100644 packages/google-cloud-beyondcorp-clientconnectorservices/SHARD_TEST.txt create mode 100644 packages/google-cloud-beyondcorp-clientgateways/SHARD_TEST.txt create mode 100644 packages/google-cloud-biglake-hive/SHARD_TEST.txt create mode 100644 packages/google-cloud-biglake/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigquery-analyticshub/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigquery-biglake/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigquery-connection/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigquery-data-exchange/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigquery-datapolicies/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigquery-datatransfer/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigquery-logging/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigquery-migration/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigquery-reservation/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigquery-storage/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigquery/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigtable/SHARD_TEST.txt create mode 100644 packages/google-cloud-container/SHARD_TEST.txt create mode 100644 packages/google-cloud-containeranalysis/SHARD_TEST.txt create mode 100644 packages/google-cloud-contentwarehouse/SHARD_TEST.txt create mode 100644 packages/google-cloud-core/SHARD_TEST.txt create mode 100644 packages/google-cloud-data-fusion/SHARD_TEST.txt create mode 100644 packages/google-cloud-data-qna/SHARD_TEST.txt create mode 100644 packages/google-cloud-databasecenter/SHARD_TEST.txt create mode 100644 packages/google-cloud-datacatalog-lineage-configmanagement/SHARD_TEST.txt create mode 100644 packages/google-cloud-datacatalog-lineage/SHARD_TEST.txt create mode 100644 packages/google-cloud-datacatalog/SHARD_TEST.txt create mode 100644 packages/google-cloud-dataflow-client/SHARD_TEST.txt create mode 100644 packages/google-cloud-dataform/SHARD_TEST.txt create mode 100644 packages/google-cloud-datalabeling/SHARD_TEST.txt create mode 100644 packages/google-cloud-dataplex/SHARD_TEST.txt create mode 100644 packages/google-cloud-dataproc-metastore/SHARD_TEST.txt create mode 100644 packages/google-cloud-dataproc/SHARD_TEST.txt create mode 100644 packages/google-cloud-datastore/SHARD_TEST.txt create mode 100644 packages/google-cloud-datastream/SHARD_TEST.txt create mode 100644 packages/google-cloud-deploy/SHARD_TEST.txt create mode 100644 packages/google-cloud-developerconnect/SHARD_TEST.txt create mode 100644 packages/google-cloud-essential-contacts/SHARD_TEST.txt create mode 100644 packages/google-cloud-eventarc-publishing/SHARD_TEST.txt create mode 100644 packages/google-cloud-eventarc/SHARD_TEST.txt create mode 100644 packages/google-cloud-filestore/SHARD_TEST.txt create mode 100644 packages/google-cloud-financialservices/SHARD_TEST.txt create mode 100644 packages/google-cloud-firestore/SHARD_TEST.txt create mode 100644 packages/google-cloud-functions/SHARD_TEST.txt create mode 100644 packages/google-cloud-gdchardwaremanagement/SHARD_TEST.txt create mode 100644 packages/google-cloud-geminidataanalytics/SHARD_TEST.txt create mode 100644 packages/google-cloud-gke-backup/SHARD_TEST.txt create mode 100644 packages/google-cloud-gke-connect-gateway/SHARD_TEST.txt create mode 100644 packages/google-cloud-gke-hub/SHARD_TEST.txt create mode 100644 packages/google-cloud-gke-multicloud/SHARD_TEST.txt create mode 100644 packages/google-cloud-gkerecommender/SHARD_TEST.txt create mode 100644 packages/google-cloud-gsuiteaddons/SHARD_TEST.txt create mode 100644 packages/google-cloud-hypercomputecluster/SHARD_TEST.txt create mode 100644 packages/google-cloud-iam-logging/SHARD_TEST.txt create mode 100644 packages/google-cloud-iam/SHARD_TEST.txt create mode 100644 packages/google-cloud-iamconnectorcredentials/SHARD_TEST.txt create mode 100644 packages/google-cloud-iap/SHARD_TEST.txt create mode 100644 packages/google-cloud-ids/SHARD_TEST.txt create mode 100644 packages/google-cloud-kms-inventory/SHARD_TEST.txt create mode 100644 packages/google-cloud-kms/SHARD_TEST.txt create mode 100644 packages/google-cloud-pubsub/SHARD_TEST.txt create mode 100644 packages/google-cloud-quotas/SHARD_TEST.txt create mode 100644 packages/google-cloud-rapidmigrationassessment/SHARD_TEST.txt create mode 100644 packages/google-cloud-recaptcha-enterprise/SHARD_TEST.txt create mode 100644 packages/google-cloud-recommendations-ai/SHARD_TEST.txt create mode 100644 packages/google-cloud-recommender/SHARD_TEST.txt create mode 100644 packages/google-cloud-redis-cluster/SHARD_TEST.txt create mode 100644 packages/google-cloud-redis/SHARD_TEST.txt create mode 100644 packages/google-cloud-resource-manager/SHARD_TEST.txt create mode 100644 packages/google-cloud-retail/SHARD_TEST.txt create mode 100644 packages/google-cloud-run/SHARD_TEST.txt create mode 100644 packages/sqlalchemy-bigquery/SHARD_TEST.txt create mode 100644 packages/sqlalchemy-spanner/SHARD_TEST.txt diff --git a/packages/django-google-spanner/SHARD_TEST.txt b/packages/django-google-spanner/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/django-google-spanner/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-appoptimize/SHARD_TEST.txt b/packages/google-cloud-appoptimize/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-appoptimize/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-artifact-registry/SHARD_TEST.txt b/packages/google-cloud-artifact-registry/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-artifact-registry/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-asset/SHARD_TEST.txt b/packages/google-cloud-asset/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-asset/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-assured-workloads/SHARD_TEST.txt b/packages/google-cloud-assured-workloads/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-assured-workloads/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-audit-log/SHARD_TEST.txt b/packages/google-cloud-audit-log/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-audit-log/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-auditmanager/SHARD_TEST.txt b/packages/google-cloud-auditmanager/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-auditmanager/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-automl/SHARD_TEST.txt b/packages/google-cloud-automl/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-automl/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-backupdr/SHARD_TEST.txt b/packages/google-cloud-backupdr/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-backupdr/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bare-metal-solution/SHARD_TEST.txt b/packages/google-cloud-bare-metal-solution/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bare-metal-solution/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-batch/SHARD_TEST.txt b/packages/google-cloud-batch/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-batch/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-beyondcorp-appconnections/SHARD_TEST.txt b/packages/google-cloud-beyondcorp-appconnections/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-beyondcorp-appconnections/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-beyondcorp-appconnectors/SHARD_TEST.txt b/packages/google-cloud-beyondcorp-appconnectors/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-beyondcorp-appconnectors/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-beyondcorp-appgateways/SHARD_TEST.txt b/packages/google-cloud-beyondcorp-appgateways/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-beyondcorp-appgateways/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-beyondcorp-clientconnectorservices/SHARD_TEST.txt b/packages/google-cloud-beyondcorp-clientconnectorservices/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-beyondcorp-clientconnectorservices/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-beyondcorp-clientgateways/SHARD_TEST.txt b/packages/google-cloud-beyondcorp-clientgateways/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-beyondcorp-clientgateways/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-biglake-hive/SHARD_TEST.txt b/packages/google-cloud-biglake-hive/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-biglake-hive/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-biglake/SHARD_TEST.txt b/packages/google-cloud-biglake/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-biglake/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigquery-analyticshub/SHARD_TEST.txt b/packages/google-cloud-bigquery-analyticshub/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigquery-analyticshub/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigquery-biglake/SHARD_TEST.txt b/packages/google-cloud-bigquery-biglake/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigquery-biglake/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigquery-connection/SHARD_TEST.txt b/packages/google-cloud-bigquery-connection/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigquery-connection/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigquery-data-exchange/SHARD_TEST.txt b/packages/google-cloud-bigquery-data-exchange/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigquery-data-exchange/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigquery-datapolicies/SHARD_TEST.txt b/packages/google-cloud-bigquery-datapolicies/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigquery-datapolicies/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigquery-datatransfer/SHARD_TEST.txt b/packages/google-cloud-bigquery-datatransfer/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigquery-datatransfer/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigquery-logging/SHARD_TEST.txt b/packages/google-cloud-bigquery-logging/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigquery-logging/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigquery-migration/SHARD_TEST.txt b/packages/google-cloud-bigquery-migration/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigquery-migration/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigquery-reservation/SHARD_TEST.txt b/packages/google-cloud-bigquery-reservation/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigquery-reservation/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigquery-storage/SHARD_TEST.txt b/packages/google-cloud-bigquery-storage/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigquery-storage/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigquery/SHARD_TEST.txt b/packages/google-cloud-bigquery/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigquery/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigtable/SHARD_TEST.txt b/packages/google-cloud-bigtable/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigtable/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-container/SHARD_TEST.txt b/packages/google-cloud-container/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-container/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-containeranalysis/SHARD_TEST.txt b/packages/google-cloud-containeranalysis/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-containeranalysis/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-contentwarehouse/SHARD_TEST.txt b/packages/google-cloud-contentwarehouse/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-contentwarehouse/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-core/SHARD_TEST.txt b/packages/google-cloud-core/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-core/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-data-fusion/SHARD_TEST.txt b/packages/google-cloud-data-fusion/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-data-fusion/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-data-qna/SHARD_TEST.txt b/packages/google-cloud-data-qna/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-data-qna/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-databasecenter/SHARD_TEST.txt b/packages/google-cloud-databasecenter/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-databasecenter/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-datacatalog-lineage-configmanagement/SHARD_TEST.txt b/packages/google-cloud-datacatalog-lineage-configmanagement/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-datacatalog-lineage-configmanagement/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-datacatalog-lineage/SHARD_TEST.txt b/packages/google-cloud-datacatalog-lineage/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-datacatalog-lineage/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-datacatalog/SHARD_TEST.txt b/packages/google-cloud-datacatalog/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-datacatalog/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-dataflow-client/SHARD_TEST.txt b/packages/google-cloud-dataflow-client/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-dataflow-client/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-dataform/SHARD_TEST.txt b/packages/google-cloud-dataform/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-dataform/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-datalabeling/SHARD_TEST.txt b/packages/google-cloud-datalabeling/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-datalabeling/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-dataplex/SHARD_TEST.txt b/packages/google-cloud-dataplex/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-dataplex/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-dataproc-metastore/SHARD_TEST.txt b/packages/google-cloud-dataproc-metastore/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-dataproc/SHARD_TEST.txt b/packages/google-cloud-dataproc/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-dataproc/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-datastore/SHARD_TEST.txt b/packages/google-cloud-datastore/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-datastore/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-datastream/SHARD_TEST.txt b/packages/google-cloud-datastream/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-datastream/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-deploy/SHARD_TEST.txt b/packages/google-cloud-deploy/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-deploy/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-developerconnect/SHARD_TEST.txt b/packages/google-cloud-developerconnect/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-developerconnect/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-essential-contacts/SHARD_TEST.txt b/packages/google-cloud-essential-contacts/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-essential-contacts/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-eventarc-publishing/SHARD_TEST.txt b/packages/google-cloud-eventarc-publishing/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-eventarc-publishing/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-eventarc/SHARD_TEST.txt b/packages/google-cloud-eventarc/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-eventarc/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-filestore/SHARD_TEST.txt b/packages/google-cloud-filestore/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-filestore/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-financialservices/SHARD_TEST.txt b/packages/google-cloud-financialservices/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-financialservices/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-firestore/SHARD_TEST.txt b/packages/google-cloud-firestore/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-firestore/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-functions/SHARD_TEST.txt b/packages/google-cloud-functions/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-functions/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-gdchardwaremanagement/SHARD_TEST.txt b/packages/google-cloud-gdchardwaremanagement/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-gdchardwaremanagement/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-geminidataanalytics/SHARD_TEST.txt b/packages/google-cloud-geminidataanalytics/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-geminidataanalytics/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-gke-backup/SHARD_TEST.txt b/packages/google-cloud-gke-backup/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-gke-backup/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-gke-connect-gateway/SHARD_TEST.txt b/packages/google-cloud-gke-connect-gateway/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-gke-connect-gateway/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-gke-hub/SHARD_TEST.txt b/packages/google-cloud-gke-hub/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-gke-hub/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-gke-multicloud/SHARD_TEST.txt b/packages/google-cloud-gke-multicloud/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-gke-multicloud/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-gkerecommender/SHARD_TEST.txt b/packages/google-cloud-gkerecommender/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-gkerecommender/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-gsuiteaddons/SHARD_TEST.txt b/packages/google-cloud-gsuiteaddons/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-hypercomputecluster/SHARD_TEST.txt b/packages/google-cloud-hypercomputecluster/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-hypercomputecluster/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-iam-logging/SHARD_TEST.txt b/packages/google-cloud-iam-logging/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-iam-logging/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-iam/SHARD_TEST.txt b/packages/google-cloud-iam/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-iam/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-iamconnectorcredentials/SHARD_TEST.txt b/packages/google-cloud-iamconnectorcredentials/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-iamconnectorcredentials/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-iap/SHARD_TEST.txt b/packages/google-cloud-iap/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-iap/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-ids/SHARD_TEST.txt b/packages/google-cloud-ids/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-ids/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-kms-inventory/SHARD_TEST.txt b/packages/google-cloud-kms-inventory/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-kms-inventory/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-kms/SHARD_TEST.txt b/packages/google-cloud-kms/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-kms/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-pubsub/SHARD_TEST.txt b/packages/google-cloud-pubsub/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-pubsub/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-quotas/SHARD_TEST.txt b/packages/google-cloud-quotas/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-quotas/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-rapidmigrationassessment/SHARD_TEST.txt b/packages/google-cloud-rapidmigrationassessment/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-rapidmigrationassessment/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-recaptcha-enterprise/SHARD_TEST.txt b/packages/google-cloud-recaptcha-enterprise/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-recaptcha-enterprise/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-recommendations-ai/SHARD_TEST.txt b/packages/google-cloud-recommendations-ai/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-recommendations-ai/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-recommender/SHARD_TEST.txt b/packages/google-cloud-recommender/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-recommender/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-redis-cluster/SHARD_TEST.txt b/packages/google-cloud-redis-cluster/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-redis-cluster/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-redis/SHARD_TEST.txt b/packages/google-cloud-redis/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-redis/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-resource-manager/SHARD_TEST.txt b/packages/google-cloud-resource-manager/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-resource-manager/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-retail/SHARD_TEST.txt b/packages/google-cloud-retail/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-retail/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-run/SHARD_TEST.txt b/packages/google-cloud-run/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-run/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/sqlalchemy-bigquery/SHARD_TEST.txt b/packages/sqlalchemy-bigquery/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/sqlalchemy-bigquery/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/sqlalchemy-spanner/SHARD_TEST.txt b/packages/sqlalchemy-spanner/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/sqlalchemy-spanner/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding From 02c765377413efc0cc9b807f411f157ff03439e7 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Thu, 11 Jun 2026 17:25:15 -0700 Subject: [PATCH 04/39] added sharding test file --- ci/get_package_shards.py | 94 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 ci/get_package_shards.py diff --git a/ci/get_package_shards.py b/ci/get_package_shards.py new file mode 100644 index 000000000000..25bec5703efb --- /dev/null +++ b/ci/get_package_shards.py @@ -0,0 +1,94 @@ +import os +import subprocess +import json +import math +import sys + +def get_packages(): + subdirs = ['packages'] + packages = [] + for subdir in subdirs: + if not os.path.exists(subdir): + continue + # Use the same sorting as the shell script + pkg_dirs = [os.path.join(subdir, d) + '/' for d in os.listdir(subdir) if os.path.isdir(os.path.join(subdir, d))] + packages.extend(sorted(pkg_dirs)) + return packages + +def get_packages_to_test(): + build_type = os.environ.get('BUILD_TYPE', 'presubmit') + target_branch = os.environ.get('TARGET_BRANCH', 'main') + + all_packages = get_packages() + + if build_type == 'presubmit': + git_diff_arg = f"origin/{target_branch}..." + elif build_type == 'continuous': + git_diff_arg = "HEAD~.." + else: + return all_packages + + # Check if ci/ changed + try: + subprocess.check_call(['git', 'diff', '--quiet', git_diff_arg, 'ci']) + ci_changed = False + except subprocess.CalledProcessError: + ci_changed = True + + if ci_changed: + return all_packages + + try: + res = subprocess.check_output(['git', 'diff', '--name-only', git_diff_arg]).decode('utf-8') + changed_files = res.splitlines() + except subprocess.CalledProcessError: + return all_packages + + to_test = [] + for pkg in all_packages: + # Check if any changed file starts with the package path + if any(f.startswith(pkg) for f in changed_files): + to_test.append(pkg) + + return to_test + +def group_packages(packages, max_packages_per_shard=25, max_total_shards=20): + if not packages: + return [] + + num_packages = len(packages) + + # Calculate number of shards based on packages per shard + num_shards = math.ceil(num_packages / max_packages_per_shard) + + # Cap the total number of shards + num_shards = min(num_shards, max_total_shards) + + # Recalculate shard size to be as even as possible given the capped shards + shard_size = math.ceil(num_packages / num_shards) + + shards = [] + for i in range(num_shards): + start = i * shard_size + end = min((i + 1) * shard_size, num_packages) + if start >= num_packages: + break + + shard_packages = packages[start:end] + if len(shard_packages) == 1: + name = shard_packages[0].strip('/').split('/')[-1] + else: + name = f"{shard_packages[0].strip('/').split('/')[-1]}...{shard_packages[-1].strip('/').split('/')[-1]}" + + shards.append({ + "name": name, + "index": i + 1, + "packages": " ".join(shard_packages) + }) + return shards + +if __name__ == "__main__": + packages = get_packages_to_test() + # Shard into groups of ~25 libraries, up to 20 parallel jobs + shards = group_packages(packages, max_packages_per_shard=25, max_total_shards=20) + print(json.dumps(shards)) From 3c8d0577061dfab9008afffd39f8f58a6f1556b1 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Thu, 11 Jun 2026 17:29:10 -0700 Subject: [PATCH 05/39] added unit-complete to gather all shards --- .github/workflows/unittest.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 0c7882624447..49ede47ce769 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -79,11 +79,24 @@ jobs: name: coverage-artifact-${{ matrix.python }}-${{ matrix.package_shard.index }} path: .coverage-${{ matrix.python }} + unit-complete: + needs: [discover, unit] + if: always() + runs-on: ubuntu-latest + steps: + - name: Check unit test results + run: | + if [[ "${{ needs.unit.result }}" != "success" && "${{ needs.unit.result }}" != "skipped" ]]; then + echo "Unit tests failed" + exit 1 + fi + echo "All unit tests passed or were skipped" + cover: runs-on: ubuntu-latest needs: - unit - steps: + ... - name: Checkout uses: actions/checkout@v4 # Use a fetch-depth of 2 to avoid error `fatal: origin/main...HEAD: no merge base` From 73ab0915ed3d3f22e90ef398e59e1a27b5508698 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Thu, 11 Jun 2026 17:31:58 -0700 Subject: [PATCH 06/39] changed shard params --- ci/get_package_shards.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/ci/get_package_shards.py b/ci/get_package_shards.py index 25bec5703efb..880bc689d29b 100644 --- a/ci/get_package_shards.py +++ b/ci/get_package_shards.py @@ -52,7 +52,7 @@ def get_packages_to_test(): return to_test -def group_packages(packages, max_packages_per_shard=25, max_total_shards=20): +def group_packages(packages, max_packages_per_shard=50, max_total_shards=10): if not packages: return [] @@ -75,20 +75,18 @@ def group_packages(packages, max_packages_per_shard=25, max_total_shards=20): break shard_packages = packages[start:end] - if len(shard_packages) == 1: - name = shard_packages[0].strip('/').split('/')[-1] - else: - name = f"{shard_packages[0].strip('/').split('/')[-1]}...{shard_packages[-1].strip('/').split('/')[-1]}" + index = i + 1 + name = f"Shard {index}" shards.append({ "name": name, - "index": i + 1, + "index": index, "packages": " ".join(shard_packages) }) return shards if __name__ == "__main__": packages = get_packages_to_test() - # Shard into groups of ~25 libraries, up to 20 parallel jobs - shards = group_packages(packages, max_packages_per_shard=25, max_total_shards=20) + # Shard into groups of ~50 libraries, up to 10 parallel jobs + shards = group_packages(packages, max_packages_per_shard=50, max_total_shards=10) print(json.dumps(shards)) From 74f1ef7d22f12d93ee2712b91e374f0af9406db7 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Thu, 11 Jun 2026 17:36:13 -0700 Subject: [PATCH 07/39] fixed tests --- .github/workflows/unittest.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 49ede47ce769..a30ea6c684f3 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -33,9 +33,9 @@ jobs: TARGET_BRANCH: ${{ github.base_ref || github.event.merge_group.base_ref }} run: | if [ -n "$TARGET_BRANCH" ]; then - git fetch origin "$TARGET_BRANCH" --deepen=200 + git fetch origin "$TARGET_BRANCH" --deepen=200 || true fi - echo "matrix=$(python ci/get_package_shards.py)" >> $GITHUB_OUTPUT + echo "matrix=$(python3 ci/get_package_shards.py)" >> $GITHUB_OUTPUT unit: needs: discover @@ -96,7 +96,7 @@ jobs: runs-on: ubuntu-latest needs: - unit - ... + steps: - name: Checkout uses: actions/checkout@v4 # Use a fetch-depth of 2 to avoid error `fatal: origin/main...HEAD: no merge base` From a450254f883140d649ec98cad9fb61ce453c6ef5 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Thu, 11 Jun 2026 19:01:06 -0700 Subject: [PATCH 08/39] fix coverage --- .github/workflows/unittest.yml | 3 +-- ci/run_conditional_tests.sh | 7 +++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index a30ea6c684f3..1de144540dd6 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -65,7 +65,6 @@ jobs: python -m pip install nox - name: Run unit tests env: - COVERAGE_FILE: ${{ github.workspace }}/.coverage-${{ matrix.python }} BUILD_TYPE: presubmit TARGET_BRANCH: ${{ github.base_ref || github.event.merge_group.base_ref }} TEST_TYPE: unit @@ -77,7 +76,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: coverage-artifact-${{ matrix.python }}-${{ matrix.package_shard.index }} - path: .coverage-${{ matrix.python }} + path: .coverage.${{ matrix.python }}.* unit-complete: needs: [discover, unit] diff --git a/ci/run_conditional_tests.sh b/ci/run_conditional_tests.sh index 12b02c127ae9..e047b49cf365 100755 --- a/ci/run_conditional_tests.sh +++ b/ci/run_conditional_tests.sh @@ -140,6 +140,13 @@ for subdir in ${subdirs[@]}; do pushd ${d} # Temporarily allow failure. set +e + + # Ensure unique coverage file per package to avoid DataError + # when combining statement and branch coverage. + # Strip trailing slash from directory name for the filename. + pkg_name_clean=$(echo ${d} | sed 's|/$||' | sed 's|/|_|g') + export COVERAGE_FILE="${PROJECT_ROOT}/.coverage.${PY_VERSION}.${pkg_name_clean}" + ${test_script} ret=$? set -e From af4d10c45b1de758d51eb56e3089ec7e22676965 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Thu, 11 Jun 2026 21:33:04 -0700 Subject: [PATCH 09/39] fix system tests --- .kokoro/system.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.kokoro/system.sh b/.kokoro/system.sh index 52550987340b..6aedd9885e70 100755 --- a/.kokoro/system.sh +++ b/.kokoro/system.sh @@ -119,14 +119,21 @@ handle_finished_job() { # so we ignore its exit code and use the resfile. wait "$pid" 2>/dev/null || true - local res=$(cat "$resfile") - rm "$resfile" + local res=1 + if [ -f "$resfile" ]; then + res=$(cat "$resfile") + rm "$resfile" + fi echo "------------------------------------------------------------" echo "System tests for ${pkg} finished (Exit code: ${res})" echo "------------------------------------------------------------" - cat "$log" - rm "$log" + if [ -f "$log" ]; then + cat "$log" + rm "$log" + else + echo "Log file missing for ${pkg}" + fi if [ "${res}" -ne 0 ]; then RETVAL=${res} @@ -185,7 +192,9 @@ for path in `find 'packages' \ if [[ "${package_modified}" -gt 0 || "$KOKORO_BUILD_ARTIFACTS_SUBDIR" == *"continuous"* ]]; then # Wait if we have reached MAX_PARALLEL while [[ ${#running_pids[@]} -ge $MAX_PARALLEL ]]; do + set +e wait -n + set -e # Find which job finished new_pids=() for pid in "${running_pids[@]}"; do From 15916dfd86f16f8b1ce71a8c9bbe2b92bb11d714 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 09:26:18 -0700 Subject: [PATCH 10/39] split out system test logs --- .kokoro/continuous/common.cfg | 1 + .kokoro/presubmit/common.cfg | 1 + .kokoro/system-single.sh | 8 +++++++- .kokoro/system.sh | 30 ++++++++++++++++-------------- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/.kokoro/continuous/common.cfg b/.kokoro/continuous/common.cfg index 175a4e8fd7a2..36cd039de187 100644 --- a/.kokoro/continuous/common.cfg +++ b/.kokoro/continuous/common.cfg @@ -4,6 +4,7 @@ action { define_artifacts { regex: "**/*sponge_log.xml" + regex: "**/*sponge_log.log" } } diff --git a/.kokoro/presubmit/common.cfg b/.kokoro/presubmit/common.cfg index 175a4e8fd7a2..36cd039de187 100644 --- a/.kokoro/presubmit/common.cfg +++ b/.kokoro/presubmit/common.cfg @@ -4,6 +4,7 @@ action { define_artifacts { regex: "**/*sponge_log.xml" + regex: "**/*sponge_log.log" } } diff --git a/.kokoro/system-single.sh b/.kokoro/system-single.sh index 0ec5ae7ebf1b..b75936bda820 100755 --- a/.kokoro/system-single.sh +++ b/.kokoro/system-single.sh @@ -32,4 +32,10 @@ NOX_FILE_ARG="" [[ -z "${NOX_FILE}" ]] || NOX_FILE_ARG="-f ${NOX_FILE}" -python3 -m nox ${NOX_SESSION_ARG} $NOX_FILE_ARG +NOX_ARGS=() +if [[ -n "${XML_OUTPUT_FILE}" ]]; then + # Pass --junitxml as a positional argument to the underlying pytest call + NOX_ARGS+=("--junitxml=${XML_OUTPUT_FILE}") +fi + +python3 -m nox ${NOX_SESSION_ARG} $NOX_FILE_ARG -- "${NOX_ARGS[@]}" diff --git a/.kokoro/system.sh b/.kokoro/system.sh index 6aedd9885e70..2ae5b4daea22 100755 --- a/.kokoro/system.sh +++ b/.kokoro/system.sh @@ -38,7 +38,15 @@ pwd run_package_test() { local package_name=$1 local package_path="packages/${package_name}" - + + # Create a dedicated directory for this package's artifacts + local artifact_dir="${KOKORO_ARTIFACTS_DIR}/${package_name}" + mkdir -p "${artifact_dir}" + + # Define standard output paths for logs and XML results + export XML_OUTPUT_FILE="${artifact_dir}/sponge_log.xml" + local log_file="${artifact_dir}/sponge_log.log" + # Isolate gcloud config for parallel execution export CLOUDSDK_CONFIG=$(mktemp -d) @@ -51,6 +59,8 @@ run_package_test() { echo "------------------------------------------------------------" echo "Configuring environment for: ${package_name}" + echo "Log file: ${log_file}" + echo "XML results: ${XML_OUTPUT_FILE}" echo "------------------------------------------------------------" case "${package_name}" in @@ -85,11 +95,12 @@ run_package_test() { # Run the actual test pushd "${package_path}" > /dev/null set +e - "${system_test_script}" + # *** CRITICAL: system-single.sh MUST use XML_OUTPUT_FILE to generate the JUnit XML *** + "${system_test_script}" > "${log_file}" 2>&1 local res=$? set -e popd > /dev/null - + # Clean up isolated gcloud config rm -rf "${CLOUDSDK_CONFIG}" @@ -103,7 +114,6 @@ system_test_script="${PROJECT_ROOT}/.kokoro/system-single.sh" MAX_PARALLEL=4 running_pids=() declare -A pid_to_pkg -declare -A pid_to_log declare -A pid_to_resfile # Array to keep track of results for the final summary @@ -112,7 +122,6 @@ results=() handle_finished_job() { local pid=$1 local pkg=${pid_to_pkg[$pid]} - local log=${pid_to_log[$pid]} local resfile=${pid_to_resfile[$pid]} # wait $pid might fail if it was already reaped by wait -n, @@ -127,13 +136,8 @@ handle_finished_job() { echo "------------------------------------------------------------" echo "System tests for ${pkg} finished (Exit code: ${res})" + echo "Artifacts in: ${KOKORO_ARTIFACTS_DIR}/${pkg}" echo "------------------------------------------------------------" - if [ -f "$log" ]; then - cat "$log" - rm "$log" - else - echo "Log file missing for ${pkg}" - fi if [ "${res}" -ne 0 ]; then RETVAL=${res} @@ -208,16 +212,14 @@ for path in `find 'packages' \ done # Start the next test in the background - log_file=$(mktemp) res_file=$(mktemp) ( - run_package_test "$package_name" > "$log_file" 2>&1 + run_package_test "$package_name" echo $? > "$res_file" ) & pid=$! running_pids+=($pid) pid_to_pkg[$pid]=$package_name - pid_to_log[$pid]=$log_file pid_to_resfile[$pid]=$res_file echo "Started system tests for ${package_name} (PID: ${pid})" else From 49cac0fe1f782ef8b88601b635fdc7722a7855bf Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 10:35:12 -0700 Subject: [PATCH 11/39] attempt fix for lint --- ci/run_conditional_tests.sh | 56 ++++++++++++++----------------------- 1 file changed, 21 insertions(+), 35 deletions(-) diff --git a/ci/run_conditional_tests.sh b/ci/run_conditional_tests.sh index e047b49cf365..e8bf7659888f 100755 --- a/ci/run_conditional_tests.sh +++ b/ci/run_conditional_tests.sh @@ -47,41 +47,6 @@ git config --global url."${PROJECT_ROOT}".insteadOf "https://github.com/googleap # A script file for running the test in a sub project. test_script="${PROJECT_ROOT}/ci/run_single_test.sh" -if [[ ${BUILD_TYPE} == "presubmit" ]]; then - # For presubmit build, we want to know the difference from the - # common commit in the target branch. - GIT_DIFF_ARG="origin/$TARGET_BRANCH..." - - # Then fetch enough history for finding the common commit. - git fetch origin "$TARGET_BRANCH" --deepen=200 - -elif [[ ${BUILD_TYPE} == "continuous" ]]; then - # For continuous build, we want to know the difference in the last - # commit. This assumes we use squash commit when merging PRs. - GIT_DIFF_ARG="HEAD~.." - - # Then fetch one last commit for getting the diff. - git fetch origin "$TARGET_BRANCH" --deepen=1 - -else - # Run everything. - GIT_DIFF_ARG="" -fi - -# Then detect changes in the test scripts. - -set +e -git diff --quiet ${GIT_DIFF_ARG} ci -changed=$? -set -e - -# Now we have a fixed list, but we can change it to autodetect if -# necessary. - -subdirs=( - packages -) - if [ -n "${PACKAGE_LIST}" ]; then echo "Using provided PACKAGE_LIST" to_test=(${PACKAGE_LIST}) @@ -101,6 +66,27 @@ if [ -n "${PACKAGE_LIST}" ]; then exit ${RETVAL} fi +if [[ ${BUILD_TYPE} == "presubmit" ]]; then + # For presubmit build, we want to know the difference from the + # common commit in the target branch. + GIT_DIFF_ARG="origin/$TARGET_BRANCH..." + + # Then fetch enough history for finding the common commit. + git fetch origin "$TARGET_BRANCH" --deepen=200 || true + +elif [[ ${BUILD_TYPE} == "continuous" ]]; then + # For continuous build, we want to know the difference in the last + # commit. This assumes we use squash commit when merging PRs. + GIT_DIFF_ARG="HEAD~.." + + # Then fetch one last commit for getting the diff. + git fetch origin "$TARGET_BRANCH" --deepen=1 || true + +else + # Run everything. + GIT_DIFF_ARG="" +fi + # Sharding logic (fallback for manual runs) TOTAL_SHARDS="${TOTAL_SHARDS:-1}" SHARD_INDEX="${SHARD_INDEX:-1}" From d8dd522a1557ddc070a95ed01bbcbe65bbb7b5a4 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 10:38:34 -0700 Subject: [PATCH 12/39] update system tests to show logs for each target --- .kokoro/system.sh | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/.kokoro/system.sh b/.kokoro/system.sh index 2ae5b4daea22..d207d917dce6 100755 --- a/.kokoro/system.sh +++ b/.kokoro/system.sh @@ -109,6 +109,8 @@ run_package_test() { # A file for running system tests system_test_script="${PROJECT_ROOT}/.kokoro/system-single.sh" +# Ensure KOKORO_ARTIFACTS_DIR is set, fallback to a local directory +export KOKORO_ARTIFACTS_DIR="${KOKORO_ARTIFACTS_DIR:-${PROJECT_ROOT}/.artifacts}" # Parallel execution settings MAX_PARALLEL=4 @@ -123,24 +125,26 @@ handle_finished_job() { local pid=$1 local pkg=${pid_to_pkg[$pid]} local resfile=${pid_to_resfile[$pid]} - + # wait $pid might fail if it was already reaped by wait -n, # so we ignore its exit code and use the resfile. wait "$pid" 2>/dev/null || true - + local res=1 - if [ -f "$resfile" ]; then + if [ -s "$resfile" ]; then res=$(cat "$resfile") rm "$resfile" + else + # If the file is empty or missing, the subshell crashed early + res=1 fi - + echo "------------------------------------------------------------" echo "System tests for ${pkg} finished (Exit code: ${res})" echo "Artifacts in: ${KOKORO_ARTIFACTS_DIR}/${pkg}" echo "------------------------------------------------------------" - - if [ "${res}" -ne 0 ]; then - RETVAL=${res} + if [ -z "${res}" ] || [ "${res}" -ne 0 ]; then + RETVAL=1 results+=("${pkg}: FAILED") else results+=("${pkg}: PASSED") @@ -214,8 +218,12 @@ for path in `find 'packages' \ # Start the next test in the background res_file=$(mktemp) ( - run_package_test "$package_name" - echo $? > "$res_file" + if run_package_test "$package_name"; then + echo 0 > "$res_file" + else + res=$? + echo $res > "$res_file" + fi ) & pid=$! running_pids+=($pid) From de74a685007361f9e100253f768015a6c6e190a6 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 10:42:56 -0700 Subject: [PATCH 13/39] update sharding logic --- .github/workflows/unittest.yml | 2 +- ci/get_package_shards.py | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 1de144540dd6..9c349028e862 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -46,7 +46,7 @@ jobs: matrix: python: ['3.9', '3.10', "3.11", "3.12", "3.13", "3.14"] package_shard: ${{ fromJson(needs.discover.outputs.matrix) }} - name: unit (${{ matrix.package_shard.name }}, ${{ matrix.python }}) + name: ${{ matrix.package_shard.is_sharded && format('unit ({0}, {1})', matrix.python, matrix.package_shard.name) || format('unit ({0})', matrix.python) }} steps: - name: Checkout uses: actions/checkout@v4 diff --git a/ci/get_package_shards.py b/ci/get_package_shards.py index 880bc689d29b..c5b8a03f8de7 100644 --- a/ci/get_package_shards.py +++ b/ci/get_package_shards.py @@ -52,19 +52,23 @@ def get_packages_to_test(): return to_test -def group_packages(packages, max_packages_per_shard=50, max_total_shards=10): +def group_packages(packages): if not packages: return [] num_packages = len(packages) - # Calculate number of shards based on packages per shard - num_shards = math.ceil(num_packages / max_packages_per_shard) + # 1. Only shard if > 10 packages are being touched + # 2. Only add a new shard if we'd have > 10 in each shard (meaning size >= 11) + num_shards = num_packages // 11 - # Cap the total number of shards - num_shards = min(num_shards, max_total_shards) + # Ensure at least 1 shard if we have packages + num_shards = max(1, num_shards) - # Recalculate shard size to be as even as possible given the capped shards + # 3. Top out at 10 shards + num_shards = min(10, num_shards) + + # Distribute packages between them as evenly as possible shard_size = math.ceil(num_packages / num_shards) shards = [] @@ -81,12 +85,12 @@ def group_packages(packages, max_packages_per_shard=50, max_total_shards=10): shards.append({ "name": name, "index": index, - "packages": " ".join(shard_packages) + "packages": " ".join(shard_packages), + "is_sharded": num_shards > 1 }) return shards if __name__ == "__main__": packages = get_packages_to_test() - # Shard into groups of ~50 libraries, up to 10 parallel jobs - shards = group_packages(packages, max_packages_per_shard=50, max_total_shards=10) + shards = group_packages(packages) print(json.dumps(shards)) From 46d158345fa4fad1d12b96177f6d6c3daa015b68 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 11:19:01 -0700 Subject: [PATCH 14/39] fixed lint/mypy runs --- ci/run_conditional_tests.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci/run_conditional_tests.sh b/ci/run_conditional_tests.sh index e8bf7659888f..5236b2bec292 100755 --- a/ci/run_conditional_tests.sh +++ b/ci/run_conditional_tests.sh @@ -88,6 +88,9 @@ else fi # Sharding logic (fallback for manual runs) +subdirs=( + packages +) TOTAL_SHARDS="${TOTAL_SHARDS:-1}" SHARD_INDEX="${SHARD_INDEX:-1}" count=0 From 6e3531dc303bb7ae4811b3cd9d3e004897366241 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 11:25:24 -0700 Subject: [PATCH 15/39] removed sqlalchemy-spanner from touched packages --- packages/sqlalchemy-spanner/SHARD_TEST.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 packages/sqlalchemy-spanner/SHARD_TEST.txt diff --git a/packages/sqlalchemy-spanner/SHARD_TEST.txt b/packages/sqlalchemy-spanner/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/sqlalchemy-spanner/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding From e6167bd04f929910b111b3787cbdc52788714d35 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 11:43:25 -0700 Subject: [PATCH 16/39] system tests print all logs in main build log --- .kokoro/system.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.kokoro/system.sh b/.kokoro/system.sh index d207d917dce6..e24b6b1a5d81 100755 --- a/.kokoro/system.sh +++ b/.kokoro/system.sh @@ -120,11 +120,11 @@ declare -A pid_to_resfile # Array to keep track of results for the final summary results=() - handle_finished_job() { local pid=$1 local pkg=${pid_to_pkg[$pid]} local resfile=${pid_to_resfile[$pid]} + local pkg_log="${KOKORO_ARTIFACTS_DIR}/${pkg}/sponge_log.log" # wait $pid might fail if it was already reaped by wait -n, # so we ignore its exit code and use the resfile. @@ -139,10 +139,20 @@ handle_finished_job() { res=1 fi - echo "------------------------------------------------------------" + echo "============================================================" echo "System tests for ${pkg} finished (Exit code: ${res})" echo "Artifacts in: ${KOKORO_ARTIFACTS_DIR}/${pkg}" - echo "------------------------------------------------------------" + echo "============================================================" + + if [ -f "${pkg_log}" ]; then + echo "--- Start of Logs for ${pkg} ---" + cat "${pkg_log}" + echo "--- End of Logs for ${pkg} ---" + else + echo "Console Fallback Warning: Log file not found at ${pkg_log}" + fi + echo "" + if [ -z "${res}" ] || [ "${res}" -ne 0 ]; then RETVAL=1 results+=("${pkg}: FAILED") @@ -150,7 +160,6 @@ handle_finished_job() { results+=("${pkg}: PASSED") fi } - # Run system tests for each package with directory packages/*/tests/system for path in `find 'packages' \ \( -type d -wholename 'packages/*/tests/system' \) -o \ From fd5792d883aa05ebbaee275130ccb8d65acc64cc Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 12:20:31 -0700 Subject: [PATCH 17/39] removed many SHARD_TEST files --- packages/django-google-spanner/SHARD_TEST.txt | 1 - packages/google-cloud-appoptimize/SHARD_TEST.txt | 1 - packages/google-cloud-artifact-registry/SHARD_TEST.txt | 1 - packages/google-cloud-asset/SHARD_TEST.txt | 1 - packages/google-cloud-assured-workloads/SHARD_TEST.txt | 1 - packages/google-cloud-audit-log/SHARD_TEST.txt | 1 - packages/google-cloud-auditmanager/SHARD_TEST.txt | 1 - packages/google-cloud-automl/SHARD_TEST.txt | 1 - packages/google-cloud-backupdr/SHARD_TEST.txt | 1 - packages/google-cloud-bare-metal-solution/SHARD_TEST.txt | 1 - packages/google-cloud-batch/SHARD_TEST.txt | 1 - packages/google-cloud-beyondcorp-appconnections/SHARD_TEST.txt | 1 - packages/google-cloud-beyondcorp-appconnectors/SHARD_TEST.txt | 1 - packages/google-cloud-beyondcorp-appgateways/SHARD_TEST.txt | 1 - .../SHARD_TEST.txt | 1 - packages/google-cloud-beyondcorp-clientgateways/SHARD_TEST.txt | 1 - packages/google-cloud-biglake-hive/SHARD_TEST.txt | 1 - packages/google-cloud-biglake/SHARD_TEST.txt | 1 - packages/google-cloud-bigquery-analyticshub/SHARD_TEST.txt | 1 - packages/google-cloud-bigquery-biglake/SHARD_TEST.txt | 1 - packages/google-cloud-bigquery-connection/SHARD_TEST.txt | 1 - packages/google-cloud-bigquery-data-exchange/SHARD_TEST.txt | 1 - packages/google-cloud-bigquery-datapolicies/SHARD_TEST.txt | 1 - packages/google-cloud-bigquery-datatransfer/SHARD_TEST.txt | 1 - packages/google-cloud-bigquery-logging/SHARD_TEST.txt | 1 - packages/google-cloud-bigquery-migration/SHARD_TEST.txt | 1 - packages/google-cloud-bigquery-reservation/SHARD_TEST.txt | 1 - packages/google-cloud-bigquery-storage/SHARD_TEST.txt | 1 - packages/google-cloud-bigquery/SHARD_TEST.txt | 1 - packages/google-cloud-bigtable/SHARD_TEST.txt | 1 - packages/google-cloud-container/SHARD_TEST.txt | 1 - packages/google-cloud-containeranalysis/SHARD_TEST.txt | 1 - packages/google-cloud-contentwarehouse/SHARD_TEST.txt | 1 - packages/google-cloud-core/SHARD_TEST.txt | 1 - packages/google-cloud-data-fusion/SHARD_TEST.txt | 1 - packages/google-cloud-data-qna/SHARD_TEST.txt | 1 - packages/google-cloud-databasecenter/SHARD_TEST.txt | 1 - .../SHARD_TEST.txt | 1 - packages/google-cloud-datacatalog-lineage/SHARD_TEST.txt | 1 - packages/google-cloud-datacatalog/SHARD_TEST.txt | 1 - packages/google-cloud-dataflow-client/SHARD_TEST.txt | 1 - packages/google-cloud-dataform/SHARD_TEST.txt | 1 - packages/google-cloud-datalabeling/SHARD_TEST.txt | 1 - packages/google-cloud-dataplex/SHARD_TEST.txt | 1 - packages/google-cloud-dataproc-metastore/SHARD_TEST.txt | 1 - packages/google-cloud-dataproc/SHARD_TEST.txt | 1 - packages/google-cloud-datastore/SHARD_TEST.txt | 1 - packages/google-cloud-datastream/SHARD_TEST.txt | 1 - packages/google-cloud-deploy/SHARD_TEST.txt | 1 - packages/google-cloud-developerconnect/SHARD_TEST.txt | 1 - packages/google-cloud-essential-contacts/SHARD_TEST.txt | 1 - packages/google-cloud-eventarc-publishing/SHARD_TEST.txt | 1 - packages/google-cloud-eventarc/SHARD_TEST.txt | 1 - packages/google-cloud-filestore/SHARD_TEST.txt | 1 - packages/google-cloud-financialservices/SHARD_TEST.txt | 1 - packages/google-cloud-functions/SHARD_TEST.txt | 1 - packages/google-cloud-gdchardwaremanagement/SHARD_TEST.txt | 1 - packages/google-cloud-geminidataanalytics/SHARD_TEST.txt | 1 - packages/google-cloud-gke-backup/SHARD_TEST.txt | 1 - packages/google-cloud-gke-connect-gateway/SHARD_TEST.txt | 1 - packages/google-cloud-gke-hub/SHARD_TEST.txt | 1 - packages/google-cloud-gke-multicloud/SHARD_TEST.txt | 1 - packages/google-cloud-gkerecommender/SHARD_TEST.txt | 1 - packages/google-cloud-gsuiteaddons/SHARD_TEST.txt | 1 - packages/google-cloud-hypercomputecluster/SHARD_TEST.txt | 1 - packages/google-cloud-iam-logging/SHARD_TEST.txt | 1 - packages/google-cloud-iam/SHARD_TEST.txt | 1 - packages/google-cloud-iamconnectorcredentials/SHARD_TEST.txt | 1 - packages/google-cloud-iap/SHARD_TEST.txt | 1 - packages/google-cloud-ids/SHARD_TEST.txt | 1 - packages/google-cloud-kms-inventory/SHARD_TEST.txt | 1 - packages/google-cloud-kms/SHARD_TEST.txt | 1 - packages/google-cloud-pubsub/SHARD_TEST.txt | 1 - packages/google-cloud-quotas/SHARD_TEST.txt | 1 - packages/google-cloud-rapidmigrationassessment/SHARD_TEST.txt | 1 - packages/google-cloud-recaptcha-enterprise/SHARD_TEST.txt | 1 - packages/google-cloud-recommendations-ai/SHARD_TEST.txt | 1 - packages/google-cloud-recommender/SHARD_TEST.txt | 1 - packages/google-cloud-redis-cluster/SHARD_TEST.txt | 1 - packages/google-cloud-redis/SHARD_TEST.txt | 1 - packages/google-cloud-resource-manager/SHARD_TEST.txt | 1 - packages/google-cloud-retail/SHARD_TEST.txt | 1 - packages/google-cloud-run/SHARD_TEST.txt | 1 - packages/sqlalchemy-bigquery/SHARD_TEST.txt | 1 - 84 files changed, 84 deletions(-) delete mode 100644 packages/django-google-spanner/SHARD_TEST.txt delete mode 100644 packages/google-cloud-appoptimize/SHARD_TEST.txt delete mode 100644 packages/google-cloud-artifact-registry/SHARD_TEST.txt delete mode 100644 packages/google-cloud-asset/SHARD_TEST.txt delete mode 100644 packages/google-cloud-assured-workloads/SHARD_TEST.txt delete mode 100644 packages/google-cloud-audit-log/SHARD_TEST.txt delete mode 100644 packages/google-cloud-auditmanager/SHARD_TEST.txt delete mode 100644 packages/google-cloud-automl/SHARD_TEST.txt delete mode 100644 packages/google-cloud-backupdr/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bare-metal-solution/SHARD_TEST.txt delete mode 100644 packages/google-cloud-batch/SHARD_TEST.txt delete mode 100644 packages/google-cloud-beyondcorp-appconnections/SHARD_TEST.txt delete mode 100644 packages/google-cloud-beyondcorp-appconnectors/SHARD_TEST.txt delete mode 100644 packages/google-cloud-beyondcorp-appgateways/SHARD_TEST.txt delete mode 100644 packages/google-cloud-beyondcorp-clientconnectorservices/SHARD_TEST.txt delete mode 100644 packages/google-cloud-beyondcorp-clientgateways/SHARD_TEST.txt delete mode 100644 packages/google-cloud-biglake-hive/SHARD_TEST.txt delete mode 100644 packages/google-cloud-biglake/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigquery-analyticshub/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigquery-biglake/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigquery-connection/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigquery-data-exchange/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigquery-datapolicies/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigquery-datatransfer/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigquery-logging/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigquery-migration/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigquery-reservation/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigquery-storage/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigquery/SHARD_TEST.txt delete mode 100644 packages/google-cloud-bigtable/SHARD_TEST.txt delete mode 100644 packages/google-cloud-container/SHARD_TEST.txt delete mode 100644 packages/google-cloud-containeranalysis/SHARD_TEST.txt delete mode 100644 packages/google-cloud-contentwarehouse/SHARD_TEST.txt delete mode 100644 packages/google-cloud-core/SHARD_TEST.txt delete mode 100644 packages/google-cloud-data-fusion/SHARD_TEST.txt delete mode 100644 packages/google-cloud-data-qna/SHARD_TEST.txt delete mode 100644 packages/google-cloud-databasecenter/SHARD_TEST.txt delete mode 100644 packages/google-cloud-datacatalog-lineage-configmanagement/SHARD_TEST.txt delete mode 100644 packages/google-cloud-datacatalog-lineage/SHARD_TEST.txt delete mode 100644 packages/google-cloud-datacatalog/SHARD_TEST.txt delete mode 100644 packages/google-cloud-dataflow-client/SHARD_TEST.txt delete mode 100644 packages/google-cloud-dataform/SHARD_TEST.txt delete mode 100644 packages/google-cloud-datalabeling/SHARD_TEST.txt delete mode 100644 packages/google-cloud-dataplex/SHARD_TEST.txt delete mode 100644 packages/google-cloud-dataproc-metastore/SHARD_TEST.txt delete mode 100644 packages/google-cloud-dataproc/SHARD_TEST.txt delete mode 100644 packages/google-cloud-datastore/SHARD_TEST.txt delete mode 100644 packages/google-cloud-datastream/SHARD_TEST.txt delete mode 100644 packages/google-cloud-deploy/SHARD_TEST.txt delete mode 100644 packages/google-cloud-developerconnect/SHARD_TEST.txt delete mode 100644 packages/google-cloud-essential-contacts/SHARD_TEST.txt delete mode 100644 packages/google-cloud-eventarc-publishing/SHARD_TEST.txt delete mode 100644 packages/google-cloud-eventarc/SHARD_TEST.txt delete mode 100644 packages/google-cloud-filestore/SHARD_TEST.txt delete mode 100644 packages/google-cloud-financialservices/SHARD_TEST.txt delete mode 100644 packages/google-cloud-functions/SHARD_TEST.txt delete mode 100644 packages/google-cloud-gdchardwaremanagement/SHARD_TEST.txt delete mode 100644 packages/google-cloud-geminidataanalytics/SHARD_TEST.txt delete mode 100644 packages/google-cloud-gke-backup/SHARD_TEST.txt delete mode 100644 packages/google-cloud-gke-connect-gateway/SHARD_TEST.txt delete mode 100644 packages/google-cloud-gke-hub/SHARD_TEST.txt delete mode 100644 packages/google-cloud-gke-multicloud/SHARD_TEST.txt delete mode 100644 packages/google-cloud-gkerecommender/SHARD_TEST.txt delete mode 100644 packages/google-cloud-gsuiteaddons/SHARD_TEST.txt delete mode 100644 packages/google-cloud-hypercomputecluster/SHARD_TEST.txt delete mode 100644 packages/google-cloud-iam-logging/SHARD_TEST.txt delete mode 100644 packages/google-cloud-iam/SHARD_TEST.txt delete mode 100644 packages/google-cloud-iamconnectorcredentials/SHARD_TEST.txt delete mode 100644 packages/google-cloud-iap/SHARD_TEST.txt delete mode 100644 packages/google-cloud-ids/SHARD_TEST.txt delete mode 100644 packages/google-cloud-kms-inventory/SHARD_TEST.txt delete mode 100644 packages/google-cloud-kms/SHARD_TEST.txt delete mode 100644 packages/google-cloud-pubsub/SHARD_TEST.txt delete mode 100644 packages/google-cloud-quotas/SHARD_TEST.txt delete mode 100644 packages/google-cloud-rapidmigrationassessment/SHARD_TEST.txt delete mode 100644 packages/google-cloud-recaptcha-enterprise/SHARD_TEST.txt delete mode 100644 packages/google-cloud-recommendations-ai/SHARD_TEST.txt delete mode 100644 packages/google-cloud-recommender/SHARD_TEST.txt delete mode 100644 packages/google-cloud-redis-cluster/SHARD_TEST.txt delete mode 100644 packages/google-cloud-redis/SHARD_TEST.txt delete mode 100644 packages/google-cloud-resource-manager/SHARD_TEST.txt delete mode 100644 packages/google-cloud-retail/SHARD_TEST.txt delete mode 100644 packages/google-cloud-run/SHARD_TEST.txt delete mode 100644 packages/sqlalchemy-bigquery/SHARD_TEST.txt diff --git a/packages/django-google-spanner/SHARD_TEST.txt b/packages/django-google-spanner/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/django-google-spanner/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-appoptimize/SHARD_TEST.txt b/packages/google-cloud-appoptimize/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-appoptimize/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-artifact-registry/SHARD_TEST.txt b/packages/google-cloud-artifact-registry/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-artifact-registry/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-asset/SHARD_TEST.txt b/packages/google-cloud-asset/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-asset/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-assured-workloads/SHARD_TEST.txt b/packages/google-cloud-assured-workloads/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-assured-workloads/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-audit-log/SHARD_TEST.txt b/packages/google-cloud-audit-log/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-audit-log/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-auditmanager/SHARD_TEST.txt b/packages/google-cloud-auditmanager/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-auditmanager/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-automl/SHARD_TEST.txt b/packages/google-cloud-automl/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-automl/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-backupdr/SHARD_TEST.txt b/packages/google-cloud-backupdr/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-backupdr/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bare-metal-solution/SHARD_TEST.txt b/packages/google-cloud-bare-metal-solution/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bare-metal-solution/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-batch/SHARD_TEST.txt b/packages/google-cloud-batch/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-batch/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-beyondcorp-appconnections/SHARD_TEST.txt b/packages/google-cloud-beyondcorp-appconnections/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-beyondcorp-appconnections/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-beyondcorp-appconnectors/SHARD_TEST.txt b/packages/google-cloud-beyondcorp-appconnectors/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-beyondcorp-appconnectors/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-beyondcorp-appgateways/SHARD_TEST.txt b/packages/google-cloud-beyondcorp-appgateways/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-beyondcorp-appgateways/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-beyondcorp-clientconnectorservices/SHARD_TEST.txt b/packages/google-cloud-beyondcorp-clientconnectorservices/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-beyondcorp-clientconnectorservices/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-beyondcorp-clientgateways/SHARD_TEST.txt b/packages/google-cloud-beyondcorp-clientgateways/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-beyondcorp-clientgateways/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-biglake-hive/SHARD_TEST.txt b/packages/google-cloud-biglake-hive/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-biglake-hive/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-biglake/SHARD_TEST.txt b/packages/google-cloud-biglake/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-biglake/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigquery-analyticshub/SHARD_TEST.txt b/packages/google-cloud-bigquery-analyticshub/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigquery-analyticshub/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigquery-biglake/SHARD_TEST.txt b/packages/google-cloud-bigquery-biglake/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigquery-biglake/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigquery-connection/SHARD_TEST.txt b/packages/google-cloud-bigquery-connection/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigquery-connection/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigquery-data-exchange/SHARD_TEST.txt b/packages/google-cloud-bigquery-data-exchange/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigquery-data-exchange/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigquery-datapolicies/SHARD_TEST.txt b/packages/google-cloud-bigquery-datapolicies/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigquery-datapolicies/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigquery-datatransfer/SHARD_TEST.txt b/packages/google-cloud-bigquery-datatransfer/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigquery-datatransfer/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigquery-logging/SHARD_TEST.txt b/packages/google-cloud-bigquery-logging/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigquery-logging/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigquery-migration/SHARD_TEST.txt b/packages/google-cloud-bigquery-migration/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigquery-migration/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigquery-reservation/SHARD_TEST.txt b/packages/google-cloud-bigquery-reservation/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigquery-reservation/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigquery-storage/SHARD_TEST.txt b/packages/google-cloud-bigquery-storage/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigquery-storage/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigquery/SHARD_TEST.txt b/packages/google-cloud-bigquery/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigquery/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-bigtable/SHARD_TEST.txt b/packages/google-cloud-bigtable/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-bigtable/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-container/SHARD_TEST.txt b/packages/google-cloud-container/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-container/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-containeranalysis/SHARD_TEST.txt b/packages/google-cloud-containeranalysis/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-containeranalysis/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-contentwarehouse/SHARD_TEST.txt b/packages/google-cloud-contentwarehouse/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-contentwarehouse/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-core/SHARD_TEST.txt b/packages/google-cloud-core/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-core/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-data-fusion/SHARD_TEST.txt b/packages/google-cloud-data-fusion/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-data-fusion/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-data-qna/SHARD_TEST.txt b/packages/google-cloud-data-qna/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-data-qna/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-databasecenter/SHARD_TEST.txt b/packages/google-cloud-databasecenter/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-databasecenter/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-datacatalog-lineage-configmanagement/SHARD_TEST.txt b/packages/google-cloud-datacatalog-lineage-configmanagement/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-datacatalog-lineage-configmanagement/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-datacatalog-lineage/SHARD_TEST.txt b/packages/google-cloud-datacatalog-lineage/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-datacatalog-lineage/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-datacatalog/SHARD_TEST.txt b/packages/google-cloud-datacatalog/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-datacatalog/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-dataflow-client/SHARD_TEST.txt b/packages/google-cloud-dataflow-client/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-dataflow-client/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-dataform/SHARD_TEST.txt b/packages/google-cloud-dataform/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-dataform/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-datalabeling/SHARD_TEST.txt b/packages/google-cloud-datalabeling/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-datalabeling/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-dataplex/SHARD_TEST.txt b/packages/google-cloud-dataplex/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-dataplex/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-dataproc-metastore/SHARD_TEST.txt b/packages/google-cloud-dataproc-metastore/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-dataproc-metastore/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-dataproc/SHARD_TEST.txt b/packages/google-cloud-dataproc/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-dataproc/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-datastore/SHARD_TEST.txt b/packages/google-cloud-datastore/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-datastore/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-datastream/SHARD_TEST.txt b/packages/google-cloud-datastream/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-datastream/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-deploy/SHARD_TEST.txt b/packages/google-cloud-deploy/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-deploy/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-developerconnect/SHARD_TEST.txt b/packages/google-cloud-developerconnect/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-developerconnect/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-essential-contacts/SHARD_TEST.txt b/packages/google-cloud-essential-contacts/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-essential-contacts/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-eventarc-publishing/SHARD_TEST.txt b/packages/google-cloud-eventarc-publishing/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-eventarc-publishing/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-eventarc/SHARD_TEST.txt b/packages/google-cloud-eventarc/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-eventarc/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-filestore/SHARD_TEST.txt b/packages/google-cloud-filestore/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-filestore/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-financialservices/SHARD_TEST.txt b/packages/google-cloud-financialservices/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-financialservices/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-functions/SHARD_TEST.txt b/packages/google-cloud-functions/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-functions/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-gdchardwaremanagement/SHARD_TEST.txt b/packages/google-cloud-gdchardwaremanagement/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-gdchardwaremanagement/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-geminidataanalytics/SHARD_TEST.txt b/packages/google-cloud-geminidataanalytics/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-geminidataanalytics/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-gke-backup/SHARD_TEST.txt b/packages/google-cloud-gke-backup/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-gke-backup/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-gke-connect-gateway/SHARD_TEST.txt b/packages/google-cloud-gke-connect-gateway/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-gke-connect-gateway/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-gke-hub/SHARD_TEST.txt b/packages/google-cloud-gke-hub/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-gke-hub/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-gke-multicloud/SHARD_TEST.txt b/packages/google-cloud-gke-multicloud/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-gke-multicloud/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-gkerecommender/SHARD_TEST.txt b/packages/google-cloud-gkerecommender/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-gkerecommender/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-gsuiteaddons/SHARD_TEST.txt b/packages/google-cloud-gsuiteaddons/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-gsuiteaddons/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-hypercomputecluster/SHARD_TEST.txt b/packages/google-cloud-hypercomputecluster/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-hypercomputecluster/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-iam-logging/SHARD_TEST.txt b/packages/google-cloud-iam-logging/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-iam-logging/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-iam/SHARD_TEST.txt b/packages/google-cloud-iam/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-iam/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-iamconnectorcredentials/SHARD_TEST.txt b/packages/google-cloud-iamconnectorcredentials/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-iamconnectorcredentials/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-iap/SHARD_TEST.txt b/packages/google-cloud-iap/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-iap/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-ids/SHARD_TEST.txt b/packages/google-cloud-ids/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-ids/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-kms-inventory/SHARD_TEST.txt b/packages/google-cloud-kms-inventory/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-kms-inventory/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-kms/SHARD_TEST.txt b/packages/google-cloud-kms/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-kms/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-pubsub/SHARD_TEST.txt b/packages/google-cloud-pubsub/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-pubsub/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-quotas/SHARD_TEST.txt b/packages/google-cloud-quotas/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-quotas/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-rapidmigrationassessment/SHARD_TEST.txt b/packages/google-cloud-rapidmigrationassessment/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-rapidmigrationassessment/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-recaptcha-enterprise/SHARD_TEST.txt b/packages/google-cloud-recaptcha-enterprise/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-recaptcha-enterprise/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-recommendations-ai/SHARD_TEST.txt b/packages/google-cloud-recommendations-ai/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-recommendations-ai/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-recommender/SHARD_TEST.txt b/packages/google-cloud-recommender/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-recommender/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-redis-cluster/SHARD_TEST.txt b/packages/google-cloud-redis-cluster/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-redis-cluster/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-redis/SHARD_TEST.txt b/packages/google-cloud-redis/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-redis/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-resource-manager/SHARD_TEST.txt b/packages/google-cloud-resource-manager/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-resource-manager/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-retail/SHARD_TEST.txt b/packages/google-cloud-retail/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-retail/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/google-cloud-run/SHARD_TEST.txt b/packages/google-cloud-run/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/google-cloud-run/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding diff --git a/packages/sqlalchemy-bigquery/SHARD_TEST.txt b/packages/sqlalchemy-bigquery/SHARD_TEST.txt deleted file mode 100644 index b7ac1b35614f..000000000000 --- a/packages/sqlalchemy-bigquery/SHARD_TEST.txt +++ /dev/null @@ -1 +0,0 @@ -Test change for sharding From 8b825d5a645184860009b3dffef65c82c08d7109 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 12:20:49 -0700 Subject: [PATCH 18/39] updated lint and mypy logic --- ci/run_conditional_tests.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/run_conditional_tests.sh b/ci/run_conditional_tests.sh index 5236b2bec292..c5321a17bf91 100755 --- a/ci/run_conditional_tests.sh +++ b/ci/run_conditional_tests.sh @@ -102,10 +102,10 @@ for subdir in ${subdirs[@]}; do for d in `ls -d ${subdir}/*/ | sort`; do # Sharding logic: only process directories that belong to this shard if (( count % TOTAL_SHARDS != SHARD_INDEX - 1 )); then - ((count++)) + ((++count)) continue fi - ((count++)) + ((++count)) should_test=false if [ -n "${GIT_DIFF_ARG}" ]; then From 32968a9a2222b9414574b0f8e1d8d26f6f0bcf95 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 12:33:23 -0700 Subject: [PATCH 19/39] add shard descriptions --- .github/workflows/unittest.yml | 2 +- ci/get_package_shards.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 9c349028e862..95aa8ce0ed9a 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -63,7 +63,7 @@ jobs: run: | python -m pip install --upgrade setuptools pip wheel python -m pip install nox - - name: Run unit tests + - name: Run unit tests for ${{ matrix.package_shard.description }} env: BUILD_TYPE: presubmit TARGET_BRANCH: ${{ github.base_ref || github.event.merge_group.base_ref }} diff --git a/ci/get_package_shards.py b/ci/get_package_shards.py index c5b8a03f8de7..89a99bf7730b 100644 --- a/ci/get_package_shards.py +++ b/ci/get_package_shards.py @@ -82,9 +82,16 @@ def group_packages(packages): index = i + 1 name = f"Shard {index}" + # Calculate a descriptive range for step visibility + if len(shard_packages) == 1: + desc = shard_packages[0].strip('/').split('/')[-1] + else: + desc = f"{shard_packages[0].strip('/').split('/')[-1]}...{shard_packages[-1].strip('/').split('/')[-1]}" + shards.append({ "name": name, "index": index, + "description": desc, "packages": " ".join(shard_packages), "is_sharded": num_shards > 1 }) From ff1274f39f8f29c5c13663753c3fa83e1cb12e78 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 12:37:01 -0700 Subject: [PATCH 20/39] remove global run on ci/ change --- ci/get_package_shards.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/ci/get_package_shards.py b/ci/get_package_shards.py index 89a99bf7730b..5147153f8562 100644 --- a/ci/get_package_shards.py +++ b/ci/get_package_shards.py @@ -28,16 +28,6 @@ def get_packages_to_test(): else: return all_packages - # Check if ci/ changed - try: - subprocess.check_call(['git', 'diff', '--quiet', git_diff_arg, 'ci']) - ci_changed = False - except subprocess.CalledProcessError: - ci_changed = True - - if ci_changed: - return all_packages - try: res = subprocess.check_output(['git', 'diff', '--name-only', git_diff_arg]).decode('utf-8') changed_files = res.splitlines() From c49b06d884e554ef0eca578606afd3fe871bf8c5 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 13:17:10 -0700 Subject: [PATCH 21/39] attempt cover fix --- .github/workflows/unittest.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 95aa8ce0ed9a..b8680571645f 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -123,5 +123,6 @@ jobs: - name: Report coverage results if: steps.packages.outputs.num_files_changed > 0 run: | - coverage combine .coverage-results/**/.coverage* + find .coverage-results -type f -name '.coverage*' -exec mv {} . \; + coverage combine coverage report --show-missing --fail-under=100 From 1cd8c1f5baf462387d22408d013577d9eb882119 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 13:28:15 -0700 Subject: [PATCH 22/39] attempt fix for cover --- .github/workflows/unittest.yml | 12 +++++++++--- ci/run_conditional_tests.sh | 7 +++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index b8680571645f..f99428713be1 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -123,6 +123,12 @@ jobs: - name: Report coverage results if: steps.packages.outputs.num_files_changed > 0 run: | - find .coverage-results -type f -name '.coverage*' -exec mv {} . \; - coverage combine - coverage report --show-missing --fail-under=100 + if [ -d .coverage-results ]; then + find .coverage-results -type f -name '.coverage*' -exec mv {} . \; + coverage combine + coverage report --show-missing --fail-under=100 + else + echo "Error: No coverage results were downloaded from the unit test jobs." + echo "This usually means the unit tests did not run or failed to upload their coverage files." + exit 1 + fi diff --git a/ci/run_conditional_tests.sh b/ci/run_conditional_tests.sh index c5321a17bf91..fb68904ead6a 100755 --- a/ci/run_conditional_tests.sh +++ b/ci/run_conditional_tests.sh @@ -55,6 +55,13 @@ if [ -n "${PACKAGE_LIST}" ]; then echo "running test in ${d}" pushd ${d} set +e + + # Ensure unique coverage file per package to avoid DataError + # when combining statement and branch coverage. + # Strip trailing slash from directory name for the filename. + pkg_name_clean=$(echo ${d} | sed 's|/$||' | sed 's|/|_|g') + export COVERAGE_FILE="${PROJECT_ROOT}/.coverage.${PY_VERSION}.${pkg_name_clean}" + ${test_script} ret=$? set -e From a0f5c9ada55a7b0c544d807e0e3d4b4311497a6b Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 13:50:18 -0700 Subject: [PATCH 23/39] allow hidden files for cover --- .github/workflows/unittest.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index f99428713be1..e806130e0ae5 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -77,6 +77,7 @@ jobs: with: name: coverage-artifact-${{ matrix.python }}-${{ matrix.package_shard.index }} path: .coverage.${{ matrix.python }}.* + include-hidden-files: true unit-complete: needs: [discover, unit] From 71f444a03dca196b8984321de2ec65c9e2093b26 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 13:55:50 -0700 Subject: [PATCH 24/39] fail fast --- .github/workflows/unittest.yml | 2 +- .kokoro/system.sh | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index e806130e0ae5..3385b5a127e8 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -42,7 +42,7 @@ jobs: if: needs.discover.outputs.matrix != '[]' && needs.discover.outputs.matrix != '' runs-on: ubuntu-22.04 strategy: - fail-fast: false + fail-fast: true matrix: python: ['3.9', '3.10', "3.11", "3.12", "3.13", "3.14"] package_shard: ${{ fromJson(needs.discover.outputs.matrix) }} diff --git a/.kokoro/system.sh b/.kokoro/system.sh index e24b6b1a5d81..a46758e3e11c 100755 --- a/.kokoro/system.sh +++ b/.kokoro/system.sh @@ -144,6 +144,7 @@ handle_finished_job() { echo "Artifacts in: ${KOKORO_ARTIFACTS_DIR}/${pkg}" echo "============================================================" + # Print the package log to the console if [ -f "${pkg_log}" ]; then echo "--- Start of Logs for ${pkg} ---" cat "${pkg_log}" @@ -154,8 +155,22 @@ handle_finished_job() { echo "" if [ -z "${res}" ] || [ "${res}" -ne 0 ]; then - RETVAL=1 - results+=("${pkg}: FAILED") + echo "============================================================" + echo "FAIL-FAST: System tests for ${pkg} failed!" + echo "Cancelling all remaining running background jobs..." + echo "============================================================" + + # Kill all other active background processes + for active_pid in "${running_pids[@]}"; do + if [ "$active_pid" != "$pid" ] && kill -0 "$active_pid" 2>/dev/null; then + pkg_to_cancel=${pid_to_pkg[$active_pid]} + echo "Cancelling active system tests for ${pkg_to_cancel} (PID: ${active_pid})..." + # Send SIGTERM to allow graceful cleanup of resources if possible, or SIGKILL + kill -9 "$active_pid" 2>/dev/null || true + fi + done + + exit "${res}" else results+=("${pkg}: PASSED") fi From cf1a1f16dd823558c00148e01f997e280a4fd38c Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 15:12:07 -0700 Subject: [PATCH 25/39] use individual coverage checks --- .github/workflows/unittest.yml | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 3385b5a127e8..78c7e20b8345 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -127,7 +127,32 @@ jobs: if [ -d .coverage-results ]; then find .coverage-results -type f -name '.coverage*' -exec mv {} . \; coverage combine - coverage report --show-missing --fail-under=100 + + # Find all modified packages + modified_packages=$(git diff --name-only HEAD~1 -- packages | cut -d/ -f1,2 | sort -u) + + for pkg in ${modified_packages}; do + if [ -d "${pkg}" ]; then + echo "============================================================" + echo "Evaluating coverage for package: ${pkg}" + echo "============================================================" + + if [ -f "${pkg}/.coveragerc" ]; then + echo "Using package-specific configuration: ${pkg}/.coveragerc" + # If fail_under is specified in the package-specific .coveragerc, coverage report + # will automatically enforce it. Otherwise, we enforce the default 100%. + if grep -q "fail_under" "${pkg}/.coveragerc"; then + coverage report --rcfile="${pkg}/.coveragerc" + else + echo "No fail_under specified in ${pkg}/.coveragerc, enforcing default of 100%" + coverage report --rcfile="${pkg}/.coveragerc" --fail-under=100 + fi + else + echo "No .coveragerc found for ${pkg}, enforcing default of 100%" + coverage report --include="${pkg}/**" --fail-under=100 + fi + fi + done else echo "Error: No coverage results were downloaded from the unit test jobs." echo "This usually means the unit tests did not run or failed to upload their coverage files." From b00967f00800ad6b41a887ec7d1112bddc8c594d Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 15:17:58 -0700 Subject: [PATCH 26/39] loosen firestore coverage requirement --- packages/google-cloud-firestore/.coveragerc | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/google-cloud-firestore/.coveragerc b/packages/google-cloud-firestore/.coveragerc index 4c355f6455c1..66bbde8955a9 100644 --- a/packages/google-cloud-firestore/.coveragerc +++ b/packages/google-cloud-firestore/.coveragerc @@ -2,6 +2,7 @@ branch = True [report] +fail_under = 99 show_missing = True omit = google/cloud/firestore/__init__.py From 7bb323ceb3bf4b25af8903874e460f1c0b0f17c6 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 16:43:46 -0700 Subject: [PATCH 27/39] activated more packages --- packages/google-backstory/SHARD_TEST.txt | 1 + packages/google-cloud-apiregistry/SHARD_TEST.txt | 1 + packages/google-cloud-bigtable/SHARD_TEST.txt | 1 + packages/google-cloud-ces/SHARD_TEST.txt | 1 + packages/google-cloud-chronicle/SHARD_TEST.txt | 1 + packages/google-cloud-dataproc/SHARD_TEST.txt | 1 + 6 files changed, 6 insertions(+) create mode 100644 packages/google-backstory/SHARD_TEST.txt create mode 100644 packages/google-cloud-apiregistry/SHARD_TEST.txt create mode 100644 packages/google-cloud-bigtable/SHARD_TEST.txt create mode 100644 packages/google-cloud-ces/SHARD_TEST.txt create mode 100644 packages/google-cloud-chronicle/SHARD_TEST.txt create mode 100644 packages/google-cloud-dataproc/SHARD_TEST.txt diff --git a/packages/google-backstory/SHARD_TEST.txt b/packages/google-backstory/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-backstory/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-apiregistry/SHARD_TEST.txt b/packages/google-cloud-apiregistry/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-apiregistry/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-bigtable/SHARD_TEST.txt b/packages/google-cloud-bigtable/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-bigtable/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-ces/SHARD_TEST.txt b/packages/google-cloud-ces/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-ces/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-chronicle/SHARD_TEST.txt b/packages/google-cloud-chronicle/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-chronicle/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-dataproc/SHARD_TEST.txt b/packages/google-cloud-dataproc/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-dataproc/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding From 363308980061fa18dfff9ae63fe801e5613b1120 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 17:07:00 -0700 Subject: [PATCH 28/39] 10 packages total --- packages/google-cloud-managedkafka/SHARD_TEST.txt | 1 + packages/google-cloud-optimization/SHARD_TEST.txt | 1 + packages/google-cloud-retail/SHARD_TEST.txt | 1 + 3 files changed, 3 insertions(+) create mode 100644 packages/google-cloud-managedkafka/SHARD_TEST.txt create mode 100644 packages/google-cloud-optimization/SHARD_TEST.txt create mode 100644 packages/google-cloud-retail/SHARD_TEST.txt diff --git a/packages/google-cloud-managedkafka/SHARD_TEST.txt b/packages/google-cloud-managedkafka/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-managedkafka/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-optimization/SHARD_TEST.txt b/packages/google-cloud-optimization/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-optimization/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding diff --git a/packages/google-cloud-retail/SHARD_TEST.txt b/packages/google-cloud-retail/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-retail/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding From 980d8eb2bb2f0e4f4a69946ab639d4fd98dcc135 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 17:10:15 -0700 Subject: [PATCH 29/39] change default for coverage percent --- .github/workflows/unittest.yml | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 78c7e20b8345..a2f4e9363b12 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -123,33 +123,37 @@ jobs: path: .coverage-results/ - name: Report coverage results if: steps.packages.outputs.num_files_changed > 0 + env: + # TODO: default to 100% coverage after next gapic-generator release + # https://github.com/googleapis/google-cloud-python/issues/17459 + DEFAULT_FAIL_UNDER: 99 run: | if [ -d .coverage-results ]; then find .coverage-results -type f -name '.coverage*' -exec mv {} . \; coverage combine - + # Find all modified packages modified_packages=$(git diff --name-only HEAD~1 -- packages | cut -d/ -f1,2 | sort -u) - + for pkg in ${modified_packages}; do if [ -d "${pkg}" ]; then echo "============================================================" echo "Evaluating coverage for package: ${pkg}" echo "============================================================" - + if [ -f "${pkg}/.coveragerc" ]; then echo "Using package-specific configuration: ${pkg}/.coveragerc" # If fail_under is specified in the package-specific .coveragerc, coverage report - # will automatically enforce it. Otherwise, we enforce the default 100%. + # will automatically enforce it. Otherwise, we enforce the default. if grep -q "fail_under" "${pkg}/.coveragerc"; then coverage report --rcfile="${pkg}/.coveragerc" else - echo "No fail_under specified in ${pkg}/.coveragerc, enforcing default of 100%" - coverage report --rcfile="${pkg}/.coveragerc" --fail-under=100 + echo "No fail_under specified in ${pkg}/.coveragerc, enforcing default" + coverage report --rcfile="${pkg}/.coveragerc" --fail-under="${DEFAULT_FAIL_UNDER}" fi else - echo "No .coveragerc found for ${pkg}, enforcing default of 100%" - coverage report --include="${pkg}/**" --fail-under=100 + echo "No .coveragerc found for ${pkg}, enforcing default + coverage report --include="${pkg}/**" --fail-under="${DEFAULT_FAIL_UNDER}" fi fi done From a5cc4979647c3c353f8cbcd8c0c4131bc7a7a98b Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 17:29:36 -0700 Subject: [PATCH 30/39] activated 11th package (enable sharding) --- packages/google-cloud-gke-multicloud/SHARD_TEST.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/google-cloud-gke-multicloud/SHARD_TEST.txt diff --git a/packages/google-cloud-gke-multicloud/SHARD_TEST.txt b/packages/google-cloud-gke-multicloud/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/google-cloud-gke-multicloud/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding From b36b559c0afa45812f9e4ab094b70ba6e3e85be6 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 17:35:40 -0700 Subject: [PATCH 31/39] fixed typo --- .github/workflows/unittest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index a2f4e9363b12..31f306bd9bf7 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -152,7 +152,7 @@ jobs: coverage report --rcfile="${pkg}/.coveragerc" --fail-under="${DEFAULT_FAIL_UNDER}" fi else - echo "No .coveragerc found for ${pkg}, enforcing default + echo "No .coveragerc found for ${pkg}, enforcing default" coverage report --include="${pkg}/**" --fail-under="${DEFAULT_FAIL_UNDER}" fi fi From c3cf49eb027638e57cc0f68821ad6e54771b079a Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 17:43:10 -0700 Subject: [PATCH 32/39] change shard logic --- ci/get_package_shards.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/get_package_shards.py b/ci/get_package_shards.py index 5147153f8562..d410697c824b 100644 --- a/ci/get_package_shards.py +++ b/ci/get_package_shards.py @@ -49,8 +49,8 @@ def group_packages(packages): num_packages = len(packages) # 1. Only shard if > 10 packages are being touched - # 2. Only add a new shard if we'd have > 10 in each shard (meaning size >= 11) - num_shards = num_packages // 11 + # 2. Only add a new shard if we'd have > 10 packages in at least one shard (meaning ceil(N / S) >= 11) + num_shards = (num_packages - 1) // 10 # Ensure at least 1 shard if we have packages num_shards = max(1, num_shards) From acdfb1890618a9fa2052d71967e8850f47cd7478 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 17:49:45 -0700 Subject: [PATCH 33/39] iterating on shard logic --- ci/get_package_shards.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ci/get_package_shards.py b/ci/get_package_shards.py index d410697c824b..6c72ede87aaf 100644 --- a/ci/get_package_shards.py +++ b/ci/get_package_shards.py @@ -49,8 +49,10 @@ def group_packages(packages): num_packages = len(packages) # 1. Only shard if > 10 packages are being touched - # 2. Only add a new shard if we'd have > 10 packages in at least one shard (meaning ceil(N / S) >= 11) - num_shards = (num_packages - 1) // 10 + # 2. Only add a new shard if any shard would have > 10 packages. + # To guarantee that no shard contains more than 10 packages (when distributed evenly), + # we need S >= N / 10, which means S = ceil(N / 10). + num_shards = math.ceil(num_packages / 10) # Ensure at least 1 shard if we have packages num_shards = max(1, num_shards) From 9c80a5105d48dce2c60852427b308305d99e549d Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 18:00:18 -0700 Subject: [PATCH 34/39] rename tests --- .github/workflows/unittest.yml | 12 ++++++------ ci/get_package_shards.py | 27 +++++++++++++-------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 31f306bd9bf7..f5ee10281c5d 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -13,7 +13,7 @@ permissions: contents: read jobs: - discover: + initialize: runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} @@ -38,14 +38,14 @@ jobs: echo "matrix=$(python3 ci/get_package_shards.py)" >> $GITHUB_OUTPUT unit: - needs: discover - if: needs.discover.outputs.matrix != '[]' && needs.discover.outputs.matrix != '' + needs: initialize + if: needs.initialize.outputs.matrix != '[]' && needs.initialize.outputs.matrix != '' runs-on: ubuntu-22.04 strategy: fail-fast: true matrix: python: ['3.9', '3.10', "3.11", "3.12", "3.13", "3.14"] - package_shard: ${{ fromJson(needs.discover.outputs.matrix) }} + package_shard: ${{ fromJson(needs.initialize.outputs.matrix) }} name: ${{ matrix.package_shard.is_sharded && format('unit ({0}, {1})', matrix.python, matrix.package_shard.name) || format('unit ({0})', matrix.python) }} steps: - name: Checkout @@ -79,8 +79,8 @@ jobs: path: .coverage.${{ matrix.python }}.* include-hidden-files: true - unit-complete: - needs: [discover, unit] + all-tests: + needs: [initialize, unit] if: always() runs-on: ubuntu-latest steps: diff --git a/ci/get_package_shards.py b/ci/get_package_shards.py index 6c72ede87aaf..4de99c64cf75 100644 --- a/ci/get_package_shards.py +++ b/ci/get_package_shards.py @@ -18,9 +18,9 @@ def get_packages(): def get_packages_to_test(): build_type = os.environ.get('BUILD_TYPE', 'presubmit') target_branch = os.environ.get('TARGET_BRANCH', 'main') - + all_packages = get_packages() - + if build_type == 'presubmit': git_diff_arg = f"origin/{target_branch}..." elif build_type == 'continuous': @@ -33,53 +33,52 @@ def get_packages_to_test(): changed_files = res.splitlines() except subprocess.CalledProcessError: return all_packages - + to_test = [] for pkg in all_packages: # Check if any changed file starts with the package path if any(f.startswith(pkg) for f in changed_files): to_test.append(pkg) - + return to_test def group_packages(packages): if not packages: return [] - + num_packages = len(packages) - + # 1. Only shard if > 10 packages are being touched # 2. Only add a new shard if any shard would have > 10 packages. # To guarantee that no shard contains more than 10 packages (when distributed evenly), # we need S >= N / 10, which means S = ceil(N / 10). num_shards = math.ceil(num_packages / 10) - + # Ensure at least 1 shard if we have packages num_shards = max(1, num_shards) - + # 3. Top out at 10 shards num_shards = min(10, num_shards) - + # Distribute packages between them as evenly as possible shard_size = math.ceil(num_packages / num_shards) - + shards = [] for i in range(num_shards): start = i * shard_size end = min((i + 1) * shard_size, num_packages) if start >= num_packages: break - shard_packages = packages[start:end] index = i + 1 name = f"Shard {index}" - + num_in_shard = len(shard_packages) # Calculate a descriptive range for step visibility if len(shard_packages) == 1: desc = shard_packages[0].strip('/').split('/')[-1] else: - desc = f"{shard_packages[0].strip('/').split('/')[-1]}...{shard_packages[-1].strip('/').split('/')[-1]}" - + desc = f"{shard_packages[0].strip('/').split('/')[-1]}...{shard_packages[-1].strip('/').split('/')[-1]} ({num_in_shard})" + shards.append({ "name": name, "index": index, From cf554cabbf84e1fdc87f38b2e9f096a45892e1ce Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 18:02:52 -0700 Subject: [PATCH 35/39] add label to number in shard --- ci/get_package_shards.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/get_package_shards.py b/ci/get_package_shards.py index 4de99c64cf75..a5599146abd5 100644 --- a/ci/get_package_shards.py +++ b/ci/get_package_shards.py @@ -77,7 +77,7 @@ def group_packages(packages): if len(shard_packages) == 1: desc = shard_packages[0].strip('/').split('/')[-1] else: - desc = f"{shard_packages[0].strip('/').split('/')[-1]}...{shard_packages[-1].strip('/').split('/')[-1]} ({num_in_shard})" + desc = f"{shard_packages[0].strip('/').split('/')[-1]}...{shard_packages[-1].strip('/').split('/')[-1]} ({num_in_shard} packages)" shards.append({ "name": name, From 886d6d9d9040bb47171de313cc82fef16e195aa3 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 18:07:20 -0700 Subject: [PATCH 36/39] unit tests fail if initialize fails --- .github/workflows/unittest.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index f5ee10281c5d..f1685cbb62d4 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -86,6 +86,12 @@ jobs: steps: - name: Check unit test results run: | + # 1. Check initialize job + if [[ "${{ needs.initialize.result }}" != "success" ]]; then + echo "Error: The initialize job status was: ${{ needs.initialize.result }}" + exit 1 + fi + # 2. Check unit test shards if [[ "${{ needs.unit.result }}" != "success" && "${{ needs.unit.result }}" != "skipped" ]]; then echo "Unit tests failed" exit 1 From 83ca04a45cc756898ca93ef25dfc5446e1a27eb6 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 18:10:46 -0700 Subject: [PATCH 37/39] added known-bad package --- packages/sqlalchemy-spanner/SHARD_TEST.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/sqlalchemy-spanner/SHARD_TEST.txt diff --git a/packages/sqlalchemy-spanner/SHARD_TEST.txt b/packages/sqlalchemy-spanner/SHARD_TEST.txt new file mode 100644 index 000000000000..b7ac1b35614f --- /dev/null +++ b/packages/sqlalchemy-spanner/SHARD_TEST.txt @@ -0,0 +1 @@ +Test change for sharding From ae05642c77ed529b0a6782fd6e51477b919cb2c3 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 19:09:16 -0700 Subject: [PATCH 38/39] added summary to cover step --- .github/workflows/unittest.yml | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index f1685cbb62d4..7c97e149daa1 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -141,28 +141,57 @@ jobs: # Find all modified packages modified_packages=$(git diff --name-only HEAD~1 -- packages | cut -d/ -f1,2 | sort -u) + failed_packages=() + passed_packages=() + for pkg in ${modified_packages}; do if [ -d "${pkg}" ]; then echo "============================================================" echo "Evaluating coverage for package: ${pkg}" echo "============================================================" + set +e if [ -f "${pkg}/.coveragerc" ]; then echo "Using package-specific configuration: ${pkg}/.coveragerc" # If fail_under is specified in the package-specific .coveragerc, coverage report # will automatically enforce it. Otherwise, we enforce the default. if grep -q "fail_under" "${pkg}/.coveragerc"; then - coverage report --rcfile="${pkg}/.coveragerc" + coverage report --rcfile="${pkg}/.coveragerc" --include="${pkg}/**" else echo "No fail_under specified in ${pkg}/.coveragerc, enforcing default" - coverage report --rcfile="${pkg}/.coveragerc" --fail-under="${DEFAULT_FAIL_UNDER}" + coverage report --rcfile="${pkg}/.coveragerc" --include="${pkg}/**" --fail-under="${DEFAULT_FAIL_UNDER}" fi else echo "No .coveragerc found for ${pkg}, enforcing default" coverage report --include="${pkg}/**" --fail-under="${DEFAULT_FAIL_UNDER}" fi + status=$? + set -e + + if [ ${status} -ne 0 ]; then + failed_packages+=("${pkg}") + else + passed_packages+=("${pkg}") + fi fi done + + echo "============================================================" + echo "Coverage Evaluation Summary" + echo "============================================================" + if [ ${#passed_packages[@]} -gt 0 ]; then + echo "Passed packages:" + for pkg in "${passed_packages[@]}"; do + echo " - ${pkg}" + done + fi + if [ ${#failed_packages[@]} -gt 0 ]; then + echo "Failed packages:" + for pkg in "${failed_packages[@]}"; do + echo " - ${pkg}" + done + exit 1 + fi else echo "Error: No coverage results were downloaded from the unit test jobs." echo "This usually means the unit tests did not run or failed to upload their coverage files." From 7b565a4f4941c6159decfdba84394a17db50e9d6 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Fri, 12 Jun 2026 19:09:44 -0700 Subject: [PATCH 39/39] added no-fail .coveragerc to sqlalchemy-spanner --- packages/sqlalchemy-spanner/.coveragerc | 36 +++++++++++++++++++++++++ packages/sqlalchemy-spanner/noxfile.py | 14 +++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 packages/sqlalchemy-spanner/.coveragerc diff --git a/packages/sqlalchemy-spanner/.coveragerc b/packages/sqlalchemy-spanner/.coveragerc new file mode 100644 index 000000000000..d09941ce0eb9 --- /dev/null +++ b/packages/sqlalchemy-spanner/.coveragerc @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2026 Google LLC +# +# 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 +# +# https://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. + +[run] +branch = True +omit = + google/__init__.py + google/cloud/sqlalchemy_spanner/requirements.py + +[report] +fail_under = 0 +show_missing = True +exclude_lines = + # Re-enable the standard pragma + pragma: NO COVER + # Ignore debug-only repr + def __repr__ + # Ignore abstract methods + raise NotImplementedError +omit = + */site-packages/*.py + google/__init__.py + google/cloud/sqlalchemy_spanner/requirements.py diff --git a/packages/sqlalchemy-spanner/noxfile.py b/packages/sqlalchemy-spanner/noxfile.py index 187d4e7e8924..8adeb9388354 100644 --- a/packages/sqlalchemy-spanner/noxfile.py +++ b/packages/sqlalchemy-spanner/noxfile.py @@ -85,6 +85,7 @@ class = StreamHandler UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", + "pytest-cov", ] UNIT_TEST_EXTERNAL_DEPENDENCIES = [ @@ -368,7 +369,18 @@ def unit(session, test_type): *UNIT_TEST_DEPENDENCIES, ) session.install(".") - session.run("py.test", "--quiet", os.path.join("tests/unit"), *session.posargs) + session.run( + "py.test", + "--quiet", + "--cov=google.cloud.sqlalchemy_spanner", + "--cov=tests/unit", + "--cov-append", + "--cov-config=.coveragerc", + "--cov-report=", + "--cov-fail-under=0", + os.path.join("tests/unit"), + *session.posargs, + ) return