#!/bin/bash # REQ 发布记录自动更新脚本 # 用于在发布完成后自动更新思源笔记中的发布记录 # 思源笔记配置 SIYUAN_URL="${SIYUAN_URL:-http://100.118.62.18:6806}" SIYUAN_TOKEN="${SIYUAN_TOKEN:-nfnycjb1g8vbexb2}" # 使用方法 usage() { echo "Usage: $0 -r -d [-v ] [-e ] [-s ]" 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 < 此记录由 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" <