diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index aacea2d..04fd9f4 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -10,22 +10,31 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout + run: | + git init + git remote add origin ${{ github.server_url }}/${{ github.repository }}.git + git fetch origin ${{ github.ref }} + git checkout FETCH_HEAD + git log --oneline -3 - 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 + if ! command -v go &> /dev/null; then + wget -q https://go.dev/dl/go1.24.3.linux-amd64.tar.gz + 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 + fi go version - - name: Build - run: go build -o muyue ./cmd/muyue/ + - name: Verify source + run: ls -la cmd/muyue/ internal/ - - name: Test - run: go test ./... -v + - name: Build + run: | + go build -o muyue ./cmd/muyue/ + ./muyue version - name: Vet run: go vet ./... diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index cd628ef..ad29037 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -2,63 +2,73 @@ name: Release on: push: - tags: - - 'v*' + branches: [main] + workflow_dispatch: jobs: release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 + - name: Checkout + run: | + git init + git remote add origin ${{ github.server_url }}/${{ github.repository }}.git + git fetch origin ${{ github.ref }} + git checkout FETCH_HEAD - 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 + if ! command -v go &> /dev/null; then + wget -q https://go.dev/dl/go1.24.3.linux-amd64.tar.gz + 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 + fi go version - name: Get version - id: version - run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT + id: info + run: | + VERSION=$(grep 'Version =' internal/version/version.go | cut -d'"' -f2) + SHORT_SHA=$(git rev-parse --short HEAD) + echo "version=v${VERSION}" >> $GITHUB_OUTPUT + echo "sha=${SHORT_SHA}" >> $GITHUB_OUTPUT + echo "Building muyue v${VERSION} (${SHORT_SHA})" - name: Build all platforms run: | mkdir -p dist - VERSION=${{ steps.version.outputs.VERSION }} + VERSION=${{ steps.info.outputs.version }} + SHA=${{ steps.info.outputs.sha }} 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}" \ + -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}-${SHA}" \ -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}" \ + -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}-${SHA}" \ -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}" \ + -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}-${SHA}" \ -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}" \ + -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}-${SHA}" \ -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}" \ + -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}-${SHA}" \ -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}" \ + -ldflags="-s -w -X github.com/muyue/muyue/internal/version.Version=${VERSION}-${SHA}" \ -o dist/muyue-windows-arm64.exe ./cmd/muyue/ echo "Build complete:" @@ -79,61 +89,86 @@ jobs: 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 + rm -f muyue-linux-amd64 muyue-linux-arm64 muyue-darwin-amd64 muyue-darwin-arm64 muyue-windows-amd64.exe muyue-windows-arm64.exe + ls -lh - - 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 + - name: Delete old latest 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" + API="${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases" + RELEASE_ID=$(curl -s -H "Authorization: token ${GITEA_TOKEN}" "${API}?draft=false&pre-release=false" | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*' || true) + if [ -n "$RELEASE_ID" ]; then + echo "Deleting old release ${RELEASE_ID}..." + curl -s -X DELETE -H "Authorization: token ${GITEA_TOKEN}" "${API}/${RELEASE_ID}" + fi + TAG_ID=$(curl -s -H "Authorization: token ${GITEA_TOKEN}" "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/tags" | grep -o '"name":"latest"' || true) + if [ -n "$TAG_ID" ]; then + curl -s -X DELETE -H "Authorization: token ${GITEA_TOKEN}" "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/tags/latest" + fi - echo "Creating release ${VERSION}..." + - name: Create release + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + run: | + VERSION=${{ steps.info.outputs.version }} + SHA=${{ steps.info.outputs.sha }} + API="${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases" - RESPONSE=$(curl -s -X POST "${REPO_API}" \ + COMMIT_LOG=$(git log --oneline -10 | head -10) + + BODY=$(cat <