about/.github/workflows/release.yml
2025-09-15 11:58:48 +03:00

90 lines
3.0 KiB
YAML

name: Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: 1.22
- name: Cache Go modules
uses: actions/cache@v3
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Run tests
run: go test -v ./...
- name: Build binaries
run: |
mkdir -p dist
# Build for different platforms
GOOS=linux GOARCH=amd64 go build -ldflags="-X 'main.version=${{ github.ref_name }}' -X 'main.buildTime=$(date -u +%Y-%m-%dT%H:%M:%S)'" -o dist/about-linux-amd64 .
GOOS=linux GOARCH=arm64 go build -ldflags="-X 'main.version=${{ github.ref_name }}' -X 'main.buildTime=$(date -u +%Y-%m-%dT%H:%M:%S)'" -o dist/about-linux-arm64 .
GOOS=darwin GOARCH=amd64 go build -ldflags="-X 'main.version=${{ github.ref_name }}' -X 'main.buildTime=$(date -u +%Y-%m-%dT%H:%M:%S)'" -o dist/about-darwin-amd64 .
GOOS=darwin GOARCH=arm64 go build -ldflags="-X 'main.version=${{ github.ref_name }}' -X 'main.buildTime=$(date -u +%Y-%m-%dT%H:%M:%S)'" -o dist/about-darwin-arm64 .
GOOS=windows GOARCH=amd64 go build -ldflags="-X 'main.version=${{ github.ref_name }}' -X 'main.buildTime=$(date -u +%Y-%m-%dT%H:%M:%S)'" -o dist/about-windows-amd64.exe .
# Create checksums
cd dist
sha256sum * > checksums.txt
- name: Create release archives
run: |
cd dist
# Create tar.gz for Linux and macOS
tar -czf about-linux-amd64.tar.gz about-linux-amd64
tar -czf about-linux-arm64.tar.gz about-linux-arm64
tar -czf about-darwin-amd64.tar.gz about-darwin-amd64
tar -czf about-darwin-arm64.tar.gz about-darwin-arm64
# Create zip for Windows
zip about-windows-amd64.zip about-windows-amd64.exe
# Update checksums with archives
sha256sum *.tar.gz *.zip > checksums.txt
- name: Generate changelog
id: changelog
run: |
if [ -f CHANGELOG.md ]; then
# Extract changelog for this version
awk '/^## \[?'${GITHUB_REF_NAME#v}'\]?/{flag=1; next} /^## /{flag=0} flag' CHANGELOG.md > release_notes.md
else
echo "Release ${{ github.ref_name }}" > release_notes.md
echo "" >> release_notes.md
echo "Automated release created from tag ${{ github.ref_name }}" >> release_notes.md
fi
- name: Create Release
uses: softprops/action-gh-release@v1
with:
files: |
dist/*.tar.gz
dist/*.zip
dist/checksums.txt
body_path: release_notes.md
draft: false
prerelease: ${{ contains(github.ref_name, '-') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}