mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-12 00:49:14 +08:00
* build: add commander package as dependency * refactor(scripts): migrate feishu-notify to TypeScript with CLI interface - Convert JavaScript implementation to TypeScript with proper type definitions - Add CLI interface using commander for better usability - Improve error handling and input validation - Add version management and subcommand support * ci(workflows): update feishu notification command and add pnpm install step Update the feishu notification command to use CLI tool with proper arguments instead of direct node script execution Add pnpm install step to ensure dependencies are available before running the workflow * docs: add feishu notification script documentation Add Chinese and English documentation for the feishu-notify.ts CLI tool * feat(notify): add generic send command to feishu-notify Add a new 'send' subcommand to send simple notifications to Feishu with customizable title, description and header color. This provides a more flexible way to send notifications without being tied to specific business logic like the existing 'issue' command. The implementation includes: - New send command handler and options interface - Simple card creation function - Zod schema for header color validation - Documentation updates in both Chinese and English
197 lines
7.6 KiB
YAML
197 lines
7.6 KiB
YAML
name: GitHub Issue Tracker with Feishu Notification
|
||
|
||
on:
|
||
issues:
|
||
types: [opened]
|
||
schedule:
|
||
# Run every day at 8:30 Beijing Time (00:30 UTC)
|
||
- cron: "30 0 * * *"
|
||
workflow_dispatch:
|
||
|
||
jobs:
|
||
process-new-issue:
|
||
if: github.event_name == 'issues'
|
||
runs-on: ubuntu-latest
|
||
permissions:
|
||
issues: write
|
||
contents: read
|
||
id-token: write
|
||
|
||
steps:
|
||
- name: Checkout repository
|
||
uses: actions/checkout@v6
|
||
|
||
- name: Check Beijing Time
|
||
id: check_time
|
||
run: |
|
||
# Get current time in Beijing timezone (UTC+8)
|
||
BEIJING_HOUR=$(TZ='Asia/Shanghai' date +%H)
|
||
BEIJING_MINUTE=$(TZ='Asia/Shanghai' date +%M)
|
||
|
||
echo "Beijing Time: ${BEIJING_HOUR}:${BEIJING_MINUTE}"
|
||
|
||
# Check if time is between 00:00 and 08:30
|
||
if [ $BEIJING_HOUR -lt 8 ] || ([ $BEIJING_HOUR -eq 8 ] && [ $BEIJING_MINUTE -le 30 ]); then
|
||
echo "should_delay=true" >> $GITHUB_OUTPUT
|
||
echo "⏰ Issue created during quiet hours (00:00-08:30 Beijing Time)"
|
||
echo "Will schedule notification for 08:30"
|
||
else
|
||
echo "should_delay=false" >> $GITHUB_OUTPUT
|
||
echo "✅ Issue created during active hours, will notify immediately"
|
||
fi
|
||
|
||
- name: Add pending label if in quiet hours
|
||
if: steps.check_time.outputs.should_delay == 'true'
|
||
uses: actions/github-script@v8
|
||
with:
|
||
script: |
|
||
github.rest.issues.addLabels({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
issue_number: context.issue.number,
|
||
labels: ['pending-feishu-notification']
|
||
});
|
||
|
||
- name: Setup Node.js
|
||
if: steps.check_time.outputs.should_delay == 'false'
|
||
uses: actions/setup-node@v6
|
||
with:
|
||
node-version: 22
|
||
|
||
- name: Install dependencies
|
||
if: steps.check_time.outputs.should_delay == 'false'
|
||
run: pnpm install
|
||
|
||
- name: Process issue with Claude
|
||
if: steps.check_time.outputs.should_delay == 'false'
|
||
uses: anthropics/claude-code-action@main
|
||
with:
|
||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||
allowed_non_write_users: "*"
|
||
anthropic_api_key: ${{ secrets.CLAUDE_TRANSLATOR_APIKEY }}
|
||
claude_args: "--allowed-tools Bash(gh issue:*),Bash(pnpm tsx scripts/feishu-notify.ts issue:*),Bash(pnpm tsx scripts/feishu-notify.ts --help),Bash(pnpm tsx scripts/feishu-notify.ts issue --help)"
|
||
prompt: |
|
||
你是一个GitHub Issue自动化处理助手。请完成以下任务:
|
||
|
||
## 当前Issue信息
|
||
- Issue编号:#${{ github.event.issue.number }}
|
||
- 标题:${{ github.event.issue.title }}
|
||
- 作者:${{ github.event.issue.user.login }}
|
||
- URL:${{ github.event.issue.html_url }}
|
||
- 内容:${{ github.event.issue.body }}
|
||
- 标签:${{ join(github.event.issue.labels.*.name, ', ') }}
|
||
|
||
## 任务步骤
|
||
|
||
1. **分析并总结issue**
|
||
用中文(简体)提供简洁的总结(2-3句话),包括:
|
||
- 问题的主要内容
|
||
- 核心诉求
|
||
- 重要的技术细节
|
||
|
||
2. **发送飞书通知**
|
||
使用CLI工具发送飞书通知,运行 `pnpm tsx scripts/feishu-notify.ts issue --help` 查看参数说明。
|
||
示例:
|
||
```bash
|
||
pnpm tsx scripts/feishu-notify.ts issue \
|
||
-u "${{ github.event.issue.html_url }}" \
|
||
-n "${{ github.event.issue.number }}" \
|
||
-t "${{ github.event.issue.title }}" \
|
||
-a "${{ github.event.issue.user.login }}" \
|
||
-l "${{ join(github.event.issue.labels.*.name, ',') }}" \
|
||
-m "<你生成的中文总结>"
|
||
```
|
||
|
||
## 注意事项
|
||
- 总结必须使用简体中文
|
||
- 命令行参数需要正确转义特殊字符
|
||
- 如果issue内容为空,也要提供一个简短的说明
|
||
|
||
请开始执行任务!
|
||
env:
|
||
ANTHROPIC_BASE_URL: ${{ secrets.CLAUDE_TRANSLATOR_BASEURL }}
|
||
FEISHU_WEBHOOK_URL: ${{ secrets.FEISHU_WEBHOOK_URL }}
|
||
FEISHU_WEBHOOK_SECRET: ${{ secrets.FEISHU_WEBHOOK_SECRET }}
|
||
|
||
process-pending-issues:
|
||
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
|
||
runs-on: ubuntu-latest
|
||
permissions:
|
||
issues: write
|
||
contents: read
|
||
id-token: write
|
||
|
||
steps:
|
||
- name: Checkout repository
|
||
uses: actions/checkout@v6
|
||
|
||
- name: Setup Node.js
|
||
uses: actions/setup-node@v6
|
||
with:
|
||
node-version: 22
|
||
|
||
- name: Install dependencies
|
||
run: pnpm install
|
||
|
||
- name: Process pending issues with Claude
|
||
uses: anthropics/claude-code-action@main
|
||
with:
|
||
anthropic_api_key: ${{ secrets.CLAUDE_TRANSLATOR_APIKEY }}
|
||
allowed_non_write_users: "*"
|
||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||
claude_args: "--allowed-tools Bash(gh issue:*),Bash(gh api:*),Bash(pnpm tsx scripts/feishu-notify.ts issue:*),Bash(pnpm tsx scripts/feishu-notify.ts --help),Bash(pnpm tsx scripts/feishu-notify.ts issue --help)"
|
||
prompt: |
|
||
你是一个GitHub Issue自动化处理助手。请完成以下任务:
|
||
|
||
## 任务说明
|
||
处理所有待发送飞书通知的GitHub Issues(标记为 `pending-feishu-notification` 的issues)
|
||
|
||
## 步骤
|
||
|
||
1. **获取待处理的issues**
|
||
使用以下命令获取所有带 `pending-feishu-notification` 标签的issues:
|
||
```bash
|
||
gh api repos/${{ github.repository }}/issues?labels=pending-feishu-notification&state=open
|
||
```
|
||
|
||
2. **总结每个issue**
|
||
对于每个找到的issue,用中文提供简洁的总结(2-3句话),包括:
|
||
- 问题的主要内容
|
||
- 核心诉求
|
||
- 重要的技术细节
|
||
|
||
3. **发送飞书通知**
|
||
使用CLI工具发送飞书通知,运行 `pnpm tsx scripts/feishu-notify.ts issue --help` 查看参数说明。
|
||
示例:
|
||
```bash
|
||
pnpm tsx scripts/feishu-notify.ts issue \
|
||
-u "<issue的html_url>" \
|
||
-n "<issue编号>" \
|
||
-t "<issue标题>" \
|
||
-a "<issue作者>" \
|
||
-l "<逗号分隔的标签列表,排除pending-feishu-notification>" \
|
||
-m "<你生成的中文总结>"
|
||
```
|
||
|
||
4. **移除标签**
|
||
成功发送后,使用以下命令移除 `pending-feishu-notification` 标签:
|
||
```bash
|
||
gh api -X DELETE repos/${{ github.repository }}/issues/<issue编号>/labels/pending-feishu-notification
|
||
```
|
||
|
||
## 环境变量
|
||
- Repository: ${{ github.repository }}
|
||
- Feishu webhook URL和密钥已在环境变量中配置好
|
||
|
||
## 注意事项
|
||
- 如果没有待处理的issues,输出提示信息后直接结束
|
||
- 处理多个issues时,每个issue之间等待2-3秒,避免API限流
|
||
- 如果某个issue处理失败,继续处理下一个,不要中断整个流程
|
||
- 所有总结必须使用中文(简体中文)
|
||
|
||
请开始执行任务!
|
||
env:
|
||
ANTHROPIC_BASE_URL: ${{ secrets.CLAUDE_TRANSLATOR_BASEURL }}
|
||
FEISHU_WEBHOOK_URL: ${{ secrets.FEISHU_WEBHOOK_URL }}
|
||
FEISHU_WEBHOOK_SECRET: ${{ secrets.FEISHU_WEBHOOK_SECRET }}
|