config.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import os
  2. from dataclasses import dataclass, field
  3. from typing import Optional, List
  4. @dataclass
  5. class PiplineConfig:
  6. """封装流水线所有配置参数"""
  7. # gerrit配置
  8. gerrit_name: str = "jenkins"
  9. gerrit_host: str = "10.2.90.253"
  10. gerrit_port: int = 29418
  11. gerrit_changes: List[str] = field(default_factory=list)
  12. gerrit_flag: bool = False
  13. # 构建基础配置
  14. workspace: str = ""
  15. soc_project: str = ""
  16. soc_branch: str = ""
  17. mcu_release_version: str = ""
  18. soc_release_version: str = ""
  19. profile_mode: str = "Debug"
  20. # FTP配置
  21. ftp_root: str = ""
  22. deploy_image_local_dir: str = ""
  23. ftp_host: str = os.environ.get('ftpAddr', '10.2.90.252')
  24. ftp_port: int = int(os.environ.get('ftpPort', '21'))
  25. ftp_user: str = os.environ.get('ftpUser', 'ftpuser')
  26. ftp_password: str = os.environ.get('ftpPasword', '123456')
  27. # 分支
  28. repo_branch: str = ""
  29. auto_commit_branch: str = "AD26IDV01-dev"
  30. # 功能开关
  31. upgrade_package_bootloader: bool = False
  32. upgrade_package_camera: bool = False
  33. upgrade_package_recovery: bool = False
  34. factory_emmc_img_enable: bool = False
  35. secure_enable: bool = False
  36. # 构建快照
  37. snapshot: str = "default"
  38. build_user: str = ""
  39. # 自动提交控制
  40. auto_commit_server: bool = True
  41. # 二进制仓库列表
  42. binary_repos: List[str] = field(default_factory=lambda: [])
  43. # 路径
  44. mcu_dir: str = ""
  45. soc_dir: str = ""
  46. # manifest 仓库 URL
  47. mcu_manifest_url: str = ""
  48. soc_manifest_url: str = ""
  49. @classmethod
  50. def from_env(cls) -> 'PiplineConfig':
  51. """从环境变量中加载配置, 并处理shell脚本中的逻辑"""
  52. cfg = cls()
  53. # 基础路径
  54. cfg.workspace = os.environ.get("WORKSPACE", "")
  55. cfg.soc_project = os.environ.get('SOC_PROJECT', '')
  56. cfg.soc_branch = os.environ.get('SOC_BRANCH', '')
  57. cfg.mcu_release_version = os.environ.get('mcu_release_version', '')
  58. cfg.soc_release_version = os.environ.get('soc_release_version', '')
  59. cfg.build_user = os.environ.get('BUILD_USER', '')
  60. cfg.mcu_dir = os.path.join(cfg.workspace, 'mcu')
  61. cfg.soc_dir = os.path.join(cfg.workspace, 'soc')
  62. cfg.mcu_manifest_url = f"ssh://{cfg.gerrit_host}/INVO/MCU/HR/manifest"
  63. cfg.soc_manifest_url = f"ssh://{cfg.gerrit_host}/INVO/SOC/HR/manifest"
  64. # ---- 分支处理 ----
  65. cfg.repo_branch = cfg.soc_branch # Shell: REPO_BRANCH="$SOC_BRANCH"
  66. # ---- FTP 路径 ----
  67. cfg.ftp_root = f"HORIZON/J6B/{cfg.soc_project}" if cfg.soc_project else ""
  68. cfg.deploy_image_local_dir = f"{cfg.workspace}/{cfg.ftp_root}" if cfg.ftp_root else ""
  69. # ---- 二进制仓库目录 ----
  70. cfg.binary_repos = [f"{cfg.workspace}/soc/hbbin/mcubin/"]
  71. # ---- Gerrit ----
  72. cfg.gerrit_changes = os.environ.get('GERRIT_CHANGES', '')
  73. cfg.gerrit_flag = bool(cfg.gerrit_changes.strip()) if cfg.gerrit_changes else False
  74. # ---- 快照 ----
  75. cfg.snapshot = os.environ.get('SNAPSHOT', 'default')
  76. # ---- 功能开关 (字符串 -> 布尔) ----
  77. cfg.upgrade_package_bootloader = os.environ.get('upgrade_package_bootloader', 'false').lower() == 'true'
  78. cfg.upgrade_package_camera = os.environ.get('upgrade_package_camera', 'false').lower() == 'true'
  79. cfg.upgrade_package_recovery = os.environ.get('upgrade_package_recovery', 'false').lower() == 'true'
  80. cfg.factory_emmc_img_enable = os.environ.get('factory_emmc_img_enable', 'false').lower() == 'true'
  81. cfg.secure_enable = os.environ.get('secure_enable', 'false').lower() == 'true'
  82. # ---- 触发方式导致的默认值覆盖 ----
  83. # 原脚本:如果 BUILD_USER 为空(定时触发),则关闭部分功能
  84. if not cfg.build_user.strip():
  85. cfg.gerrit_changes = ""
  86. cfg.gerrit_flag = False
  87. cfg.upgrade_package_recovery = False
  88. cfg.upgrade_package_bootloader = False
  89. cfg.secure_enable = False
  90. cfg.factory_emmc_img_enable = False
  91. # ---- 自动提交策略 ----
  92. # Shell: AUTO_COMMIT_SERVER=1 仅当 GERRIT_FLAG=0
  93. cfg.auto_commit_server = not cfg.gerrit_flag
  94. # ---- Profile mode ----
  95. cfg.profile_mode = os.environ.get('PROFILE_MODE', 'Debug') # 原脚本有判断,但主流程未显式设置
  96. # ---- 额外常量 ----
  97. cfg.threads_num = 12 # Shell 中有 THREADS_NUM=12,但未使用,保留
  98. return cfg