pkg-checker 0.7.2

A Rust tool for checking and updating globally installed Cargo packages with interactive mode and smart prerelease detection
name: Create GitHub Release

on:
  push:
    tags:
      - "v*" # 当推送以 v 开头的标签时触发

jobs:
  create-release:
    name: Create GitHub Release
    runs-on: ubuntu-latest
    permissions:
      contents: write # Required for creating releases
      pull-requests: write # Required for release operations

    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # 获取完整的 git 历史

      - name: Setup Git
        run: |
          git config --global user.name "GitHub Actions"
          git config --global user.email "actions@github.com"

      - name: Generate changelog
        id: changelog
        run: |
          # 获取当前标签
          CURRENT_TAG=${GITHUB_REF#refs/tags/}
          echo "current_tag=$CURRENT_TAG" >> $GITHUB_OUTPUT

          # 获取上一个标签
          PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD~1 2>/dev/null || echo "")
          echo "previous_tag=$PREVIOUS_TAG" >> $GITHUB_OUTPUT

          # 生成 changelog
          if [ -n "$PREVIOUS_TAG" ]; then
            echo "## 🎉 新功能" > release_notes.md
            echo "" >> release_notes.md
            echo "### 📋 更新内容" >> release_notes.md
            echo "" >> release_notes.md
            
            # 获取提交信息并格式化
            git log --pretty=format:"- %s" $PREVIOUS_TAG..HEAD | \
            sed 's/^feat: /✨ /' | \
            sed 's/^fix: /🐛 /' | \
            sed 's/^chore: /🔧 /' | \
            sed 's/^refactor: /♻️ /' | \
            sed 's/^docs: /📚 /' | \
            sed 's/^style: /💄 /' | \
            sed 's/^test: /🧪 /' | \
            sed 's/^perf: /⚡ /' | \
            sed 's/^ci: /👷 /' | \
            sed 's/^build: /📦 /' | \
            sed 's/^revert: /⏪ /' >> release_notes.md
            
            echo "" >> release_notes.md
            echo "### 🔗 相关链接" >> release_notes.md
            echo "- [GitHub Repository](https://github.com/jenkinpan/pkg-checker-rs)" >> release_notes.md
            echo "- [Crates.io](https://crates.io/crates/pkg-checker)" >> release_notes.md
            echo "- [Documentation](https://docs.rs/pkg-checker)" >> release_notes.md
            echo "" >> release_notes.md
            echo "## 📦 安装" >> release_notes.md
            echo "" >> release_notes.md
            echo "\`\`\`bash" >> release_notes.md
            echo "cargo install pkg-checker" >> release_notes.md
            echo "\`\`\`" >> release_notes.md
          else
            echo "## 🎉 首次发布" > release_notes.md
            echo "" >> release_notes.md
            echo "pkg-checker 是一个用 Rust 编写的工具,用于检查和管理全局安装的 Cargo 包更新。" >> release_notes.md
            echo "" >> release_notes.md
            echo "### ✨ 主要功能" >> release_notes.md
            echo "- 🔍 自动检测已安装的全局 Cargo 包" >> release_notes.md
            echo "- 📦 检查每个包的最新版本" >> release_notes.md
            echo "- 🎨 彩色输出,清晰显示更新状态" >> release_notes.md
            echo "- ⚡ 异步处理,快速检查多个包" >> release_notes.md
            echo "- 🔄 默认交互式更新模式,一键更新包" >> release_notes.md
            echo "- 🧠 智能预发布版本检测和询问" >> release_notes.md
            echo "- 📋 详细的更新摘要功能" >> release_notes.md
            echo "" >> release_notes.md
            echo "## 📦 安装" >> release_notes.md
            echo "" >> release_notes.md
            echo "\`\`\`bash" >> release_notes.md
            echo "cargo install pkg-checker" >> release_notes.md
            echo "\`\`\`" >> release_notes.md
            echo "" >> release_notes.md
            echo "## 🔗 相关链接" >> release_notes.md
            echo "- [GitHub Repository](https://github.com/jenkinpan/pkg-checker-rs)" >> release_notes.md
            echo "- [Crates.io](https://crates.io/crates/pkg-checker)" >> release_notes.md
            echo "- [Documentation](https://docs.rs/pkg-checker)" >> release_notes.md
          fi

      - name: Create Release
        uses: softprops/action-gh-release@v1
        with:
          tag_name: ${{ steps.changelog.outputs.current_tag }}
          name: pkg-checker ${{ steps.changelog.outputs.current_tag }}
          body_path: release_notes.md
          draft: false
          prerelease: false
          generate_release_notes: false
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Upload release notes
        run: |
          echo "GitHub Release created successfully!"
          echo "Tag: ${{ steps.changelog.outputs.current_tag }}"
          echo "Previous tag: ${{ steps.changelog.outputs.previous_tag }}"
          echo ""
          echo "Release notes content:"
          cat release_notes.md