Files
agent-skills/skills/gitea-actor/scripts/api-examples.sh
yanghuajun336 ab5e59e999 feat: 优化 gitea-actor 技能,新增脚本工具和完整文档
- 新增 setup.sh 配置脚本
- 新增 api-examples.sh API 函数库
- 新增 gitea-cli.py Python CLI 工具
- 完善文档结构 (1640 行)
- 添加实际用例和工作流示例
- 增强故障排除和最佳实践指南
2026-03-31 22:35:30 +08:00

290 lines
8.3 KiB
Bash
Executable File

#!/bin/bash
# Gitea API 示例脚本
# 包含常用 Gitea API 操作的函数示例
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 检查环境变量
check_env() {
if [[ -z "$GITEA_URL" || -z "$GITEA_TOKEN" ]]; then
echo -e "${RED}[ERROR]${NC} 请先设置 Gitea 环境变量"
echo " 运行: source ~/.gitea-actor.env"
echo " 或设置: export GITEA_URL=..., export GITEA_TOKEN=..."
return 1
fi
}
# 通用 API 请求函数
gitea_api() {
local method=$1
local endpoint=$2
local data=$3
local url="${GITEA_URL}/api/v1/${endpoint}"
local curl_cmd="curl -s -H 'Authorization: token $GITEA_TOKEN' -H 'Accept: application/json'"
if [[ -n "$data" ]]; then
curl_cmd="$curl_cmd -H 'Content-Type: application/json' -d '$data'"
fi
curl_cmd="$curl_cmd -X $method '$url'"
eval "$curl_cmd"
}
# 1. 用户相关操作
get_current_user() {
check_env || return 1
echo -e "${BLUE}[INFO]${NC} 获取当前用户信息..."
gitea_api "GET" "user" | jq .
}
list_user_repos() {
check_env || return 1
local page=${1:-1}
local limit=${2:-20}
echo -e "${BLUE}[INFO]${NC} 列出用户仓库 (第 $page 页, 每页 $limit 个)..."
gitea_api "GET" "user/repos?page=$page&limit=$limit" | jq '.[] | {id, full_name, description, private, html_url}'
}
# 2. 仓库操作
create_repository() {
check_env || return 1
local name=$1
local description=${2:-""}
local private=${3:-false}
if [[ -z "$name" ]]; then
echo -e "${YELLOW}[USAGE]${NC} create_repository <name> [description] [private(true/false)]"
return 1
fi
local data=$(jq -n \
--arg name "$name" \
--arg desc "$description" \
--argjson private "$private" \
'{name: $name, description: $desc, private: $private, auto_init: true}')
echo -e "${BLUE}[INFO]${NC} 创建仓库: $name"
gitea_api "POST" "user/repos" "$data" | jq .
}
get_repository() {
check_env || return 1
local owner=$1
local repo=$2
if [[ -z "$owner" || -z "$repo" ]]; then
echo -e "${YELLOW}[USAGE]${NC} get_repository <owner> <repo>"
return 1
fi
echo -e "${BLUE}[INFO]${NC} 获取仓库信息: $owner/$repo"
gitea_api "GET" "repos/$owner/$repo" | jq .
}
# 3. Pull Request 操作
create_pull_request() {
check_env || return 1
local owner=$1
local repo=$2
local title=$3
local body=$4
local head=$5
local base=${6:-"main"}
if [[ -z "$owner" || -z "$repo" || -z "$title" || -z "$head" ]]; then
echo -e "${YELLOW}[USAGE]${NC} create_pull_request <owner> <repo> <title> <body> <head> [base]"
return 1
fi
local data=$(jq -n \
--arg title "$title" \
--arg body "$body" \
--arg head "$head" \
--arg base "$base" \
'{title: $title, body: $body, head: $head, base: $base}')
echo -e "${BLUE}[INFO]${NC} 创建 Pull Request: $title"
gitea_api "POST" "repos/$owner/$repo/pulls" "$data" | jq .
}
list_pull_requests() {
check_env || return 1
local owner=$1
local repo=$2
local state=${3:-"open"}
if [[ -z "$owner" || -z "$repo" ]]; then
echo -e "${YELLOW}[USAGE]${NC} list_pull_requests <owner> <repo> [state(open/closed/all)]"
return 1
fi
echo -e "${BLUE}[INFO]${NC} 列出 Pull Requests: $owner/$repo (状态: $state)"
gitea_api "GET" "repos/$owner/$repo/pulls?state=$state" | jq '.[] | {number, title, state, user: .user.login, created_at}'
}
merge_pull_request() {
check_env || return 1
local owner=$1
local repo=$2
local pr_number=$3
if [[ -z "$owner" || -z "$repo" || -z "$pr_number" ]]; then
echo -e "${YELLOW}[USAGE]${NC} merge_pull_request <owner> <repo> <pr-number>"
return 1
fi
local data='{"Do":"merge"}'
echo -e "${BLUE}[INFO]${NC} 合并 Pull Request: #$pr_number"
gitea_api "POST" "repos/$owner/$repo/pulls/$pr_number/merge" "$data" | jq .
}
# 4. Issue 操作
create_issue() {
check_env || return 1
local owner=$1
local repo=$2
local title=$3
local body=$4
local labels=$5
if [[ -z "$owner" || -z "$repo" || -z "$title" ]]; then
echo -e "${YELLOW}[USAGE]${NC} create_issue <owner> <repo> <title> [body] [labels逗号分隔]"
return 1
fi
local data="{\"title\":\"$title\""
if [[ -n "$body" ]]; then
data="$data, \"body\":\"$body\""
fi
if [[ -n "$labels" ]]; then
IFS=',' read -ra label_array <<< "$labels"
local labels_json=$(printf '"%s",' "${label_array[@]}")
labels_json="[${labels_json%,}]"
data="$data, \"labels\":$labels_json"
fi
data="$data}"
echo -e "${BLUE}[INFO]${NC} 创建 Issue: $title"
gitea_api "POST" "repos/$owner/$repo/issues" "$data" | jq .
}
# 5. 分支和标签
create_branch() {
check_env || return 1
local owner=$1
local repo=$2
local new_branch=$3
local from_branch=${4:-"main"}
if [[ -z "$owner" || -z "$repo" || -z "$new_branch" ]]; then
echo -e "${YELLOW}[USAGE]${NC} create_branch <owner> <repo> <new-branch> [from-branch]"
return 1
fi
local data=$(jq -n \
--arg new_branch "$new_branch" \
--arg old_branch "$from_branch" \
'{new_branch_name: $new_branch, old_branch_name: $old_branch}')
echo -e "${BLUE}[INFO]${NC} 创建分支: $new_branch (从 $from_branch)"
gitea_api "POST" "repos/$owner/$repo/branches" "$data" | jq .
}
create_tag() {
check_env || return 1
local owner=$1
local repo=$2
local tag_name=$3
local message=${4:-"Release $tag_name"}
local target=${5:-"main"}
if [[ -z "$owner" || -z "$repo" || -z "$tag_name" ]]; then
echo -e "${YELLOW}[USAGE]${NC} create_tag <owner> <repo> <tag-name> [message] [target-branch]"
return 1
fi
local data=$(jq -n \
--arg tag_name "$tag_name" \
--arg message "$message" \
--arg target "$target" \
'{tag_name: $tag_name, message: $message, target: $target}')
echo -e "${BLUE}[INFO]${NC} 创建标签: $tag_name"
gitea_api "POST" "repos/$owner/$repo/tags" "$data" | jq .
}
# 6. 搜索操作
search_repositories() {
check_env || return 1
local query=$1
local limit=${2:-10}
if [[ -z "$query" ]]; then
echo -e "${YELLOW}[USAGE]${NC} search_repositories <query> [limit]"
return 1
fi
echo -e "${BLUE}[INFO]${NC} 搜索仓库: $query"
gitea_api "GET" "repos/search?q=$query&limit=$limit" | jq '.data[] | {full_name, description, stars_count, forks_count}'
}
# 显示帮助信息
show_help() {
echo -e "${GREEN}Gitea API 示例脚本${NC}"
echo ""
echo -e "${BLUE}使用方法:${NC}"
echo " source api-examples.sh # 加载函数到当前shell"
echo " 然后调用任意函数"
echo ""
echo -e "${BLUE}可用函数:${NC}"
echo " 用户操作:"
echo " get_current_user"
echo " list_user_repos [page] [limit]"
echo ""
echo " 仓库操作:"
echo " create_repository <name> [description] [private]"
echo " get_repository <owner> <repo>"
echo ""
echo " Pull Request 操作:"
echo " create_pull_request <owner> <repo> <title> <body> <head> [base]"
echo " list_pull_requests <owner> <repo> [state]"
echo " merge_pull_request <owner> <repo> <pr-number>"
echo ""
echo " Issue 操作:"
echo " create_issue <owner> <repo> <title> [body] [labels]"
echo ""
echo " 分支和标签:"
echo " create_branch <owner> <repo> <new-branch> [from-branch]"
echo " create_tag <owner> <repo> <tag-name> [message] [target]"
echo ""
echo " 搜索操作:"
echo " search_repositories <query> [limit]"
echo ""
echo -e "${YELLOW}示例:${NC}"
echo " # 获取当前用户信息"
echo " get_current_user"
echo ""
echo " # 创建新仓库"
echo " create_repository \"my-new-repo\" \"My description\" false"
echo ""
echo " # 创建 Pull Request"
echo " create_pull_request \"owner\" \"repo\" \"添加新功能\" \"详细描述\" \"feature-branch\" \"main\""
}
# 如果直接运行脚本,显示帮助
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
show_help
fi