name: Release on: push: tags: - 'v*.*.*' jobs: build-and-release: name: Build and Release runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.25' - name: Get version from tag id: get_version run: | echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT echo "Version: ${GITHUB_REF#refs/tags/}" - name: Build binaries for multiple platforms run: | mkdir -p dist # Linux AMD64 GOOS=linux GOARCH=amd64 go build -o dist/relspec-linux-amd64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/relspec # Linux ARM64 GOOS=linux GOARCH=arm64 go build -o dist/relspec-linux-arm64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/relspec # macOS AMD64 GOOS=darwin GOARCH=amd64 go build -o dist/relspec-darwin-amd64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/relspec # macOS ARM64 (Apple Silicon) GOOS=darwin GOARCH=arm64 go build -o dist/relspec-darwin-arm64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/relspec # Windows AMD64 GOOS=windows GOARCH=amd64 go build -o dist/relspec-windows-amd64.exe -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/relspec # Create checksums cd dist sha256sum * > checksums.txt cd .. - name: Generate release notes id: release_notes run: | # Get the previous tag previous_tag=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") if [ -z "$previous_tag" ]; then # No previous tag, get all commits commits=$(git log --pretty=format:"- %s (%h)" --no-merges) else # Get commits since the previous tag commits=$(git log "${previous_tag}..HEAD" --pretty=format:"- %s (%h)" --no-merges) fi # Create release notes cat > release_notes.md << EOF # Release ${{ steps.get_version.outputs.VERSION }} ## Changes ${commits} ## Installation Download the appropriate binary for your platform: - **Linux (AMD64)**: \`relspec-linux-amd64\` - **Linux (ARM64)**: \`relspec-linux-arm64\` - **macOS (Intel)**: \`relspec-darwin-amd64\` - **macOS (Apple Silicon)**: \`relspec-darwin-arm64\` - **Windows (AMD64)**: \`relspec-windows-amd64.exe\` Make the binary executable (Linux/macOS): \`\`\`bash chmod +x relspec-* \`\`\` Verify the download with the provided checksums. EOF - name: Create Release uses: softprops/action-gh-release@v1 with: body_path: release_notes.md files: | dist/relspec-linux-amd64 dist/relspec-linux-arm64 dist/relspec-darwin-amd64 dist/relspec-darwin-arm64 dist/relspec-windows-amd64.exe dist/checksums.txt draft: false prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Summary run: | echo "Release ${{ steps.get_version.outputs.VERSION }} created successfully!" echo "Binaries built for:" echo " - Linux (amd64, arm64)" echo " - macOS (amd64, arm64)" echo " - Windows (amd64)"