name: Release on: push: tags: - 'v*' permissions: contents: write packages: write jobs: # Update VERSION file with tag version update-version: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Update VERSION file run: | VERSION=${GITHUB_REF#refs/tags/v} echo "$VERSION" > backend/cmd/server/VERSION echo "Updated VERSION file to: $VERSION" - name: Upload VERSION artifact uses: actions/upload-artifact@v4 with: name: version-file path: backend/cmd/server/VERSION retention-days: 1 build-frontend: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: npm ci working-directory: frontend - name: Build frontend run: npm run build working-directory: frontend - name: Upload frontend artifact uses: actions/upload-artifact@v4 with: name: frontend-dist path: backend/internal/web/dist/ retention-days: 1 release: needs: [update-version, build-frontend] runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Download VERSION artifact uses: actions/download-artifact@v4 with: name: version-file path: backend/cmd/server/ - name: Download frontend artifact uses: actions/download-artifact@v4 with: name: frontend-dist path: backend/internal/web/dist/ - name: Setup Go uses: actions/setup-go@v5 with: go-version: '1.24' cache-dependency-path: backend/go.sum # Docker setup for GoReleaser - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to DockerHub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Fetch tags with annotations run: | # 确保获取完整的 annotated tag 信息 git fetch --tags --force - name: Get tag message id: tag_message run: | TAG_NAME=${GITHUB_REF#refs/tags/} echo "Processing tag: $TAG_NAME" # 获取完整的 tag message(跳过第一行标题) TAG_MESSAGE=$(git tag -l --format='%(contents:body)' "$TAG_NAME") # 调试输出 echo "Tag message length: ${#TAG_MESSAGE}" echo "Tag message preview:" echo "$TAG_MESSAGE" | head -10 # 使用 EOF 分隔符处理多行内容 echo "message<> $GITHUB_OUTPUT echo "$TAG_MESSAGE" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: Run GoReleaser uses: goreleaser/goreleaser-action@v6 with: version: '~> v2' args: release --clean --skip=validate env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAG_MESSAGE: ${{ steps.tag_message.outputs.message }} GITHUB_REPO_OWNER: ${{ github.repository_owner }} GITHUB_REPO_NAME: ${{ github.event.repository.name }} DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} # Update DockerHub description - name: Update DockerHub description uses: peter-evans/dockerhub-description@v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} repository: ${{ secrets.DOCKERHUB_USERNAME }}/sub2api short-description: "Sub2API - AI API Gateway Platform" readme-filepath: ./deploy/DOCKER.md