优化 cicd 流程

This commit is contained in:
linyq 2025-05-19 09:17:47 +08:00
parent f740295f17
commit 039169a8be
3 changed files with 69 additions and 31 deletions

View File

@ -120,7 +120,7 @@ jobs:
model="deepseek-ai/DeepSeek-V3", model="deepseek-ai/DeepSeek-V3",
messages=[ messages=[
{"role": "system", "content": "你是一个专业的软件发布说明生成助手。请根据提供的git提交信息生成一个结构化的发布说明包括新功能、改进、修复的bug等类别。使用中文回复。"}, {"role": "system", "content": "你是一个专业的软件发布说明生成助手。请根据提供的git提交信息生成一个结构化的发布说明包括新功能、改进、修复的bug等类别。使用中文回复。"},
{"role": "user", "content": f"请根据以下git提交信息,生成一个版本{version}的发布说明:\n\n{commits}"} {"role": "user", "content": f"请根据以下git提交信息,生成一个版本{version}的发布说明,内容要言简意赅,相似的提交信息不要重复出现: \n\n{commits}"}
], ],
temperature=0.7, temperature=0.7,
) )

View File

@ -17,19 +17,21 @@ jobs:
python-version: '3.10' python-version: '3.10'
- name: Install dependencies - name: Install dependencies
run: pip install openai discord-webhook run: pip install openai discord-webhook requests
- name: Enhance release notes and send to Discord - name: Enhance release notes and send to Discord
env: env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
OPENAI_BASE_URL: https://api.siliconflow.cn/v1 OPENAI_BASE_URL: https://api.siliconflow.cn/v1
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }} DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: | run: |
cat > send_discord_notification.py << 'EOF' cat > send_discord_notification.py << 'EOF'
import os import os
import sys import sys
import json import json
import openai import openai
import requests
from datetime import datetime from datetime import datetime
from discord_webhook import DiscordWebhook, DiscordEmbed from discord_webhook import DiscordWebhook, DiscordEmbed
@ -38,12 +40,36 @@ jobs:
openai.base_url = os.environ.get("OPENAI_BASE_URL") openai.base_url = os.environ.get("OPENAI_BASE_URL")
# 获取GitHub release信息 # 获取GitHub release信息
release_info = json.loads(os.environ.get("RELEASE_INFO")) github_token = os.environ.get("GITHUB_TOKEN")
release_notes = release_info["body"] repo = os.environ.get("GITHUB_REPOSITORY")
version = release_info["tag_name"]
release_date = datetime.strptime(release_info["published_at"], "%Y-%m-%dT%H:%M:%SZ").strftime("%Y年%m月%d日") # 直接从GitHub API获取最新release
headers = {"Authorization": f"token {github_token}"}
response = requests.get(f"https://api.github.com/repos/{repo}/releases/latest", headers=headers)
if response.status_code != 200:
print(f"Error fetching release info: {response.status_code}")
print(response.text)
sys.exit(1)
release_info = response.json()
# 提取需要的信息
release_notes = release_info.get("body", "无发布说明")
version = release_info.get("tag_name", "未知版本")
# 安全地解析发布日期
published_at = release_info.get("published_at")
if published_at:
try:
release_date = datetime.strptime(published_at, "%Y-%m-%dT%H:%M:%SZ").strftime("%Y年%m月%d日")
except ValueError:
release_date = "未知日期"
else:
release_date = "未知日期"
# 使用大模型润色发布说明 # 使用大模型润色发布说明
try:
response = openai.chat.completions.create( response = openai.chat.completions.create(
model="deepseek-ai/DeepSeek-V3", model="deepseek-ai/DeepSeek-V3",
messages=[ messages=[
@ -52,11 +78,18 @@ jobs:
], ],
temperature=0.7, temperature=0.7,
) )
enhanced_notes = response.choices[0].message.content enhanced_notes = response.choices[0].message.content
except Exception as e:
print(f"Error calling OpenAI API: {e}")
enhanced_notes = release_notes # 如果API调用失败使用原始发布说明
# 创建Discord消息 # 创建Discord消息
webhook = DiscordWebhook(url=os.environ.get("DISCORD_WEBHOOK_URL")) webhook_url = os.environ.get("DISCORD_WEBHOOK_URL")
if not webhook_url:
print("Error: DISCORD_WEBHOOK_URL not set")
sys.exit(1)
webhook = DiscordWebhook(url=webhook_url)
# 创建嵌入式消息 # 创建嵌入式消息
embed = DiscordEmbed( embed = DiscordEmbed(
@ -66,6 +99,7 @@ jobs:
) )
# 添加润色后的发布说明 # 添加润色后的发布说明
if enhanced_notes:
embed.add_embed_field(name="更新内容", value=enhanced_notes[:1024] if len(enhanced_notes) > 1024 else enhanced_notes) embed.add_embed_field(name="更新内容", value=enhanced_notes[:1024] if len(enhanced_notes) > 1024 else enhanced_notes)
# 如果内容太长,分段添加 # 如果内容太长,分段添加
@ -74,9 +108,13 @@ jobs:
chunks = [remaining[i:i+1024] for i in range(0, len(remaining), 1024)] chunks = [remaining[i:i+1024] for i in range(0, len(remaining), 1024)]
for i, chunk in enumerate(chunks): for i, chunk in enumerate(chunks):
embed.add_embed_field(name=f"更新内容(续{i+1}", value=chunk) embed.add_embed_field(name=f"更新内容(续{i+1}", value=chunk)
else:
embed.add_embed_field(name="更新内容", value="无详细更新内容")
# 添加下载链接 # 添加下载链接
embed.add_embed_field(name="下载链接", value=release_info["html_url"]) html_url = release_info.get("html_url", "")
if html_url:
embed.add_embed_field(name="下载链接", value=html_url)
# 设置页脚 # 设置页脚
embed.set_footer(text="NarratoAI 团队") embed.set_footer(text="NarratoAI 团队")
@ -87,11 +125,11 @@ jobs:
# 发送消息 # 发送消息
response = webhook.execute() response = webhook.execute()
if response:
print(f"Discord notification sent with status code: {response.status_code}") print(f"Discord notification sent with status code: {response.status_code}")
else:
print("Failed to send Discord notification")
EOF EOF
# 获取发布信息并传递给脚本
echo "RELEASE_INFO='$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/releases/latest)'" >> $GITHUB_ENV
# 执行脚本 # 执行脚本
python send_discord_notification.py python send_discord_notification.py

View File

@ -1 +1 @@
0.6.2.1 0.6.2.2