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
|