优化 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",
messages=[
{"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,
)

View File

@ -17,19 +17,21 @@ jobs:
python-version: '3.10'
- name: Install dependencies
run: pip install openai discord-webhook
run: pip install openai discord-webhook requests
- name: Enhance release notes and send to Discord
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
OPENAI_BASE_URL: https://api.siliconflow.cn/v1
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cat > send_discord_notification.py << 'EOF'
import os
import sys
import json
import openai
import requests
from datetime import datetime
from discord_webhook import DiscordWebhook, DiscordEmbed
@ -38,25 +40,56 @@ jobs:
openai.base_url = os.environ.get("OPENAI_BASE_URL")
# 获取GitHub release信息
release_info = json.loads(os.environ.get("RELEASE_INFO"))
release_notes = release_info["body"]
version = release_info["tag_name"]
release_date = datetime.strptime(release_info["published_at"], "%Y-%m-%dT%H:%M:%SZ").strftime("%Y年%m月%d日")
github_token = os.environ.get("GITHUB_TOKEN")
repo = os.environ.get("GITHUB_REPOSITORY")
# 直接从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 = "未知日期"
# 使用大模型润色发布说明
response = openai.chat.completions.create(
model="deepseek-ai/DeepSeek-V3",
messages=[
{"role": "system", "content": "你是一个专业的软件发布公告优化助手。请优化以下发布说明,使其更加生动、专业,并明确区分新功能、优化内容、修复内容和移除内容等类别。保持原有信息的完整性,同时增强可读性和专业性。使用中文回复。"},
{"role": "user", "content": f"请优化以下版本{version}的发布说明使其更适合在Discord社区发布\n\n{release_notes}"}
],
temperature=0.7,
)
enhanced_notes = response.choices[0].message.content
try:
response = openai.chat.completions.create(
model="deepseek-ai/DeepSeek-V3",
messages=[
{"role": "system", "content": "你是一个专业的软件发布公告优化助手。请优化以下发布说明,使其更加生动、专业,并明确区分新功能、优化内容、修复内容和移除内容等类别。保持原有信息的完整性,同时增强可读性和专业性。使用中文回复。"},
{"role": "user", "content": f"请优化以下版本{version}的发布说明使其更适合在Discord社区发布\n\n{release_notes}"}
],
temperature=0.7,
)
enhanced_notes = response.choices[0].message.content
except Exception as e:
print(f"Error calling OpenAI API: {e}")
enhanced_notes = release_notes # 如果API调用失败使用原始发布说明
# 创建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(
@ -66,17 +99,22 @@ jobs:
)
# 添加润色后的发布说明
embed.add_embed_field(name="更新内容", value=enhanced_notes[:1024] if len(enhanced_notes) > 1024 else enhanced_notes)
# 如果内容太长,分段添加
if len(enhanced_notes) > 1024:
remaining = enhanced_notes[1024:]
chunks = [remaining[i:i+1024] for i in range(0, len(remaining), 1024)]
for i, chunk in enumerate(chunks):
embed.add_embed_field(name=f"更新内容(续{i+1}", value=chunk)
if enhanced_notes:
embed.add_embed_field(name="更新内容", value=enhanced_notes[:1024] if len(enhanced_notes) > 1024 else enhanced_notes)
# 如果内容太长,分段添加
if len(enhanced_notes) > 1024:
remaining = enhanced_notes[1024:]
chunks = [remaining[i:i+1024] for i in range(0, len(remaining), 1024)]
for i, chunk in enumerate(chunks):
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 团队")
@ -87,11 +125,11 @@ jobs:
# 发送消息
response = webhook.execute()
print(f"Discord notification sent with status code: {response.status_code}")
if response:
print(f"Discord notification sent with status code: {response.status_code}")
else:
print("Failed to send Discord notification")
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

View File

@ -1 +1 @@
0.6.2.1
0.6.2.2