diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml new file mode 100755 index 0000000..8de909c --- /dev/null +++ b/.github/workflows/sync.yml @@ -0,0 +1,26 @@ +name: Synch Gitee To Github +on: + workflow_call: + workflow_dispatch: + schedule: + - cron: "0 * * * *" + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Config + run: | + sudo apt update + sudo apt install git python3-requests -y + + - name: Push + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUBUSER: ${{ secrets.GITHUBUSER }} + run: | + cd sync-gitee-to-github + python3 sync.py $GITHUBUSER $TOKEN + diff --git a/sync-gitee-to-github/sync.py b/sync-gitee-to-github/sync.py new file mode 100644 index 0000000..ade4d0a --- /dev/null +++ b/sync-gitee-to-github/sync.py @@ -0,0 +1,58 @@ +#!/bin/bash +import os +import sys +import requests + +programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string +dataHeaders = { + "accept": "application/json" +} +pullUrl = "https://gitee.com/GXDE-OS/" +pushUrl = [ + "https://@USER@:@PASS@@github.com/GXDE-OS/" +] + +if (len(sys.argv) < 1 + len(pushUrl) * 2): + print(f"请输入用于推送的账户和密码(需要 {len(pushUrl)} 组以推送不同的平台,提供顺序如下)") + for i in pushUrl: + print(f" {i}") + exit(1) + +# 读取参数 +userName = [] +password = [] +for i in range(1, len(sys.argv)): + # 输入账户 + if (i % 2 == 1): + userName.append(sys.argv[i]) + # 输入密码 + if (i % 2 == 0): + password.append(sys.argv[i]) + + + +data = requests.get("https://github.com/orgs/GXDE-OS/repos_list?q=&page=1", headers=dataHeaders).json() +# 获取页数 +page = int(data["pageCount"]) +repoList = [] +# 获取仓库列表 +for i in range(1, page + 1): + pageData = requests.get(f"https://github.com/orgs/GXDE-OS/repos_list?q=&page={i}", headers=dataHeaders).json() + repositories = pageData["repositories"] + for j in repositories: + repoList.append(j["name"]) +for i in repoList: + # 拉取代码进行同步 + if (not os.path.exists(f"{programPath}/git-clone")): + os.makedirs(f"{programPath}/git-clone") + print(f"======================> {pullUrl}/{i}") + os.system(f"cd '{programPath}/git-clone' ; git clone '{pullUrl}/{i}'") + # 推送 + for j in range(len(pushUrl)): + # git remote set-url origin + gitUrl = pushUrl[j].replace("@USER@", userName[j]).replace("@PASS@", password[j]) + "/" + i + os.system(f"cd '{programPath}/git-clone/{i}' ; git remote set-url origin '{gitUrl}'") + os.system(f"cd '{programPath}/git-clone/{i}' ; git push origin +'*'") + # 移除临时文件 + os.system(f"rm -rf '{programPath}/git-clone/{i}'") +