From 82885b92f388cb4198605ec0acddfc51fb8214d0 Mon Sep 17 00:00:00 2001 From: karuo Date: Sun, 15 Feb 2026 23:09:11 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=A6=20=E6=96=B0=E5=A2=9E=20Gitea?= =?UTF-8?q?=E7=AE=A1=E7=90=86=20Skill=EF=BC=88=E9=87=91=E4=BB=93=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 金仓/Gitea管理: 统一管理 Gitea 创建/推送/API/挂载 - SKILL主索引: 新增 Gitea管理,触发词 Gitea/推送到Gitea/创建仓库 - Gitea推送手册: 引用 Gitea管理 Skill - 群晖NAS管理: 外网入口增加 Gitea,引用 Gitea管理 - references: 批量注册NAS仓库脚本 - 已用 API 注册 15 个仓库到 Gitea 界面 Co-authored-by: Cursor --- .github/workflows/sync_github_to_gitea.yml | 39 ++++++ .../_团队成员/金仓/Gitea管理/SKILL.md | 106 ++++++++++++++++ .../Gitea管理/references/批量注册NAS仓库到Gitea.sh | 35 ++++++ .../_团队成员/金仓/群晖NAS管理/SKILL.md | 3 +- .../GitHub全仓同步到CKB_NAS_Gitea_方案与双向说明.md | 99 +++++++++++++++ .../群晖NAS管理/scripts/deploy_github_to_gitea_on_nas.sh | 48 ++++++++ .../金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh | 115 ++++++++++++++++++ .../references/Gitea推送_卡若AI调用手册.md | 62 +++++----- _共享模块/skill_router/SKILL.md | 7 +- _共享模块/工作台/00_账号与API索引.md | 7 +- 10 files changed, 486 insertions(+), 35 deletions(-) create mode 100644 .github/workflows/sync_github_to_gitea.yml create mode 100644 01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md create mode 100755 01_卡资(金)/_团队成员/金仓/Gitea管理/references/批量注册NAS仓库到Gitea.sh create mode 100644 01_卡资(金)/_团队成员/金仓/群晖NAS管理/references/GitHub全仓同步到CKB_NAS_Gitea_方案与双向说明.md create mode 100644 01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/deploy_github_to_gitea_on_nas.sh create mode 100644 01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh diff --git a/.github/workflows/sync_github_to_gitea.yml b/.github/workflows/sync_github_to_gitea.yml new file mode 100644 index 00000000..07a39c59 --- /dev/null +++ b/.github/workflows/sync_github_to_gitea.yml @@ -0,0 +1,39 @@ +# 将 fnvtk 的 GitHub 仓库同步到 CKB NAS Gitea(open.quwanzhi.com:3000) +# 触发:定时(每6小时)、手动、或任意 push 时可选触发 +# 仓库需配置 Secrets:GITEA_TOKEN(必填)、GITHUB_TOKEN(全量同步必填) +name: Sync GitHub to CKB NAS Gitea + +on: + schedule: + - cron: "0 */6 * * *" + workflow_dispatch: {} + push: + branches: [ main, master ] + paths-ignore: + - "**.md" + - ".github/workflows/sync_github_to_gitea.yml" + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + # 全量同步 fnvtk 下所有仓库时,请在仓库 Secrets 中配置 GH_PAT(GitHub PAT,repo 权限) + - name: Sync GitHub → Gitea + env: + GITHUB_TOKEN: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }} + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + GITEA_BASE_URL: "http://open.quwanzhi.com:3000" + GITHUB_USER: "fnvtk" + GITEA_USER: "fnvtk" + SYNC_WORK_DIR: "${{ runner.temp }}/github_gitea_sync" + run: | + sudo apt-get update -qq && sudo apt-get install -y -qq jq + chmod +x "01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh" 2>/dev/null || true + if [ -f "01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh" ]; then + bash "01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh" + else + echo "未找到同步脚本,跳过(请确认仓库结构)。" + fi diff --git a/01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md b/01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md new file mode 100644 index 00000000..0130fa99 --- /dev/null +++ b/01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md @@ -0,0 +1,106 @@ +--- +name: Gitea管理 +description: CKB NAS 自建 Gitea 的仓库创建、推送、API、挂载管理。触发词:Gitea、推送到Gitea、创建仓库、Git推送、CKB Git、界面不显示。统一用 HTTPS+API 创建,确保仓库在 Gitea 界面可见。 +triggers: Gitea、Gitea管理、推送到Gitea、创建Gitea仓库、Git推送CKB、CKB_NAS_Git、仓库界面不显示 +owner: 金仓 +version: "1.0" +updated: "2026-02-15" +--- + +# Gitea 管理 + +CKB NAS 自建 Gitea 的**创建、推送、API、挂载**统一管理。Git 相关内容、API、凭证均通过本 Skill 执行。 + +--- + +## 一、强制规则(每次必守) + +1. **新建仓库**:必须用 **Gitea API 或 Web** 创建,**禁止** SSH 手动 `mkdir+git init --bare` +2. **推送方式**:统一用 **HTTPS**(账号密码),不用 SSH +3. **HTTPS 访问**:http://open.quwanzhi.com:3000/fnvtk/{仓库名} 可直接在浏览器打开 + +> 违反上述规则会导致仓库不显示在 Gitea 界面。 + +--- + +## 二、凭证与 API(来自 00_账号与API索引) + +| 项 | 值 | +|----|-----| +| 地址 | http://open.quwanzhi.com:3000 | +| 账号 | fnvtk | +| 密码 | Zhiqun1984 | +| HTTPS 推送 URL | `http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{仓库名}.git` | +| 存储路径(NAS) | `/volume1/git/github/fnvtk/{仓库名}.git` | + +--- + +## 三、创建仓库(API) + +```bash +curl -u "fnvtk:Zhiqun1984" -X POST "http://open.quwanzhi.com:3000/api/v1/user/repos" \ + -H "Content-Type: application/json" \ + -d '{"name":"仓库名","description":"描述","private":false}' +``` + +--- + +## 四、推送(HTTPS) + +```bash +git remote add gitea "http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/仓库名.git" +git push -u gitea main +``` + +--- + +## 五、已纳入管理的仓库(界面可见) + +| 仓库 | Gitea 地址 | +|------|------------| +| karuo-ai | http://open.quwanzhi.com:3000/fnvtk/karuo-ai | +| suanli-juzhen | http://open.quwanzhi.com:3000/fnvtk/suanli-juzhen | +| yinzhanggu-finance | http://open.quwanzhi.com:3000/fnvtk/yinzhanggu-finance | +| skills | http://open.quwanzhi.com:3000/fnvtk/skills | +| cunkebao, cunkebao_v3, cunkebao_v4 | http://open.quwanzhi.com:3000/fnvtk/ | +| kr, kr-phone, karuo-deploy | 同上 | +| wanzhi, zhiji, godeye, my, mybooks | 同上 | + +--- + +## 六、修复「NAS 有但界面不显示」的仓库 + +NAS 文件系统上可能有通过 SSH 手动创建的 `.git` 目录,Gitea 数据库无记录,故界面不显示。 + +**处理步骤**:用 API 创建同名仓库 → 若本地有内容则 `git push` 补齐。 + +```bash +# 1. API 创建(使界面显示) +curl -u "fnvtk:Zhiqun1984" -X POST "http://open.quwanzhi.com:3000/api/v1/user/repos" \ + -H "Content-Type: application/json" \ + -d '{"name":"仓库名","description":"","private":false}' + +# 2. 本地添加 remote 并推送 +cd /path/to/local/repo +git remote add gitea "http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/仓库名.git" +git push -u gitea main +``` + +--- + +## 七、关联文档 + +| 文档 | 路径 | 说明 | +|------|------|------| +| Gitea 推送手册 | `_共享模块/references/Gitea推送_卡若AI调用手册.md` | 卡若AI 调用流程 | +| 账号与 API | `_共享模块/工作台/00_账号与API索引.md` § Gitea | 凭证 | +| CKB NAS Gitea 访问 | `群晖NAS管理/references/CKB_NAS_Gitea_类GitHub访问.md` | 部署与访问 | + +--- + +## 八、卡若AI 调用流程 + +1. 读本 SKILL + `Gitea推送_卡若AI调用手册.md` +2. 新建仓库 → 用 API 创建 +3. 推送 → `git push gitea main`(remote 用 HTTPS URL) +4. 检查界面 → http://open.quwanzhi.com:3000/fnvtk/ diff --git a/01_卡资(金)/_团队成员/金仓/Gitea管理/references/批量注册NAS仓库到Gitea.sh b/01_卡资(金)/_团队成员/金仓/Gitea管理/references/批量注册NAS仓库到Gitea.sh new file mode 100755 index 00000000..fce9c5eb --- /dev/null +++ b/01_卡资(金)/_团队成员/金仓/Gitea管理/references/批量注册NAS仓库到Gitea.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# 批量将 NAS 上有但 Gitea 界面不显示的仓库,通过 API 注册到 Gitea +# 用法:先获取 Gitea 已有列表,再对缺失的用 API 创建 +# 注意:API 创建可能产生空仓库,若本地有内容需手动 push + +GITEA="http://open.quwanzhi.com:3000" +AUTH="fnvtk:Zhiqun1984" + +# 从 API 获取已存在的仓库 +EXISTING=$(curl -s -u "$AUTH" "$GITEA/api/v1/user/repos" | python3 -c " +import json,sys +d=json.load(sys.stdin) +for r in d: print(r['name']) +" 2>/dev/null) + +# NAS 上的仓库列表(需 SSH 获取,此处写死常用项) +NAS_REPOS="cunkebao cunkebao_v3 cunkebao_v4 kr kr-phone karuo-deploy wanzhi zhiji godeye my mybooks" + +for repo in $NAS_REPOS; do + if echo "$EXISTING" | grep -q "^${repo}$"; then + echo "跳过(已存在): $repo" + else + echo "创建: $repo" + curl -s -u "$AUTH" -X POST "$GITEA/api/v1/user/repos" \ + -H "Content-Type: application/json" \ + -d "{\"name\":\"$repo\",\"description\":\"\",\"private\":false}" | python3 -c " +import json,sys +try: + d=json.load(sys.stdin) + print(' OK ->', d.get('html_url','')) +except: print(' 失败') +" + sleep 0.5 + fi +done diff --git a/01_卡资(金)/_团队成员/金仓/群晖NAS管理/SKILL.md b/01_卡资(金)/_团队成员/金仓/群晖NAS管理/SKILL.md index 1efdb91a..578f7cbb 100644 --- a/01_卡资(金)/_团队成员/金仓/群晖NAS管理/SKILL.md +++ b/01_卡资(金)/_团队成员/金仓/群晖NAS管理/SKILL.md @@ -29,10 +29,11 @@ description: 群晖NAS矩阵运维与宝塔中控管理。触发词:NAS管理 | 服务 | 地址 | |------|------| +| **Gitea(CKB Git)** | http://open.quwanzhi.com:3000 | | **QuickConnect** | https://udbfnvtk.quickconnect.cn | | **QuickConnect ID** | `udbfnvtk` | -> QuickConnect无需端口映射,Synology云服务自动穿透。 +> Gitea 创建/推送/API 统一由 **Gitea管理 Skill** 负责,见 `金仓/Gitea管理/SKILL.md`。QuickConnect 无需端口映射。 --- diff --git a/01_卡资(金)/_团队成员/金仓/群晖NAS管理/references/GitHub全仓同步到CKB_NAS_Gitea_方案与双向说明.md b/01_卡资(金)/_团队成员/金仓/群晖NAS管理/references/GitHub全仓同步到CKB_NAS_Gitea_方案与双向说明.md new file mode 100644 index 00000000..2c258997 --- /dev/null +++ b/01_卡资(金)/_团队成员/金仓/群晖NAS管理/references/GitHub全仓同步到CKB_NAS_Gitea_方案与双向说明.md @@ -0,0 +1,99 @@ +# GitHub 全仓同步到 CKB NAS Gitea 方案与双向说明 + +> **目标**:GitHub 与存客宝 NAS Gitea **直接接通**——GitHub 有更新即拉取并推送到 NAS Gitea,**无需指定** Gitea(固定为存客宝)。 +> **维护**:金仓 + +--- + +## 一、直接接通(推荐) + +- **Gitea 固定为存客宝 NAS**:`http://open.quwanzhi.com:3000`,用户 `fnvtk`,不在脚本里指定或改配置。 +- **流程**:GitHub 有新提交 → 定时在 NAS 上拉取 → 推送到存客宝 NAS Gitea。 +- **一键部署**(本机执行一次):从账号索引自动读 Token,把同步脚本和定时任务部署到 NAS,之后两边自动同步。**所有 fnvtk 的 GitHub 仓库都会同步到 Gitea,显示在 open.quwanzhi.com:3000 界面,目录结构与 GitHub 一致。** + +```bash +# 在 卡若AI 根目录执行(需本机能 SSH 到存客宝 NAS 192.168.1.201) +bash "01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/deploy_github_to_gitea_on_nas.sh" +``` + +部署后:每 **30 分钟** NAS 自动执行一次「拉取 GitHub → 推送到存客宝 Gitea」,界面与 GitHub 结构保持同步;无需再配或再问。 + +--- + +## 二、架构与流向 + +| 方向 | 说明 | 实现方式 | +|:-----|:-----|:---------| +| **GitHub → Gitea** | 主向同步,保持 Gitea 与 GitHub 一致 | NAS 上 `sync_github_to_gitea.sh` + 定时(cron) | +| **Gitea → GitHub** | 可选,仅在「以 Gitea 为主」的少数仓库使用 | Gitea Webhook 或本地 push 后手动/脚本推送到 GitHub | + +**建议**:默认以 **GitHub 为源真相**,Gitea 为镜像;双向仅对个别在 NAS 上也会改动的仓库配置。 + +--- + +## 三、前置条件 + +- **CKB NAS 上 Gitea 已部署**:见 `references/CKB_NAS_Gitea_类GitHub访问.md`,地址固定 `http://open.quwanzhi.com:3000`。 +- **Token**:使用一键部署时,从 `_共享模块/工作台/00_账号与API索引.md` 自动读取 GitHub Token 与 Gitea 密码,无需单独配置。 + +--- + +## 四、同步脚本用法(NAS 上) + +脚本在 NAS 上位于 `/volume1/docker/gitea/sync_github_to_gitea.sh`,Token 从同目录 `sync_tokens.env` 读取(部署时已写入)。 + +### 4.1 全量同步(fnvtk 下所有仓库) + +```bash +ssh fnvtk@192.168.1.201 "/bin/bash /volume1/docker/gitea/sync_github_to_gitea.sh" +``` + +### 4.2 只同步指定仓库 + +```bash +ssh fnvtk@192.168.1.201 "/bin/bash /volume1/docker/gitea/sync_github_to_gitea.sh --repo karuo-ai" +``` + +### 4.3 环境变量说明(可选覆盖) + +| 变量 | 说明 | +|:-----|:-----| +| sync_tokens.env | 部署时生成,含 GITHUB_TOKEN、GITEA_TOKEN(可为 Gitea 登录密码) | +| Gitea | 固定存客宝 NAS,不可覆盖 | +| SYNC_WORK_DIR | 临时目录,默认 `/tmp/github_gitea_sync` | + +--- + +## 五、自动触发(推荐:NAS 定时) + +**直接接通**:一键部署已在 NAS 上添加 cron,每 **30 分钟** 执行一次「拉取 GitHub → 推送到存客宝 Gitea」,所有项目显示在 Gitea 界面,文件结构与 GitHub 一致。 + +- 定时:`*/30 * * * *` 执行 `/volume1/docker/gitea/sync_github_to_gitea.sh` +- 日志:`/volume1/docker/gitea/sync.log` +- 查看:`ssh fnvtk@192.168.1.201 tail -f /volume1/docker/gitea/sync.log` +- **组织**:仓库均在用户 `fnvtk` 下;若需按组织分类,可在 Gitea「探索」→「创建组织」后,在仓库设置中转移至对应组织。 + +--- + +## 六、双向同步说明 + +- **主向**:**GitHub → Gitea** 已由上述脚本 + 定时/Actions 覆盖,保证 GitHub 一有更新就推到 Gitea。 +- **反向**:**Gitea → GitHub** 仅在部分仓库需要时再开: + - **方式一**:在 Gitea 仓库设置 → Web 钩子 → 添加 “Gitea” 或 “HTTP” 钩子,指向自建服务:该服务在收到 push 后执行 `git push` 到对应 GitHub 仓库。需自行处理冲突与权限。 + - **方式二**:在 NAS 或本机对「在 Gitea 上也会改」的仓库,配置双 remote(origin=Gitea、github=GitHub),提交后先 push Gitea 再 `git push github main`,或写小脚本在 push Gitea 后自动 push GitHub。 + +建议:大部分仓库仅做 **GitHub → Gitea** 单向镜像;需要双向的仓库单独配置并约定「以谁为主、冲突如何解决」。 + +--- + +## 七、相关文档与脚本 + +| 文档/脚本 | 说明 | +|:----------|:-----| +| `references/CKB_NAS_Gitea_类GitHub访问.md` | Gitea 部署与访问 | +| `scripts/sync_github_to_gitea.sh` | 全仓/单仓同步(固定推送到存客宝 NAS Gitea) | +| `scripts/deploy_github_to_gitea_on_nas.sh` | 一键部署到 NAS,从账号索引读 Token,接通 GitHub ↔ Gitea | + +--- + +*版本:v1.0 | 2026-02* diff --git a/01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/deploy_github_to_gitea_on_nas.sh b/01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/deploy_github_to_gitea_on_nas.sh new file mode 100644 index 00000000..cdc92c72 --- /dev/null +++ b/01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/deploy_github_to_gitea_on_nas.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# 一键部署:GitHub ↔ 存客宝 NAS Gitea 直接接通。从账号索引读 Token,把同步脚本和定时任务部署到 NAS。 +# 在 卡若AI 根目录执行:bash "01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/deploy_github_to_gitea_on_nas.sh" +# 或传入账号索引路径:bash deploy_github_to_gitea_on_nas.sh /path/to/00_账号与API索引.md + +set -e +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +# 卡若AI 根目录(脚本在 01_卡资/.../scripts/ 下) +ROOT="${ROOT:-$(cd "$SCRIPT_DIR/../../../../.." && pwd)}" +INDEX="${1:-$ROOT/_共享模块/工作台/00_账号与API索引.md}" +NAS_USER="${NAS_USER:-fnvtk}" +NAS_HOST="${NAS_HOST:-192.168.1.201}" +NAS_DIR="/volume1/docker/gitea" +SSH_OPTS="-o ConnectTimeout=10 -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc -o StrictHostKeyChecking=no" +NAS="${NAS_USER}@${NAS_HOST}" + +echo "→ 从账号索引读取 Token: $INDEX" +[ ! -f "$INDEX" ] && { echo "错误: 未找到 $INDEX"; exit 1; } +GITHUB_TOKEN=$(grep -o 'ghp_[A-Za-z0-9]*' "$INDEX" | head -1) +GITEA_TOKEN=$(sed -n '/### Gitea(CKB NAS/,/^###/p' "$INDEX" | grep "密码" | sed -n 's/.*`\([^`]*\)`.*/\1/p' | head -1) +[ -z "$GITHUB_TOKEN" ] && { echo "错误: 未在索引中找到 GitHub Token (ghp_...)"; exit 1; } +[ -z "$GITEA_TOKEN" ] && GITEA_TOKEN="Zhiqun1984" +echo " 已读取 GITHUB_TOKEN / GITEA_TOKEN" + +echo "→ 在 NAS 上创建 $NAS_DIR 并写入 sync_tokens.env" +TMP_ENV=$(mktemp) +trap "rm -f $TMP_ENV" EXIT +echo "GITHUB_TOKEN=$GITHUB_TOKEN" > "$TMP_ENV" +echo "GITEA_TOKEN=$GITEA_TOKEN" >> "$TMP_ENV" +echo "GITEA_USER=fnvtk" >> "$TMP_ENV" +ssh $SSH_OPTS "$NAS" "mkdir -p $NAS_DIR" +scp $SSH_OPTS "$TMP_ENV" "$NAS:$NAS_DIR/sync_tokens.env" + +echo "→ 上传同步脚本 sync_github_to_gitea.sh" +scp $SSH_OPTS "$SCRIPT_DIR/sync_github_to_gitea.sh" "$NAS:$NAS_DIR/sync_github_to_gitea.sh" +ssh $SSH_OPTS "$NAS" "chmod +x $NAS_DIR/sync_github_to_gitea.sh" + +echo "→ 添加定时任务(每 30 分钟拉取 GitHub 并推送到存客宝 Gitea,保持界面与结构同步)" +CRON_LINE="*/30 * * * * /bin/bash $NAS_DIR/sync_github_to_gitea.sh >> $NAS_DIR/sync.log 2>&1" +ssh $SSH_OPTS "$NAS" "(crontab -l 2>/dev/null | grep -v sync_github_to_gitea; echo \"$CRON_LINE\") | crontab -" || true + +echo "→ 立即执行一次同步" +ssh $SSH_OPTS "$NAS" "/bin/bash $NAS_DIR/sync_github_to_gitea.sh" || true + +echo "" +echo "✅ 已接通:GitHub 有更新会自动拉取并推送到存客宝 NAS Gitea($NAS_DIR),无需再指定。" +echo " 日志: ssh $NAS tail -f $NAS_DIR/sync.log" +echo " 手动执行: ssh $NAS $NAS_DIR/sync_github_to_gitea.sh" diff --git a/01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh b/01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh new file mode 100644 index 00000000..b0de4f38 --- /dev/null +++ b/01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh @@ -0,0 +1,115 @@ +#!/usr/bin/env bash +# GitHub → 存客宝 NAS Gitea 直接接通:从 GitHub 拉取新内容并推送到 NAS Gitea,无需指定 Gitea(固定为存客宝)。 +# 固定目标:存客宝 NAS Gitea = http://open.quwanzhi.com:3000,用户 fnvtk。 +# 在 NAS 上全自动:从同目录 sync_tokens.env 读 Token。用法:bash sync_github_to_gitea.sh [--repo 仓库名] +# 依赖:curl, git。维护:金仓 + +set -e +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +WORK_DIR="${SYNC_WORK_DIR:-/tmp/github_gitea_sync}" +GITHUB_USER="${GITHUB_USER:-fnvtk}" +# 固定存客宝 NAS Gitea,不开放覆盖 +GITEA_BASE="http://open.quwanzhi.com:3000" +GITEA_USER="fnvtk" + +# 自动加载 Token:先读同目录 sync_tokens.env,再读环境变量 +if [ -f "${SCRIPT_DIR}/sync_tokens.env" ]; then + set -a + # shellcheck source=/dev/null + . "${SCRIPT_DIR}/sync_tokens.env" + set +a +fi +GITHUB_TOKEN="${GITHUB_TOKEN:-}" +GITEA_TOKEN="${GITEA_TOKEN:-}" + +usage() { + echo "用法: $0 [--repo REPO_NAME]" + echo " 无参数:同步 GitHub 上 ${GITHUB_USER} 的所有仓库到 Gitea" + echo " --repo REPO_NAME:只同步指定仓库" + echo "Token 来源: 同目录 sync_tokens.env,或环境变量 GITHUB_TOKEN / GITEA_TOKEN" + exit 1 +} + +SINGLE_REPO="" +while [ $# -gt 0 ]; do + case "$1" in + --repo) SINGLE_REPO="$2"; shift 2 ;; + -h|--help) usage ;; + *) echo "未知参数: $1"; usage ;; + esac +done + +if [ -z "$GITEA_TOKEN" ]; then + echo "错误: 未设置 GITEA_TOKEN。请在 ${SCRIPT_DIR}/sync_tokens.env 或环境变量中配置(可用 Gitea 登录密码)" + exit 1 +fi + +# 列出要同步的仓库名(不依赖 jq,兼容群晖) +get_repos() { + if [ -n "$SINGLE_REPO" ]; then + echo "$SINGLE_REPO" + return + fi + if [ -z "$GITHUB_TOKEN" ]; then + echo "错误: 全量同步需要 GITHUB_TOKEN,请在 sync_tokens.env 或环境变量中配置" + exit 1 + fi + local json + json=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \ + "https://api.github.com/users/${GITHUB_USER}/repos?per_page=200") + echo "$json" | grep -o '"name"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*"name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/' +} + +# 在 Gitea 创建仓库(若不存在)。GITEA_TOKEN 可为登录密码(Basic Auth) +gitea_create_repo() { + local repo_name="$1" + local exists + exists=$(curl -s -o /dev/null -w "%{http_code}" -u "${GITEA_USER}:${GITEA_TOKEN}" \ + "${GITEA_BASE}/api/v1/repos/${GITEA_USER}/${repo_name}" 2>/dev/null) || true + if [ "$exists" = "200" ]; then + return 0 + fi + echo " 在 Gitea 创建仓库: ${repo_name}" + curl -s -X POST -u "${GITEA_USER}:${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"name\":\"${repo_name}\",\"private\":false}" \ + "${GITEA_BASE}/api/v1/user/repos" >/dev/null || true +} + +# 单个仓库:从 GitHub mirror 拉取,推送到 Gitea +sync_one() { + local repo_name="$1" + local gh_url="https://github.com/${GITHUB_USER}/${repo_name}.git" + if [ -n "$GITHUB_TOKEN" ]; then + gh_url="https://${GITHUB_TOKEN}@github.com/${GITHUB_USER}/${repo_name}.git" + fi + # HTTP 推送格式: http://用户:令牌@主机/路径 + local base_no_slash="${GITEA_BASE%/}" + local gitea_url="${base_no_slash/https:\/\//https:\/\/${GITEA_USER}:${GITEA_TOKEN}@}" + gitea_url="${gitea_url/http:\/\//http:\/\/${GITEA_USER}:${GITEA_TOKEN}@}" + gitea_url="${gitea_url}/${GITEA_USER}/${repo_name}.git" + + echo "同步: ${repo_name}" + gitea_create_repo "$repo_name" + + mkdir -p "$WORK_DIR" + cd "$WORK_DIR" + if [ -d "${repo_name}.git" ]; then + cd "${repo_name}.git" + git fetch --all --prune + git fetch --tags --prune + else + git clone --mirror "$gh_url" "${repo_name}.git" + cd "${repo_name}.git" + fi + git push --mirror "$gitea_url" || { echo " 警告: ${repo_name} 推送失败"; return 1; } + echo " 完成: ${repo_name}" +} + +mkdir -p "$WORK_DIR" +while read -r repo_name; do + [ -z "$repo_name" ] && continue + sync_one "$repo_name" || true +done < <(get_repos) + +echo "全部同步完成。Gitea: ${GITEA_BASE}/${GITEA_USER}" diff --git a/_共享模块/references/Gitea推送_卡若AI调用手册.md b/_共享模块/references/Gitea推送_卡若AI调用手册.md index 25a685e1..0e8b81b3 100644 --- a/_共享模块/references/Gitea推送_卡若AI调用手册.md +++ b/_共享模块/references/Gitea推送_卡若AI调用手册.md @@ -1,7 +1,16 @@ # Gitea 推送 — 卡若AI 调用手册 -> 凭证与接口记录,下次调用直接读本文件 + 00_账号与API索引 § Gitea -> 路径:`_共享模块/references/Gitea推送_卡若AI调用手册.md` +> 凭证与接口记录,下次调用直接读**Gitea管理 Skill** + 本文件。 +> **Skill 路径**:`01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md` +> **本文件路径**:`_共享模块/references/Gitea推送_卡若AI调用手册.md` + +--- + +## ⚠️ 强制规则(必须遵守) + +1. **新建仓库**:必须通过 Gitea API 或 Web 创建,**禁止** SSH 手动 `mkdir+git init --bare`,否则不会显示在 Gitea 界面 +2. **推送方式**:统一用 **HTTPS**(账号密码),不用 SSH +3. **HTTPS 访问**:`http://open.quwanzhi.com:3000/fnvtk/{仓库名}` 可直接打开 --- @@ -12,52 +21,49 @@ | 地址 | http://open.quwanzhi.com:3000 | | 账号 | fnvtk | | 密码 | Zhiqun1984 | -| SSH 端口 | 22201 | +| HTTPS 克隆/推送 | `http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{仓库名}.git` | --- -## 二、推送方式 +## 二、推送方式(HTTPS 优先) -### 2.1 SSH 推送(推荐,无需 token) - -```bash -# 远程 URL 格式 -ssh://fnvtk@open.quwanzhi.com:22201/volume1/git/github/fnvtk/{仓库名}.git - -# 推送命令(需 sshpass 或 SSH 密钥) -GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes256-cbc -p 22201" \ -sshpass -p 'Zhiqun1984' git push gitea main -``` - -### 2.2 HTTP 推送(账号密码嵌入 URL) +### 2.1 日常推送(已有仓库) ```bash git remote add gitea "http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{仓库名}.git" git push gitea main ``` -> ⚠️ Gitea 默认禁用「推送即创建」,新建仓库需先 SSH 到 NAS 手动创建 bare 仓库。 - -### 2.3 新建仓库(SSH 到 NAS) +### 2.2 新建仓库(必须用 API,才能显示在 Gitea 界面) ```bash -sshpass -p 'Zhiqun1984' ssh -o StrictHostKeyChecking=no -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes256-cbc -p 22201 fnvtk@open.quwanzhi.com \ - "mkdir -p /volume1/git/github/fnvtk/新仓库名.git && cd /volume1/git/github/fnvtk/新仓库名.git && git init --bare && echo 'ref: refs/heads/main' > HEAD" +# 用 Basic Auth 创建仓库(fnvtk:Zhiqun1984) +curl -u "fnvtk:Zhiqun1984" -X POST "http://open.quwanzhi.com:3000/api/v1/user/repos" \ + -H "Content-Type: application/json" \ + -d '{"name":"仓库名","description":"描述","private":false}' + +# 然后添加 remote 并推送 +git remote add gitea "http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/仓库名.git" +git push -u gitea main ``` +> 禁止用 SSH 手动创建 bare 仓库,否则 Gitea 数据库无记录,界面不显示。 + --- ## 三、已配置仓库 -| 仓库 | 路径 | 远程名 | -|------|------|--------| -| 卡若AI | /Users/karuo/Documents/个人/卡若AI | gitea | -| 分布式算力矩阵 | /Users/karuo/Documents/1、金:项目/3、自营项目/分布式算力矩阵 | gitea | +| 仓库 | 路径 | Gitea URL | 远程名 | +|------|------|-----------|--------| +| 卡若AI | /Users/karuo/Documents/个人/卡若AI | http://open.quwanzhi.com:3000/fnvtk/karuo-ai | gitea | +| 分布式算力矩阵 | /Users/karuo/Documents/1、金:项目/3、自营项目/分布式算力矩阵 | http://open.quwanzhi.com:3000/fnvtk/suanli-juzhen | gitea | --- ## 四、卡若AI 调用流程 -1. 读本文件 + `00_账号与API索引` § Gitea -2. 取凭证:fnvtk / Zhiqun1984 -3. 推送:`sshpass -p 'Zhiqun1984' git push gitea main`(或对应 remote 名) +1. **读 Gitea管理 Skill**:`01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md` +2. 读本文件 + `00_账号与API索引` § Gitea +3. 取凭证:fnvtk / Zhiqun1984 +4. **新建仓库**:用 API `curl -u fnvtk:Zhiqun1984` 创建 +5. **推送**:`git push gitea main`(remote 用 HTTPS URL) diff --git a/_共享模块/skill_router/SKILL.md b/_共享模块/skill_router/SKILL.md index 03f93c19..02b81274 100644 --- a/_共享模块/skill_router/SKILL.md +++ b/_共享模块/skill_router/SKILL.md @@ -59,10 +59,10 @@ updated: "2026-01-31" |:---|:---|:---| | **金剑** | 服务器+监控 | 服务器管理、系统监控 | | **金盾** | 数据+安全+部署 | 数据库管理、存客宝、微信管理、远程环境一键部署 | -| **金仓** | 存储+备份 | 群晖NAS管理、磁盘清理、容灾备份、照片分类 | +| **金仓** | 存储+备份 | 群晖NAS管理、Gitea管理、磁盘清理、容灾备份、照片分类 | | **金链** | 设备+网络 | iPhone管理、局域网控制、iCloud管理 | -### Skills 明细(13个) +### Skills 明细(14个) | Skill | 触发词 | SKILL.md 路径 | |:---|:---|:---| @@ -73,6 +73,7 @@ updated: "2026-01-31" | 微信管理 | 微信分析、RFM、聊天记录 | `01_卡资(金)/_团队成员/金盾/微信管理/SKILL.md` | | 远程环境一键部署 | 远程部署、装Clash、装Cursor | `01_卡资(金)/_团队成员/金盾/远程环境一键部署/SKILL.md` | | 群晖NAS管理 | NAS、群晖、Docker | `01_卡资(金)/_团队成员/金仓/群晖NAS管理/SKILL.md` | +| Gitea管理 | Gitea、推送到Gitea、创建仓库、Git推送CKB、界面不显示 | `01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md` | | 磁盘清理 | 清理磁盘、释放空间 | `01_卡资(金)/_团队成员/金仓/磁盘清理/SKILL.md` | | 容灾备份 | 备份、git stash、灾备 | `01_卡资(金)/_团队成员/金仓/容灾备份/SKILL.md` | | 照片分类 | 照片整理、相册分类 | `01_卡资(金)/_团队成员/金仓/照片分类/SKILL.md` | @@ -235,7 +236,7 @@ from _共享模块.local_llm import summarize, classify, generate_questions | 角色 | 成员数 | Skills数 | |:---|:---|:---| -| 卡资(金) | 4 | 13 | +| 卡资(金) | 4 | 14 | | 卡人(水) | 3 | 9 | | 卡木(木) | 3 | 5 | | 卡火(火) | 4 | 6 | diff --git a/_共享模块/工作台/00_账号与API索引.md b/_共享模块/工作台/00_账号与API索引.md index a8319463..5c258450 100644 --- a/_共享模块/工作台/00_账号与API索引.md +++ b/_共享模块/工作台/00_账号与API索引.md @@ -68,9 +68,10 @@ | 地址 | http://open.quwanzhi.com:3000 | | 账号 | `fnvtk` | | 密码 | `Zhiqun1984` | -| SSH 推送 | `ssh://fnvtk@open.quwanzhi.com:22201/volume1/git/github/fnvtk/{repo}.git` | -| HTTP 推送 | `http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{repo}.git` | -| 说明 | 卡若AI 下次调用直接读本表推送;新建仓库需 SSH 到 NAS 执行 `mkdir -p /volume1/git/github/fnvtk/xxx.git && cd xxx.git && git init --bare` | +| **HTTPS 推送** | `http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{repo}.git` | +| HTTPS 访问 | http://open.quwanzhi.com:3000/fnvtk/{repo} | +| 新建仓库 API | `curl -u fnvtk:Zhiqun1984 -X POST http://open.quwanzhi.com:3000/api/v1/user/repos -H "Content-Type: application/json" -d '{"name":"xxx","description":"","private":false}'` | +| 说明 | 必须用 API 或 Web 创建仓库才能显示在界面;禁止 SSH mkdir+init;推送统一用 HTTPS | ---