diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index efd90ff..25778ef 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -44,3 +44,62 @@ jobs: args: release --clean --config /tmp/.goreleaser.yaml env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + update-homebrew-tap: + runs-on: ubuntu-latest + needs: goreleaser + steps: + - name: Resolve release tag + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "RELEASE_TAG=${{ inputs.tag }}" >> "$GITHUB_ENV" + else + echo "RELEASE_TAG=${{ github.ref_name }}" >> "$GITHUB_ENV" + fi + + - name: Dispatch tap formula update + env: + GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }} + run: | + if [ -z "$GH_TOKEN" ]; then + echo "::error::Set HOMEBREW_TAP_TOKEN with workflow access to steipete/homebrew-tap" + exit 1 + fi + + request_id="spogo-${RELEASE_TAG}-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}" + expected_title="Update spogo for ${RELEASE_TAG} (${request_id})" + + gh workflow run update-formula.yml \ + --repo steipete/homebrew-tap \ + --ref main \ + -f formula=spogo \ + -f tag="$RELEASE_TAG" \ + -f repository=steipete/spogo \ + -f artifact_template="{formula}_{version}_{target}.tar.gz" \ + -f request_id="$request_id" + + run_id="" + for _ in {1..30}; do + run_id=$(gh run list \ + --repo steipete/homebrew-tap \ + --workflow update-formula.yml \ + --branch main \ + --event workflow_dispatch \ + --limit 20 \ + --json databaseId,displayTitle \ + --jq ".[] | select(.displayTitle == \"$expected_title\") | .databaseId" | head -n1) + if [ -n "$run_id" ]; then + break + fi + sleep 5 + done + + if [ -z "$run_id" ]; then + echo "::error::Could not find tap workflow run with title: $expected_title" + exit 1 + fi + + gh run watch "$run_id" \ + --repo steipete/homebrew-tap \ + --exit-status \ + --interval 10