fix(gitea): 修复 delete-runner API 端点错误
- 修复 delete-runner.md 中的 API 端点从 /api/v1/admin/runners 改为 /api/v1/admin/actions/runners - 更新 SKILL.md 和 repository-operations.md 文档 - 更新 opencode.json 配置
This commit is contained in:
@@ -11,6 +11,34 @@
|
||||
- 管理 Secrets 和 Variables
|
||||
- 设置 Webhooks
|
||||
|
||||
## 快速使用
|
||||
|
||||
### 核心原则(简洁高效)
|
||||
1. **智能解析**:自动识别 `组织/仓库` 格式,优先使用指定组织而非默认组织
|
||||
2. **默认私有**:除非明确指定,所有仓库默认创建为私有
|
||||
3. **简化验证**:默认假设组织存在,API创建失败时清晰提示解决方案
|
||||
4. **Git集成**:自动检查Git仓库状态,提供一键初始化、提交、推送完整流程
|
||||
5. **错误处理**:API失败时给出具体操作建议,而非预先复杂验证
|
||||
|
||||
### 常用命令(简洁高效)
|
||||
```bash
|
||||
# 智能解析组织/仓库格式(默认私有)
|
||||
/gitea-create-repo shigongcao/shigongcao
|
||||
|
||||
# 使用默认组织创建公开仓库
|
||||
/gitea-create-repo my-project public
|
||||
|
||||
# 自动检查Git状态,提供完整初始化流程
|
||||
/gitea-create-repo org/project
|
||||
|
||||
# 特性说明:
|
||||
# 1. 自动识别组织/仓库格式
|
||||
# 2. 默认创建私有仓库(除非指定public)
|
||||
# 3. 自动检查当前目录Git状态
|
||||
# 4. 提供一键初始化、提交、推送选项
|
||||
# 5. API失败时给出清晰解决方案(如组织不存在)
|
||||
```
|
||||
|
||||
## 创建仓库
|
||||
|
||||
### 使用命令创建
|
||||
@@ -65,24 +93,28 @@ fi
|
||||
source "$config_file"
|
||||
```
|
||||
|
||||
#### 步骤 2: 解析输入
|
||||
#### 步骤 2: 智能解析输入(简洁高效版)
|
||||
|
||||
```bash
|
||||
input="$1"
|
||||
|
||||
# 解析 owner/repo
|
||||
# 智能解析:优先使用用户指定的组织
|
||||
if [[ "$input" =~ / ]]; then
|
||||
owner=$(echo "$input" | cut -d'/' -f1)
|
||||
repo=$(echo "$input" | cut -d'/' -f2)
|
||||
echo "使用指定组织: $owner"
|
||||
echo "提示:假设组织存在,如不存在会在API创建时提示"
|
||||
else
|
||||
# 使用默认组织或当前用户
|
||||
# 未指定组织,使用默认组织或当前用户
|
||||
if [ -z "$GITEA_DEFAULT_ORG" ]; then
|
||||
# 获取当前用户
|
||||
echo "未指定组织,获取当前用户..."
|
||||
owner=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
"${GITEA_URL}/api/v1/user" | jq -r '.login')
|
||||
|
||||
if [ -z "$owner" ] || [ "$owner" = "null" ]; then
|
||||
echo "❌ 无法获取当前用户信息,请使用 owner/repo 格式"
|
||||
echo "❌ 无法获取当前用户信息,请使用 组织/仓库 格式"
|
||||
echo "例如:/gitea-create-repo shigongcao/shigongcao"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -94,9 +126,21 @@ else
|
||||
repo="$input"
|
||||
fi
|
||||
|
||||
# 解析可见性
|
||||
# 解析可见性:默认私有仓库(除非明确指定公开)
|
||||
visibility="${2:-private}"
|
||||
if [[ "$visibility" != "private" && "$visibility" != "public" ]]; then
|
||||
echo "⚠️ 可见性参数无效,使用默认值: private"
|
||||
visibility="private"
|
||||
fi
|
||||
|
||||
private_bool=$([ "$visibility" = "private" ] && echo "true" || echo "false")
|
||||
echo "仓库可见性: $visibility"
|
||||
|
||||
# 提前检查当前目录是否是 Git 仓库(为后续步骤做准备)
|
||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
echo "⚠️ 当前目录不是 Git 仓库"
|
||||
echo "提示:创建远程仓库后可以初始化本地 Git 仓库并推送代码"
|
||||
fi
|
||||
```
|
||||
|
||||
#### 步骤 3: 验证仓库名
|
||||
@@ -109,12 +153,29 @@ if ! [[ "$repo" =~ ^[a-zA-Z0-9_.-]+$ ]]; then
|
||||
fi
|
||||
```
|
||||
|
||||
#### 步骤 4: 调用 API 创建
|
||||
#### 步骤 4: 调用 API 创建(带详细错误处理)
|
||||
|
||||
```bash
|
||||
echo "正在创建仓库: $owner/$repo ($visibility)"
|
||||
|
||||
# 尝试组织仓库
|
||||
# 检查 Token 权限
|
||||
echo "检查 Token 权限..."
|
||||
user_info=$(curl -s -H "Authorization: token $GITEA_TOKEN" "${GITEA_URL}/api/v1/user")
|
||||
username=$(echo "$user_info" | jq -r '.login // empty')
|
||||
|
||||
if [ -z "$username" ] || [ "$username" = "null" ]; then
|
||||
echo "❌ Token 无效或权限不足"
|
||||
echo "请检查:"
|
||||
echo "1. Token 是否有效"
|
||||
echo "2. Token 是否有 'repo' 权限"
|
||||
echo "3. GITEA_URL 是否正确"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✓ Token 有效,当前用户: $username"
|
||||
|
||||
# 尝试创建组织仓库
|
||||
echo "调用 Gitea API 创建仓库..."
|
||||
response=$(curl -s -w "\n%{http_code}" -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
@@ -122,42 +183,87 @@ response=$(curl -s -w "\n%{http_code}" -X POST \
|
||||
\"name\": \"${repo}\",
|
||||
\"private\": ${private_bool},
|
||||
\"auto_init\": false,
|
||||
\"default_branch\": \"main\"
|
||||
\"default_branch\": \"main\",
|
||||
\"description\": \"\"
|
||||
}" \
|
||||
"${GITEA_URL}/api/v1/orgs/${owner}/repos")
|
||||
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
body=$(echo "$response" | sed '$d')
|
||||
|
||||
# 如果 404,可能是用户而非组织
|
||||
if [ "$http_code" = "404" ]; then
|
||||
echo "⚠️ 组织不存在,尝试创建用户仓库..."
|
||||
|
||||
response=$(curl -s -w "\n%{http_code}" -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"name\": \"${repo}\",
|
||||
\"private\": ${private_bool}
|
||||
}" \
|
||||
"${GITEA_URL}/api/v1/user/repos")
|
||||
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
body=$(echo "$response" | sed '$d')
|
||||
fi
|
||||
|
||||
# 处理响应
|
||||
case "$http_code" in
|
||||
201)
|
||||
echo "✓ 仓库创建成功"
|
||||
;;
|
||||
400)
|
||||
error_msg=$(echo "$body" | jq -r '.message // "未知错误"')
|
||||
echo "❌ 请求参数错误: $error_msg"
|
||||
echo "请检查:"
|
||||
echo "1. 仓库名格式是否正确"
|
||||
echo "2. 是否缺少必要参数"
|
||||
exit 1
|
||||
;;
|
||||
403)
|
||||
echo "❌ 权限不足"
|
||||
echo "请检查:"
|
||||
echo "1. 是否有在组织 '$owner' 下创建仓库的权限"
|
||||
echo "2. 是否是组织成员"
|
||||
echo "3. Token 权限是否足够"
|
||||
exit 1
|
||||
;;
|
||||
404)
|
||||
# 组织不存在(API 返回 404)
|
||||
echo "❌ API 创建失败:组织 '$owner' 不存在"
|
||||
|
||||
# 检查是否为当前用户(可能用户输入的是自己的用户名)
|
||||
if [ "$owner" = "$username" ]; then
|
||||
echo "检测到 '$owner' 是当前用户,创建个人仓库..."
|
||||
|
||||
response=$(curl -s -w "\n%{http_code}" -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"name\": \"${repo}\",
|
||||
\"private\": ${private_bool},
|
||||
\"auto_init\": false,
|
||||
\"default_branch\": \"main\"
|
||||
}" \
|
||||
"${GITEA_URL}/api/v1/user/repos")
|
||||
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
body=$(echo "$response" | sed '$d')
|
||||
|
||||
if [ "$http_code" = "201" ]; then
|
||||
echo "✓ 个人仓库创建成功"
|
||||
else
|
||||
error_msg=$(echo "$body" | jq -r '.message // "未知错误"')
|
||||
echo "❌ 个人仓库创建失败 (HTTP $http_code): $error_msg"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "组织不存在,请先创建组织"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
echo "您可以通过以下方式创建组织 '$owner':"
|
||||
echo "1. 访问 ${GITEA_URL}/org/create"
|
||||
echo "2. 使用 Gitea Web 界面创建组织"
|
||||
echo "3. 或者使用个人仓库格式: $username/$repo"
|
||||
echo ""
|
||||
echo "创建组织后,重新运行此命令创建仓库。"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
409)
|
||||
echo "❌ 仓库已存在"
|
||||
echo "❌ 仓库已存在: $owner/$repo"
|
||||
echo "请使用不同的仓库名或删除现有仓库"
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
echo "❌ 创建失败 (HTTP $http_code)"
|
||||
echo "$body" | jq -r '.message // empty'
|
||||
error_msg=$(echo "$body" | jq -r '.message // "未知错误"')
|
||||
echo "❌ 创建失败 (HTTP $http_code): $error_msg"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -183,45 +289,104 @@ echo " SSH URL: $ssh_url"
|
||||
echo ""
|
||||
```
|
||||
|
||||
#### 步骤 6: 添加 Git Remote
|
||||
#### 步骤 6: Git 仓库集成(简洁高效版)
|
||||
|
||||
```bash
|
||||
read -p "是否将此仓库添加为 Git remote? [Y/n] " add_remote
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "Git 仓库集成"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
|
||||
if [[ ! "$add_remote" =~ ^[Nn]$ ]]; then
|
||||
# 检查是否是 Git 仓库
|
||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
echo "当前目录不是 Git 仓库"
|
||||
read -p "是否初始化 Git 仓库? [Y/n] " init_git
|
||||
|
||||
if [[ ! "$init_git" =~ ^[Nn]$ ]]; then
|
||||
git init
|
||||
echo "✓ Git 仓库已初始化"
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
# 检查是否是 Git 仓库
|
||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
echo "当前目录不是 Git 仓库"
|
||||
read -p "是否初始化 Git 仓库并添加 remote? [Y/n] " init_git
|
||||
|
||||
if [[ "$init_git" =~ ^[Nn]$ ]]; then
|
||||
echo "跳过 Git 初始化,仅创建远程仓库。"
|
||||
echo "您可以在需要时手动执行:"
|
||||
echo " git init"
|
||||
echo " git remote add origin \"$clone_url\""
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 初始化 Git 仓库
|
||||
echo "正在初始化 Git 仓库..."
|
||||
git init
|
||||
echo "✓ Git 仓库已初始化"
|
||||
|
||||
# 检查 origin 是否已存在
|
||||
if git remote get-url origin >/dev/null 2>&1; then
|
||||
existing_url=$(git remote get-url origin)
|
||||
echo "⚠️ origin remote 已存在: $existing_url"
|
||||
read -p "是否覆盖? [y/N] " overwrite
|
||||
read -p "是否覆盖为新的仓库? [y/N] " overwrite
|
||||
|
||||
if [[ "$overwrite" =~ ^[Yy]$ ]]; then
|
||||
git remote set-url origin "$clone_url"
|
||||
echo "✓ origin remote 已更新"
|
||||
echo "✓ origin remote 已更新为: $clone_url"
|
||||
else
|
||||
echo "保持现有的 origin remote"
|
||||
fi
|
||||
else
|
||||
git remote add origin "$clone_url"
|
||||
echo "✓ origin remote 已添加"
|
||||
echo "✓ origin remote 已添加: $clone_url"
|
||||
fi
|
||||
|
||||
# 显示 remote 信息
|
||||
# 可选:添加文件、提交并推送
|
||||
echo ""
|
||||
echo "当前 remote:"
|
||||
git remote -v
|
||||
read -p "是否添加当前文件、提交并推送到远程仓库? [Y/n] " push_code
|
||||
|
||||
if [[ ! "$push_code" =~ ^[Nn]$ ]]; then
|
||||
echo "添加所有文件到暂存区..."
|
||||
git add .
|
||||
|
||||
echo "创建初始提交..."
|
||||
git commit -m "Initial commit" || {
|
||||
echo "⚠️ 提交失败(可能没有文件可提交)"
|
||||
echo "请手动添加文件后提交"
|
||||
}
|
||||
|
||||
echo "推送到远程仓库 (main 分支)..."
|
||||
git branch -M main 2>/dev/null
|
||||
git push -u origin main
|
||||
echo "✓ 代码已推送到远程仓库"
|
||||
else
|
||||
echo "跳过推送,您可以在需要时手动推送代码。"
|
||||
fi
|
||||
|
||||
else
|
||||
# 已经是 Git 仓库,询问是否添加/更新 remote
|
||||
echo "当前目录已是 Git 仓库"
|
||||
read -p "是否添加/更新 origin remote 为此仓库? [Y/n] " add_remote
|
||||
|
||||
if [[ ! "$add_remote" =~ ^[Nn]$ ]]; then
|
||||
# 检查 origin 是否已存在
|
||||
if git remote get-url origin >/dev/null 2>&1; then
|
||||
existing_url=$(git remote get-url origin)
|
||||
echo "⚠️ origin remote 已存在: $existing_url"
|
||||
read -p "是否覆盖? [y/N] " overwrite
|
||||
|
||||
if [[ "$overwrite" =~ ^[Yy]$ ]]; then
|
||||
git remote set-url origin "$clone_url"
|
||||
echo "✓ origin remote 已更新"
|
||||
else
|
||||
echo "保持现有的 origin remote"
|
||||
fi
|
||||
else
|
||||
git remote add origin "$clone_url"
|
||||
echo "✓ origin remote 已添加"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# 显示当前状态
|
||||
echo ""
|
||||
echo "当前 Git 状态:"
|
||||
git status --short 2>/dev/null || echo "(非 Git 仓库)"
|
||||
echo ""
|
||||
echo "Remote 配置:"
|
||||
git remote -v 2>/dev/null || echo "(无 remote 配置)"
|
||||
```
|
||||
|
||||
## 仓库初始化
|
||||
@@ -689,5 +854,11 @@ curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
|
||||
## 版本
|
||||
|
||||
- **文档版本**: 1.0
|
||||
- **最后更新**: 2026-01-12
|
||||
- **文档版本**: 1.1
|
||||
- **最后更新**: 2026-01-23
|
||||
- **主要改进**:
|
||||
- 智能解析输入:优先使用指定组织而非默认组织
|
||||
- 组织存在性验证和清晰错误提示
|
||||
- 默认私有仓库策略(除非明确指定公开)
|
||||
- 增强的错误处理:Token验证、权限检查、详细错误消息
|
||||
- 完整的Git集成流程:可选自动初始化和推送
|
||||
|
||||
Reference in New Issue
Block a user