name: release on: push: tags: - 'v*' jobs: release: name: Build and publish release runs-on: ubuntu-latest container: image: golang:1.26-alpine steps: - name: Install tools run: apk add --no-cache curl git jq - name: Checkout env: TOKEN: ${{ secrets.GITHUB_TOKEN }} SERVER_URL: ${{ github.server_url }} REPO: ${{ github.repository }} REF: ${{ github.ref_name }} run: | git clone --depth 1 --branch "$REF" \ "$(echo "$SERVER_URL" | sed "s|https://|https://oauth2:${TOKEN}@|")/${REPO}.git" . - name: Build Linux (amd64) env: GOOS: linux GOARCH: amd64 CGO_ENABLED: "0" run: | go build -trimpath \ -ldflags="-s -w -X main.version=${{ github.ref_name }}" \ -o releaser-${{ github.ref_name }}-linux-amd64 \ ./cmd/... - name: Build Linux (arm64) env: GOOS: linux GOARCH: arm64 CGO_ENABLED: "0" run: | go build -trimpath \ -ldflags="-s -w -X main.version=${{ github.ref_name }}" \ -o releaser-${{ github.ref_name }}-linux-arm64 \ ./cmd/... - name: Build macOS (amd64) env: GOOS: darwin GOARCH: amd64 CGO_ENABLED: "0" run: | go build -trimpath \ -ldflags="-s -w -X main.version=${{ github.ref_name }}" \ -o releaser-${{ github.ref_name }}-darwin-amd64 \ ./cmd/... - name: Build macOS (arm64) env: GOOS: darwin GOARCH: arm64 CGO_ENABLED: "0" run: | go build -trimpath \ -ldflags="-s -w -X main.version=${{ github.ref_name }}" \ -o releaser-${{ github.ref_name }}-darwin-arm64 \ ./cmd/... - name: Build Windows (amd64) env: GOOS: windows GOARCH: amd64 CGO_ENABLED: "0" run: | go build -trimpath \ -ldflags="-s -w -X main.version=${{ github.ref_name }}" \ -o releaser-${{ github.ref_name }}-windows-amd64.exe \ ./cmd/... - name: Create release and upload assets env: TOKEN: ${{ secrets.GITHUB_TOKEN }} TAG: ${{ github.ref_name }} API_URL: ${{ github.api_url }} REPO: ${{ github.repository }} run: | release_id=$(curl -sf -X POST \ -H "Authorization: token $TOKEN" \ -H "Content-Type: application/json" \ "$API_URL/repos/$REPO/releases" \ -d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"draft\":false,\"prerelease\":false}" \ | jq -r .id) for file in \ releaser-${TAG}-linux-amd64 \ releaser-${TAG}-linux-arm64 \ releaser-${TAG}-darwin-amd64 \ releaser-${TAG}-darwin-arm64 \ releaser-${TAG}-windows-amd64.exe; do curl -sf -X POST \ -H "Authorization: token $TOKEN" \ -H "Content-Type: application/octet-stream" \ "$API_URL/repos/$REPO/releases/$release_id/assets?name=$file" \ --data-binary "@$file" echo "uploaded: $file" done