Add a cleanup step in the release workflow to delete raw binary files for each platform, retaining only the tar.gz archives, checksums.txt, and install script.
80 lines
3.4 KiB
YAML
80 lines
3.4 KiB
YAML
name: Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
release:
|
|
name: Create Release
|
|
runs-on: ubuntu-gitea
|
|
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.24'
|
|
|
|
- name: Build for multiple platforms
|
|
run: |
|
|
VERSION=${GITHUB_REF#refs/tags/}
|
|
COMMIT=$(git rev-parse --short HEAD)
|
|
DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
mkdir -p build
|
|
for plat in 'linux/amd64' 'linux/arm64' 'darwin/amd64' 'darwin/arm64' 'windows/amd64'; do
|
|
IFS='/' read -r OS ARCH <<< "$plat"
|
|
BIN="grokkit-${OS}-${ARCH}"
|
|
if [ "$OS" = "windows" ]; then BIN="${BIN}.exe"; fi
|
|
GOOS="$OS" GOARCH="$ARCH" go build -trimpath -ldflags "-s -w -X 'gmgauthier.com/grokkit/internal/version.Version=${VERSION}' -X 'gmgauthier.com/grokkit/internal/version.Commit=${COMMIT}' -X 'gmgauthier.com/grokkit/internal/version.BuildDate=${DATE}'" -o "build/${BIN}" .
|
|
done
|
|
- name: Prepare assets
|
|
run: |
|
|
VERSION=${GITHUB_REF#refs/tags/}
|
|
for bin in build/grokkit-* ; do
|
|
if [ ! -f "$bin" ]; then continue; fi
|
|
OSARCH=$(basename "$bin" | sed 's/grokkit-//' | sed 's/\.exe$//')
|
|
tar czf "build/grokkit-${OSARCH}-${VERSION}.tar.gz" -C build "$(basename "$bin")"
|
|
done
|
|
sha256sum build/grokkit-*.tar.gz | tee build/checksums.txt
|
|
cp scripts/grokkit-install.sh build/
|
|
# Clean up raw binaries (keep only tars, checksums, sh)
|
|
for plat in 'linux/amd64' 'linux/arm64' 'darwin/amd64' 'darwin/arm64' 'windows/amd64'; do
|
|
IFS='/' read -r OS ARCH <<< "$plat"
|
|
BIN="grokkit-${OS}-${ARCH}"
|
|
if [ "$OS" = "windows" ]; then BIN="${BIN}.exe"; fi
|
|
rm -f "build/${BIN}"
|
|
done
|
|
- name: Install dependencies
|
|
run: apt update && apt install -y jq
|
|
- name: Create Release & Upload Assets
|
|
env:
|
|
GITEA_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
|
run: |
|
|
VERSION=${GITHUB_REF#refs/tags/}
|
|
GITEA_API=https://repos.gmgauthier.com/api/v1
|
|
# Create release
|
|
curl -X POST "${GITEA_API}/repos/${GITHUB_REPOSITORY}/releases" \
|
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"tag_name\": \"${VERSION}\",\"name\": \"Grokkit ${VERSION}\",\"body\": \"## Quick Install\\n\\n```bash\\ncurl -L https://repos.gmgauthier.com/gmgauthier/grokkit/releases/download/v${VERSION}/grokkit-install.sh | VERSION=${VERSION} bash\\n```\\n\\nAssets include platform binaries (tar.gz), checksums.txt. See CHANGELOG.md.\"}" > release.json
|
|
RELEASE_ID=$(jq .id release.json)
|
|
# Upload assets
|
|
for asset in build/* ; do
|
|
name=$(basename "$asset")
|
|
mime="application/octet-stream"
|
|
[[ "$name" =~ \.tar\.gz$ ]] && mime="application/gzip"
|
|
[[ "$name" =~ \.(txt|sh)$ ]] && mime="text/plain"
|
|
curl -X POST "${GITEA_API}/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=${name}" \
|
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
-H "Content-Type: ${mime}" \
|
|
--data-binary "@$asset"
|
|
done
|