From 0b7323897f3e6e2b15850b7f07b32e87c3b96e5d Mon Sep 17 00:00:00 2001 From: songtianlun Date: Fri, 3 Jan 2025 14:06:28 +0800 Subject: [PATCH] feat: add colocation agent helm chart and sync scripts - Introduced a new Helm chart for the colocation agent - Added scripts for syncing images with Skopeo and downloading Helm charts - Created necessary configuration files and templates for Kubernetes deployment - Removed obsolete files related to previous implementations This commit enhances the deployment capabilities of the colocation agent and provides tools for managing Helm charts and Docker images effectively. --- mirror.sh | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 mirror.sh diff --git a/mirror.sh b/mirror.sh new file mode 100644 index 0000000..6ba3224 --- /dev/null +++ b/mirror.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# 配置信息 +GITHUB_USER="your-github-username" +GITHUB_TOKEN="your-github-token" # 如果需要访问私有仓库 +GITEA_URL="https://your-gitea-instance" +GITEA_USER="your-gitea-username" +GITEA_TOKEN="your-gitea-token" + +# 工作目录 +WORK_DIR="/tmp/git-mirror" + +# 错误处理函数 +error_exit() { + echo -e "${RED}错误: $1${NC}" >&2 + exit 1 +} + +# 检查必要的命令是否存在 +command -v git >/dev/null 2>&1 || error_exit "需要安装 git" +command -v curl >/dev/null 2>&1 || error_exit "需要安装 curl" +command -v jq >/dev/null 2>&1 || error_exit "需要安装 jq" + +# 创建工作目录 +mkdir -p "$WORK_DIR" || error_exit "无法创建工作目录" +cd "$WORK_DIR" || error_exit "无法进入工作目录" + +# 获取所有 GitHub 仓库列表 +echo -e "${YELLOW}正在获取 GitHub 仓库列表...${NC}" +if [ -n "$GITHUB_TOKEN" ]; then + repos=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \ + "https://api.github.com/users/$GITHUB_USER/repos?per_page=100" | \ + jq -r '.[].name') +else + repos=$(curl -s "https://api.github.com/users/$GITHUB_USER/repos?per_page=100" | \ + jq -r '.[].name') +fi + +[ -z "$repos" ] && error_exit "无法获取仓库列表" + +# 计数器 +total=$(echo "$repos" | wc -l) +current=0 + +for repo in $repos; do + ((current++)) + echo -e "\n${YELLOW}处理仓库 ($current/$total): $repo${NC}" + + # 检查 Gitea 仓库是否存在 + if curl -s -I -H "Authorization: token $GITEA_TOKEN" \ + "$GITEA_URL/api/v1/repos/$GITEA_USER/$repo" | \ + grep -q "404 Not Found"; then + + echo "在 Gitea 上创建仓库 $repo" + curl -X POST -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"name\":\"$repo\",\"private\":false}" \ + "$GITEA_URL/api/v1/user/repos" || \ + error_exit "无法在 Gitea 上创建仓库 $repo" + fi + + # 如果目录已存在,先删除 + [ -d "$repo" ] && rm -rf "$repo" + + # 克隆 GitHub 仓库 + echo "克隆 GitHub 仓库..." + if [ -n "$GITHUB_TOKEN" ]; then + git clone --mirror "https://$GITHUB_TOKEN@github.com/$GITHUB_USER/$repo.git" "$repo" || \ + error_exit "无法克隆仓库 $repo" + else + git clone --mirror "https://github.com/$GITHUB_USER/$repo.git" "$repo" || \ + error_exit "无法克隆仓库 $repo" + fi + + cd "$repo" || error_exit "无法进入仓库目录 $repo" + + # 推送到 Gitea + echo "推送到 Gitea..." + git push --mirror "https://$GITEA_USER:$GITEA_TOKEN@${GITEA_URL#https://}/$GITEA_USER/$repo.git" || \ + error_exit "无法推送到 Gitea 仓库 $repo" + + cd "$WORK_DIR" || error_exit "无法返回工作目录" + rm -rf "$repo" + + echo -e "${GREEN}成功同步仓库: $repo${NC}" +done + +echo -e "\n${GREEN}所有仓库同步完成!${NC}" + +# 清理工作目录 +cd / && rm -rf "$WORK_DIR" \ No newline at end of file