check_executables.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. from sys import exit
  8. from idf_ci_utils import is_executable
  9. def _strip_each_item(iterable):
  10. res = []
  11. for item in iterable:
  12. if item:
  13. res.append(item.strip())
  14. return res
  15. IDF_PATH = os.getenv('IDF_PATH', os.getcwd())
  16. EXECUTABLE_LIST_FN = os.path.join(IDF_PATH, 'tools/ci/executable-list.txt')
  17. known_executables = _strip_each_item(open(EXECUTABLE_LIST_FN).readlines())
  18. def check_executable_list():
  19. ret = 0
  20. for index, fn in enumerate(known_executables):
  21. if not os.path.exists(os.path.join(IDF_PATH, fn)):
  22. print('{}:{} {} not exists. Please remove it manually'.format(EXECUTABLE_LIST_FN, index + 1, fn))
  23. ret = 1
  24. return ret
  25. def check_executables(files):
  26. ret = 0
  27. for fn in files:
  28. fn_executable = is_executable(fn)
  29. fn_in_list = fn in known_executables
  30. if fn_executable and not fn_in_list:
  31. print('"{}" is not in {}'.format(fn, EXECUTABLE_LIST_FN))
  32. ret = 1
  33. if not fn_executable and fn_in_list:
  34. print('"{}" is not executable but is in {}'.format(fn, EXECUTABLE_LIST_FN))
  35. ret = 1
  36. return ret
  37. def main():
  38. parser = argparse.ArgumentParser()
  39. parser.add_argument('--action', choices=['executables', 'list'], required=True,
  40. help='if "executables", pass all your executables to see if it\'s in the list.'
  41. 'if "list", check if all items on your list exist')
  42. parser.add_argument('filenames', nargs='*', help='Filenames to check.')
  43. args = parser.parse_args()
  44. if args.action == 'executables':
  45. ret = check_executables(args.filenames)
  46. elif args.action == 'list':
  47. ret = check_executable_list()
  48. else:
  49. raise ValueError
  50. return ret
  51. if __name__ == '__main__':
  52. exit(main())