diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..9688c9b --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,57 @@ +name: Release + +on: + push: + tags: + - 'v*' + +jobs: + build: + runs-on: ubuntu-latest + container: + image: golang:1.26-alpine + env: + GOPROXY: "https://mirrors.aliyun.com/goproxy/,direct" + steps: + - name: Checkout + run: | + apk add git bash + + - name: Download dependencies + run: go mod download + + - name: Build + run: | + for p in linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 windows/amd64; do + os=${p%/*} + arch=${p#*/} + ext="" + [ "$os" = "windows" ] && ext=".exe" + GOOS=$os GOARCH=$arch go build -o "hxclaw-${os}-${arch}${ext}" ./cmd/hxclaw + done + + - name: Checksums + run: sha256sum hxclaw-* > checksums.txt + + - name: Release + env: + GITEA_TOKEN: ${{ secrets.release_token }} + run: | + apk add curl jq + + TAG_NAME="${GITHUB_REF#refs/tags/}" + + RELEASE_BODY=$(git tag -l --format='%(contents)' "$TAG_NAME" 2>/dev/null || git log -1 --format="%s%n%n%b" "$TAG_NAME" 2>/dev/null || echo "Release $TAG_NAME") + + RELEASE_RESPONSE=$(curl -s -X POST "https://hub.gaomia.site/api/v1/repos/titor/hxclaw/releases" \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"${TAG_NAME}\",\"name\":\"${TAG_NAME}\",\"body\":\"${RELEASE_BODY}\"}") + + RELEASE_ID=$(echo "$RELEASE_RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) + + for f in hxclaw-* checksums.txt; do + [ -f "$f" ] && curl -s -X POST "https://hub.gaomia.site/api/v1/repos/titor/hxclaw/releases/${RELEASE_ID}/assets" \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -F "attachment=@$f" + done \ No newline at end of file