--- 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 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 config experimental.new-installer false && poetry install - name: Test run: | if [ "$RUNNER_OS" == "Linux" ]; then sudo apt install libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xfixes0 x11-utils /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1920x1200x24 -ac +extension GLX sudo apt update sudo apt install -y libpulse-mainloop-glib0 libegl1-mesa-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libportaudio2 fi 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 - os: ubuntu-20.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 - uses: FedericoCarboni/setup-ffmpeg@v1 id: setup-ffmpeg with: token: ${{ secrets.GITHUB_TOKEN }} - name: Install dependencies run: poetry config experimental.new-installer false && poetry install - 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 elif [ "$RUNNER_OS" == "Linux" ]; then sudo apt install libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xfixes0 x11-utils /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1920x1200x24 -ac +extension GLX sudo apt update sudo apt install -y libpulse-mainloop-glib0 libegl1-mesa-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libportaudio2 gettext poetry run make bundle_linux 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.tar.gz dist/Buzz*-windows.exe dist/Buzz*-mac.dmg dist/Buzz*-unix.tar.gz 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*-windows.tar.gz 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 }}