name: Test & Build CI/CD on: push: branches: - main tags: - v* pull_request: branches: [ main ] types: [opened, synchronize, reopened] jobs: run-tests: runs-on: ubuntu-22.04 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 check-code-format: runs-on: ubuntu-22.04 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: Install dependencies run: | python -m pip install --upgrade pip python -m pip install flake8 - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics publish-to-pypi: needs: [run-tests, check-code-format] runs-on: ubuntu-22.04 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 }}