Skip to content

chore(deps): update github actions - #5488

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/github-actions
Open

chore(deps): update github actions#5488
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/github-actions

Conversation

@renovate

@renovate renovate Bot commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Type Update Change
actions/checkout (changelog) action digest 9c091bb β†’ 3d3c42e
python uses-with minor 3.12 β†’ 3.14
python uses-with minor 3.10 β†’ 3.14
python uses-with minor 3.11 β†’ 3.14

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

actions/python-versions (python)

v3.14.7: 3.14.7

Compare Source

Python 3.14.7

v3.14.6: 3.14.6

Compare Source

Python 3.14.6

v3.14.5: 3.14.5

Compare Source

Python 3.14.5

v3.14.4: 3.14.4

Compare Source

Python 3.14.4

v3.14.3: 3.14.3

Compare Source

Python 3.14.3

v3.14.2: 3.14.2

Compare Source

Python 3.14.2

v3.14.1: 3.14.1

Compare Source

Python 3.14.1

v3.14.0: 3.14.0

Compare Source

Python 3.14.0

v3.13.15: 3.13.15

Compare Source

Python 3.13.15

v3.13.14: 3.13.14

Compare Source

Python 3.13.14

v3.13.13: 3.13.13

Compare Source

Python 3.13.13

v3.13.12: 3.13.12

Compare Source

Python 3.13.12

v3.13.11: 3.13.11

Compare Source

Python 3.13.11

v3.13.10: 3.13.10

Compare Source

Python 3.13.10

v3.13.9: 3.13.9

Compare Source

Python 3.13.9

v3.13.8: 3.13.8

Compare Source

Python 3.13.8

v3.13.7: 3.13.7

Compare Source

Python 3.13.7

v3.13.6: 3.13.6

Compare Source

Python 3.13.6

v3.13.5: 3.13.5

Compare Source

Python 3.13.5

v3.13.4: 3.13.4

Compare Source

Python 3.13.4

v3.13.3: 3.13.3

Compare Source

Python 3.13.3

v3.13.2: 3.13.2

Compare Source

Python 3.13.2

v3.13.1: 3.13.1

Compare Source

Python 3.13.1

v3.13.0: 3.13.0

Compare Source

Python 3.13.0


Configuration

πŸ“… Schedule: (UTC)

  • Branch creation
    • "before 9am on monday"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

πŸ‘» Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@chenghao-mou
chenghao-mou requested a review from a team April 20, 2026 00:46

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

βœ… Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 2 additional findings.

Open in Devin Review

@github-actions

github-actions Bot commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

STT Test Results

Status: βœ— Some tests failed

Metric Count
βœ“ Passed 20
βœ— Failed 5
Γ— Errors 0
β†’ Skipped 16
β–£ Total 41
⏱ Duration 219.2s
Failed Tests
  • tests.test_stt::test_stream[livekit.plugins.assemblyai]
    stt_factory = <function parameter_factory.<locals>.<lambda> at 0x7f3d9d2e2140>
    request = <FixtureRequest for <Coroutine test_stream[livekit.plugins.assemblyai]>>
    
        @pytest.mark.usefixtures("job_process")
        @pytest.mark.parametrize("stt_factory", STTs + STREAM_ONLY_STTs)
        async def test_stream(stt_factory: Callable[[], STT], request):
            sample_rate = SAMPLE_RATE
            plugin_id = request.node.callspec.id.split("-")[0]
            frames, transcript, _ = await make_test_speech(chunk_duration_ms=10, sample_rate=sample_rate)
      
            # TODO: differentiate missing key vs other errors
            try:
                stt_instance: STT = stt_factory()
            except ValueError as e:
                pytest.skip(f"{plugin_id}: {e}")
      
            async with stt_instance as stt:
                label = f"{stt.model}@{stt.provider}"
                if not stt.capabilities.streaming:
                    pytest.skip(f"{label} does not support streaming")
      
                for attempt in range(MAX_RETRIES):
                    try:
                        state = {"closing": False}
      
                        async def _stream_input(
                            frames: list[rtc.AudioFrame], stream: RecognizeStream, state: dict = state
                        ):
                            for frame in frames:
                                stream.push_frame(frame)
                                await asyncio.sleep(0.005)
      
                            stream.end_input()
                            state["closing"] = True
      
                        async def _stream_output(stream: RecognizeStream, state: dict = state):
                            text = ""
                            # make sure the events are sent in the right order
                            recv_start, recv_end = False, True
                            start_time = time.time()
                            got_final_transcript = False
                            sos_count, final_count = 0, 0
      
                            async for event in stream:
                                if even
    
  • tests.test_stt::test_stream[livekit.plugins.fireworksai]
    self = <livekit.plugins.fireworksai.stt.SpeechStream object at 0x7f24146b11d0>
    
        async def __anext__(self) -> SpeechEvent:
            try:
    >           val = await self._event_aiter.__anext__()
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    E           StopAsyncIteration
    
    livekit-agents/livekit/agents/stt/stt.py:594: StopAsyncIteration
    
    During handling of the above exception, another exception occurred:
    
    stt_factory = <function parameter_factory.<locals>.<lambda> at 0x7f2415f4df30>
    request = <FixtureRequest for <Coroutine test_stream[livekit.plugins.fireworksai]>>
    
        @pytest.mark.usefixtures("job_process")
        @pytest.mark.parametrize("stt_factory", STTs + STREAM_ONLY_STTs)
        async def test_stream(stt_factory: Callable[[], STT], request):
            sample_rate = SAMPLE_RATE
            plugin_id = request.node.callspec.id.split("-")[0]
            frames, transcript, _ = await make_test_speech(chunk_duration_ms=10, sample_rate=sample_rate)
      
            # TODO: differentiate missing key vs other errors
            try:
                stt_instance: STT = stt_factory()
            except ValueError as e:
                pytest.skip(f"{plugin_id}: {e}")
      
            async with stt_instance as stt:
                label = f"{stt.model}@{stt.provider}"
                if not stt.capabilities.streaming:
                    pytest.skip(f"{label} does not support streaming")
      
                for attempt in range(MAX_RETRIES):
                    try:
                        state = {"closing": False}
      
                        async def _stream_input(
                            frames: list[rtc.AudioFrame], stream: RecognizeStream, state: dict = state
                        ):
                            for frame in frames:
                                stream.push_frame(frame)
                                await asyncio.sleep(0.005)
      
                            stream.end_input()
                            state["closing"] = True
      
                        async def _stream_output(stream: RecognizeStream, state: dict = state):
    
  • tests.test_stt::test_stream[livekit.plugins.nvidia]
    stt_factory = <function parameter_factory.<locals>.<lambda> at 0x7f2415f4e1f0>
    request = <FixtureRequest for <Coroutine test_stream[livekit.plugins.nvidia]>>
    
        @pytest.mark.usefixtures("job_process")
        @pytest.mark.parametrize("stt_factory", STTs + STREAM_ONLY_STTs)
        async def test_stream(stt_factory: Callable[[], STT], request):
            sample_rate = SAMPLE_RATE
            plugin_id = request.node.callspec.id.split("-")[0]
            frames, transcript, _ = await make_test_speech(chunk_duration_ms=10, sample_rate=sample_rate)
      
            # TODO: differentiate missing key vs other errors
            try:
                stt_instance: STT = stt_factory()
            except ValueError as e:
                pytest.skip(f"{plugin_id}: {e}")
      
            async with stt_instance as stt:
                label = f"{stt.model}@{stt.provider}"
                if not stt.capabilities.streaming:
                    pytest.skip(f"{label} does not support streaming")
      
                for attempt in range(MAX_RETRIES):
                    try:
                        state = {"closing": False}
      
                        async def _stream_input(
                            frames: list[rtc.AudioFrame], stream: RecognizeStream, state: dict = state
                        ):
                            for frame in frames:
                                stream.push_frame(frame)
                                await asyncio.sleep(0.005)
      
                            stream.end_input()
                            state["closing"] = True
      
                        async def _stream_output(stream: RecognizeStream, state: dict = state):
                            text = ""
                            # make sure the events are sent in the right order
                            recv_start, recv_end = False, True
                            start_time = time.time()
                            got_final_transcript = False
                            sos_count, final_count = 0, 0
      
                            async for event in stream:
                                if event.ty
    
  • tests.test_stt::test_stream[livekit.plugins.soniox]
    stt_factory = <function parameter_factory.<locals>.<lambda> at 0x7fdcae324b40>
    request = <FixtureRequest for <Coroutine test_stream[livekit.plugins.soniox]>>
    
        @pytest.mark.usefixtures("job_process")
        @pytest.mark.parametrize("stt_factory", STTs + STREAM_ONLY_STTs)
        async def test_stream(stt_factory: Callable[[], STT], request):
            sample_rate = SAMPLE_RATE
            plugin_id = request.node.callspec.id.split("-")[0]
            frames, transcript, _ = await make_test_speech(chunk_duration_ms=10, sample_rate=sample_rate)
      
            # TODO: differentiate missing key vs other errors
            try:
                stt_instance: STT = stt_factory()
            except ValueError as e:
                pytest.skip(f"{plugin_id}: {e}")
      
            async with stt_instance as stt:
                label = f"{stt.model}@{stt.provider}"
                if not stt.capabilities.streaming:
                    pytest.skip(f"{label} does not support streaming")
      
                for attempt in range(MAX_RETRIES):
                    try:
                        state = {"closing": False}
      
                        async def _stream_input(
                            frames: list[rtc.AudioFrame], stream: RecognizeStream, state: dict = state
                        ):
                            for frame in frames:
                                stream.push_frame(frame)
                                await asyncio.sleep(0.005)
      
                            stream.end_input()
                            state["closing"] = True
      
                        async def _stream_output(stream: RecognizeStream, state: dict = state):
                            text = ""
                            # make sure the events are sent in the right order
                            recv_start, recv_end = False, True
                            start_time = time.time()
                            got_final_transcript = False
                            sos_count, final_count = 0, 0
      
                            async for event in stream:
                                if event.ty
    
  • tests.test_stt::test_stream[livekit.agents.inference]
    stt_factory = <function parameter_factory.<locals>.<lambda> at 0x7fdcae324ca0>
    request = <FixtureRequest for <Coroutine test_stream[livekit.agents.inference]>>
    
        @pytest.mark.usefixtures("job_process")
        @pytest.mark.parametrize("stt_factory", STTs + STREAM_ONLY_STTs)
        async def test_stream(stt_factory: Callable[[], STT], request):
            sample_rate = SAMPLE_RATE
            plugin_id = request.node.callspec.id.split("-")[0]
            frames, transcript, _ = await make_test_speech(chunk_duration_ms=10, sample_rate=sample_rate)
      
            # TODO: differentiate missing key vs other errors
            try:
                stt_instance: STT = stt_factory()
            except ValueError as e:
                pytest.skip(f"{plugin_id}: {e}")
      
            async with stt_instance as stt:
                label = f"{stt.model}@{stt.provider}"
                if not stt.capabilities.streaming:
                    pytest.skip(f"{label} does not support streaming")
      
                for attempt in range(MAX_RETRIES):
                    try:
                        state = {"closing": False}
      
                        async def _stream_input(
                            frames: list[rtc.AudioFrame], stream: RecognizeStream, state: dict = state
                        ):
                            for frame in frames:
                                stream.push_frame(frame)
                                await asyncio.sleep(0.005)
      
                            stream.end_input()
                            state["closing"] = True
      
                        async def _stream_output(stream: RecognizeStream, state: dict = state):
                            text = ""
                            # make sure the events are sent in the right order
                            recv_start, recv_end = False, True
                            start_time = time.time()
                            got_final_transcript = False
                            sos_count, final_count = 0, 0
      
                            async for event in stream:
                                if event.
    
Skipped Tests
Test Reason
tests.test_stt::test_recognize[livekit.plugins.assemblyai] universal-3-5-pro@AssemblyAI does not support batch recognition
tests.test_stt::test_recognize[livekit.plugins.speechmatics] enhanced@Speechmatics does not support batch recognition
tests.test_stt::test_recognize[livekit.plugins.fireworksai] unknown@FireworksAI does not support batch recognition
tests.test_stt::test_recognize[livekit.plugins.nvidia] unknown@unknown does not support batch recognition
tests.test_stt::test_recognize[livekit.plugins.cartesia] ink-2@Cartesia does not support batch recognition
tests.test_stt::test_recognize[livekit.plugins.soniox] stt-rt-v5@Soniox does not support batch recognition
tests.test_stt::test_recognize[livekit.agents.inference] unknown@livekit does not support batch recognition
tests.test_stt::test_recognize[livekit.plugins.azure] unknown@Azure STT does not support batch recognition
tests.test_stt::test_recognize[livekit.plugins.cartesia._legacy] ink-whisper@Cartesia does not support batch recognition
tests.test_stt::test_recognize[livekit.plugins.aws] unknown@Amazon Transcribe does not support batch recognition
tests.test_stt::test_recognize[livekit.plugins.deepgram.STTv2] flux-general-en@Deepgram does not support batch recognition
tests.test_stt::test_stream[livekit.plugins.elevenlabs] scribe_v1@ElevenLabs does not support streaming
tests.test_stt::test_recognize[livekit.plugins.gradium.STT] unknown@Gradium does not support batch recognition
tests.test_stt::test_stream[livekit.plugins.fal] Wizper@Fal does not support streaming
tests.test_stt::test_stream[livekit.plugins.mistralai] voxtral-mini-latest@MistralAI does not support streaming
tests.test_stt::test_stream[livekit.plugins.openai] gpt-4o-mini-transcribe@api.openai.com does not support streaming

Triggered by workflow run #3677

@chenghao-mou

Copy link
Copy Markdown
Member

/test-stt

@renovate
renovate Bot force-pushed the renovate/github-actions branch 3 times, most recently from f6c98f5 to 67b4d33 Compare April 27, 2026 05:30
@renovate
renovate Bot force-pushed the renovate/github-actions branch 2 times, most recently from 7f8f90b to 1d5b7c8 Compare April 30, 2026 20:19
@renovate renovate Bot changed the title chore(deps): update dependency python to 3.14 chore(deps): update github actions Apr 30, 2026
@renovate
renovate Bot force-pushed the renovate/github-actions branch 3 times, most recently from 19f9247 to f7b4342 Compare May 18, 2026 04:07
@renovate renovate Bot changed the title chore(deps): update github actions chore(deps): pin dependencies May 18, 2026
devin-ai-integration[bot]

This comment was marked as resolved.

@renovate
renovate Bot force-pushed the renovate/github-actions branch from f7b4342 to a2aeb1f Compare May 18, 2026 05:13
@renovate renovate Bot changed the title chore(deps): pin dependencies chore(deps): update github actions May 18, 2026
@renovate
renovate Bot force-pushed the renovate/github-actions branch 3 times, most recently from e8933dd to a3d01c5 Compare May 28, 2026 21:27
@renovate
renovate Bot force-pushed the renovate/github-actions branch 2 times, most recently from 4c3c018 to fc2110b Compare June 4, 2026 00:52
@renovate
renovate Bot force-pushed the renovate/github-actions branch from fc2110b to 44d8b9c Compare June 11, 2026 11:07

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Devin Review found 1 new potential issue.

Open in Devin Review

uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: "3.11"
python-version: "3.14"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🚩 cibuildwheel build filter missing for blockguard and blingfire

The livekit-durable cibuildwheel config explicitly lists build = "cp310-* cp311-* cp312-* cp313-* cp314-*", but livekit-blockguard and livekit-blingfire have no build key. This means they rely on cibuildwheel's default build matrix. This is pre-existing and not introduced by this PR, but now that the host Python is 3.14, it's worth verifying that the default cibuildwheel matrix includes cp314 wheels if that's desired for these packages.

Open in Devin Review

Was this helpful? React with πŸ‘ or πŸ‘Ž to provide feedback.

@renovate
renovate Bot force-pushed the renovate/github-actions branch 3 times, most recently from 2edae27 to c7c6d60 Compare June 24, 2026 06:02
@renovate
renovate Bot force-pushed the renovate/github-actions branch from c7c6d60 to f584e20 Compare June 24, 2026 15:43

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Devin Review found 1 new potential issue.

Open in Devin Review

- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
with:
python-version: "3.12"
python-version: "3.14"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🚩 Unit and integration tests no longer run on any Python version below 3.14

Prior to this PR, unit-tests, blockguard-tests, evaluation, evals, test-realtime, test-stt, and download-stats all ran on Python 3.12 (or 3.10/3.11 for some build jobs). After this PR, they all run exclusively on 3.14. The only CI job that still exercises an older Python is the type-check matrix in ci.yml, which covers 3.10 and 3.13. This means runtime regressions specific to Python 3.10–3.13 (e.g. behavioral differences in asyncio, typing, stdlib changes) would no longer be caught by tests β€” only type-checking. This is a deliberate tradeoff but worth noting since AGENTS.md:125 states "Python 3.10+ compatibility required".

Open in Devin Review

Was this helpful? React with πŸ‘ or πŸ‘Ž to provide feedback.

@renovate
renovate Bot force-pushed the renovate/github-actions branch from f584e20 to ca3d212 Compare July 6, 2026 10:52
@renovate
renovate Bot force-pushed the renovate/github-actions branch from ca3d212 to 3a814b9 Compare July 7, 2026 20:25
@renovate renovate Bot changed the title chore(deps): update github actions Update github actions Jul 7, 2026
@renovate renovate Bot changed the title Update github actions chore(deps): update github actions Jul 7, 2026
@renovate
renovate Bot force-pushed the renovate/github-actions branch 2 times, most recently from 021ea0d to 00ddbc1 Compare July 12, 2026 11:33
@renovate
renovate Bot force-pushed the renovate/github-actions branch 7 times, most recently from ceca9b5 to ffc973a Compare July 24, 2026 17:26
@renovate
renovate Bot force-pushed the renovate/github-actions branch 4 times, most recently from a148b8c to cb867c5 Compare August 3, 2026 16:46
@renovate
renovate Bot force-pushed the renovate/github-actions branch 6 times, most recently from a946ae7 to b42d944 Compare August 14, 2026 12:59

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Devin Review found 1 new potential issue.

View 6 additional findings in Devin Review.

Open in Devin Review

uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
with:
python-version: "3.12"
python-version: "3.14"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟑 Published API documentation will silently lose the BitHuman avatar plugin pages

The documentation build is switched to run on Python 3.14 (python-version: "3.14" at .github/workflows/publish-docs.yml:22), a version on which the BitHuman integration cannot be loaded, so its reference pages vanish from the published docs site.
Impact: Users browsing the Python API reference will no longer find any BitHuman avatar documentation after the next docs publish.

Mechanism: dependency marker excludes 3.14, import fails, pdoc --skip-errors drops the module, S3 sync --delete removes the old pages
  • livekit-plugins/livekit-plugins-bithuman/pyproject.toml:35 declares bithuman>=0.5.25,<3; python_version >= '3.11' and python_version < '3.14', so uv sync --all-extras --group docs on 3.14 installs the plugin package without its bithuman dependency.
  • livekit-plugins/livekit-plugins-bithuman/livekit/plugins/bithuman/__init__.py:22-27 imports .avatar and re-raises ImportError when the dependency is missing.
  • The docs step runs pdoc --skip-errors --html ... livekit (.github/workflows/publish-docs.yml:36), which silently skips modules that fail to import, so livekit.plugins.bithuman produces no HTML/markdown.
  • The upload step uses aws s3 sync --delete (.github/workflows/publish-docs.yml:44-45), so the previously published bithuman pages get deleted from the docs bucket.
  • Previously this job ran on Python 3.12, where the marker held and the module imported fine.
Suggested change
python-version: "3.14"
python-version: "3.13"
Open in Devin Review

Was this helpful? React with πŸ‘ or πŸ‘Ž to provide feedback.

@renovate
renovate Bot force-pushed the renovate/github-actions branch from b42d944 to d181315 Compare August 20, 2026 04:27
Generated by renovateBot
@renovate
renovate Bot force-pushed the renovate/github-actions branch from d181315 to 733cb0e Compare August 26, 2026 11:54
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.

1 participant