mirror of
https://github.com/webadderallorg/Recordly.git
synced 2026-09-26 07:45:34 +00:00
The Update Homebrew Tap workflow downloaded the macOS release assets
with the patterns Recordly-*-arm64.dmg and Recordly-*-x64.dmg, which
assume a version segment in the filename.
electron-builder.json5 sets artifactName to "${productName}-${arch}.${ext}",
so the published assets are Recordly-arm64.dmg and Recordly-x64.dmg. The
wildcard requires a hyphen on both sides, so the patterns never matched
and "gh release download" exited with "no assets match the file pattern",
failing the job at the download step on every run.
Use the exact names the release publishes, matching the convention
already used in scripts/verify-macos-distribution.mjs.
177 lines
6.1 KiB
YAML
177 lines
6.1 KiB
YAML
name: Update Homebrew Tap
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: "Release tag to publish to Homebrew tap (e.g. v1.0.5)"
|
|
required: true
|
|
type: string
|
|
tap_repo:
|
|
description: "Tap repository in owner/repo format"
|
|
required: false
|
|
default: "webadderall/homebrew-tap"
|
|
type: string
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
update-tap:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
|
|
TAP_REPO: ${{ github.event.inputs.tap_repo || vars.HOMEBREW_TAP_REPO || 'webadderall/homebrew-tap' }}
|
|
AUTO_MERGE_TAP_PR: ${{ vars.HOMEBREW_TAP_AUTO_MERGE || 'true' }}
|
|
steps:
|
|
- name: Validate token
|
|
run: |
|
|
if [ -z "${GH_TOKEN}" ]; then
|
|
echo "HOMEBREW_TAP_TOKEN secret is not set."
|
|
exit 1
|
|
fi
|
|
|
|
- name: Resolve release tag
|
|
id: tag
|
|
shell: bash
|
|
run: |
|
|
TAG="${{ github.event.inputs.tag }}"
|
|
|
|
if [ -z "$TAG" ]; then
|
|
echo "Release tag is empty"
|
|
exit 1
|
|
fi
|
|
|
|
VERSION="${TAG#v}"
|
|
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
|
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Download release artifacts
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
mkdir -p /tmp/recordly-release
|
|
gh release download "${{ steps.tag.outputs.tag }}" \
|
|
--repo "${{ github.repository }}" \
|
|
--dir /tmp/recordly-release \
|
|
--pattern "Recordly-arm64.dmg" \
|
|
--pattern "Recordly-x64.dmg"
|
|
|
|
- name: Compute checksums
|
|
id: sha
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
ARM_FILE=$(find /tmp/recordly-release -maxdepth 1 -name 'Recordly-arm64.dmg' | head -n 1)
|
|
INTEL_FILE=$(find /tmp/recordly-release -maxdepth 1 -name 'Recordly-x64.dmg' | head -n 1)
|
|
|
|
if [ -z "$ARM_FILE" ] || [ -z "$INTEL_FILE" ]; then
|
|
echo "Unable to locate macOS release artifacts for ${{ steps.tag.outputs.tag }}"
|
|
exit 1
|
|
fi
|
|
|
|
SHA_ARM=$(sha256sum "$ARM_FILE" | awk '{print $1}')
|
|
SHA_INTEL=$(sha256sum "$INTEL_FILE" | awk '{print $1}')
|
|
echo "arm=$SHA_ARM" >> "$GITHUB_OUTPUT"
|
|
echo "intel=$SHA_INTEL" >> "$GITHUB_OUTPUT"
|
|
echo "arm_file=$(basename "$ARM_FILE")" >> "$GITHUB_OUTPUT"
|
|
echo "intel_file=$(basename "$INTEL_FILE")" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Clone tap repository
|
|
shell: bash
|
|
run: |
|
|
gh repo clone "$TAP_REPO" /tmp/homebrew-tap
|
|
git -C /tmp/homebrew-tap remote set-url origin "https://x-access-token:${GH_TOKEN}@github.com/${TAP_REPO}.git"
|
|
|
|
- name: Update cask file
|
|
id: update
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
cd /tmp/homebrew-tap
|
|
mkdir -p Casks
|
|
|
|
BRANCH="recordly-cask-${{ steps.tag.outputs.tag }}"
|
|
git checkout -B "$BRANCH"
|
|
|
|
cat > Casks/recordly.rb <<'RUBY'
|
|
cask "recordly" do
|
|
version "__VERSION__"
|
|
|
|
on_arm do
|
|
sha256 "__SHA_ARM__"
|
|
url "https://github.com/__REPO__/releases/download/__TAG__/__ARM_FILE__"
|
|
end
|
|
|
|
on_intel do
|
|
sha256 "__SHA_INTEL__"
|
|
url "https://github.com/__REPO__/releases/download/__TAG__/__INTEL_FILE__"
|
|
end
|
|
|
|
name "Recordly"
|
|
desc "Open-source screen recorder and editor"
|
|
homepage "https://www.recordly.dev"
|
|
|
|
app "Recordly.app"
|
|
end
|
|
RUBY
|
|
|
|
sed -i "s/__VERSION__/${{ steps.tag.outputs.version }}/g" Casks/recordly.rb
|
|
sed -i "s/__SHA_ARM__/${{ steps.sha.outputs.arm }}/g" Casks/recordly.rb
|
|
sed -i "s/__SHA_INTEL__/${{ steps.sha.outputs.intel }}/g" Casks/recordly.rb
|
|
sed -i "s#__REPO__#${{ github.repository }}#g" Casks/recordly.rb
|
|
sed -i "s#__TAG__#${{ steps.tag.outputs.tag }}#g" Casks/recordly.rb
|
|
sed -i "s#__ARM_FILE__#${{ steps.sha.outputs.arm_file }}#g" Casks/recordly.rb
|
|
sed -i "s#__INTEL_FILE__#${{ steps.sha.outputs.intel_file }}#g" Casks/recordly.rb
|
|
|
|
if git diff --quiet; then
|
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
|
|
git config user.name "github-actions[bot]"
|
|
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
git add Casks/recordly.rb
|
|
git commit -m "chore(cask): update recordly to ${{ steps.tag.outputs.tag }}"
|
|
git push --force-with-lease origin "$BRANCH"
|
|
|
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
echo "branch=$BRANCH" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Open pull request in tap repo
|
|
if: steps.update.outputs.changed == 'true'
|
|
id: pr
|
|
shell: bash
|
|
run: |
|
|
cd /tmp/homebrew-tap
|
|
|
|
PR_NUMBER=$(gh pr list --head "${{ steps.update.outputs.branch }}" --json number --jq '.[0].number // empty')
|
|
if [ -n "$PR_NUMBER" ]; then
|
|
echo "PR already exists for ${{ steps.update.outputs.branch }} (#$PR_NUMBER)"
|
|
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
|
|
PR_URL=$(gh pr create \
|
|
--title "chore(cask): update recordly to ${{ steps.tag.outputs.tag }}" \
|
|
--body "Automated cask update for ${{ steps.tag.outputs.tag }}.\n\n- arm64 sha256: \\`${{ steps.sha.outputs.arm }}\\`\n- x64 sha256: \\`${{ steps.sha.outputs.intel }}\\`" \
|
|
--head "${{ steps.update.outputs.branch }}" \
|
|
--base main)
|
|
|
|
PR_NUMBER=$(echo "$PR_URL" | sed -E 's#.*/pull/([0-9]+).*#\1#')
|
|
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Auto-merge tap PR
|
|
if: steps.update.outputs.changed == 'true' && env.AUTO_MERGE_TAP_PR == 'true'
|
|
shell: bash
|
|
run: |
|
|
cd /tmp/homebrew-tap
|
|
|
|
PR_NUMBER="${{ steps.pr.outputs.number }}"
|
|
if [ -z "$PR_NUMBER" ]; then
|
|
echo "No pull request number available; skipping auto-merge."
|
|
exit 0
|
|
fi
|
|
|
|
gh pr merge "$PR_NUMBER" --squash --delete-branch --repo "$TAP_REPO"
|