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.23-alpine container (see runner config) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # Go is pre-installed in golang:1.23-alpine container – no setup-go needed - name: Build xetup.exe run: | GOOS=windows GOARCH=amd64 go build -ldflags="-s -w" -o xetup.exe ./cmd/xetup/ echo "Built: $(ls -lh xetup.exe | awk '{print $5}')" - name: Publish latest release env: TOKEN: ${{ secrets.FORGEJO_TOKEN }} API: ${{ github.server_url }}/api/v1 REPO: ${{ github.repository }} run: | apk add --no-cache curl jq SHORT=$(echo "$GITHUB_SHA" | cut -c1-7) # Delete existing 'latest' release (and its 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 as release asset 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})"