cicd 测试 2

This commit is contained in:
linyq 2025-05-19 09:11:22 +08:00
parent 0650a215f6
commit 7dcdce448f

View File

@ -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<<EOF" >> $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 }}
token: ${{ secrets.GIT_TOKEN }}