From e2feb8a187e5dd705cb1659daa6c00fc415ca5df Mon Sep 17 00:00:00 2001 From: Cole Maclean Date: Wed, 22 Oct 2025 20:28:33 -0700 Subject: [PATCH 1/7] chore: v5.0.1dev --- src/aiosmtplib/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aiosmtplib/__init__.py b/src/aiosmtplib/__init__.py index 1eb7c31..92e2e57 100644 --- a/src/aiosmtplib/__init__.py +++ b/src/aiosmtplib/__init__.py @@ -34,7 +34,7 @@ __title__ = "aiosmtplib" -__version__ = "5.0.0" +__version__ = "5.0.1dev0" __author__ = "Cole Maclean" __license__ = "MIT" __copyright__ = "Copyright 2022 Cole Maclean" From 8d7774e79133807bd68bebae90285c3606034aa6 Mon Sep 17 00:00:00 2001 From: Cole Maclean Date: Thu, 30 Oct 2025 20:51:52 -0700 Subject: [PATCH 2/7] chore: test free-threaded build --- .circleci/config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 073960d..6b0e74e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,7 +9,7 @@ executors: version: default: "3.12" type: enum - enum: ["3.10", "3.11", "3.12", "3.13", "3.14"] + enum: ["3.10", "3.11", "3.12", "3.13", "3.13t", "3.14", "3.14t"] docker: - image: "ghcr.io/astral-sh/uv:python<>-bookworm" resource_class: small @@ -91,7 +91,7 @@ jobs: python_version: type: enum description: "python version" - enum: ["3.10", "3.11", "3.12", "3.13", "3.14"] + enum: ["3.10", "3.11", "3.12", "3.13", "3.13t", "3.14", "3.14t"] event_loop: type: enum description: "event loop type" @@ -243,7 +243,7 @@ workflows: alias: "test-cpython-asyncio" parameters: event_loop: ["asyncio"] - python_version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python_version: ["3.10", "3.11", "3.12", "3.13", "3.13t", "3.14", "3.14t"] requires: - build - test: @@ -253,7 +253,7 @@ workflows: alias: "test-cpython-uvloop" parameters: event_loop: ["uvloop"] - python_version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python_version: ["3.10", "3.11", "3.12", "3.13", "3.13t", "3.14", "3.14t"] requires: - build - "test-asyncio-<< matrix.python_version >>" From 1eacb1f93a1c74132b2164470901c62c26774a48 Mon Sep 17 00:00:00 2001 From: Cole Maclean Date: Thu, 30 Oct 2025 21:08:48 -0700 Subject: [PATCH 3/7] chore: test free-threaded build, try2 --- .circleci/config.yml | 62 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6b0e74e..c486d1e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,6 +15,17 @@ executors: resource_class: small environment: FORCE_COLOR: "1" + freethreading_executor: + parameters: + version: + default: "3.14t" + type: enum + enum: ["3.13t", "3.14t"] + docker: + - image: "quay.io/pypa/manylinux_2_28_x86_64 python<>" + resource_class: small + environment: + FORCE_COLOR: "1" pypy_executor: docker: - image: "pypy:3.11-bookworm" @@ -91,7 +102,7 @@ jobs: python_version: type: enum description: "python version" - enum: ["3.10", "3.11", "3.12", "3.13", "3.13t", "3.14", "3.14t"] + enum: ["3.10", "3.11", "3.12", "3.13", "3.14"] event_loop: type: enum description: "event loop type" @@ -100,7 +111,7 @@ jobs: COVERAGE_FILE: "coverage-results/.coverage.cpython<>-<>" HYPOTHESIS_PROFILE: "ci" BIND_ADDR: "127.0.0.1" - steps: + steps: &test-steps - checkout - attach_workspace: at: dist @@ -145,6 +156,25 @@ jobs: files: "coverage-results/coverage-cpython<>-<>.xml" flags: "cpython<>,<>" + test-freethreading: + executor: + name: freethreading_executor + version: <> + parameters: + python_version: + type: enum + description: "python version" + enum: ["3.13t", "3.14t"] + event_loop: + type: enum + description: "event loop type" + enum: ["asyncio", "uvloop"] + environment: + COVERAGE_FILE: "coverage-results/.coverage.cpython<>-<>" + HYPOTHESIS_PROFILE: "ci" + BIND_ADDR: "127.0.0.1" + steps: *test-steps + test-pypy: executor: name: pypy_executor @@ -243,7 +273,17 @@ workflows: alias: "test-cpython-asyncio" parameters: event_loop: ["asyncio"] - python_version: ["3.10", "3.11", "3.12", "3.13", "3.13t", "3.14", "3.14t"] + python_version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + requires: + - build + - test-freethreading: + <<: *base-job + name: "test-freethreading-<< matrix.python_version >>" + matrix: + alias: "test-freethreading-asyncio" + parameters: + event_loop: ["asyncio"] + python_version: ["3.13t", "3.14t"] requires: - build - test: @@ -253,15 +293,27 @@ workflows: alias: "test-cpython-uvloop" parameters: event_loop: ["uvloop"] - python_version: ["3.10", "3.11", "3.12", "3.13", "3.13t", "3.14", "3.14t"] + python_version: ["3.10", "3.11", "3.12", "3.13", "3.14"] requires: - build - "test-asyncio-<< matrix.python_version >>" + - test-freethreading: + <<: *base-job + name: "test-freethreading-<< matrix.python_version >>" + matrix: + alias: "test-freethreading-uvloop" + parameters: + event_loop: ["uvloop"] + python_version: ["3.13t", "3.14t"] + requires: + - build - coverage: <<: *base-job requires: - test-cpython-asyncio - test-cpython-uvloop + - test-freethreading-asyncio + - test-freethreading-uvloop - test-asyncio-pypy3.11 - deploy: requires: @@ -270,6 +322,8 @@ workflows: - docs - test-cpython-asyncio - test-cpython-uvloop + - test-freethreading-asyncio + - test-freethreading-uvloop - test-asyncio-pypy3.11 context: - docker-hub-credentials From 55c7f2af6c1e06f4bb8a40e8a5a4fbe79dd2a197 Mon Sep 17 00:00:00 2001 From: Cole Maclean Date: Thu, 30 Oct 2025 21:12:05 -0700 Subject: [PATCH 4/7] chore: test free-threaded build, try3 --- .circleci/config.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c486d1e..9112091 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,7 +9,7 @@ executors: version: default: "3.12" type: enum - enum: ["3.10", "3.11", "3.12", "3.13", "3.13t", "3.14", "3.14t"] + enum: ["3.10", "3.11", "3.12", "3.13", "3.14"] docker: - image: "ghcr.io/astral-sh/uv:python<>-bookworm" resource_class: small @@ -22,7 +22,7 @@ executors: type: enum enum: ["3.13t", "3.14t"] docker: - - image: "quay.io/pypa/manylinux_2_28_x86_64 python<>" + - image: "quay.io/pypa/manylinux_2_28_x86_64_python<>" resource_class: small environment: FORCE_COLOR: "1" @@ -278,9 +278,9 @@ workflows: - build - test-freethreading: <<: *base-job - name: "test-freethreading-<< matrix.python_version >>" + name: "test-asyncio-<< matrix.python_version >>" matrix: - alias: "test-freethreading-asyncio" + alias: "test-asyncio-t" parameters: event_loop: ["asyncio"] python_version: ["3.13t", "3.14t"] @@ -299,9 +299,9 @@ workflows: - "test-asyncio-<< matrix.python_version >>" - test-freethreading: <<: *base-job - name: "test-freethreading-<< matrix.python_version >>" + name: "test-uvloop-<< matrix.python_version >>" matrix: - alias: "test-freethreading-uvloop" + alias: "test-uvloop-t" parameters: event_loop: ["uvloop"] python_version: ["3.13t", "3.14t"] From d7c014e61516a9dfb7b31ed03ae3772b4244594f Mon Sep 17 00:00:00 2001 From: Cole Maclean Date: Thu, 30 Oct 2025 21:21:34 -0700 Subject: [PATCH 5/7] chore: update base image --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9112091..8ab39bc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -11,7 +11,7 @@ executors: type: enum enum: ["3.10", "3.11", "3.12", "3.13", "3.14"] docker: - - image: "ghcr.io/astral-sh/uv:python<>-bookworm" + - image: "ghcr.io/astral-sh/uv:python<>-trixie" resource_class: small environment: FORCE_COLOR: "1" From 12650c424eb03e2d075a5c23c7f24cfe95a245f3 Mon Sep 17 00:00:00 2001 From: Cole Maclean Date: Thu, 30 Oct 2025 21:23:26 -0700 Subject: [PATCH 6/7] chore: fix naming --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8ab39bc..c609ef8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -280,7 +280,7 @@ workflows: <<: *base-job name: "test-asyncio-<< matrix.python_version >>" matrix: - alias: "test-asyncio-t" + alias: "test-freethreading-asyncio" parameters: event_loop: ["asyncio"] python_version: ["3.13t", "3.14t"] @@ -301,7 +301,7 @@ workflows: <<: *base-job name: "test-uvloop-<< matrix.python_version >>" matrix: - alias: "test-uvloop-t" + alias: "test-freethreading-uvloop" parameters: event_loop: ["uvloop"] python_version: ["3.13t", "3.14t"] From fba732e0a35e7857c12c65008695429311e275c8 Mon Sep 17 00:00:00 2001 From: Cole Maclean Date: Thu, 30 Oct 2025 21:58:04 -0700 Subject: [PATCH 7/7] chore: switch to uv install --- .circleci/config.yml | 91 ++++++++++++++++++++++++++++++-------------- 1 file changed, 62 insertions(+), 29 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c609ef8..36311de 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,17 +15,6 @@ executors: resource_class: small environment: FORCE_COLOR: "1" - freethreading_executor: - parameters: - version: - default: "3.14t" - type: enum - enum: ["3.13t", "3.14t"] - docker: - - image: "quay.io/pypa/manylinux_2_28_x86_64_python<>" - resource_class: small - environment: - FORCE_COLOR: "1" pypy_executor: docker: - image: "pypy:3.11-bookworm" @@ -111,7 +100,7 @@ jobs: COVERAGE_FILE: "coverage-results/.coverage.cpython<>-<>" HYPOTHESIS_PROFILE: "ci" BIND_ADDR: "127.0.0.1" - steps: &test-steps + steps: - checkout - attach_workspace: at: dist @@ -156,24 +145,68 @@ jobs: files: "coverage-results/coverage-cpython<>-<>.xml" flags: "cpython<>,<>" - test-freethreading: + test-freethreaded: executor: - name: freethreading_executor + name: cpython_executor version: <> parameters: python_version: type: enum description: "python version" - enum: ["3.13t", "3.14t"] + enum: ["3.13", "3.14"] event_loop: type: enum description: "event loop type" enum: ["asyncio", "uvloop"] environment: - COVERAGE_FILE: "coverage-results/.coverage.cpython<>-<>" + COVERAGE_FILE: "coverage-results/.coverage.cpython<>t-<>" HYPOTHESIS_PROFILE: "ci" BIND_ADDR: "127.0.0.1" - steps: *test-steps + steps: + - checkout + - attach_workspace: + at: dist + - run: uv python install <>t + - run: uv venv --python=<>t + - run: uv pip install --python=<>t -r requirements-dev.txt + - when: + condition: + equal: ["uvloop", <>] + steps: + - run: uv pip install $(find dist -name aiosmtplib-*.whl)[uvloop] + - unless: + condition: + equal: ["uvloop", <>] + steps: + - run: uv pip install $(find dist -name aiosmtplib-*.whl) + - run: | + uv run --python=<>t --with aiosmtplib --no-project -- python -m pytest \ + --cov \ + --cov-report=xml:coverage-results/coverage-cpython<>t-<>.xml \ + --cov-config=pyproject.toml \ + --junitxml=test-results/junit-cpython<>t-<>.xml \ + --override-ini=pythonpath= \ + --event-loop=<> \ + --bind-addr=$BIND_ADDR \ + --hypothesis-profile $HYPOTHESIS_PROFILE + - store_artifacts: + path: test-results + - store_test_results: + path: test-results + - persist_to_workspace: + root: coverage-results + paths: + - .coverage.* + - codecov/upload: + report_type: test_results + disable_search: true + files: "test-results/junit-cpython<>t-<>.xml" + flags: "cpython<>t,<>" + - codecov/upload: + report_type: coverage + disable_search: true + files: "coverage-results/coverage-cpython<>t-<>.xml" + flags: "cpython<>t,<>" test-pypy: executor: @@ -276,14 +309,14 @@ workflows: python_version: ["3.10", "3.11", "3.12", "3.13", "3.14"] requires: - build - - test-freethreading: + - test-freethreaded: <<: *base-job - name: "test-asyncio-<< matrix.python_version >>" + name: "test-asyncio-<< matrix.python_version >>t" matrix: - alias: "test-freethreading-asyncio" + alias: "test-freethreaded-asyncio" parameters: event_loop: ["asyncio"] - python_version: ["3.13t", "3.14t"] + python_version: ["3.13", "3.14"] requires: - build - test: @@ -297,14 +330,14 @@ workflows: requires: - build - "test-asyncio-<< matrix.python_version >>" - - test-freethreading: + - test-freethreaded: <<: *base-job - name: "test-uvloop-<< matrix.python_version >>" + name: "test-uvloop-<< matrix.python_version >>t" matrix: - alias: "test-freethreading-uvloop" + alias: "test-freethreaded-uvloop" parameters: event_loop: ["uvloop"] - python_version: ["3.13t", "3.14t"] + python_version: ["3.13", "3.14"] requires: - build - coverage: @@ -312,8 +345,8 @@ workflows: requires: - test-cpython-asyncio - test-cpython-uvloop - - test-freethreading-asyncio - - test-freethreading-uvloop + - test-freethreaded-asyncio + - test-freethreaded-uvloop - test-asyncio-pypy3.11 - deploy: requires: @@ -322,8 +355,8 @@ workflows: - docs - test-cpython-asyncio - test-cpython-uvloop - - test-freethreading-asyncio - - test-freethreading-uvloop + - test-freethreaded-asyncio + - test-freethreaded-uvloop - test-asyncio-pypy3.11 context: - docker-hub-credentials