name: Release on: push: tags: - 'v*' jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Go run: | wget -q https://go.dev/dl/go1.24.3.linux-amd64.tar.gz sudo rm -rf /usr/local/go sudo tar -C /usr/local -xzf go1.24.3.linux-amd64.tar.gz export PATH=/usr/local/go/bin:$PATH echo "PATH=/usr/local/go/bin:$PATH" >> $GITHUB_ENV go version - name: Get version id: version run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT - name: Build all platforms run: | mkdir -p dist VERSION=${{ steps.version.outputs.VERSION }} echo "Building linux/amd64..." CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}" \ -o dist/muyue-linux-amd64 ./cmd/muyue/ echo "Building linux/arm64..." CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build \ -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}" \ -o dist/muyue-linux-arm64 ./cmd/muyue/ echo "Building darwin/amd64..." CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build \ -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}" \ -o dist/muyue-darwin-amd64 ./cmd/muyue/ echo "Building darwin/arm64..." CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build \ -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}" \ -o dist/muyue-darwin-arm64 ./cmd/muyue/ echo "Building windows/amd64..." CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build \ -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}" \ -o dist/muyue-windows-amd64.exe ./cmd/muyue/ echo "Building windows/arm64..." CGO_ENABLED=0 GOOS=windows GOARCH=arm64 go build \ -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}" \ -o dist/muyue-windows-arm64.exe ./cmd/muyue/ echo "Build complete:" ls -lh dist/ - name: Create checksums run: | cd dist sha256sum * > checksums.txt cat checksums.txt - name: Create archives run: | cd dist tar czf muyue-linux-amd64.tar.gz muyue-linux-amd64 tar czf muyue-linux-arm64.tar.gz muyue-linux-arm64 tar czf muyue-darwin-amd64.tar.gz muyue-darwin-amd64 tar czf muyue-darwin-arm64.tar.gz muyue-darwin-arm64 zip muyue-windows-amd64.zip muyue-windows-amd64.exe zip muyue-windows-arm64.zip muyue-windows-arm64.exe ls -lh *.tar.gz *.zip checksums.txt - name: Generate changelog id: changelog run: | PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") if [ -z "$PREVIOUS_TAG" ]; then echo "CHANGELOG=Initial release of muyue v0.1.0" >> $GITHUB_OUTPUT else CHANGELOG=$(git log ${PREVIOUS_TAG}..HEAD --pretty=format:"- %s" --no-merges) echo "CHANGELOG<> $GITHUB_OUTPUT echo "$CHANGELOG" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT fi - name: Create Gitea Release env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_SERVER: ${{ secrets.GITEA_SERVER }} GITEA_REPO: ${{ secrets.GITEA_REPO }} run: | VERSION=${{ steps.version.outputs.VERSION }} REPO_API="${GITEA_SERVER}/api/v1/repos/${GITEA_REPO}/releases" echo "Creating release ${VERSION}..." RESPONSE=$(curl -s -X POST "${REPO_API}" \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ -d "{ \"tag_name\": \"${VERSION}\", \"target_commitish\": \"main\", \"name\": \"muyue ${VERSION}\", \"body\": \"## Changes\n${{ steps.changelog.outputs.CHANGELOG }}\n\n## Binaries\n- Linux amd64: muyue-linux-amd64.tar.gz\n- Linux arm64: muyue-linux-arm64.tar.gz\n- macOS Intel: muyue-darwin-amd64.tar.gz\n- macOS Apple Silicon: muyue-darwin-arm64.tar.gz\n- Windows amd64: muyue-windows-amd64.zip\n- Windows arm64: muyue-windows-arm64.zip\n\n## Checksums\nSee checksums.txt\", \"draft\": false, \"prerelease\": false }") RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*') echo "Release ID: ${RELEASE_ID}" if [ -z "$RELEASE_ID" ]; then echo "Failed to create release" echo "$RESPONSE" exit 1 fi UPLOAD_URL="${GITEA_SERVER}/api/v1/repos/${GITEA_REPO}/releases/${RELEASE_ID}/assets" for file in dist/muyue-linux-amd64.tar.gz dist/muyue-linux-arm64.tar.gz dist/muyue-darwin-amd64.tar.gz dist/muyue-darwin-arm64.tar.gz dist/muyue-windows-amd64.zip dist/muyue-windows-arm64.zip dist/checksums.txt; do filename=$(basename "$file") echo "Uploading ${filename}..." curl -s -X POST "${UPLOAD_URL}" \ -H "Authorization: token ${GITEA_TOKEN}" \ -F "attachment=@${file};filename=${filename}" | grep -o '"name":"[^"]*"' done echo "Release ${VERSION} published!"