prepare_test_bins.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #!/usr/bin/env python
  2. #
  3. # SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
  4. # SPDX-License-Identifier: Apache-2.0
  5. import argparse
  6. import os
  7. import gitlab
  8. try:
  9. import gitlab_api
  10. except ImportError:
  11. import sys
  12. sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'python_packages'))
  13. import gitlab_api
  14. from AutoTestScript.RunnerConfigs.Config import Config
  15. SSC_BUILD_JOB_MAP = {
  16. 'ESP32': 'build_ssc_esp32',
  17. 'ESP32C3': 'build_ssc_esp32c3',
  18. }
  19. NEEDED_FILES = [
  20. 'flasher_args.json',
  21. 'bootloader/bootloader.bin',
  22. 'partition_table/partition-table.bin',
  23. 'ssc.bin',
  24. 'ssc.elf',
  25. ]
  26. IDF_PATH = os.environ.get('IDF_PATH')
  27. def try_to_download_artifacts(bin_path: str) -> None:
  28. '''
  29. bin_path: "SSC/ssc_bin/ESP32[C3]/SSC[_APP]"
  30. '''
  31. project_id = os.getenv('CI_PROJECT_ID')
  32. pipeline_id = os.getenv('CI_PIPELINE_ID')
  33. gitlab_inst = gitlab_api.Gitlab(project_id)
  34. build_job_name = SSC_BUILD_JOB_MAP[bin_path.split('/')[-2]]
  35. job_list = gitlab_inst.find_job_id(build_job_name, pipeline_id=pipeline_id)
  36. files_to_download = [os.path.join(bin_path, f) for f in NEEDED_FILES]
  37. for job_info in job_list:
  38. try:
  39. gitlab_inst.download_artifact(job_info['id'], files_to_download, IDF_PATH)
  40. print('Downloaded {} from {}'.format(bin_path, job_info['id']))
  41. break
  42. except gitlab.exceptions.GitlabError as e:
  43. if e.response_code == 404:
  44. continue
  45. raise
  46. def main() -> None:
  47. parser = argparse.ArgumentParser()
  48. parser.add_argument(
  49. 'test_config_file',
  50. help='The test config file to be used.'
  51. )
  52. args = parser.parse_args()
  53. configs = Config.parse(args.test_config_file)
  54. test_bin_paths = configs.get_bin_paths()
  55. for _path in test_bin_paths:
  56. if os.path.exists(_path):
  57. continue
  58. relative_path = os.path.relpath(_path, IDF_PATH)
  59. try_to_download_artifacts(relative_path)
  60. if __name__ == '__main__':
  61. main()