200 lines
6.4 KiB
YAML
200 lines
6.4 KiB
YAML
name: tests
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
paths-ignore:
|
|
- '**/*.md'
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
paths-ignore:
|
|
- '**/*.md'
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
actions: write
|
|
|
|
jobs:
|
|
blockguard-tests:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
|
|
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- name: Build and install blockguard
|
|
run: pip install livekit-plugins/livekit-blockguard/
|
|
|
|
- name: Install pytest
|
|
run: pip install pytest
|
|
|
|
- name: Run blockguard tests
|
|
working-directory: livekit-plugins/livekit-blockguard
|
|
run: python -m pytest test_blockguard.py -v
|
|
|
|
unit-tests:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
|
- name: Install uv
|
|
uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
|
|
with:
|
|
enable-cache: true
|
|
cache-dependency-glob: "uv.lock"
|
|
|
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- name: Install the project
|
|
run: uv sync --all-extras --dev
|
|
|
|
- name: Download NLTK data
|
|
run: uv run python -c "import nltk; nltk.download('punkt_tab')"
|
|
|
|
- name: Run tests
|
|
env:
|
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
run: make unit-tests
|
|
|
|
evaluation:
|
|
# don't run tests for PRs on forks
|
|
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
|
- name: Install uv
|
|
uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
|
|
with:
|
|
enable-cache: true
|
|
cache-dependency-glob: "uv.lock"
|
|
|
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- name: Install the project
|
|
run: uv sync --all-extras --dev
|
|
|
|
- name: Run evals
|
|
env:
|
|
LIVEKIT_API_KEY: ${{ secrets.LIVEKIT_API_KEY }}
|
|
LIVEKIT_API_SECRET: ${{ secrets.LIVEKIT_API_SECRET }}
|
|
|
|
run: uv run pytest --evals
|
|
|
|
tests:
|
|
# don't run tests for PRs on forks
|
|
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
plugin:
|
|
[
|
|
cartesia,
|
|
deepgram,
|
|
elevenlabs,
|
|
groq,
|
|
openai,
|
|
inworld,
|
|
]
|
|
|
|
runs-on: ubuntu-latest
|
|
name: livekit-plugins-${{ matrix.plugin }}
|
|
steps:
|
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
|
|
|
- name: Setup Google credentials
|
|
if: matrix.plugin == 'google'
|
|
shell: bash
|
|
run: |
|
|
printf '%s' '${{ secrets.GOOGLE_CREDENTIALS_JSON }}' > tests/google.json
|
|
|
|
- name: Run tests
|
|
shell: bash
|
|
env:
|
|
PLUGIN: ${{ matrix.plugin }}
|
|
LIVEKIT_URL: ${{ secrets.LIVEKIT_URL }}
|
|
LIVEKIT_API_KEY: ${{ secrets.LIVEKIT_API_KEY }}
|
|
LIVEKIT_API_SECRET: ${{ secrets.LIVEKIT_API_SECRET }}
|
|
DEEPGRAM_API_KEY: ${{ secrets.DEEPGRAM_API_KEY }}
|
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
|
|
ELEVEN_API_KEY: ${{ secrets.ELEVEN_API_KEY }}
|
|
CARTESIA_API_KEY: ${{ secrets.CARTESIA_API_KEY }}
|
|
AZURE_SPEECH_KEY: ${{ secrets.AZURE_SPEECH_KEY }}
|
|
AZURE_SPEECH_REGION: ${{ secrets.AZURE_SPEECH_REGION }} # nit: doesn't have to be secret
|
|
GOOGLE_CREDENTIALS_JSON: ${{ secrets.GOOGLE_CREDENTIALS_JSON }}
|
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
|
|
ASSEMBLYAI_API_KEY: ${{ secrets.ASSEMBLYAI_API_KEY }}
|
|
FAL_KEY: ${{ secrets.FAL_KEY }}
|
|
PLAYHT_API_KEY: ${{ secrets.PLAYHT_API_KEY }}
|
|
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
|
|
PLAYHT_USER_ID: ${{ secrets.PLAYHT_USER_ID }}
|
|
RIME_API_KEY: ${{ secrets.RIME_API_KEY }}
|
|
SPEECHMATICS_API_KEY: ${{ secrets.SPEECHMATICS_API_KEY }}
|
|
GOOGLE_APPLICATION_CREDENTIALS: tests/google.json
|
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
NEUPHONIC_API_KEY: ${{ secrets.NEUPHONIC_API_KEY }}
|
|
RESEMBLE_API_KEY: ${{ secrets.RESEMBLE_API_KEY }}
|
|
SPEECHIFY_API_KEY: ${{ secrets.SPEECHIFY_API_KEY }}
|
|
HUME_API_KEY: ${{ secrets.HUME_API_KEY }}
|
|
SPITCH_API_KEY: ${{ secrets.SPITCH_API_KEY }}
|
|
LMNT_API_KEY: ${{ secrets.LMNT_API_KEY }}
|
|
INWORLD_API_KEY: ${{ secrets.INWORLD_API_KEY }}
|
|
SONIOX_API_KEY: ${{ secrets.SONIOX_API_KEY }}
|
|
working-directory: tests
|
|
run: make test
|
|
|
|
- name: Upload LiveKit dump
|
|
if: always()
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
with:
|
|
name: lk-dump-${{ matrix.plugin }}
|
|
path: lk_dump/**
|
|
if-no-files-found: ignore
|
|
retention-days: 1
|
|
|
|
aggregate-dumps:
|
|
if: always()
|
|
needs: tests
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: download all dump shards
|
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
|
with:
|
|
pattern: lk-dump-*
|
|
path: all_lk_dump
|
|
merge-multiple: true
|
|
|
|
- name: create tarball
|
|
id: tar
|
|
run: |
|
|
if [ -d "all_lk_dump" ] && [ "$(ls -A all_lk_dump)" ]; then
|
|
tar -czf lk-dump-all.tar.gz -C all_lk_dump .
|
|
echo "created=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "No dump shards found, skipping tarball creation."
|
|
echo "created=false" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: upload merged dump
|
|
if: steps.tar.outputs.created == 'true'
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
with:
|
|
name: lk-dump-all
|
|
path: lk-dump-all.tar.gz
|
|
retention-days: 5
|