From 7dcdce448f47f33d3da3da186fa86659b25c0dbf Mon Sep 17 00:00:00 2001 From: linyq Date: Mon, 19 May 2025 09:11:22 +0800 Subject: [PATCH] =?UTF-8?q?cicd=20=E6=B5=8B=E8=AF=95=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/auto-release-generator.yml | 104 +++++++++++++------ 1 file changed, 72 insertions(+), 32 deletions(-) diff --git a/.github/workflows/auto-release-generator.yml b/.github/workflows/auto-release-generator.yml index a41d676..870a1ef 100644 --- a/.github/workflows/auto-release-generator.yml +++ b/.github/workflows/auto-release-generator.yml @@ -5,45 +5,57 @@ on: branches: - main paths: - - '**/project_version' # 假设版本号存储在这个文件中,根据实际情况调整 + - 'project_version' # 确保路径准确,不使用通配符 jobs: check-version-and-release: runs-on: ubuntu-latest permissions: - contents: write + contents: write # 用于创建 releases + pull-requests: write # 可能需要的额外权限 steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 # 获取完整历史以检查变更 + - name: Debug Environment + run: | + echo "工作目录内容:" + ls -la + echo "project_version 文件内容:" + cat project_version || echo "文件不存在" + - name: Check if version changed id: check-version run: | - git fetch origin main - # 获取当前版本号 - CURRENT_VERSION=$(cat project_version) - echo "Current version: $CURRENT_VERSION" - - # 获取上一个版本号(如果存在) - if git show origin/main:project_version &>/dev/null; then - PREVIOUS_VERSION=$(git show origin/main:project_version) - echo "Previous version: $PREVIOUS_VERSION" + if [ -f "project_version" ]; then + CURRENT_VERSION=$(cat project_version) + echo "Current version: $CURRENT_VERSION" - if [[ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]]; then - echo "Version changed from $PREVIOUS_VERSION to $CURRENT_VERSION" + # 获取上一个提交中的版本号 + git fetch origin main + if git show HEAD~1:project_version &>/dev/null; then + PREVIOUS_VERSION=$(git show HEAD~1:project_version) + echo "Previous version from commit: $PREVIOUS_VERSION" + + if [[ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]]; then + echo "Version changed from $PREVIOUS_VERSION to $CURRENT_VERSION" + echo "version_changed=true" >> $GITHUB_OUTPUT + echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT + else + echo "Version unchanged" + echo "version_changed=false" >> $GITHUB_OUTPUT + fi + else + echo "Cannot find previous version, assuming first release" echo "version_changed=true" >> $GITHUB_OUTPUT echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT - else - echo "Version unchanged" - echo "version_changed=false" >> $GITHUB_OUTPUT fi else - echo "First version detected" - echo "version_changed=true" >> $GITHUB_OUTPUT - echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT + echo "project_version file not found" + echo "version_changed=false" >> $GITHUB_OUTPUT fi - name: Set up Python @@ -60,8 +72,23 @@ jobs: if: steps.check-version.outputs.version_changed == 'true' id: get-commits run: | - # 获取上次发布以来的所有提交信息 - COMMITS=$(git log $(git describe --tags --abbrev=0 2>/dev/null || echo HEAD~50)..HEAD --pretty=format:"%s") + # 尝试获取上一个标签,如果没有则获取最近50个提交 + LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") + if [ -z "$LAST_TAG" ]; then + echo "No previous tags found, getting last 50 commits" + COMMITS=$(git log -50 --pretty=format:"%s") + else + echo "Previous tag found: $LAST_TAG" + COMMITS=$(git log $LAST_TAG..HEAD --pretty=format:"%s") + # 如果没有提交,获取最近的10个提交 + if [ -z "$COMMITS" ]; then + COMMITS=$(git log -10 --pretty=format:"%s") + fi + fi + + echo "Commits to be included in release notes:" + echo "$COMMITS" + echo "commits<> $GITHUB_OUTPUT echo "$COMMITS" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT @@ -88,17 +115,25 @@ jobs: version = os.environ.get("CURRENT_VERSION") # 调用API生成发布说明 - response = openai.chat.completions.create( - model="deepseek-ai/DeepSeek-V3", - messages=[ - {"role": "system", "content": "你是一个专业的软件发布说明生成助手。请根据提供的git提交信息,生成一个结构化的发布说明,包括新功能、改进、修复的bug等类别。使用中文回复。"}, - {"role": "user", "content": f"请根据以下git提交信息,生成一个版本{version}的发布说明:\n\n{commits}"} - ], - temperature=0.7, - ) + try: + response = openai.chat.completions.create( + model="deepseek-ai/DeepSeek-V3", + messages=[ + {"role": "system", "content": "你是一个专业的软件发布说明生成助手。请根据提供的git提交信息,生成一个结构化的发布说明,包括新功能、改进、修复的bug等类别。使用中文回复。"}, + {"role": "user", "content": f"请根据以下git提交信息,生成一个版本{version}的发布说明:\n\n{commits}"} + ], + temperature=0.7, + ) + release_notes = response.choices[0].message.content + except Exception as e: + print(f"Error calling OpenAI API: {e}") + release_notes = f"# 版本 {version} 发布\n\n## 更新内容\n\n" + # 简单处理提交信息 + for line in commits.strip().split("\n"): + if line: + release_notes += f"- {line}\n" # 输出生成的发布说明 - release_notes = response.choices[0].message.content print(release_notes) # 保存到GitHub输出 @@ -110,6 +145,12 @@ jobs: python generate_release_notes.py < <(echo "${{ steps.get-commits.outputs.commits }}") + - name: Debug release notes + if: steps.check-version.outputs.version_changed == 'true' + run: | + echo "Generated release notes:" + echo "${{ steps.generate-notes.outputs.release_notes }}" + - name: Create GitHub Release if: steps.check-version.outputs.version_changed == 'true' uses: softprops/action-gh-release@v1 @@ -119,5 +160,4 @@ jobs: body: ${{ steps.generate-notes.outputs.release_notes }} draft: false prerelease: false - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + token: ${{ secrets.GIT_TOKEN }} \ No newline at end of file