From 6ac19d9d831cbd37e18605481ef848fa08e6488b Mon Sep 17 00:00:00 2001 From: haltija Date: Thu, 30 Oct 2025 02:58:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?DOCS:=20=E4=B8=BAeur=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E7=9A=84=E4=BD=BF=E7=94=A8=E6=96=87=E6=A1=A3=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=AF=BC=E5=85=A5=E8=84=9A=E6=9C=AC=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ROS-SIG-EUR-package-process.md | 171 ++++++++++++++++++ 1 file changed, 171 insertions(+) diff --git a/docs/source/how-to-contribute/ROS-SIG-EUR-package-process.md b/docs/source/how-to-contribute/ROS-SIG-EUR-package-process.md index 6c81e42..8171f47 100644 --- a/docs/source/how-to-contribute/ROS-SIG-EUR-package-process.md +++ b/docs/source/how-to-contribute/ROS-SIG-EUR-package-process.md @@ -158,6 +158,177 @@ except CoprRequestException as ex: 这个代码是导入一个包的实现,可以自行修改代码里对应的内容,实现批量导入软件包 +### 6.2 从gitee仓库批量创建软件包 + +此脚本为从gitee仓库中导入某个分支的所有包,只需修改下面四个字段,导入成功会提示成功创建x个软件包,x个失败,失败的会返回失败原因; + +导入结束后可选择是否触发构建,输入y可以为所导入的包开始构建; + +```python +REPO_OWNER = "xxx" # 仓库拥有者或组织 +REPO_NAME = "xxx" # 仓库名称 +BRANCH_NAME = "xxx" # 分支名 +PROJECT_NAME = "xxx" # eur 工程名 +``` + +```python +from copr.v3 import Client, CoprRequestException +from copr.v3.proxies import BaseProxy +import requests +import os +import sys + +# monkey patch +def fixed_api_base_url(self): + return os.path.join(self.config["copr_url"], "api_3", "").replace("\\", "/") +BaseProxy.api_base_url = property(fixed_api_base_url) + +REPO_OWNER = "xxx" # 仓库拥有者或组织 +REPO_NAME = "xxx" # 仓库名称 +BRANCH_NAME = "xxx" # 分支名 +PROJECT_NAME = "xxx" # eur 工程名 + +def get_spec_files(repo_owner, repo_name, branch_name): + API_URL = f"https://gitee.com/api/v5/repos/{repo_owner}/{repo_name}/contents/" + spec_files = [] + + def get_directory_contents(path=""): + url = API_URL + path if path else API_URL + try: + response = requests.get(url, params={"ref": branch_name}) + if response.status_code == 200: + for item in response.json(): + if item.get('type') == 'file' and item.get('name', '').endswith('.spec'): + full_path = os.path.join(path, item['name']) if path else item['name'] + spec_files.append({ + 'name': item['name'], + 'path': full_path, + 'spec_name': item['name'].replace('.spec', '') + }) + elif item.get('type') == 'dir': + sub_path = os.path.join(path, item['name']) if path else item['name'] + get_directory_contents(sub_path) + except requests.exceptions.RequestException: + pass + + get_directory_contents() + return spec_files +def create_package_for_spec(client, project_name, repo_owner, repo_name, branch_name, spec_file): + package_name = f"ros-humble-{spec_file['spec_name']}" + + try: + client.project_proxy.get(ownername=client.config["username"], projectname=project_name) + client.package_proxy.add( + ownername=client.config["username"], + projectname=project_name, + packagename=package_name, + source_type="scm", + source_dict={ + "clone_url": f"https://gitee.com/{repo_owner}/{repo_name}.git", + "committish": branch_name, + "subdirectory": os.path.dirname(spec_file['path']) or "", + "spec": spec_file['name'], + "scm_type": "git" + } + ) + return True, None + except CoprRequestException as ex: + return False, str(ex) + + +def rebuild_all(client, project_name, spec_files_to_build): + """ + 触发列表中所有软件包的构建。 + 这才是真正的 "Rebuild All" 逻辑。 + """ + print(f"\n→ 正在为项目 {project_name} 触发 {len(spec_files_to_build)} 个软件包的构建...") + success_builds = 0 + failed_builds = [] + + for spec_file in spec_files_to_build: + package_name = f"ros-humble-{spec_file['spec_name']}" + try: + # 【最终修正点】 + # 我们为列表中的每一个包调用 package_proxy.build() + client.package_proxy.build( + ownername=client.config["username"], + projectname=project_name, + packagename=package_name + ) + print(f" ✓ 已提交 {package_name} 的构建请求") + success_builds += 1 + except CoprRequestException as ex: + # 例如:如果包刚被添加,可能正处于 "importing" 状态,还不能构建 + print(f" ✗ 提交 {package_name} 构建失败: {ex}") + failed_builds.append((package_name, str(ex))) + except Exception as ex: + print(f" ✗ 提交 {package_name} 时发生未知错误: {ex}") + failed_builds.append((package_name, str(ex))) + + # --- 打印构建总结 --- + print(f"\n✓ 成功提交 {success_builds} 个构建请求。") + if failed_builds: + print(f"✗ 失败 {len(failed_builds)} 个:") + for pkg, err in failed_builds: + print(f" - {pkg}: {err}") + + print(" 请稍后在网页上查看构建状态。") + return True +def main(): + try: + client = Client.create_from_config_file("./copr.conf") + print("✓ 成功连接到 EUR 构建平台") + except Exception as e: + print(f"✗ 连接 EUR 构建平台失败: {e}") + return + + spec_files = get_spec_files(REPO_OWNER, REPO_NAME, BRANCH_NAME) + + if not spec_files: + print("✗ 未找到任何 spec 文件") + return + + print(f"✓ 从 {REPO_OWNER}/{REPO_NAME} 仓库,{BRANCH_NAME} 分支检索到 {len(spec_files)} 个 spec 文件") + print("→ 开始创建软件包...") + + success_count = 0 + failed_packages = [] + + for spec_file in spec_files: + success, error = create_package_for_spec(client, PROJECT_NAME, REPO_OWNER, REPO_NAME, BRANCH_NAME, spec_file) + if success: + success_count += 1 + else: + failed_packages.append((f"ros-humble-{spec_file['spec_name']}", error)) + + print(f"\n✓ 成功创建 {success_count} 个软件包", end="") + if failed_packages: + print(f",{len(failed_packages)} 个失败") + for pkg_name, error in failed_packages: + print(f" - {pkg_name}: {error}") + else: + print() + + while True: + response = input("\n是否触发构建? (y/n): ").strip().lower() + if response == 'y': + # 【修改点】 + # 将 spec_files 列表传递给 rebuild_all 函数 + if not spec_files: + print("✗ 没有找到 spec 文件,无法触发构建。") + else: + rebuild_all(client, PROJECT_NAME, spec_files) + break + elif response == 'n': + print("任务结束") + break + else: + print("请输入 y 或 n") + +if __name__ == "__main__": + main() +``` + 更多功能可以参考API文档 - -- Gitee From 6469934fa259285fef2475e510732724a32f9489 Mon Sep 17 00:00:00 2001 From: haltija Date: Thu, 30 Oct 2025 14:46:33 +0800 Subject: [PATCH 2/2] =?UTF-8?q?DOCS:=20=E6=B7=BB=E5=8A=A0=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E6=88=AA=E5=9B=BE=EF=BC=8C=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E5=85=B3=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ROS-SIG-EUR-package-process.md | 11 ++++------- .../how-to-contribute/image/eur/run_script.png | Bin 0 -> 49909 bytes 2 files changed, 4 insertions(+), 7 deletions(-) create mode 100644 docs/source/how-to-contribute/image/eur/run_script.png diff --git a/docs/source/how-to-contribute/ROS-SIG-EUR-package-process.md b/docs/source/how-to-contribute/ROS-SIG-EUR-package-process.md index 8171f47..fa4d4d4 100644 --- a/docs/source/how-to-contribute/ROS-SIG-EUR-package-process.md +++ b/docs/source/how-to-contribute/ROS-SIG-EUR-package-process.md @@ -239,7 +239,6 @@ def create_package_for_spec(client, project_name, repo_owner, repo_name, branch_ def rebuild_all(client, project_name, spec_files_to_build): """ 触发列表中所有软件包的构建。 - 这才是真正的 "Rebuild All" 逻辑。 """ print(f"\n→ 正在为项目 {project_name} 触发 {len(spec_files_to_build)} 个软件包的构建...") success_builds = 0 @@ -248,8 +247,6 @@ def rebuild_all(client, project_name, spec_files_to_build): for spec_file in spec_files_to_build: package_name = f"ros-humble-{spec_file['spec_name']}" try: - # 【最终修正点】 - # 我们为列表中的每一个包调用 package_proxy.build() client.package_proxy.build( ownername=client.config["username"], projectname=project_name, @@ -258,14 +255,12 @@ def rebuild_all(client, project_name, spec_files_to_build): print(f" ✓ 已提交 {package_name} 的构建请求") success_builds += 1 except CoprRequestException as ex: - # 例如:如果包刚被添加,可能正处于 "importing" 状态,还不能构建 print(f" ✗ 提交 {package_name} 构建失败: {ex}") failed_builds.append((package_name, str(ex))) except Exception as ex: print(f" ✗ 提交 {package_name} 时发生未知错误: {ex}") failed_builds.append((package_name, str(ex))) - # --- 打印构建总结 --- print(f"\n✓ 成功提交 {success_builds} 个构建请求。") if failed_builds: print(f"✗ 失败 {len(failed_builds)} 个:") @@ -312,8 +307,6 @@ def main(): while True: response = input("\n是否触发构建? (y/n): ").strip().lower() if response == 'y': - # 【修改点】 - # 将 spec_files 列表传递给 rebuild_all 函数 if not spec_files: print("✗ 没有找到 spec 文件,无法触发构建。") else: @@ -329,6 +322,10 @@ if __name__ == "__main__": main() ``` +运行结果如下,以moveit-resources为例: + +![alt text](image/eur/run_script.png) + 更多功能可以参考API文档 - diff --git a/docs/source/how-to-contribute/image/eur/run_script.png b/docs/source/how-to-contribute/image/eur/run_script.png new file mode 100644 index 0000000000000000000000000000000000000000..6645906a376a6dcedb233b50d1e420e8f8848434 GIT binary patch literal 49909 zcmeFYcTiK`*Z+&6ASz9i-UJk+N|hcJ1Qcl^y( T)t}^b(P(lnAKw-fQR`LJtsn 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 ki9ZwL3_?03R<6RTxp8N~k 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 NY-oNHecd_ozW`{CLv{cF literal 0 HcmV?d00001 -- Gitee