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 build-and-push-docker-cpu: needs: [run-tests, check-code-format] runs-on: ubuntu-22.04 if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) steps: - uses: actions/checkout@v2 - name: Log in to GitHub Container Registry uses: docker/login-action@v1 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GHCR_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Build and push Docker image uses: docker/build-push-action@v2 with: context: . file: docker/Dockerfile.cpu push: true tags: ghcr.io/collabora/whisperlive-cpu:latest build-and-push-docker-gpu: needs: [run-tests, check-code-format, build-and-push-docker-cpu] timeout-minutes: 20 runs-on: ubuntu-22.04 if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) steps: - uses: actions/checkout@v2 - name: Log in to GitHub Container Registry uses: docker/login-action@v1 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GHCR_TOKEN }} - name: Docker Prune run: docker system prune -af - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Build and push Docker GPU image uses: docker/build-push-action@v2 with: context: . file: docker/Dockerfile.gpu push: true tags: ghcr.io/collabora/whisperlive-gpu:latest 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 pip install wheel - 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 }}