fix: use correct install path in homebrew formula template (#3) #37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| push: | |
| branches: | |
| - main | |
| permissions: | |
| contents: write | |
| actions: read | |
| jobs: | |
| release: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| released: ${{ steps.release.outputs.released }} | |
| 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: Get next version | |
| id: next-version | |
| run: | | |
| # Get what version release-it would create (without releasing) | |
| VERSION=$(yarn release-it --release-version 2>/dev/null || echo "") | |
| if [[ -z "$VERSION" ]]; then | |
| echo "No release needed" | |
| echo "will-release=false" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "Next version: $VERSION" | |
| echo "will-release=true" >> "$GITHUB_OUTPUT" | |
| echo "version=$VERSION" >> "$GITHUB_OUTPUT" | |
| echo "tag=v$VERSION" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Embed version in script | |
| if: steps.next-version.outputs.will-release == 'true' | |
| run: | | |
| # Embed version before release-it commits, so the tagged commit has it | |
| sed -i "s/__VERSION__/${{ steps.next-version.outputs.tag }}/" bin/git-wt | |
| - name: Run release-it | |
| id: release | |
| if: steps.next-version.outputs.will-release == 'true' | |
| run: | | |
| # Run release-it to bump version, update changelog, commit, and tag | |
| # The version-embedded script will be included in the commit | |
| if yarn release-it --ci; then | |
| echo "released=true" >> "$GITHUB_OUTPUT" | |
| echo "version=${{ steps.next-version.outputs.version }}" >> "$GITHUB_OUTPUT" | |
| echo "tag=${{ steps.next-version.outputs.tag }}" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "Release failed" | |
| echo "released=false" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Create GitHub release | |
| if: steps.release.outputs.released == 'true' | |
| run: | | |
| gh release create "${{ steps.release.outputs.tag }}" \ | |
| bin/git-wt \ | |
| --title "${{ steps.release.outputs.tag }}" \ | |
| --generate-notes | |
| update-homebrew: | |
| if: needs.release.outputs.released == 'true' | |
| 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 source tarball and calculate SHA256 | |
| TARBALL_URL="https://github.com/${{ github.repository }}/archive/refs/tags/${TAG}.tar.gz" | |
| echo "Downloading tarball from: $TARBALL_URL" | |
| SHA256=$(curl -sL "$TARBALL_URL" | shasum -a 256 | 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 |