143 lines
3.4 KiB
Bash
Executable File
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
|