gitlink-cli/skills/gitlink-project-bootstrap/scripts/03-create-issues-milestones.sh

109 lines
4.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ================================================================
# Phase 3: 创建初始 Issue 和里程碑
# 功能:创建 v0.1.0 里程碑 → 起始标签 → 3 个初始 Issue
# 使用bash 03-create-issues-milestones.sh <owner> <repo>
# 环境变量DRY_RUN=true|false (默认 true)
# ================================================================
set -e
# 自动检测并使用本地编译的 gitlink-cli
source "$(cd "$(dirname "$0")" && pwd)/../../gitlink-shared/scripts/detect-cli.sh"
OWNER=${1:?"Usage: $0 <owner> <repo>"}
REPO=${2}
DRY_RUN=${DRY_RUN:-true}
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
OUTPUT_DIR="$SCRIPT_DIR/_output"
mkdir -p "$OUTPUT_DIR"
# 里程碑 due-date = 今天 +30 天
DUE_DATE=$(date -d "+30 days" '+%Y-%m-%d' 2>/dev/null || date -v+30d '+%Y-%m-%d' 2>/dev/null || echo "2030-12-31")
echo "[========================================]"
echo "[ Phase 3: 创建 Issue 和里程碑 ]"
echo "[ Target: $OWNER/$REPO ]"
echo "[ DRY_RUN: $DRY_RUN ]"
echo "[========================================]"
# ---- Step 1: 创建里程碑 ----
MILESTONE_ID=""
if [ "$DRY_RUN" = "true" ]; then
echo "[DRY-RUN] 将执行: milestone +create -t v0.1.0 --due-date $DUE_DATE"
MILESTONE_ID="<pending>"
else
echo "[INFO] 创建里程碑 v0.1.0..."
MS=$(gitlink-cli milestone +create -t "v0.1.0" \
-d "首个里程碑:完成核心功能与文档" --due-date "$DUE_DATE" \
--owner "$OWNER" --repo "$REPO" --format json 2>&1) \
|| { echo "[WARN] 创建里程碑失败: $MS"; MS='{"data":{"id":""}}'; }
echo "$MS" > "$OUTPUT_DIR/milestone.json"
MILESTONE_ID=$(echo "$MS" | node -e "
let s='';
process.stdin.on('data',d=>s+=d).on('end',()=>{
try { const d=JSON.parse(s).data||{}; process.stdout.write(String(d.id||d.milestone_id||'')); }
catch(e){ process.stdout.write(''); }
});
" 2>/dev/null)
echo "[INFO] 里程碑 ID: ${MILESTONE_ID:-(未知)}"
fi
# ---- Step 2: 创建起始标签 ----
declare -a LABEL_NAMES=("good-first-issue" "enhancement" "bug")
declare -a LABEL_COLORS=("7057ff" "a2eeef" "d73a4a")
declare -a LABEL_IDS=()
for i in 0 1 2; do
NAME="${LABEL_NAMES[$i]}"
COLOR="${LABEL_COLORS[$i]}"
if [ "$DRY_RUN" = "true" ]; then
echo "[DRY-RUN] 将执行: label +create --name $NAME --color $COLOR"
LABEL_IDS[$i]="<pending>"
else
RES=$(gitlink-cli label +create --name "$NAME" --color "$COLOR" \
--owner "$OWNER" --repo "$REPO" --format json 2>&1) \
|| { echo "[WARN] 创建标签 $NAME 失败: $RES"; RES='{"data":{"id":""}}'; }
LID=$(echo "$RES" | node -e "
let s='';
process.stdin.on('data',d=>s+=d).on('end',()=>{
try { const d=JSON.parse(s).data||{}; process.stdout.write(String(d.id||'')); }
catch(e){ process.stdout.write(''); }
});
" 2>/dev/null)
LABEL_IDS[$i]="$LID"
echo "[INFO] 标签 $NAME ID: ${LID:-(未知)}"
fi
done
ENH_ID="${LABEL_IDS[1]}"
GFI_ID="${LABEL_IDS[0]}"
# ---- Step 3: 创建初始 Issue ----
declare -a ISSUE_TITLES=("完善 README 文档" "配置 CI 流水线" "撰写贡献指南 CONTRIBUTING.md")
declare -a ISSUE_BODIES=(
"补充安装、用法、贡献指南等小节,让新贡献者快速上手。"
"确保 push/PR 触发构建与测试,输出测试覆盖率。"
"说明提交流程、代码规范、Issue/PR 模板。"
)
declare -a ISSUE_LABELS=("$ENH_ID" "$ENH_ID" "$GFI_ID")
for i in 0 1 2; do
TITLE="${ISSUE_TITLES[$i]}"
BODY="${ISSUE_BODIES[$i]}"
LBL="${ISSUE_LABELS[$i]}"
if [ "$DRY_RUN" = "true" ]; then
echo "[DRY-RUN] 将执行: issue +create -t \"$TITLE\" --milestone ${MILESTONE_ID} --label ${LBL}"
else
ISSUE_RES=$(gitlink-cli issue +create -t "$TITLE" -b "$BODY" \
--owner "$OWNER" --repo "$REPO" \
--milestone "$MILESTONE_ID" --label "$LBL" --format json 2>&1) \
|| { echo "[WARN] 创建 Issue \"$TITLE\" 失败: $ISSUE_RES"; continue; }
echo "[INFO] Issue 已创建: $TITLE"
fi
done
echo ""
echo "[========================================]"
echo "[ Phase 3 完成 ]"
echo "[ 数据保存至: $OUTPUT_DIR/ ]"
echo "[========================================]"