Skip to content

fix: simplify release workflow, embed version via release-it hook #44

fix: simplify release workflow, embed version via release-it hook

fix: simplify release workflow, embed version via release-it hook #44

Workflow file for this run

name: Release
on:
push:
branches:
- main
permissions:
contents: write
actions: read
jobs:
release:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.release.outputs.version }}
tag: ${{ steps.release.outputs.tag }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Authenticate as GitHub App
id: auth
uses: ./.github/actions/github-app-auth
with:
app-id: ${{ secrets.AUTOMATION_GITHUB_APP_ID }}
private-key: ${{ secrets.AUTOMATION_GITHUB_APP_PRIVATE_KEY }}
- name: Fetch tags
run: git fetch --tags --force
- name: Setup mise
uses: jdx/mise-action@v2
- name: Install dependencies
run: yarn install
- name: Run release-it
id: release
run: |
yarn release-it --ci
TAG=$(git describe --tags --abbrev=0)
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
echo "version=${TAG#v}" >> "$GITHUB_OUTPUT"
update-homebrew:
needs: release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Get job context
id: context
uses: qoomon/actions--context@v4
- name: Authenticate as GitHub App
id: auth
uses: ./.github/actions/github-app-auth
with:
app-id: ${{ secrets.AUTOMATION_GITHUB_APP_ID }}
private-key: ${{ secrets.AUTOMATION_GITHUB_APP_PRIVATE_KEY }}
- name: Get release info
id: release
run: |
VERSION="${{ needs.release.outputs.version }}"
TAG="${{ needs.release.outputs.tag }}"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
# Download archive tarball and calculate SHA256
# Archive is available instantly (no CDN delay like release assets)
TARBALL_URL="https://github.com/${{ github.repository }}/archive/refs/tags/${TAG}.tar.gz"
echo "Downloading tarball from: $TARBALL_URL"
curl -fsSL "$TARBALL_URL" -o /tmp/archive.tar.gz
SHA256=$(shasum -a 256 /tmp/archive.tar.gz | cut -d' ' -f1)
echo "sha256=$SHA256" >> "$GITHUB_OUTPUT"
echo "Successfully got SHA256: $SHA256"
- name: Clone homebrew-devsetup
run: |
gh repo clone nsheaps/homebrew-devsetup homebrew-devsetup
- name: Update formula
run: |
cd homebrew-devsetup
cat > Formula/git-wt.rb << FORMULA_EOF
# typed: false
# frozen_string_literal: true
class GitWt < Formula
desc 'Interactive TUI for git worktree management'
homepage 'https://github.com/nsheaps/git-wt'
url 'https://github.com/nsheaps/git-wt/archive/refs/tags/${{ steps.release.outputs.tag }}.tar.gz'
sha256 '${{ steps.release.outputs.sha256 }}'
license 'MIT'
head do
url 'https://github.com/nsheaps/git-wt.git', branch: 'main'
end
depends_on 'gum'
def install
bin.install 'bin/git-wt'
end
test do
assert_match 'git-wt', shell_output("#{bin}/git-wt --help")
end
end
FORMULA_EOF
# Remove leading whitespace from heredoc
sed -i 's/^ //' Formula/git-wt.rb
- name: Create PR to update formula with auto-merge
env:
RELEASE_URL: https://github.com/${{ github.repository }}/releases/tag/${{ steps.release.outputs.tag }}
JOB_URL: ${{ env.GITHUB_JOB_URL }}
VERSION: ${{ steps.release.outputs.version }}
TAG: ${{ steps.release.outputs.tag }}
run: |
cd homebrew-devsetup
BRANCH="bump-git-wt-${VERSION}"
git checkout -b "$BRANCH"
git add Formula/git-wt.rb
git commit -m "chore: update git-wt to ${VERSION}"
git push -u origin "$BRANCH"
# Create PR body file
cat > /tmp/pr-body.md << 'BODY_EOF'
Automated formula update from git-wt release
BODY_EOF
echo "" >> /tmp/pr-body.md
echo "**Release:** ${RELEASE_URL}" >> /tmp/pr-body.md
echo "**Workflow:** ${JOB_URL}" >> /tmp/pr-body.md
PR_URL=$(gh pr create \
--title "chore: update git-wt to ${VERSION}" \
--body-file /tmp/pr-body.md \
--base main)
# Enable auto-merge with squash
gh pr merge "$PR_URL" --auto --squash