From 9a2f5678dee96b138fd4776962280798d4a6621f Mon Sep 17 00:00:00 2001 From: "Jeffrey A. Clark" Date: Mon, 28 Apr 2025 11:48:32 -0400 Subject: [PATCH 1/5] PYTHON-5353 Pin github actions (#2318) --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/dist.yml | 2 +- .github/workflows/release-python.yml | 4 ++-- .github/workflows/test-python.yml | 30 ++++++++++++++-------------- .github/workflows/zizmor.yml | 4 ++-- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 98cfa2f43..f7cfea144 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -46,7 +46,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v3 + uses: github/codeql-action/init@28deaeda66b76a05916b6923827895f2b14ab387 # v3 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} @@ -63,6 +63,6 @@ jobs: pip install -e . - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 + uses: github/codeql-action/analyze@28deaeda66b76a05916b6923827895f2b14ab387 # v3 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/dist.yml b/.github/workflows/dist.yml index 81f86721e..be172864d 100644 --- a/.github/workflows/dist.yml +++ b/.github/workflows/dist.yml @@ -60,7 +60,7 @@ jobs: - name: Set up QEMU if: runner.os == 'Linux' - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3 with: # setup-qemu-action by default uses `tonistiigi/binfmt:latest` image, # which is out of date. This causes seg faults during build. diff --git a/.github/workflows/release-python.yml b/.github/workflows/release-python.yml index a684ff79b..9cce310d9 100644 --- a/.github/workflows/release-python.yml +++ b/.github/workflows/release-python.yml @@ -81,14 +81,14 @@ jobs: name: all-dist-${{ github.run_id }} path: dist/ - name: Publish package distributions to TestPyPI - uses: pypa/gh-action-pypi-publish@release/v1 + uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # release/v1 with: repository-url: https://test.pypi.org/legacy/ skip-existing: true attestations: ${{ env.DRY_RUN }} - name: Publish package distributions to PyPI if: startsWith(env.DRY_RUN, 'false') - uses: pypa/gh-action-pypi-publish@release/v1 + uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # release/v1 post-publish: needs: [publish] diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index 6d215bed0..05b87f4f8 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -23,9 +23,9 @@ jobs: with: persist-credentials: false - name: Install just - uses: extractions/setup-just@v3 + uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 with: enable-cache: true python-version: "3.9" @@ -63,16 +63,16 @@ jobs: with: persist-credentials: false - name: Install just - uses: extractions/setup-just@v3 + uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 with: enable-cache: true python-version: ${{ matrix.python-version }} - name: Install dependencies run: just install - name: Start MongoDB - uses: supercharge/mongodb-github-action@1.12.0 + uses: supercharge/mongodb-github-action@90004df786821b6308fb02299e5835d0dae05d0d # 1.12.0 with: mongodb-version: 6.0 - name: Run tests @@ -86,14 +86,14 @@ jobs: with: persist-credentials: false - name: Install just - uses: extractions/setup-just@v3 + uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 with: enable-cache: true python-version: "3.9" - name: Start MongoDB - uses: supercharge/mongodb-github-action@1.12.0 + uses: supercharge/mongodb-github-action@90004df786821b6308fb02299e5835d0dae05d0d # 1.12.0 with: mongodb-version: '8.0.0-rc4' - name: Install dependencies @@ -111,12 +111,12 @@ jobs: with: persist-credentials: false - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 with: enable-cache: true python-version: "3.9" - name: Install just - uses: extractions/setup-just@v3 + uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install dependencies run: just install - name: Build docs @@ -130,12 +130,12 @@ jobs: with: persist-credentials: false - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 with: enable-cache: true python-version: "3.9" - name: Install just - uses: extractions/setup-just@v3 + uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install dependencies run: just install - name: Build docs @@ -152,12 +152,12 @@ jobs: with: persist-credentials: false - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 with: enable-cache: true python-version: "${{matrix.python}}" - name: Install just - uses: extractions/setup-just@v3 + uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install dependencies run: | just install @@ -211,7 +211,7 @@ jobs: # Test sdist on lowest supported Python python-version: '3.9' - name: Start MongoDB - uses: supercharge/mongodb-github-action@1.12.0 + uses: supercharge/mongodb-github-action@90004df786821b6308fb02299e5835d0dae05d0d # 1.12.0 - name: Run connect test from sdist shell: bash run: | diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index 31afeb665..16f2ba2cb 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -18,7 +18,7 @@ jobs: with: persist-credentials: false - name: Setup Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 + uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1 - name: Get zizmor run: cargo install zizmor - name: Run zizmor 🌈 @@ -26,7 +26,7 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@v3 + uses: github/codeql-action/upload-sarif@28deaeda66b76a05916b6923827895f2b14ab387 # v3 with: sarif_file: results.sarif category: zizmor From 02c3df6fc99332be87a5c79a9608c98ddb30afe7 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 28 Apr 2025 13:59:36 -0500 Subject: [PATCH 2/5] PYTHON-5298 Update lock file and clean up dependency installation (#2317) --- .evergreen/scripts/configure-env.sh | 3 ++- .evergreen/scripts/install-dependencies.sh | 26 +++++++++++++--------- uv.lock | 1 - 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 81713f419..8dc328aab 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -96,7 +96,7 @@ EOT _bin_path="" if [ "Windows_NT" == "${OS:-}" ]; then _bin_path="/cygdrive/c/Python/Current/Scripts" -elif [ "$(uname -s)" != "Darwin" ]; then +elif [ "$(uname -s)" == "Darwin" ]; then _bin_path="/Library/Frameworks/Python.Framework/Versions/Current/bin" else _bin_path="/opt/python/Current/bin" @@ -106,6 +106,7 @@ if [ -d "${_bin_path}" ]; then if [ "Windows_NT" == "${OS:-}" ]; then _suffix=".exe" fi + echo "Symlinking binaries from toolchain" mkdir -p $PYMONGO_BIN_DIR ln -s ${_bin_path}/just${_suffix} $PYMONGO_BIN_DIR/just${_suffix} ln -s ${_bin_path}/uv${_suffix} $PYMONGO_BIN_DIR/uv${_suffix} diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index 780d250a2..ec389690c 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -10,9 +10,6 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi -_BIN_DIR=${PYMONGO_BIN_DIR:-$HOME/.local/bin} -export PATH="$PATH:${_BIN_DIR}" - # Helper function to pip install a dependency using a temporary python env. function _pip_install() { _HERE=$(dirname ${BASH_SOURCE:-$0}) @@ -28,23 +25,27 @@ function _pip_install() { if [ "Windows_NT" = "${OS:-}" ]; then _suffix=".exe" fi - ln -s "$(which $2)" $_BIN_DIR/${2}${_suffix} + ln -s "$(which $2)" $PYMONGO_BIN_DIR/${2}${_suffix} # uv also comes with a uvx binary. if [ $2 == "uv" ]; then - ln -s "$(which uvx)" $_BIN_DIR/uvx${_suffix} + ln -s "$(which uvx)" $PYMONGO_BIN_DIR/uvx${_suffix} fi - echo "Installed to ${_BIN_DIR}" + echo "Installed to ${PYMONGO_BIN_DIR}" echo "Installing $2 using pip... done." } - # Ensure just is installed. -if ! command -v just >/dev/null 2>&1; then +if ! command -v just &>/dev/null; then # On most systems we can install directly. _TARGET="" if [ "Windows_NT" = "${OS:-}" ]; then _TARGET="--target x86_64-pc-windows-msvc" fi + if [ -z "${PYMONGO_BIN_DIR:-}" ]; then + echo "Please install just!" + exit 1 + fi + _BIN_DIR=$PYMONGO_BIN_DIR echo "Installing just..." mkdir -p "$_BIN_DIR" 2>/dev/null || true curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- $_TARGET --to "$_BIN_DIR" || { @@ -53,8 +54,13 @@ if ! command -v just >/dev/null 2>&1; then echo "Installing just... done." fi -# Install uv. -if ! command -v uv >/dev/null 2>&1; then +# Ensure uv is installed. +if ! command -v uv &>/dev/null; then + if [ -z "${PYMONGO_BIN_DIR:-}" ]; then + echo "Please install uv!" + exit 1 + fi + _BIN_DIR=$PYMONGO_BIN_DIR echo "Installing uv..." # On most systems we can install directly. curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="$_BIN_DIR" INSTALLER_NO_MODIFY_PATH=1 sh || { diff --git a/uv.lock b/uv.lock index 6bc083979..aa23663a8 100644 --- a/uv.lock +++ b/uv.lock @@ -998,7 +998,6 @@ sdist = { url = "https://files.pythonhosted.org/packages/07/e9/ae44ea7d7605df9e5 [[package]] name = "pymongo" -version = "4.13.0.dev0" source = { editable = "." } dependencies = [ { name = "dnspython" }, From e7db0e34aadeeccd320683fe33434100ef4c1540 Mon Sep 17 00:00:00 2001 From: Noah Stapp Date: Tue, 29 Apr 2025 08:42:22 -0400 Subject: [PATCH 3/5] PYTHON-5342 - Skip async test_srv_polling tests on Windows (#2320) --- test/asynchronous/test_srv_polling.py | 2 ++ test/test_srv_polling.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/test/asynchronous/test_srv_polling.py b/test/asynchronous/test_srv_polling.py index 3dcd21ef1..b40aa90cf 100644 --- a/test/asynchronous/test_srv_polling.py +++ b/test/asynchronous/test_srv_polling.py @@ -20,6 +20,7 @@ import sys import time from test.utils_shared import FunctionCallRecorder from typing import Any +from unittest import skipIf sys.path[0:0] = [""] @@ -91,6 +92,7 @@ class SrvPollingKnobs: self.disable() +@skipIf(not _IS_SYNC and sys.platform == "win32", "PYTHON-5342 known issue on Windows") class TestSrvPolling(AsyncPyMongoTestCase): BASE_SRV_RESPONSE = [ ("localhost.test.build.10gen.cc", 27017), diff --git a/test/test_srv_polling.py b/test/test_srv_polling.py index df802acb4..0d84d4124 100644 --- a/test/test_srv_polling.py +++ b/test/test_srv_polling.py @@ -20,6 +20,7 @@ import sys import time from test.utils_shared import FunctionCallRecorder from typing import Any +from unittest import skipIf sys.path[0:0] = [""] @@ -91,6 +92,7 @@ class SrvPollingKnobs: self.disable() +@skipIf(not _IS_SYNC and sys.platform == "win32", "PYTHON-5342 known issue on Windows") class TestSrvPolling(PyMongoTestCase): BASE_SRV_RESPONSE = [ ("localhost.test.build.10gen.cc", 27017), From 08e7f036a22b1ee38bed9793d494b7f5fe174c04 Mon Sep 17 00:00:00 2001 From: "Jeffrey A. Clark" Date: Tue, 29 Apr 2025 09:26:40 -0400 Subject: [PATCH 4/5] PYTHON-5357 Update changelog for 4.12.1 release (#2321) --- doc/changelog.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/changelog.rst b/doc/changelog.rst index db344d487..87918639c 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -2,7 +2,7 @@ Changelog ========= -Changes in Version 4.12.1 (XXXX/XX/XX) +Changes in Version 4.12.1 (2025/04/29) -------------------------------------- Version 4.12.1 is a bug fix release. From 85c5ee45b532adc5004dac00d920fa5378f28833 Mon Sep 17 00:00:00 2001 From: "Jeffrey A. Clark" Date: Wed, 30 Apr 2025 08:45:46 -0400 Subject: [PATCH 5/5] PYTHON-5364 Update package description (#2324) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4da75b4c1..fb2dd5813 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "hatchling.build" [project] name = "pymongo" dynamic = ["version", "dependencies", "optional-dependencies"] -description = "Python driver for MongoDB " +description = "PyMongo - the Official MongoDB Python driver" readme = "README.md" license = {file="LICENSE"} requires-python = ">=3.9"