gitlink-cli/skills/gitlink-project-bootstrap/scripts/01-parse-and-create-repo.sh

86 lines
3.4 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 1: 解析需求 + 创建仓库
# 功能:读取 PROJECT_DESC → AI 提取结构化 spec → 落盘 project-spec.json → repo +create
# 使用bash 01-parse-and-create-repo.sh <owner> <repo>
# 环境变量:
# PROJECT_DESC 项目自然语言描述(必填)
# DRY_RUN true|false (默认 true)
# ================================================================
set -e
# ---- 参数解析 ----
OWNER=${1:?"Usage: $0 <owner> <repo>"}
REPO=${2:=$1}
DRY_RUN=${DRY_RUN:-true}
PROJECT_DESC=${PROJECT_DESC:-$3}
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
OUTPUT_DIR="$SCRIPT_DIR/_output"
mkdir -p "$OUTPUT_DIR"
echo "[========================================]"
echo "[ Phase 1: 解析需求 + 创建仓库 ]"
echo "[ Target: $OWNER/$REPO ]"
echo "[ DRY_RUN: $DRY_RUN ]"
echo "[========================================]"
if [ -z "$PROJECT_DESC" ]; then
echo "[WARN] 未提供 PROJECT_DESC使用兜底默认值用于 dry-run 演示)"
PROJECT_DESC="一个用 Go 编写的 GitLink 命令行工具MIT 许可证,公开仓库。"
fi
echo "[INFO] PROJECT_DESC = $PROJECT_DESC"
# ---- Step 1: AI 解析(占位逻辑 + 兜底)----
# AI Agent 在运行本脚本时根据 PROJECT_DESC 实际内容填充以下字段。
# 这里给出基于关键词的简单兜底解析,确保离线也能产出合法 spec。
NAME="$REPO"
DESCRIPTION=$(echo "$PROJECT_DESC" | cut -c1-60)
LANGUAGE="go"
LICENSE="MIT"
PRIVATE="false"
# 简单关键词识别AI 应覆盖更复杂情形)
if echo "$PROJECT_DESC" | grep -qiE "python|py\b"; then LANGUAGE="python"; fi
if echo "$PROJECT_DESC" | grep -qiE "node|js\b|javascript|typescript|前端"; then LANGUAGE="node"; fi
if echo "$PROJECT_DESC" | grep -qi "apache"; then LICENSE="Apache-2.0"; fi
if echo "$PROJECT_DESC" | grep -qi "gpl"; then LICENSE="GPL-3.0"; fi
if echo "$PROJECT_DESC" | grep -qiE "私有|private|内部"; then PRIVATE="true"; fi
# 写入 project-spec.json
cat > "$OUTPUT_DIR/project-spec.json" <<EOF
{
"name": "$NAME",
"description": "$DESCRIPTION",
"language": "$LANGUAGE",
"license": "$LICENSE",
"private": $PRIVATE,
"owner": "$OWNER"
}
EOF
echo "[INFO] project-spec.json 已生成: $OUTPUT_DIR/project-spec.json"
cat "$OUTPUT_DIR/project-spec.json"
# ---- Step 2: 创建仓库dry-run 保护) ----
if [ "$DRY_RUN" = "true" ]; then
echo "[DRY-RUN] 将执行: gitlink-cli repo +create --name $NAME --description \"$DESCRIPTION\" --private $PRIVATE"
else
echo "[INFO] 调用 repo +create..."
RESULT=$(gitlink-cli repo +create --name "$NAME" \
--description "$DESCRIPTION" --private "$PRIVATE" --format json 2>&1) \
|| { echo "[WARN] repo +create 失败: $RESULT"; exit 0; }
echo "$RESULT" > "$OUTPUT_DIR/repo-create.json"
echo "[INFO] 仓库创建响应已保存"
fi
# ---- Step 3: 验证仓库(可失败,降级) ----
echo "[INFO] 验证仓库是否可访问..."
INFO=$(gitlink-cli repo +info --owner "$OWNER" --repo "$NAME" --format json 2>&1) \
&& echo "$INFO" > "$OUTPUT_DIR/repo-info.json" \
|| echo "[WARN] 仓库尚未创建或未登录dry-run 下属正常)"
echo ""
echo "[========================================]"
echo "[ Phase 1 完成 ]"
echo "[ spec 保存至: $OUTPUT_DIR/project-spec.json ]"
echo "[========================================]"