check_executables.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #!/usr/bin/env python
  2. #
  3. # SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD
  4. # SPDX-License-Identifier: Apache-2.0
  5. import argparse
  6. import os
  7. import sys
  8. from typing import Iterable, List
  9. try:
  10. from idf_ci_utils import is_executable
  11. except ImportError:
  12. sys.path.append(os.path.join(os.path.dirname(__file__)))
  13. from idf_ci_utils import is_executable
  14. def _strip_each_item(iterable: Iterable) -> List:
  15. res = []
  16. for item in iterable:
  17. if item:
  18. res.append(item.strip())
  19. return res
  20. IDF_PATH = os.getenv('IDF_PATH', os.getcwd())
  21. EXECUTABLE_LIST_FN = os.path.join(IDF_PATH, 'tools/ci/executable-list.txt')
  22. known_executables = _strip_each_item(open(EXECUTABLE_LIST_FN).readlines())
  23. def check_executable_list() -> int:
  24. ret = 0
  25. for index, fn in enumerate(known_executables):
  26. if not os.path.exists(os.path.join(IDF_PATH, fn)):
  27. print('{}:{} {} not exists. Please remove it manually'.format(EXECUTABLE_LIST_FN, index + 1, fn))
  28. ret = 1
  29. return ret
  30. def check_executables(files: List) -> int:
  31. ret = 0
  32. for fn in files:
  33. fn_executable = is_executable(fn)
  34. fn_in_list = fn in known_executables
  35. if fn_executable and not fn_in_list:
  36. print('"{}" is not in {}'.format(fn, EXECUTABLE_LIST_FN))
  37. ret = 1
  38. if not fn_executable and fn_in_list:
  39. print('"{}" is not executable but is in {}'.format(fn, EXECUTABLE_LIST_FN))
  40. ret = 1
  41. return ret
  42. def check() -> int:
  43. parser = argparse.ArgumentParser()
  44. parser.add_argument('--action', choices=['executables', 'list'], required=True,
  45. help='if "executables", pass all your executables to see if it\'s in the list.'
  46. 'if "list", check if all items on your list exist')
  47. parser.add_argument('filenames', nargs='*', help='Filenames to check.')
  48. args = parser.parse_args()
  49. if args.action == 'executables':
  50. ret = check_executables(args.filenames)
  51. elif args.action == 'list':
  52. ret = check_executable_list()
  53. else:
  54. raise ValueError
  55. return ret
  56. if __name__ == '__main__':
  57. sys.exit(check())