Skip to content

fix: use gh api to push formula to homebrew-tap #10

fix: use gh api to push formula to homebrew-tap

fix: use gh api to push formula to homebrew-tap #10

Workflow file for this run

name: Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
GH_REPO: ${{ github.repository }}
GH_TAG: ${{ github.ref_name }}
TAP_REPO: RedAtman/homebrew-tap
jobs:
build:
name: Build ${{ matrix.target.name }}
runs-on: ${{ matrix.target.runner }}
strategy:
fail-fast: false
matrix:
target:
- name: macOS ARM64
runner: macos-latest
artifact: transcriber-macos-aarch64
- name: macOS x86_64
runner: macos-latest
artifact: transcriber-macos-x86_64
- name: Linux x86_64
runner: ubuntu-latest
artifact: transcriber-linux-x86_64
- name: Windows x86_64
runner: windows-latest
artifact: transcriber-windows-x86_64.exe
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Install deps (Linux)
if: matrix.target.runner == 'ubuntu-latest'
run: sudo apt-get update && sudo apt-get install -y libopus-dev libasound2-dev libsamplerate0-dev pkg-config libssl-dev cmake build-essential
- name: Install deps (macOS)
if: matrix.target.runner == 'macos-latest'
run: brew install cmake pkg-config opus libsndfile libsamplerate
- name: Build
run: cargo build --release
- name: Prepare artifact
shell: bash
run: |
mkdir -p dist
if [ "${{ matrix.target.runner }}" = "windows-latest" ]; then
cp target/release/transcriber.exe dist/${{ matrix.target.artifact }}
else
cp target/release/transcriber dist/${{ matrix.target.artifact }}
fi
- name: Upload artifact
uses: softprops/action-gh-release@v2
with:
files: dist/${{ matrix.target.artifact }}
generate_release_notes: true
prerelease: ${{ contains(github.ref_name, 'alpha') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'rc') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
homebrew:
name: Update Homebrew tap formula
needs: [build]
runs-on: ubuntu-latest
steps:
- name: Download release artifacts
run: |
mkdir -p artifacts
for asset in transcriber-macos-aarch64 transcriber-macos-x86_64 transcriber-linux-x86_64; do
echo "Downloading $asset..."
gh release download "$GH_TAG" \
--repo "$GH_REPO" \
--pattern "$asset" \
--dir artifacts
done
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Generate formula
run: |
SHA256_MACOS_ARM64=$(sha256sum artifacts/transcriber-macos-aarch64 | cut -d' ' -f1)
SHA256_MACOS_X86_64=$(sha256sum artifacts/transcriber-macos-x86_64 | cut -d' ' -f1)
SHA256_LINUX_X86_64=$(sha256sum artifacts/transcriber-linux-x86_64 | cut -d' ' -f1)
cat > formula.rb << FORMULA
class Transcriber < Formula
desc "Fast video transcription CLI powered by whisper.cpp"
homepage "https://github.com/$GH_REPO"
license "MIT"
depends_on "ffmpeg"
on_macos do
on_arm do
url "https://github.com/$GH_REPO/releases/download/$GH_TAG/transcriber-macos-aarch64"
sha256 "$SHA256_MACOS_ARM64"
def install
bin.install "transcriber-macos-aarch64" => "transcriber"
end
end
on_intel do
url "https://github.com/$GH_REPO/releases/download/$GH_TAG/transcriber-macos-x86_64"
sha256 "$SHA256_MACOS_X86_64"
def install
bin.install "transcriber-macos-x86_64" => "transcriber"
end
end
end
on_linux do
url "https://github.com/$GH_REPO/releases/download/$GH_TAG/transcriber-linux-x86_64"
sha256 "$SHA256_LINUX_X86_64"
def install
bin.install "transcriber-linux-x86_64" => "transcriber"
end
end
test do
system "#{bin}/transcriber", "--help"
end
end
FORMULA
CONTENT=$(base64 -w0 formula.rb)
echo "FORMULA_CONTENT=$CONTENT" >> $GITHUB_ENV
- name: Get current file SHA
id: get_sha
run: |
SHA=$(gh api repos/$TAP_REPO/contents/Formula/transcriber.rb \
--jq '.sha' 2>/dev/null || echo "")
echo "CURRENT_SHA=$SHA" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
- name: Push formula to tap repo
run: |
jq -n \
--arg msg "chore: update transcriber formula for $GH_TAG" \
--arg content "$FORMULA_CONTENT" \
--arg sha "$CURRENT_SHA" \
'{message: $msg, content: $content, sha: $sha}' > payload.json
gh api -X PUT repos/$TAP_REPO/contents/Formula/transcriber.rb \
--input payload.json
env:
GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}