[action] add multiprocess and add include_paths
This commit is contained in:
parent
1726a174de
commit
93314e3392
|
@ -19,6 +19,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import shutil
|
import shutil
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
|
from multiprocessing import Process
|
||||||
|
|
||||||
#help说明
|
#help说明
|
||||||
def usage():
|
def usage():
|
||||||
|
@ -26,6 +27,12 @@ def usage():
|
||||||
print('%s clean -- clean all bsp' % os.path.basename(sys.argv[0]))
|
print('%s clean -- clean all bsp' % os.path.basename(sys.argv[0]))
|
||||||
print('%s update -- update all prject files' % os.path.basename(sys.argv[0]))
|
print('%s update -- update all prject files' % os.path.basename(sys.argv[0]))
|
||||||
|
|
||||||
|
def add_summary(text):
|
||||||
|
"""
|
||||||
|
add summary to github action.
|
||||||
|
"""
|
||||||
|
os.system(f'echo "{text}" >> $GITHUB_STEP_SUMMARY ;')
|
||||||
|
|
||||||
def run_cmd(cmd, output_info=True):
|
def run_cmd(cmd, output_info=True):
|
||||||
"""
|
"""
|
||||||
这个函数用来执行命令
|
这个函数用来执行命令
|
||||||
|
@ -102,6 +109,8 @@ def build_bsp(bsp, scons_args=''):
|
||||||
file.write(f'===================={bsp}====================\n')
|
file.write(f'===================={bsp}====================\n')
|
||||||
for line in result_log:
|
for line in result_log:
|
||||||
file.write(line)
|
file.write(line)
|
||||||
|
print(f"::error::build {bsp} failed")
|
||||||
|
add_summary(f"- ❌ build {bsp} failed.")
|
||||||
success = False
|
success = False
|
||||||
else:
|
else:
|
||||||
# 如果没有Kconfig直接执行scons
|
# 如果没有Kconfig直接执行scons
|
||||||
|
@ -166,9 +175,14 @@ def update_all_project_files(sconstruct_paths):
|
||||||
sys.exit(-1)
|
sys.exit(-1)
|
||||||
|
|
||||||
#找到带有Sconstruct的文件夹
|
#找到带有Sconstruct的文件夹
|
||||||
def find_sconstruct_paths(project_dir, exclude_paths):
|
def find_sconstruct_paths(project_dir, exclude_paths, include_paths):
|
||||||
sconstruct_paths = []
|
sconstruct_paths = []
|
||||||
for root, dirs, files in os.walk(project_dir):
|
for root, dirs, files in os.walk(project_dir):
|
||||||
|
if include_paths:
|
||||||
|
if any(include_path in root for include_path in include_paths) and all(exclude_path not in root for exclude_path in exclude_paths):
|
||||||
|
if 'SConstruct' in files:
|
||||||
|
sconstruct_paths.append(root)
|
||||||
|
else:
|
||||||
if all(exclude_path not in root for exclude_path in exclude_paths):
|
if all(exclude_path not in root for exclude_path in exclude_paths):
|
||||||
if 'SConstruct' in files:
|
if 'SConstruct' in files:
|
||||||
sconstruct_paths.append(root)
|
sconstruct_paths.append(root)
|
||||||
|
@ -195,12 +209,11 @@ bsp_root = os.path.join(rtt_root, 'bsp')
|
||||||
|
|
||||||
#需要排除的文件夹名字
|
#需要排除的文件夹名字
|
||||||
exclude_paths = ['templates', 'doc', 'libraries', 'Libraries', 'template']
|
exclude_paths = ['templates', 'doc', 'libraries', 'Libraries', 'template']
|
||||||
sconstruct_paths = find_sconstruct_paths(bsp_root, exclude_paths)
|
include_paths = []#['nrf5x','qemu-vexpress-a9']
|
||||||
|
|
||||||
|
sconstruct_paths = find_sconstruct_paths(bsp_root, exclude_paths,include_paths)
|
||||||
|
|
||||||
# get command options
|
# get command options
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
command = ''
|
command = ''
|
||||||
command_clean_flag = False
|
command_clean_flag = False
|
||||||
|
|
||||||
|
@ -239,7 +252,8 @@ else:
|
||||||
print("未找到包含 'SConstruct' 文件的路径")
|
print("未找到包含 'SConstruct' 文件的路径")
|
||||||
|
|
||||||
#遍历所有的sconstruct_paths 路径中的文件夹
|
#遍历所有的sconstruct_paths 路径中的文件夹
|
||||||
for project_dir in sconstruct_paths:
|
|
||||||
|
def bsp_scons_worker(project_dir):
|
||||||
print('=========project_dir===='+ project_dir)
|
print('=========project_dir===='+ project_dir)
|
||||||
#判断有没有SConstruct 文件,
|
#判断有没有SConstruct 文件,
|
||||||
if os.path.isfile(os.path.join(project_dir, 'SConstruct')):
|
if os.path.isfile(os.path.join(project_dir, 'SConstruct')):
|
||||||
|
@ -256,8 +270,6 @@ for project_dir in sconstruct_paths:
|
||||||
print('==project_dir=======new_project_dir='+ new_project_dir)
|
print('==project_dir=======new_project_dir='+ new_project_dir)
|
||||||
#开始编译bsp
|
#开始编译bsp
|
||||||
build_bsp(new_project_dir)
|
build_bsp(new_project_dir)
|
||||||
if command_clean_flag:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# 发现有keil相关的,执行keil相关的命令,先检查一下UV4.exe命令有没有,然后执行UV4.exe
|
# 发现有keil相关的,执行keil相关的命令,先检查一下UV4.exe命令有没有,然后执行UV4.exe
|
||||||
if check_command_availability('UV4.exe') :
|
if check_command_availability('UV4.exe') :
|
||||||
|
@ -294,6 +306,16 @@ for project_dir in sconstruct_paths:
|
||||||
os.chdir(f'{rtt_root}')
|
os.chdir(f'{rtt_root}')
|
||||||
else:
|
else:
|
||||||
print('iarbuild is not available, please check your iar installation')
|
print('iarbuild is not available, please check your iar installation')
|
||||||
|
|
||||||
|
processes = []
|
||||||
|
for project_dir in sconstruct_paths:
|
||||||
|
p = Process(target=bsp_scons_worker, args=(project_dir,))
|
||||||
|
p.start()
|
||||||
|
processes.append(p)
|
||||||
|
|
||||||
|
for p in processes:
|
||||||
|
p.join() # 等待所有进程完成
|
||||||
|
|
||||||
print('finished!')
|
print('finished!')
|
||||||
|
|
||||||
# 将failed_bsp_list.txt的内容追加到failed_bsp.log文件中
|
# 将failed_bsp_list.txt的内容追加到failed_bsp.log文件中
|
||||||
|
|
Loading…
Reference in New Issue