forked from Gitlink/gitlink-cli
86 lines
3.4 KiB
Bash
86 lines
3.4 KiB
Bash
#!/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 "[========================================]"
|