diff --git a/.circleci/config.yml b/.circleci/config.yml index 073960d..36311de 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" @@ -145,6 +145,69 @@ jobs: files: "coverage-results/coverage-cpython<>-<>.xml" flags: "cpython<>,<>" + test-freethreaded: + executor: + name: cpython_executor + version: <> + parameters: + python_version: + type: enum + description: "python version" + enum: ["3.13", "3.14"] + event_loop: + type: enum + description: "event loop type" + enum: ["asyncio", "uvloop"] + environment: + COVERAGE_FILE: "coverage-results/.coverage.cpython<>t-<>" + HYPOTHESIS_PROFILE: "ci" + BIND_ADDR: "127.0.0.1" + 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: name: pypy_executor @@ -246,6 +309,16 @@ workflows: python_version: ["3.10", "3.11", "3.12", "3.13", "3.14"] requires: - build + - test-freethreaded: + <<: *base-job + name: "test-asyncio-<< matrix.python_version >>t" + matrix: + alias: "test-freethreaded-asyncio" + parameters: + event_loop: ["asyncio"] + python_version: ["3.13", "3.14"] + requires: + - build - test: <<: *base-job name: "test-uvloop-<< matrix.python_version >>" @@ -257,11 +330,23 @@ workflows: requires: - build - "test-asyncio-<< matrix.python_version >>" + - test-freethreaded: + <<: *base-job + name: "test-uvloop-<< matrix.python_version >>t" + matrix: + alias: "test-freethreaded-uvloop" + parameters: + event_loop: ["uvloop"] + python_version: ["3.13", "3.14"] + requires: + - build - coverage: <<: *base-job requires: - test-cpython-asyncio - test-cpython-uvloop + - test-freethreaded-asyncio + - test-freethreaded-uvloop - test-asyncio-pypy3.11 - deploy: requires: @@ -270,6 +355,8 @@ workflows: - docs - test-cpython-asyncio - test-cpython-uvloop + - test-freethreaded-asyncio + - test-freethreaded-uvloop - test-asyncio-pypy3.11 context: - docker-hub-credentials 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"