--- name: CI on: push: branches: - main tags: - "*" pull_request: concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: test: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - os: macos-latest - os: windows-latest - os: ubuntu-20.04 - os: ubuntu-22.04 steps: - uses: actions/checkout@v3 with: submodules: recursive - uses: actions/setup-python@v4 with: python-version: "3.10.7" - name: Install Poetry Action uses: snok/install-poetry@v1.3.1 with: virtualenvs-create: true virtualenvs-in-project: true - name: Load cached venv id: cached-poetry-dependencies uses: actions/cache@v3 with: path: .venv key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}-2 - name: Load cached Whisper models id: cached-whisper-models uses: actions/cache@v3 with: path: | ~/Library/Caches/Buzz ~/.cache/whisper ~/.cache/huggingface ~/AppData/Local/Buzz/Buzz/Cache key: whisper-models-${{ runner.os }} - uses: FedericoCarboni/setup-ffmpeg@v1 id: setup-ffmpeg with: token: ${{ secrets.GITHUB_TOKEN }} - name: Install dependencies run: poetry install - name: Install apt dependencies run: | sudo apt-get update sudo apt-get install --no-install-recommends libyaml-dev libegl1-mesa libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-shape0 libxcb-cursor0 libportaudio2 gettext libpulse0 if: "startsWith(matrix.os, 'ubuntu-')" - name: Test run: | poetry run make test shell: bash - name: Upload coverage reports to Codecov with GitHub Action uses: codecov/codecov-action@v3 with: flags: ${{ runner.os }} build: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - os: macos-latest - os: windows-latest steps: - uses: actions/checkout@v3 with: submodules: recursive - uses: actions/setup-python@v4 with: python-version: "3.10.7" - name: Install Poetry Action uses: snok/install-poetry@v1.3.1 with: virtualenvs-create: true virtualenvs-in-project: true - name: Load cached venv id: cached-poetry-dependencies uses: actions/cache@v3 with: path: .venv key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}-2 - uses: FedericoCarboni/setup-ffmpeg@v1 id: setup-ffmpeg with: token: ${{ secrets.GITHUB_TOKEN }} - name: Install dependencies run: poetry install - uses: ruby/setup-ruby@v1 with: ruby-version: "3.0" # Not needed with a .ruby-version file bundler-cache: true # runs 'bundle install' and caches installed gems automatically if: "startsWith(matrix.os, 'ubuntu-')" - name: Install apt dependencies run: | sudo apt-get update sudo apt-get install --no-install-recommends libyaml-dev libegl1-mesa libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-shape0 libxcb-cursor0 libportaudio2 gettext libpulse0 if: "startsWith(matrix.os, 'ubuntu-')" - name: Install FPM run: gem install fpm if: "startsWith(matrix.os, 'ubuntu-')" - name: Bundle run: | if [ "$RUNNER_OS" == "macOS" ]; then brew install create-dmg # create variables CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db # import certificate and provisioning profile from secrets echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH # create temporary keychain security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH security set-keychain-settings -lut 21600 $KEYCHAIN_PATH security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH # import certificate to keychain security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH security list-keychain -d user -s $KEYCHAIN_PATH # store notarytool credentials xcrun notarytool store-credentials --apple-id "$APPLE_ID" --password "$APPLE_APP_PASSWORD" --team-id "$APPLE_TEAM_ID" notarytool --validate poetry run make bundle_mac elif [ "$RUNNER_OS" == "Windows" ]; then poetry run make bundle_windows fi env: BUZZ_CODESIGN_IDENTITY: ${{ secrets.BUZZ_CODESIGN_IDENTITY }} BUZZ_KEYCHAIN_NOTARY_PROFILE: ${{ secrets.BUZZ_KEYCHAIN_NOTARY_PROFILE }} BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} P12_PASSWORD: ${{ secrets.P12_PASSWORD }} APPLE_ID: ${{ secrets.APPLE_ID }} APPLE_APP_PASSWORD: ${{ secrets.APPLE_APP_PASSWORD }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} shell: bash - uses: actions/upload-artifact@v3 with: name: Buzz-${{ runner.os }} path: | dist/Buzz*-windows.exe dist/Buzz*-mac.dmg dist/buzz-*.deb publish-pypi: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - os: macos-latest - os: windows-latest - os: ubuntu-20.04 needs: [ build, test ] if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v3 with: submodules: recursive - uses: actions/setup-python@v4 with: python-version: "3.10.7" - name: Install Poetry Action uses: snok/install-poetry@v1.3.1 with: virtualenvs-create: true virtualenvs-in-project: true - name: Publish to PyPI run: | poetry config pypi-token.pypi ${{ secrets.PYPI_TOKEN }} poetry publish --build --skip-existing release: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - os: macos-latest - os: windows-latest needs: [ build, test ] if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v3 with: submodules: recursive - uses: actions/download-artifact@v3 with: name: Buzz-${{ runner.os }} - name: Install Poetry Action uses: snok/install-poetry@v1.3.1 with: virtualenvs-create: true virtualenvs-in-project: true - name: Release uses: softprops/action-gh-release@v1 with: files: | buzz-*.deb Buzz*-unix.tar.gz Buzz*-windows.exe Buzz*-mac.dmg deploy_brew_cask: runs-on: macos-latest needs: [ release ] if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Install Poetry Action uses: snok/install-poetry@v1.3.1 with: virtualenvs-create: true virtualenvs-in-project: true - name: Upload to Brew run: make upload_brew env: HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}