name: release on: push: branches: [main] paths: - '**.go' - 'go.mod' - 'go.sum' - 'scripts/**' - 'assets/**' - 'embed.go' - '.forgejo/workflows/release.yml' jobs: build-and-release: # Runner label 'ubuntu-latest' maps to golang:1.24-alpine container (see runner config) runs-on: ubuntu-latest defaults: run: shell: sh working-directory: /repo steps: - name: Setup working-directory: / run: | apk add --no-cache git curl jq mingw-w64-gcc git clone --depth=1 \ "http://x9:${{ secrets.FORGEJO_TOKEN }}@xetup-forgejo:3000/${{ github.repository }}.git" \ /repo cd /repo git checkout "${{ github.sha }}" - name: Build xetup.exe run: | CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc \ GOOS=windows GOARCH=amd64 \ go build -ldflags="-s -w -H windowsgui" -o xetup.exe ./cmd/xetup/ echo "Built: $(ls -lh xetup.exe | awk '{print $5}')" - name: Publish latest release env: TOKEN: ${{ secrets.FORGEJO_TOKEN }} API: http://xetup-forgejo:3000/api/v1 REPO: ${{ github.repository }} run: | SHORT=$(echo "${{ github.sha }}" | cut -c1-7) # Delete existing 'latest' release and tag to recreate cleanly RID=$(curl -sf -H "Authorization: token $TOKEN" \ "$API/repos/$REPO/releases/tags/latest" | jq -r '.id // empty') if [ -n "$RID" ]; then curl -sf -X DELETE -H "Authorization: token $TOKEN" \ "$API/repos/$REPO/releases/$RID" || true fi curl -sf -X DELETE -H "Authorization: token $TOKEN" \ "$API/repos/$REPO/tags/latest" || true # Create new 'latest' release RID=$(curl -sf -X POST \ -H "Authorization: token $TOKEN" \ -H "Content-Type: application/json" \ "$API/repos/$REPO/releases" \ -d "{\"tag_name\":\"latest\",\"name\":\"latest\",\"body\":\"Auto-built from ${SHORT}\",\"prerelease\":true}" \ | jq -r '.id') # Upload xetup.exe curl -sf -X POST \ -H "Authorization: token $TOKEN" \ -H "Content-Type: application/octet-stream" \ "$API/repos/$REPO/releases/$RID/assets?name=xetup.exe" \ --data-binary @xetup.exe echo "Released xetup.exe (commit ${SHORT})"