Files
ai-proj-helper/skills/req-plugin/update-siyuan-release.sh
John Qiu 99881e268a refactor: 合并 claude-marketplace,重构目录结构为单一仓库
- 重命名 plugins/ → skills/,个人插件迁移到 skills-personal/(gitignore)
- 更新 generate-marketplace.py 支持 config 读取和 skills-personal 扫描
- 新增 claude-config.yaml(技能启用/禁用 + MCP 配置)
- 新增 init.sh(交互式 MCP 初始化,支持 stdio/SSE 模式)
- 新增 CLAUDE.md 项目说明
- 重写 README.md 反映新结构
- 删除过时脚本:PUSH.sh、generate-marketplace.sh、convert-skills.sh

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 11:11:59 +10:30

143 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
# REQ 发布记录自动更新脚本
# 用于在发布完成后自动更新思源笔记中的发布记录
# 思源笔记配置
SIYUAN_URL="${SIYUAN_URL:-http://100.118.62.18:6806}"
SIYUAN_TOKEN="${SIYUAN_TOKEN:-nfnycjb1g8vbexb2}"
# 使用方法
usage() {
echo "Usage: $0 -r <REQ-ID> -d <doc-id> [-v <version>] [-e <env>] [-s <status>]"
echo ""
echo "Options:"
echo " -r REQ-ID 需求编号 (如 REQ-2026-0007)"
echo " -d doc-id 思源笔记文档 ID"
echo " -v version 发布版本号 (默认: v1.0.0)"
echo " -e env 发布环境 (默认: production)"
echo " -s status 发布状态: success|failed (默认: success)"
echo " -h 显示帮助"
exit 1
}
# 解析参数
REQ_ID=""
DOC_ID=""
VERSION="v1.0.0"
ENVIRONMENT="production"
STATUS="success"
while getopts "r:d:v:e:s:h" opt; do
case $opt in
r) REQ_ID="$OPTARG" ;;
d) DOC_ID="$OPTARG" ;;
v) VERSION="$OPTARG" ;;
e) ENVIRONMENT="$OPTARG" ;;
s) STATUS="$OPTARG" ;;
h) usage ;;
*) usage ;;
esac
done
# 验证必需参数
if [ -z "$REQ_ID" ] || [ -z "$DOC_ID" ]; then
echo "Error: -r 和 -d 参数是必需的"
usage
fi
# 获取当前时间
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
DATE=$(date "+%Y-%m-%d")
# 状态显示
if [ "$STATUS" = "success" ]; then
STATUS_ICON="✅"
STATUS_TEXT="已发布"
else
STATUS_ICON="❌"
STATUS_TEXT="发布失败"
fi
# 生成追加内容
APPEND_CONTENT=$(cat <<EOF
---
## 发布记录更新 - $TIMESTAMP
| 项目 | 内容 |
|------|------|
| 发布版本 | $VERSION |
| 发布环境 | $ENVIRONMENT |
| 发布时间 | $TIMESTAMP |
| 发布状态 | $STATUS_ICON $STATUS_TEXT |
### 自动化流程执行记录
- $STATUS_ICON 代码构建完成
- $STATUS_ICON 服务部署完成
- $STATUS_ICON 健康检查通过
- $STATUS_ICON 邮件通知已发送
> 此记录由 REQ 需求管理系统自动生成
EOF
)
# 创建临时 JSON 文件
TMP_FILE=$(mktemp)
# 首先获取现有文档内容
echo "正在获取文档内容..."
EXISTING_CONTENT=$(curl -s -X POST "$SIYUAN_URL/api/block/getBlockKramdown" \
-H "Authorization: Token $SIYUAN_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"id\": \"$DOC_ID\"}" | jq -r '.data.kramdown // ""')
if [ -z "$EXISTING_CONTENT" ]; then
echo "Warning: 无法获取现有文档内容,将创建新内容"
EXISTING_CONTENT="# 发布记录\n\n## 文档信息\n\n| 属性 | 值 |\n|------|----|\n| 需求编号 | $REQ_ID |"
fi
# 追加新内容
NEW_CONTENT="${EXISTING_CONTENT}${APPEND_CONTENT}"
# 转义特殊字符用于 JSON
ESCAPED_CONTENT=$(echo "$NEW_CONTENT" | jq -Rs '.')
# 创建更新请求 JSON
cat > "$TMP_FILE" <<EOF
{
"id": "$DOC_ID",
"dataType": "markdown",
"data": $ESCAPED_CONTENT
}
EOF
# 更新文档
echo "正在更新思源笔记文档..."
RESPONSE=$(curl -s -X POST "$SIYUAN_URL/api/block/updateBlock" \
-H "Authorization: Token $SIYUAN_TOKEN" \
-H "Content-Type: application/json" \
-d @"$TMP_FILE")
# 清理临时文件
rm -f "$TMP_FILE"
# 检查结果
CODE=$(echo "$RESPONSE" | jq -r '.code')
if [ "$CODE" = "0" ]; then
echo "发布记录更新成功"
echo " 需求: $REQ_ID"
echo " 文档 ID: $DOC_ID"
echo " 版本: $VERSION"
echo " 环境: $ENVIRONMENT"
echo " 状态: $STATUS_TEXT"
exit 0
else
MSG=$(echo "$RESPONSE" | jq -r '.msg')
echo "发布记录更新失败: $MSG"
exit 1
fi