Files

130 lines
4.2 KiB
YAML

name: Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
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-file: go.mod
- name: Install X11 dev library
run: sudo apt-get update && sudo apt-get install -y libx11-dev
- name: Run tests
run: go test -short ./...
- name: Get tag
id: get_tag
run: echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
- name: Generate changelog
id: changelog
run: |
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
if [ -n "$PREV_TAG" ]; then
CHANGES=$(git log --pretty=format:"- %s (%h)" $PREV_TAG..HEAD)
else
CHANGES=$(git log --pretty=format:"- %s (%h)" --max-count=50)
fi
echo "CHANGES<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Build Linux AMD64
env:
GOOS: linux
GOARCH: amd64
CGO_ENABLED: 1
TAG: ${{ steps.get_tag.outputs.TAG }}
run: |
go build -ldflags="-s -w -X main.version=${TAG} -X main.buildTime=$(date -u +"%Y-%m-%d_%H:%M:%S")" -o godex-linux-amd64 ./cmd/godex
- name: Build Linux ARM64
env:
GOOS: linux
GOARCH: arm64
CGO_ENABLED: 0
TAG: ${{ steps.get_tag.outputs.TAG }}
run: |
go build -ldflags="-s -w -X main.version=${TAG} -X main.buildTime=$(date -u +"%Y-%m-%d_%H:%M:%S")" -o godex-linux-arm64 ./cmd/godex
- name: Build macOS AMD64
env:
GOOS: darwin
GOARCH: amd64
CGO_ENABLED: 0
TAG: ${{ steps.get_tag.outputs.TAG }}
run: |
go build -ldflags="-s -w -X main.version=${TAG} -X main.buildTime=$(date -u +"%Y-%m-%d_%H:%M:%S")" -o godex-darwin-amd64 ./cmd/godex
- name: Build macOS ARM64
env:
GOOS: darwin
GOARCH: arm64
CGO_ENABLED: 0
TAG: ${{ steps.get_tag.outputs.TAG }}
run: |
go build -ldflags="-s -w -X main.version=${TAG} -X main.buildTime=$(date -u +"%Y-%m-%d_%H:%M:%S")" -o godex-darwin-arm64 ./cmd/godex
- name: Build Windows AMD64
env:
GOOS: windows
GOARCH: amd64
CGO_ENABLED: 0
TAG: ${{ steps.get_tag.outputs.TAG }}
run: |
go build -ldflags="-s -w -X main.version=${TAG} -X main.buildTime=$(date -u +"%Y-%m-%d_%H:%M:%S")" -o godex-windows-amd64.exe ./cmd/godex
- name: Generate SHA256 checksums
run: |
sha256sum godex-linux-amd64 > godex-linux-amd64.sha256
sha256sum godex-linux-arm64 > godex-linux-arm64.sha256
sha256sum godex-darwin-amd64 > godex-darwin-amd64.sha256
sha256sum godex-darwin-arm64 > godex-darwin-arm64.sha256
sha256sum godex-windows-amd64.exe > godex-windows-amd64.exe.sha256
- name: Create Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.get_tag.outputs.TAG }}
name: Release ${{ steps.get_tag.outputs.TAG }}
body: |
## Changes
${{ steps.changelog.outputs.CHANGES }}
## Installation
Download the appropriate binary for your platform and run the install script:
```bash
curl -sSL https://raw.githubusercontent.com/${{ github.repository }}/main/install.sh | sh
```
## Verification
Each binary includes a SHA256 checksum file for verification.
files: |
godex-linux-amd64
godex-linux-amd64.sha256
godex-linux-arm64
godex-linux-arm64.sha256
godex-darwin-amd64
godex-darwin-amd64.sha256
godex-darwin-arm64
godex-darwin-arm64.sha256
godex-windows-amd64.exe
godex-windows-amd64.exe.sha256
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}