esp-idf/tools/ci/check_examples_cmake_make.py

124 wiersze
3.2 KiB
Python

#!/usr/bin/env python
import json
import os
import pprint
import subprocess
import sys
# =============================================================================
# Service funcs
# =============================================================================
def _build_path(path, *paths):
return str(os.path.normpath(os.path.join(path, *paths)).replace('\\', '/'))
def _unify_paths(path_list):
return [_build_path(p) for p in path_list]
def _exclude_by_pat_list(path_list, ignore_list):
print('- Applying ignore list')
path_list_res = list(path_list)
for ign in ignore_list:
if len(ign.strip()):
for p in path_list:
if p.find(ign) != -1:
try:
path_list_res.remove(p)
except ValueError:
pass
return path_list_res
def _file2linelist(path):
with open(path) as f:
lines = [line.rstrip() for line in f]
return [str(line) for line in lines]
# =============================================================================
# Test funcs
# =============================================================================
def get_idf_path(path, *paths):
IDF_PATH = os.getenv('IDF_PATH')
return _build_path(IDF_PATH, path, *paths)
def _get_apps(target, build_system):
print('- Getting paths of apps')
args = [sys.executable,
get_idf_path('tools/find_apps.py'),
'-p',
get_idf_path('examples'),
'--recursive',
'--target', target,
'--build-system', build_system]
output = subprocess.check_output(args).decode('utf-8')
o_list = output.split('\n')
json_list = []
for j in o_list:
if j:
json_list.append(json.loads(j))
app_paths = []
for j in json_list:
app_paths.append(j['app_dir'])
return _unify_paths(app_paths)
def get_apps(target, build_system, ignorelist):
apps = _get_apps(target, build_system)
if len(ignorelist):
return _exclude_by_pat_list(apps, ignorelist)
else:
return apps
def get_cmake_ignore_list():
print('- Getting CMake ignore list')
return _file2linelist(
get_idf_path('tools', 'ci',
'check_examples_cmake_make-cmake_ignore.txt'))
def get_make_ignore_list():
print('- Getting Make ignore list')
return _file2linelist(
get_idf_path('tools', 'ci',
'check_examples_cmake_make-make_ignore.txt'))
def diff(first, second):
print('- Comparing...')
first = set(first)
second = set(second)
res = list(first - second) + list(second - first)
return res
def main():
cmake_ignore = get_cmake_ignore_list()
make_ignore = get_make_ignore_list()
cmakes = get_apps('esp32', 'cmake', cmake_ignore)
makes = get_apps('esp32', 'make', make_ignore)
res = diff(cmakes, makes)
if len(res):
pp = pprint.PrettyPrinter(indent=4)
print(
'[ ERROR ] Some projects are not containing Make and Cmake project files:'
)
pp.pprint(res)
raise ValueError('Test is not passed')
else:
print('[ DONE ]')
if __name__ == '__main__':
main()