alkaid_release_platform/plugins/baseline/phase_env.py

62 lines
2.1 KiB
Python
Raw Permalink Normal View History

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