Skip to content

Update Formula

Update Formula #10

name: Update Formula
on:
schedule:
- cron: '0 9 * * *' # Daily at 9am UTC
workflow_dispatch: # Allow manual trigger
permissions:
contents: write
jobs:
update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Check for new release
id: check
env:
GH_TOKEN: ${{ github.token }}
run: |
LATEST=$(gh api repos/git-pkgs/git-pkgs/releases/latest --jq '.tag_name' | sed 's/^v//')
CURRENT=$(grep -m1 'version "' Formula/git-pkgs.rb | sed 's/.*version "\([^"]*\)".*/\1/')
echo "latest=$LATEST" >> $GITHUB_OUTPUT
echo "current=$CURRENT" >> $GITHUB_OUTPUT
if [ "$LATEST" != "$CURRENT" ]; then
echo "needs_update=true" >> $GITHUB_OUTPUT
echo "New version available: $LATEST (current: $CURRENT)"
else
echo "needs_update=false" >> $GITHUB_OUTPUT
echo "Already up to date: $CURRENT"
fi
- name: Update formula
if: steps.check.outputs.needs_update == 'true'
env:
VERSION: ${{ steps.check.outputs.latest }}
run: |
# Download checksums
curl -sL "https://github.com/git-pkgs/git-pkgs/releases/download/v${VERSION}/checksums.txt" -o checksums.txt
# Extract SHA256 for each platform
SHA_DARWIN_AMD64=$(grep 'darwin-amd64' checksums.txt | awk '{print $1}')
SHA_DARWIN_ARM64=$(grep 'darwin-arm64' checksums.txt | awk '{print $1}')
SHA_LINUX_AMD64=$(grep 'linux-amd64' checksums.txt | awk '{print $1}')
SHA_LINUX_ARM64=$(grep 'linux-arm64' checksums.txt | awk '{print $1}')
# Update formula - use awk to match sha256 lines by their preceding url context
awk -v ver="$VERSION" \
-v sha_da="$SHA_DARWIN_AMD64" -v sha_darm="$SHA_DARWIN_ARM64" \
-v sha_la="$SHA_LINUX_AMD64" -v sha_larm="$SHA_LINUX_ARM64" '
/version "/ { gsub(/"[^"]*"/, "\"" ver "\"") }
/darwin-amd64\.tar\.gz/ { url_type = "darwin-amd64" }
/darwin-arm64\.tar\.gz/ { url_type = "darwin-arm64" }
/linux-amd64\.tar\.gz/ { url_type = "linux-amd64" }
/linux-arm64\.tar\.gz/ { url_type = "linux-arm64" }
/sha256 "/ {
if (url_type == "darwin-amd64") gsub(/"[a-f0-9]+"/, "\"" sha_da "\"")
else if (url_type == "darwin-arm64") gsub(/"[a-f0-9]+"/, "\"" sha_darm "\"")
else if (url_type == "linux-amd64") gsub(/"[a-f0-9]+"/, "\"" sha_la "\"")
else if (url_type == "linux-arm64") gsub(/"[a-f0-9]+"/, "\"" sha_larm "\"")
url_type = ""
}
{ print }
' Formula/git-pkgs.rb > Formula/git-pkgs.rb.tmp && mv Formula/git-pkgs.rb.tmp Formula/git-pkgs.rb
- name: Commit and push
if: steps.check.outputs.needs_update == 'true'
env:
VERSION: ${{ steps.check.outputs.latest }}
GH_TOKEN: ${{ github.token }}
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add Formula/git-pkgs.rb
git commit -m "Update git-pkgs to v${VERSION}"
git remote set-url origin "https://x-access-token:${GH_TOKEN}@github.com/${{ github.repository }}.git"
git push