chore: bump version to 0.8.4 #6
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release and Build | |
| on: | |
| push: | |
| tags: | |
| - 'v*.*.*' # 触发条件:推送形如 v0.8.0, v1.0.0 的标签 | |
| env: | |
| REGISTRY: ghcr.io | |
| IMAGE_NAME: ${{ github.repository }} | |
| jobs: | |
| create-release: | |
| name: Create GitHub Release | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # 获取完整历史,用于生成变更日志 | |
| - name: Get version from tag | |
| id: get_version | |
| run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT | |
| - name: Generate Release Notes | |
| id: release_notes | |
| run: | | |
| VERSION=${{ steps.get_version.outputs.VERSION }} | |
| # 从 CHANGELOG.md 提取中文版本说明 | |
| if [ -f "CHANGELOG.md" ]; then | |
| # 提取当前版本的中文内容 | |
| CHANGELOG_CN=$(sed -n "/## \[$VERSION\]/,/## \[/p" CHANGELOG.md | sed '$d' | tail -n +2) | |
| else | |
| CHANGELOG_CN="" | |
| fi | |
| # 获取上一个标签 | |
| PREV_TAG=$(git describe --abbrev=0 --tags $(git rev-list --tags --skip=1 --max-count=1) 2>/dev/null || echo "") | |
| # 生成英文变更日志(从 git commit) | |
| if [ -z "$PREV_TAG" ]; then | |
| CHANGELOG_EN=$(git log --pretty=format:"- %s (%h)" --no-merges) | |
| else | |
| CHANGELOG_EN=$(git log ${PREV_TAG}..HEAD --pretty=format:"- %s (%h)" --no-merges) | |
| fi | |
| # 生成 Release Notes(中文优先,英文在后) | |
| if [ -n "$CHANGELOG_CN" ]; then | |
| echo "## 📝 更新说明 / Release Notes" > release_notes.md | |
| echo "" >> release_notes.md | |
| echo "$CHANGELOG_CN" >> release_notes.md | |
| echo "" >> release_notes.md | |
| echo "---" >> release_notes.md | |
| echo "" >> release_notes.md | |
| else | |
| echo "## 📝 Release Notes" > release_notes.md | |
| echo "" >> release_notes.md | |
| fi | |
| echo "## 🚀 What's Changed (Auto-generated)" >> release_notes.md | |
| echo "" >> release_notes.md | |
| echo "$CHANGELOG_EN" >> release_notes.md | |
| echo "" >> release_notes.md | |
| echo "## 📦 Docker Image" >> release_notes.md | |
| echo "" >> release_notes.md | |
| echo '```bash' >> release_notes.md | |
| echo "docker pull ghcr.io/${{ github.repository }}:$VERSION" >> release_notes.md | |
| echo "# 或使用 latest 标签" >> release_notes.md | |
| echo "docker pull ghcr.io/${{ github.repository }}:latest" >> release_notes.md | |
| echo '```' >> release_notes.md | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| name: Release v${{ steps.get_version.outputs.VERSION }} | |
| body_path: release_notes.md | |
| draft: false | |
| prerelease: ${{ contains(steps.get_version.outputs.VERSION, 'alpha') || contains(steps.get_version.outputs.VERSION, 'beta') || contains(steps.get_version.outputs.VERSION, 'rc') }} | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| build-and-push-docker: | |
| name: Build and Push Docker Image | |
| runs-on: ubuntu-latest | |
| needs: create-release | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Get version from tag | |
| id: get_version | |
| run: | | |
| VERSION=${GITHUB_REF#refs/tags/v} | |
| echo "VERSION=$VERSION" >> $GITHUB_OUTPUT | |
| # 判断是否为次版本号 x.y.0(打 stable 标签) | |
| if echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.0$'; then | |
| echo "IS_STABLE=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "IS_STABLE=false" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Extract metadata for Docker | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
| tags: | | |
| type=semver,pattern={{version}} | |
| type=semver,pattern={{major}}.{{minor}} | |
| type=semver,pattern={{major}} | |
| type=raw,value=latest,enable=${{ !contains(steps.get_version.outputs.VERSION, '-') }} | |
| type=raw,value=stable,enable=${{ steps.get_version.outputs.IS_STABLE == 'true' && !contains(steps.get_version.outputs.VERSION, '-') }} | |
| - name: Build and push Docker image | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| file: ./Dockerfile | |
| push: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| cache-to: type=gha,mode=max | |
| platforms: linux/amd64,linux/arm64 | |
| - name: Image digest | |
| run: | | |
| echo "Docker image pushed successfully!" | |
| echo "Tags: ${{ steps.meta.outputs.tags }}" |