From 3cb55db8649d9b517e83bba97023609b913da3f8 Mon Sep 17 00:00:00 2001 From: voson Date: Fri, 30 Jan 2026 10:46:31 +0800 Subject: [PATCH] =?UTF-8?q?refactor(gitea):=20=E7=AE=80=E5=8C=96=20runner?= =?UTF-8?q?=20=E5=91=BD=E5=90=8D=EF=BC=8C=E6=81=A2=E5=A4=8D=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=20Gitea=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 runner 默认命名:从 'runner-hostname-mode' 简化为 'hostname' - 批量模式命名:从 'runner-hostname-docker/host' 改为 'hostname-docker/host' - 恢复默认 Gitea URL 配置(https://git.shigongcao.com) - 优化参数验证逻辑,使 GITEA_URL 参数可选 - 保持用户可通过 --name 参数自定义 runner 名称 --- skill/gitea/create-runner.md | 172 +++++++++++++++++++++++++++-------- 1 file changed, 135 insertions(+), 37 deletions(-) diff --git a/skill/gitea/create-runner.md b/skill/gitea/create-runner.md index db81901..2085294 100644 --- a/skill/gitea/create-runner.md +++ b/skill/gitea/create-runner.md @@ -46,8 +46,8 @@ curl -s https://git.shigongcao.com/raw/ai/opencode/main/skill/gitea/create-runne gitea-create-runner() { local mode="${1:-docker}" local token="${2:-$GITEA_TOKEN}" - local gitea_url="${3}" - local name="${4:-runner-$(hostname -s)-$mode}" + local gitea_url="${3:-https://git.shigongcao.com}" + local name="${4:-$(hostname -s)}" echo "创建 $mode runner: $name" @@ -62,8 +62,8 @@ set -e # 参数解析 MODE="docker" TOKEN="" -GITEA_URL="" -RUNNER_NAME="runner-$(hostname -s)-docker" +GITEA_URL="https://git.shigongcao.com" +RUNNER_NAME="$(hostname -s)" ALL_MODE=false while [[ $# -gt 0 ]]; do @@ -84,14 +84,9 @@ if [ -z "$TOKEN" ]; then exit 1 fi -if [ -z "$GITEA_URL" ]; then - echo "❌ 必须提供 --gitea-url 参数" - exit 1 -fi - create_runner() { local mode=$1 - local name=$2 + local name="${2:-$(hostname -s)}" echo "创建 $mode runner: $name" if [ "$mode" = "docker" ]; then @@ -225,8 +220,8 @@ YAML } if [ "$ALL_MODE" = true ]; then - create_runner "docker" "runner-$(hostname -s)-docker" - create_runner "host" "runner-$(hostname -s)-host" + create_runner "docker" "$(hostname -s)-docker" + create_runner "host" "$(hostname -s)-host" else create_runner "$MODE" "$RUNNER_NAME" fi @@ -322,17 +317,17 @@ Gitea Actions Runner 创建脚本 --host 创建 Host runner --all 同时创建 Docker 和 Host runner --token TOKEN Gitea 注册令牌 (必需) - --gitea-url URL Gitea 实例地址 (必需) - --name NAME Runner 名称 (默认: runner-\$(hostname)-模式) + --gitea-url URL Gitea 实例地址 (默认: https://git.shigongcao.com) + --name NAME Runner 名称 (默认: hostname) --skip-checks 跳过依赖检查 --interactive 交互模式 (传统方式) --help 显示此帮助信息 示例: - $0 --docker --token "wibnIxvgeyYj3D7d53VTQvNxv0UVqArBwAtPFBWD" --gitea-url "https://git.shigongcao.com" + $0 --docker --token "wibnIxvgeyYj3D7d53VTQvNxv0UVqArBwAtPFBWD" $0 --host --token "your_token" --gitea-url "https://git.example.com" - $0 --all --token "your_token" --gitea-url "https://git.shigongcao.com" - $0 --all --token "your_token" --gitea-url "https://git.shigongcao.com" --name "custom-runner" + $0 --all --token "your_token" + $0 --all --token "your_token" --name "custom-runner" 直接使用技能: # 从技能文档直接执行 @@ -359,17 +354,10 @@ while [[ $# -gt 0 ]]; do done # 检查必需参数 -if [ "$INTERACTIVE" = false ]; then - if [ -z "$GITEA_TOKEN" ]; then - echo "❌ 必须提供 --token 参数" - echo "使用 --help 查看帮助" - exit 1 - fi - if [ -z "$GITEA_URL" ]; then - echo "❌ 必须提供 --gitea-url 参数" - echo "使用 --help 查看帮助" - exit 1 - fi +if [ -z "$GITEA_TOKEN" ] && [ "$INTERACTIVE" = false ]; then + echo "❌ 必须提供 --token 参数" + echo "使用 --help 查看帮助" + exit 1 fi # ========================================== @@ -407,17 +395,16 @@ if [ -z "$GITEA_URL" ] || [ -z "$GITEA_TOKEN" ]; then fi fi -# 检查必需参数 +# 如果仍然缺少 URL,使用默认值 if [ -z "$GITEA_URL" ]; then - echo "❌ 必须提供 Gitea URL" - echo " 使用方法: $0 --token YOUR_TOKEN --gitea-url YOUR_GITEA_URL [其他选项]" - echo " 或创建配置文件: $HOME/.config/gitea/config.env" - exit 1 + GITEA_URL="https://git.shigongcao.com" + echo "⚠️ 使用默认 Gitea URL: $GITEA_URL" fi +# 检查必需参数 if [ -z "$GITEA_TOKEN" ]; then echo "❌ 必须提供 Gitea 注册令牌" - echo " 使用方法: $0 --token YOUR_TOKEN --gitea-url YOUR_GITEA_URL [其他选项]" + echo " 使用方法: $0 --token YOUR_TOKEN [其他选项]" echo " 或创建配置文件: $HOME/.config/gitea/config.env" exit 1 fi @@ -438,7 +425,118 @@ if [ -z "$RUNNER_NAME" ]; then # 批量模式会创建两个runner echo "批量模式:将创建 docker 和 host runner" else - RUNNER_NAME="runner-$hostname-$RUNNER_MODE" + RUNNER_NAME="$hostname" + echo "生成 Runner 名称: $RUNNER_NAME" + fi +else + echo "使用指定的 Runner 名称: $RUNNER_NAME" +fi + +# 检查名称有效性(如果不是批量模式) +if [ "$ALL_MODE" = false ] && [[ ! "$RUNNER_NAME" =~ ^[a-zA-Z0-9_-]+$ ]]; then + echo "❌ Runner 名称无效 (仅限字母、数字、下划线、连字符)" + exit 1 +fi +echo "" + read -p "请输入选项 [1/2] (默认 1): " mode_choice + + if [ "$mode_choice" = "2" ]; then + RUNNER_MODE="docker" + echo "✅ 已选择: Docker Mode" + else + RUNNER_MODE="host" + echo "✅ 已选择: Host Mode" + fi + echo "" +fi + +# Check dependencies based on mode +if [ "$RUNNER_MODE" = "host" ]; then + echo "检查 act_runner 安装状态..." + if command -v act_runner &> /dev/null; then + version=$(act_runner --version 2>&1 | head -n1) + echo "✓ act_runner 已安装: $version" + else + echo "⚠️ act_runner 未安装" + echo "正在使用 Homebrew 安装..." + if ! command -v brew &> /dev/null; then + echo "❌ 需要先安装 Homebrew" + exit 1 + fi + brew install act_runner + if [ $? -eq 0 ]; then + echo "✓ act_runner 安装成功" + else + echo "❌ act_runner 安装失败" + exit 1 + fi + fi +else + # Docker mode checks + echo "检查 Docker 环境..." + if command -v docker &> /dev/null; then + if docker info &> /dev/null; then + docker_ver=$(docker --version) + echo "✓ Docker 已安装并运行: $docker_ver" + else + echo "❌ Docker 已安装但未运行" + echo " 请启动 Docker Desktop" + exit 1 + fi + else + echo "❌ Docker 未安装" + echo " Docker 模式需要预先安装 Docker" + echo " 请访问 https://www.docker.com/products/docker-desktop/ 下载安装" + exit 1 + fi +fi +echo "" + +# ========================================== +# 3. Load Gitea Configuration +# ========================================== + +# 如果未通过命令行提供,尝试从配置文件加载 +if [ -z "$GITEA_URL" ] || [ -z "$GITEA_TOKEN" ]; then + config_file="$HOME/.config/gitea/config.env" + + if [ -f "$config_file" ]; then + echo "从配置文件加载 Gitea 配置..." + source "$config_file" + fi +fi + +# 如果仍然缺少 URL,使用默认值 +if [ -z "$GITEA_URL" ]; then + GITEA_URL="https://git.shigongcao.com" + echo "⚠️ 使用默认 Gitea URL: $GITEA_URL" +fi + +# 检查必需参数 +if [ -z "$GITEA_TOKEN" ]; then + echo "❌ 必须提供 Gitea 注册令牌" + echo " 使用方法: $0 --token YOUR_TOKEN [其他选项]" + echo " 或创建配置文件: $HOME/.config/gitea/config.env" + exit 1 +fi + +echo "✓ Gitea 配置:" +echo " URL: $GITEA_URL" +echo " Token: ${GITEA_TOKEN:0:8}..." +echo "" + +# ========================================== +# 4. Generate Runner Name +# ========================================== + +# 如果未指定名称,生成默认名称 +if [ -z "$RUNNER_NAME" ]; then + hostname=$(hostname -s 2>/dev/null || echo "unknown") + if [ "$ALL_MODE" = true ]; then + # 批量模式会创建两个runner + echo "批量模式:将创建 docker 和 host runner" + else + RUNNER_NAME="$hostname" echo "生成 Runner 名称: $RUNNER_NAME" fi else @@ -728,8 +826,8 @@ if [ "$ALL_MODE" = true ]; then host_name="${RUNNER_NAME}-host" else # 使用默认名称 - docker_name="runner-${hostname}-docker" - host_name="runner-${hostname}-host" + docker_name="${hostname}-docker" + host_name="${hostname}-host" fi echo "批量创建模式:"