Skip to content

Build linux/macos arm64/aarch64 wheels on native runners - #1308

Open
ddelange wants to merge 5 commits into
MagicStack:masterfrom
ddelange:native-builds
Open

Build linux/macos arm64/aarch64 wheels on native runners#1308
ddelange wants to merge 5 commits into
MagicStack:masterfrom
ddelange:native-builds

Conversation

@ddelange

@ddelange ddelange commented Feb 22, 2026

Copy link
Copy Markdown
Contributor

hi @elprans 👋

I did the initial implementation of the parallel release.yml in #954 and I'm providing some maintenance here :)

This PR contains the following commits:

  1. switch to linux arm64 native runner (blog post) and macos x86 native runner (blog post)
  2. fix CI rot related to setuptools deprecating pkg_resources
  3. various CI speedups
  4. fix CI rot related to cpython 3.9 on arm64 macos runners

the runner changes avoid emulation (qemu on linux, rosetta on macos), mainly for speedup (e.g. linux aarch64 wheel build is currently taking 30+ mins vs. 4 mins for x86). i left the setup-qemu step in place in case you want to add more wheel architectures for which no native runners exist

@ddelange
ddelange force-pushed the native-builds branch 4 times, most recently from 05c8e87 to d22a029 Compare February 22, 2026 21:58
setuptools 82.0.0 removed pkg_resources, breaking the build.
Use packaging.requirements.Requirement instead, and switch the
Cython dependency string to PEP 508 format (no parentheses).
- Switch to official PyPA build frontend for sdist ref https://pypi.org/project/build/
- Cancel running jobs when a new commit is pushed to a PR ref https://stackoverflow.com/questions/66335225#comment133398800_72408109
- Switch from setup-python to setup-uv ref https://github.com/astral-sh/setup-uv
@ddelange
ddelange force-pushed the native-builds branch 4 times, most recently from 5be2c72 to dafc5bb Compare February 22, 2026 22:26
Comment on lines +31 to +33
# github does not provide 3.9 cpython for arm64 runners
- python-version: "3.9"
os: macos-15

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fyi Python 3.9 is EOL since 31 Oct 2025, can consider dropping support

@ddelange
ddelange force-pushed the native-builds branch 3 times, most recently from 2403b7b to 434ebc2 Compare February 23, 2026 08:50
ref https://github.com/MagicStack/asyncpg/actions/runs/22286259051/job/64465189709?pr=1308

failed with:

======================================================================
ERROR: test_tls_version (test_connect.TestSSLConnection)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/runner/work/asyncpg/asyncpg/asyncpg/_testbase/__init__.py", line 92, in wrapper
    self.loop.run_until_complete(coro)
  File "/Applications/Xcode_16.4.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/Users/runner/work/asyncpg/asyncpg/tests/test_connect.py", line 2024, in test_tls_version
    await self.connect(
  File "/Users/runner/work/asyncpg/asyncpg/asyncpg/connection.py", line 2443, in connect
    return await connect_utils._connect(
  File "/Users/runner/work/asyncpg/asyncpg/asyncpg/connect_utils.py", line 1209, in _connect
    addrs, params, config = _parse_connect_arguments(**kwargs)
  File "/Users/runner/work/asyncpg/asyncpg/asyncpg/connect_utils.py", line 893, in _parse_connect_arguments
    addrs, params = _parse_connect_dsn_and_args(
  File "/Users/runner/work/asyncpg/asyncpg/asyncpg/connect_utils.py", line 798, in _parse_connect_dsn_and_args
    ssl.minimum_version = _parse_tls_version(
  File "/Applications/Xcode_16.4.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/ssl.py", line 586, in minimum_version
    super(SSLContext, SSLContext).minimum_version.__set__(self, value)
ValueError: Unsupported protocol version 0x304
@ddelange

Copy link
Copy Markdown
Contributor Author

@elprans this should fix the failing CI on master

@ddelange

Copy link
Copy Markdown
Contributor Author

@elprans can i support in getting this merged?

@ddelange

Copy link
Copy Markdown
Contributor Author

if uvloop doesnt have 3.15 wheels yet and we depend on it in our suite, i would wait for upstream support. happy to make the supported range in this PR 3.10-3.15 per your and my comment, but i would wait for the complete suite here to go green (when upstream has support) before merging.

@honglei

honglei commented Aug 24, 2026

Copy link
Copy Markdown

Edit for lineage: GitHub cannot restore the comment I deleted, so the
following is a reconstruction of its original point, not a verbatim copy:

I initially suggested expanding #1308's supported Python range from
3.10-3.14 to 3.10-3.15 and incorporating the Python 3.15/3.15t work here,
based on the local compatibility testing.

That suggestion is withdrawn. I reconsidered the scope and opened #1352 as a
separate draft, so there is no need to expand #1308's supported range for that
work.

I also checked the current upstream state: uvloop 0.22.1 has no cp315 or
cp315t files on PyPI, and uvloop's test matrix currently stops at
3.14/3.14t. I will keep #1352 draft. Once uvloop supports 3.15, the temporary
uvloop exclusions and asyncpg's existing <3.15.0 dependency marker can be
updated together, and the complete asyncio/uvloop matrix must be green before
the PR is marked ready.

Sorry for deleting the earlier comment instead of editing it. I will preserve
the discussion lineage by editing comments going forward.

@ddelange

Copy link
Copy Markdown
Contributor Author

please dont delete your github comments, edit them instead. deleting is bad for lineage and future reference

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants