Skip to content

Add native Windows ARM64 CI and release wheels - #757

Draft
ssss141414 wants to merge 41 commits into
MagicStack:masterfrom
ssss141414:win-arm64-master-r5
Draft

Add native Windows ARM64 CI and release wheels#757
ssss141414 wants to merge 41 commits into
MagicStack:masterfrom
ssss141414:win-arm64-master-r5

Conversation

@ssss141414

Copy link
Copy Markdown

Summary

This draft builds on and preserves the generic Windows implementation from #736, then adds native Windows ARM64 validation and release integration.

  • add native windows-11-arm regression coverage for CPython 3.11.9, 3.12.10, 3.13.15, 3.14.7, and 3.14t
  • build and test Windows AMD64 wheels for cp38 through cp314t
  • build and test Windows ARM64 wheels for cp311 through cp314t
  • verify each ARM64 wheel has a win_arm64 tag and an ARM64 (0xAA64) native extension before upload
  • require both Windows wheel jobs before publication
  • make Windows socket tests locale-independent by checking stable error codes

Attribution and coordination

The 35 commits from #736 are retained with their original authorship. They provide the generic Windows prerequisite and are not presented as Windows ARM64 evidence. The ARM64-specific workflow and validation changes are the commits after the #736 head.

This is intentionally a draft so the work can be coordinated with #736 and validated on GitHub-hosted runners before it is considered ready.

Local validation

Native Windows ARM64:

  • CPython 3.12.10: cp312-cp312-win_arm64, PE 0xAA64; clean install and smoke passed; 526 tests, 374 passed, 152 skipped
  • CPython 3.13.15: cp313-cp313-win_arm64, PE 0xAA64; clean install and smoke passed; 526 tests, 374 passed, 152 skipped

Windows AMD64 regression under Windows ARM64 x64 emulation:

  • CPython 3.12.10: cp312-cp312-win_amd64, PE 0x8664; clean install and smoke passed
  • normal wheel tests: 526 tests, 374 passed, 152 skipped
  • debug build with PYTHONASYNCIODEBUG=1: 526 tests, 374 passed, 152 skipped
  • debug build with default environment: 526 tests, 374 passed, 152 skipped

One additional Windows-only skip is limited to the stdlib asyncio baseline for test_subprocess_fd_leak_2. Windows psutil.Process.num_handles() varied in full-suite runs even though focused reruns passed. The corresponding uvloop test remains enabled and passes.

Remaining draft checks

  • run all five hosted Windows ARM64 normal and debug regression rows
  • run the complete Windows AMD64 and ARM64 cibuildwheel matrices
  • confirm cp314t resolves the native ARM64 free-threaded interpreter
  • confirm ARM64 tag/PE inspection and release artifact collection

This draft does not claim merge, publication, or upstream acceptance.

Vizonex and others added 30 commits March 17, 2026 17:43
…ding Windows with uvloop debug which is broken.)

* add another branch to test on my end

* force trigger workflow

* reformat test_context with black

* reformat all tests to obey flake8

* fix flake8 errors

* add dns related things from winloop

* try something that isn't invalid on 3.8

* reformat with black using valid 3.8 syntax and the 79 character limit

* update setup.py

* fix more formatting problems with test_process

* uncomment trest_process_streams_pass_fds on windows

* slience all other known to fail tests with windows

* fix if statement for dns.pyx

* silencing reamining failures

* remove whitespace

* update tests

* update tests

* skip signal test on apple for now

* remove whitespace

* reformat with black once more
* add another branch to test on my end

* force trigger workflow

* reformat test_context with black

* reformat all tests to obey flake8

* fix flake8 errors

* add dns related things from winloop

* try something that isn't invalid on 3.8

* reformat with black using valid 3.8 syntax and the 79 character limit

* update setup.py

* fix more formatting problems with test_process

* uncomment trest_process_streams_pass_fds on windows

* slience all other known to fail tests with windows

* fix if statement for dns.pyx

* silencing reamining failures

* remove whitespace

* update tests

* update tests

* skip signal test on apple for now

* remove whitespace

* reformat with black once more

* mark todo for issue 126 (winloop) related

* skip test_call_later_2 on windows normal asyncio in 3.11 due to rounding bug

* reformat test_base.py

* uvloop still has the same problem on windows 3.11

* siganls fork test broken

* better skipping system for test_base.py

* add extra removal to makefile

* nope, 3.8+ on windows has the same problem wiht test_call_later_2
* add another branch to test on my end

* force trigger workflow

* reformat test_context with black

* reformat all tests to obey flake8

* fix flake8 errors

* add dns related things from winloop

* try something that isn't invalid on 3.8

* reformat with black using valid 3.8 syntax and the 79 character limit

* update setup.py

* fix more formatting problems with test_process

* uncomment trest_process_streams_pass_fds on windows

* slience all other known to fail tests with windows

* fix if statement for dns.pyx

* silencing reamining failures

* remove whitespace

* update tests

* update tests

* skip signal test on apple for now

* remove whitespace

* reformat with black once more

* mark todo for issue 126 (winloop) related

* skip test_call_later_2 on windows normal asyncio in 3.11 due to rounding bug

* reformat test_base.py

* uvloop still has the same problem on windows 3.11

* siganls fork test broken

* better skipping system for test_base.py

* add extra removal to makefile

* nope, 3.8+ on windows has the same problem wiht test_call_later_2

* add __Pyx_MonitoringEventTypes_CyGen_count as a macro incase accidently exposed in windows debug mode

* skip create over ssl when in win32 3.14t it's currently a todo bugfix.

* skip test_getaddrinfo_4 on mac, it can randomly freeze at different times.
* add another branch to test on my end

* force trigger workflow

* reformat test_context with black

* reformat all tests to obey flake8

* fix flake8 errors

* add dns related things from winloop

* try something that isn't invalid on 3.8

* reformat with black using valid 3.8 syntax and the 79 character limit

* update setup.py

* fix more formatting problems with test_process

* uncomment trest_process_streams_pass_fds on windows

* slience all other known to fail tests with windows

* fix if statement for dns.pyx

* silencing reamining failures

* remove whitespace

* update tests

* update tests

* skip signal test on apple for now

* remove whitespace

* reformat with black once more

* mark todo for issue 126 (winloop) related

* skip test_call_later_2 on windows normal asyncio in 3.11 due to rounding bug

* reformat test_base.py

* uvloop still has the same problem on windows 3.11

* siganls fork test broken

* better skipping system for test_base.py

* add extra removal to makefile

* nope, 3.8+ on windows has the same problem wiht test_call_later_2

* add __Pyx_MonitoringEventTypes_CyGen_count as a macro incase accidently exposed in windows debug mode

* skip create over ssl when in win32 3.14t it's currently a todo bugfix.

* skip test_getaddrinfo_4 on mac, it can randomly freeze at different times.

* fix subprocess shell code for window's end

* update stdlib with os.path.join to help it out

* add isabs to subprocess_shell

* make outer modules used into constant values

* forgot about errors.pyx let me fix that up real quickly
* add another branch to test on my end

* force trigger workflow

* reformat test_context with black

* reformat all tests to obey flake8

* fix flake8 errors

* add dns related things from winloop

* try something that isn't invalid on 3.8

* reformat with black using valid 3.8 syntax and the 79 character limit

* update setup.py

* fix more formatting problems with test_process

* uncomment trest_process_streams_pass_fds on windows

* slience all other known to fail tests with windows

* fix if statement for dns.pyx

* silencing reamining failures

* remove whitespace

* update tests

* update tests

* skip signal test on apple for now

* remove whitespace

* reformat with black once more

* mark todo for issue 126 (winloop) related

* skip test_call_later_2 on windows normal asyncio in 3.11 due to rounding bug

* reformat test_base.py

* uvloop still has the same problem on windows 3.11

* siganls fork test broken

* better skipping system for test_base.py

* add extra removal to makefile

* nope, 3.8+ on windows has the same problem wiht test_call_later_2

* add __Pyx_MonitoringEventTypes_CyGen_count as a macro incase accidently exposed in windows debug mode

* skip create over ssl when in win32 3.14t it's currently a todo bugfix.

* skip test_getaddrinfo_4 on mac, it can randomly freeze at different times.

* fix subprocess shell code for window's end

* update stdlib with os.path.join to help it out

* add isabs to subprocess_shell

* make outer modules used into constant values

* forgot about errors.pyx let me fix that up real quickly

* put more externals required into stdlib.pxi where they all belong
Vizonex and others added 11 commits June 5, 2026 13:36
* retain --debug and other flags when debug is used and is not windows

* this addtional thing is temporary

* provide some extra grace for windows 3.11

* lets bump it to 0.015 instead so that 3.12 windows has some chance of winning

* give a bigger buffer and shorter timeout on windows.

* readjust timeout of test_socket_cancel_sendall

* mark windows as both winning and loosing this test it's an unwanted coinflip.

* final straw for test_socket_cancel_sock_sendall

* test_call_later_2 time decrease

* last but not least
* apply cx-freeze bugfix

* initiate tests over here temporarly
* skip test_create_sock_cancel_fd_leak for now...

* fix tcp tests for windows that weren't working previously.

* really quickly let's run windows in the testsuite will get rid of this when we are done.

* reformat test_tcp and reapply skipping the test_shutdown_timeout

* re-remove windows branch from workflows we did our job.
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