From eaeed258c26ddf8d4ac8e2cd8da6f04375bbfa8c Mon Sep 17 00:00:00 2001 From: Florian Kinder Date: Sun, 12 Apr 2026 12:28:29 +0200 Subject: [PATCH] ci: migrate release pipeline to GoReleaser Same proven pattern from esq-cli (validated end-to-end on v1.1.3): replace the hand-rolled bash release pipeline with GoReleaser v2. Differences from esq-cli config: - Added -X main.date ldflag (atl-cli uses version, commit, and date) - Formula name: atl - Formula description matches the repo description --- .github/workflows/release.yml | 122 +++++----------------------------- .goreleaser.yml | 69 +++++++++++++++++++ 2 files changed, 85 insertions(+), 106 deletions(-) create mode 100644 .goreleaser.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bdd7a40..d1ac3e9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,111 +27,21 @@ jobs: - name: Run tests run: go test -v -race ./... - - name: Build binaries - run: | - VERSION=${GITHUB_REF_NAME} - COMMIT=$(git rev-parse --short HEAD) - DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") - LDFLAGS="-s -w -X main.version=${VERSION} -X main.commit=${COMMIT} -X main.date=${DATE}" - - mkdir -p dist - - # Build for each platform - platforms=( - "linux/amd64" - "linux/arm64" - "darwin/amd64" - "darwin/arm64" - "windows/amd64" - "windows/arm64" - ) - - for platform in "${platforms[@]}"; do - GOOS=${platform%/*} - GOARCH=${platform#*/} - - output_name="atl-${GOOS}-${GOARCH}" - if [ "$GOOS" = "windows" ]; then - output_name+=".exe" - fi - - echo "Building $output_name..." - GOOS=$GOOS GOARCH=$GOARCH go build -ldflags "${LDFLAGS}" -o "dist/${output_name}" ./cmd/atl - done - - # Create archives - cd dist - for file in atl-*; do - if [[ "$file" == *.exe ]]; then - zip "${file%.exe}.zip" "$file" - rm "$file" - else - tar czf "${file}.tar.gz" "$file" - rm "$file" - fi - done - - # Generate checksums - sha256sum * > checksums.txt - - - name: Generate changelog - id: changelog - run: | - # Get previous tag - PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") - - if [ -n "$PREV_TAG" ]; then - echo "Generating changelog from $PREV_TAG to $GITHUB_REF_NAME" - CHANGELOG=$(git log --pretty=format:"- %s (%h)" "$PREV_TAG".."$GITHUB_REF_NAME" --no-merges) - else - echo "No previous tag found, including all commits" - CHANGELOG=$(git log --pretty=format:"- %s (%h)" --no-merges) - fi - - # Escape for GitHub Actions - echo "changelog<> $GITHUB_OUTPUT - echo "$CHANGELOG" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - - name: Create Release - uses: softprops/action-gh-release@v2 + - name: Generate GitHub App token for tap + id: app-token + uses: actions/create-github-app-token@v2 with: - name: ${{ github.ref_name }} - body: | - ## What's Changed - - ${{ steps.changelog.outputs.changelog }} - - ## Installation - - ### macOS (Apple Silicon) - ```bash - curl -L https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/atl-darwin-arm64.tar.gz | tar xz - chmod +x atl-darwin-arm64 - sudo mv atl-darwin-arm64 /usr/local/bin/atl - ``` - - ### macOS (Intel) - ```bash - curl -L https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/atl-darwin-amd64.tar.gz | tar xz - chmod +x atl-darwin-amd64 - sudo mv atl-darwin-amd64 /usr/local/bin/atl - ``` + app-id: ${{ secrets.HOMEBREW_TAP_APP_ID }} + private-key: ${{ secrets.HOMEBREW_TAP_APP_PRIVATE_KEY }} + owner: enthus-appdev + repositories: homebrew-tap - ### Linux (x64) - ```bash - curl -L https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/atl-linux-amd64.tar.gz | tar xz - chmod +x atl-linux-amd64 - sudo mv atl-linux-amd64 /usr/local/bin/atl - ``` - - ### Windows - Download `atl-windows-amd64.zip` (or `atl-windows-arm64.zip` for ARM) and add to your PATH. - - ## Checksums - - See `checksums.txt` for SHA256 checksums of all binaries. - files: | - dist/* - draft: false - prerelease: ${{ contains(github.ref_name, '-') }} + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v6 + with: + distribution: goreleaser + version: "~> v2" + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + HOMEBREW_TAP_TOKEN: ${{ steps.app-token.outputs.token }} diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..0dd6daa --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,69 @@ +version: 2 + +project_name: atl + +builds: + - main: ./cmd/atl + binary: atl + env: + - CGO_ENABLED=0 + goos: + - linux + - darwin + - windows + goarch: + - amd64 + - arm64 + ldflags: + - -s -w + - -X main.version={{.Version}} + - -X main.commit={{.ShortCommit}} + - -X main.date={{.Date}} + +archives: + - formats: + - tar.gz + format_overrides: + - goos: windows + formats: + - zip + +checksum: + name_template: checksums.txt + +changelog: + sort: asc + +release: + github: + owner: enthus-appdev + name: atl-cli + header: | + ## Installation + + ### Homebrew (macOS and Linux) + ```bash + brew install enthus-appdev/tap/atl + ``` + + ### Binary download + Download the archive for your platform below, extract, and add to your PATH. + +brews: + - name: atl + repository: + owner: enthus-appdev + name: homebrew-tap + token: "{{ .Env.HOMEBREW_TAP_TOKEN }}" + directory: Formula + homepage: https://github.com/enthus-appdev/atl-cli + description: "Jira and Confluence CLI - a CLI alternative to the Atlassian MCP" + license: MIT + commit_author: + name: enthus-appdev-tap-bumper[bot] + email: 275364917+enthus-appdev-tap-bumper[bot]@users.noreply.github.com + commit_msg_template: "chore(formula): bump {{ .ProjectName }} to {{ .Tag }}" + test: | + assert_match version.to_s, shell_output("#{bin}/atl --version") + install: | + bin.install "atl"