62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
|
import shutil
|
|||
|
import sys
|
|||
|
import os
|
|||
|
import time
|
|||
|
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
|
|||
|
import core.logger as logger
|
|||
|
from core.behavior_tree import ReleaseFlowAction, ReleaseFlowActionDecorator
|
|||
|
from thirdparty.py_trees.common import Status, Access
|
|||
|
from database import *
|
|||
|
from utils.shell import shell
|
|||
|
log = logger.get_logger()
|
|||
|
|
|||
|
def sync_source(repo_url, xml_path):
|
|||
|
"""
|
|||
|
同步源码
|
|||
|
"""
|
|||
|
# 检查xml文件是否存在
|
|||
|
if not os.path.exists(xml_path):
|
|||
|
log.error(f"XML file {xml_path} does not exist!")
|
|||
|
raise Exception(f"XML file {xml_path} does not exist!")
|
|||
|
|
|||
|
# 检查是否有人修改build目录下的文件
|
|||
|
_, out, _ = shell(f'cd {ReleaseOptions.AlkaidRootPath}/build && git status -s')
|
|||
|
lines = out.strip().split('\n')
|
|||
|
if lines:
|
|||
|
warning_msg = "WARNING!!!! You MODIFY build/* files:\n"
|
|||
|
log.warning(warning_msg + "\n".join(lines))
|
|||
|
|
|||
|
# 复制xml文件到.repo/manifests目录
|
|||
|
shutil.copy(xml_path, f"{ReleaseOptions.AlkaidRootPath}/.repo/manifests")
|
|||
|
|
|||
|
# reset当前环境,根据xml文件重新拉取代码
|
|||
|
shell('repo forall -p -v build -c "git clean -fd && git reset --hard;"')
|
|||
|
shell(f'repo init -u {repo_url} -m {xml_path}')
|
|||
|
shell('repo forall -p -c -v build "repo sync -c --no-tags . ;"')
|
|||
|
|
|||
|
@ReleaseFlowActionDecorator
|
|||
|
class _PhaseEnv_Process(ReleaseFlowAction):
|
|||
|
def setup(self):
|
|||
|
self.process_over = False
|
|||
|
|
|||
|
def process(self):
|
|||
|
self.status = Status.RUNNING
|
|||
|
if self.process_over:
|
|||
|
self.status = Status.SUCCESS
|
|||
|
return self.status
|
|||
|
self.blackboard.register_key(key="test_key")
|
|||
|
self.blackboard.test_key = "test_value"
|
|||
|
# 获取参数
|
|||
|
repo_url = REPO_URL
|
|||
|
xml_path = ReleaseOptions.SnapShotXml
|
|||
|
|
|||
|
log.info(f"Syncing source with repo_url: {repo_url}, xml_path: {xml_path}")
|
|||
|
|
|||
|
sync_source(repo_url, xml_path)
|
|||
|
self.process_over = True
|
|||
|
self.status = Status.SUCCESS
|
|||
|
return self.status
|
|||
|
|
|||
|
def update(self):
|
|||
|
return self.status
|