From 0eb02548ff195b0a8b2c93ed39f6a32289e8828e Mon Sep 17 00:00:00 2001 From: Nikhil Dabas Date: Wed, 30 Sep 2026 10:50:57 +0100 Subject: [PATCH 1/2] Add Windows ARM64 wheels and tests --- .github/workflows/build-rtc.yml | 12 ++++++++++++ .github/workflows/publish.yml | 2 ++ livekit-rtc/setup.py | 5 +---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-rtc.yml b/.github/workflows/build-rtc.yml index 14841ddd..58b8d018 100644 --- a/.github/workflows/build-rtc.yml +++ b/.github/workflows/build-rtc.yml @@ -73,6 +73,8 @@ jobs: archs: aarch64 - os: windows-latest archs: AMD64 + - os: windows-11-arm + archs: ARM64 - os: macos-latest archs: x86_64 arm64 defaults: @@ -166,6 +168,16 @@ jobs: - os: windows-latest python-version: "3.14" artifact: rtc-release-windows-latest + # Windows ARM64 tests + - os: windows-11-arm + python-version: "3.11" + artifact: rtc-release-windows-11-arm + - os: windows-11-arm + python-version: "3.12" + artifact: rtc-release-windows-11-arm + - os: windows-11-arm + python-version: "3.14" + artifact: rtc-release-windows-11-arm uses: ./.github/workflows/tests.yml with: os: ${{ matrix.os }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 872fc06e..ccb66e15 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -211,6 +211,8 @@ jobs: archs: aarch64 - os: windows-latest archs: AMD64 + - os: windows-11-arm + archs: ARM64 - os: macos-latest archs: x86_64 arm64 defaults: diff --git a/livekit-rtc/setup.py b/livekit-rtc/setup.py index 279e8a19..2bc0d4a8 100644 --- a/livekit-rtc/setup.py +++ b/livekit-rtc/setup.py @@ -56,10 +56,7 @@ def get_platform_tag(): elif sys.platform == "linux": return f"linux_{platform.machine()}" elif sys.platform == "win32": - arch = platform.machine() - if arch == "AMD64": - arch = "amd64" - return f"win_{arch}" + return f"win_{platform.machine().lower()}" else: return f"{platform.system().lower()}_{platform.machine()}" From b265a3804015cd99c79c257f6aa7465ef0522fe6 Mon Sep 17 00:00:00 2001 From: Nikhil Dabas Date: Wed, 30 Sep 2026 11:14:04 +0100 Subject: [PATCH 2/2] Fix test warnings --- livekit-rtc/livekit/rtc/audio_stream.py | 5 ++++- tests/api/test_access_token.py | 4 ++-- tests/api/test_webhook.py | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/livekit-rtc/livekit/rtc/audio_stream.py b/livekit-rtc/livekit/rtc/audio_stream.py index 97772f4f..9422a11c 100644 --- a/livekit-rtc/livekit/rtc/audio_stream.py +++ b/livekit-rtc/livekit/rtc/audio_stream.py @@ -248,7 +248,10 @@ def from_track( ) def __del__(self) -> None: - FfiClient.instance.queue.unsubscribe(self._ffi_queue) + # _ffi_queue is unset if __init__ raised early or the instance was built via __new__ + ffi_queue = getattr(self, "_ffi_queue", None) + if ffi_queue is not None: + FfiClient.instance.queue.unsubscribe(ffi_queue) def _create_owned_stream(self) -> Any: assert self._track is not None diff --git a/tests/api/test_access_token.py b/tests/api/test_access_token.py index df5f4678..cdb0757f 100644 --- a/tests/api/test_access_token.py +++ b/tests/api/test_access_token.py @@ -8,7 +8,7 @@ from livekit.protocol.agent_dispatch import RoomAgentDispatch TEST_API_KEY = "myapikey" -TEST_API_SECRET = "thiskeyistotallyunsafe" +TEST_API_SECRET = "thiskeyistotallyunsafe-but-32-bytes-long" def test_verify_token() -> None: @@ -81,7 +81,7 @@ def test_agent_config() -> None: def test_verify_token_invalid() -> None: token = AccessToken(TEST_API_KEY, TEST_API_SECRET).with_identity("test_identity").to_jwt() - token_verifier = TokenVerifier(TEST_API_KEY, "invalid_secret") + token_verifier = TokenVerifier(TEST_API_KEY, "invalid_secret-padded-to-32-bytes-long") with pytest.raises(Exception): token_verifier.verify(token) diff --git a/tests/api/test_webhook.py b/tests/api/test_webhook.py index 3937cdba..edea146e 100644 --- a/tests/api/test_webhook.py +++ b/tests/api/test_webhook.py @@ -5,7 +5,7 @@ from livekit.api import AccessToken, TokenVerifier, WebhookReceiver TEST_API_KEY = "myapikey" -TEST_API_SECRET = "thiskeyistotallyunsafe" +TEST_API_SECRET = "thiskeyistotallyunsafe-but-32-bytes-long" TEST_EVENT = """ { "event": "room_started",