name: Python CI/CD on: push: branches: - main tags: - v* pull_request: branches: [ main ] types: [opened, synchronize, reopened] jobs: test: runs-on: ubuntu-latest timeout-minutes: 60 strategy: matrix: python-version: [3.8, 3.9, '3.10', '3.11'] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Cache Python dependencies uses: actions/cache@v2 with: path: | ~/.cache/pip !~/.cache/pip/log key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('requirements/server.txt', 'requirements/client.txt') }} restore-keys: | ${{ runner.os }}-pip-${{ matrix.python-version }}- - name: Install system dependencies run: sudo apt-get update && sudo apt-get install -y ffmpeg portaudio19-dev - name: Install Python dependencies run: | python -m pip install --upgrade pip pip install -r requirements/server.txt --extra-index-url https://download.pytorch.org/whl/cpu pip install -r requirements/client.txt - name: Run tests run: | echo "Running tests with Python ${{ matrix.python-version }}" python -m unittest discover -s tests build-and-push: needs: test runs-on: ubuntu-latest if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') steps: - uses: actions/checkout@v2 - name: Set up Python 3.8 uses: actions/setup-python@v2 with: python-version: 3.8 - name: Cache Python dependencies uses: actions/cache@v2 with: path: | ~/.cache/pip !~/.cache/pip/log key: ubuntu-latest-pip-3.8-${{ hashFiles('requirements/server.txt', 'requirements/client.txt') }} restore-keys: | ubuntu-latest-pip-3.8- - name: Install system dependencies run: sudo apt-get update && sudo apt-get install -y ffmpeg portaudio19-dev - name: Install Python dependencies run: | pip install -r requirements/server.txt pip install -r requirements/client.txt - name: Build package run: python setup.py sdist bdist_wheel - name: Publish package to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }}