|
| 1 | +#!/usr/bin/env python |
| 2 | +# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD |
| 3 | +# SPDX-License-Identifier: Apache-2.0 |
| 4 | +#generate the components versions table in README.md and README_CN.md |
| 5 | +import os |
| 6 | +import yaml |
| 7 | + |
| 8 | +If_release_branch = False |
| 9 | + |
| 10 | +def get_components_versions(path): |
| 11 | + components = {} |
| 12 | + for root, dirs, files in os.walk(path): |
| 13 | + for file in files: |
| 14 | + if file == 'idf_component.yml': |
| 15 | + file_path = os.path.join(root, file) |
| 16 | + if 'test_apps' in file_path: |
| 17 | + #print(f"Skipped {file_path} (in test_apps)") |
| 18 | + continue |
| 19 | + |
| 20 | + # Parse from the yml file, get the component version |
| 21 | + # Parse the folder name from root path to get the component name |
| 22 | + with open(file_path, 'r') as f: |
| 23 | + data = yaml.load(f, Loader=yaml.FullLoader) |
| 24 | + component_name = root.split('/')[-1] |
| 25 | + component_version = data['version'] |
| 26 | + components[component_name] = component_version |
| 27 | + return components |
| 28 | + |
| 29 | +components = get_components_versions(os.path.join(os.path.dirname(__file__), '../components')) |
| 30 | +components.update(get_components_versions(os.path.join(os.path.dirname(__file__), '../tools'))) |
| 31 | +#sort the components by name from A to Z |
| 32 | +components = dict(sorted(components.items(), key=lambda item: item[0])) |
| 33 | + |
| 34 | +# Load the upload_component.yml file |
| 35 | +with open(os.path.join(os.path.dirname(__file__), '../.github/workflows/upload_component.yml'), 'r') as file: |
| 36 | + data = yaml.safe_load(file) |
| 37 | +# Extract the directories string |
| 38 | +upload_directories = data['jobs']['upload_components']['steps'][1]['with']['directories'] |
| 39 | +# Split the directories string into a list of components |
| 40 | +upload_components = [component.split('/')[-1] for component in upload_directories.split(';') if component] |
| 41 | + |
| 42 | +# If components are not found in the upload_component.yml file, print a warning |
| 43 | +# and remove them from the components dictionary |
| 44 | +for component in list(components.keys()): |
| 45 | + if component not in upload_components: |
| 46 | + print(f'\033[93mWarning: {component} not found in upload_component.yml\033[0m') |
| 47 | + components.pop(component) |
| 48 | + |
| 49 | +#generate markdown format table, |
| 50 | + |
| 51 | +#component links format like https://components.espressif.com/components/espressif/aht20 |
| 52 | +#badge links format like https://components.espressif.com/components/espressif/aht20/badge.svg |
| 53 | + |
| 54 | +# for release branch using different badge |
| 55 | +#component links format like https://components.espressif.com/components/espressif/aht20/versions/0.1.0~1 |
| 56 | +#bagde links format like https://img.shields.io/badge/Beta-0.1.0~1-yellow |
| 57 | +#if the version major is 0, the badge color is yellow, and the version is Beta |
| 58 | +#otherwise, the badge color is Blue, and the version is Stable |
| 59 | + |
| 60 | +release_table_items = '' |
| 61 | +for component, version in components.items(): |
| 62 | + if If_release_branch: |
| 63 | + release_table_items += f"| [{component}](https://components.espressif.com/components/espressif/{component}/versions/{version}) | [[0] == '0' else 'Stable'}-{version}-{'yellow' if version.split('.')[0] == '0' else 'blue'})](https://components.espressif.com/components/espressif/{component}/versions/{version}) |\n" |
| 64 | + else: |
| 65 | + release_table_items += f'| [{component}](https://components.espressif.com/components/espressif/{component}) | [](https://components.espressif.com/components/espressif/{component}) |\n' |
| 66 | + |
| 67 | +release_table = '| Component | Version |\n| --- | --- |\n' + release_table_items |
| 68 | +release_table_cn = '| 组件 | 版本 |\n| --- | --- |\n' + release_table_items |
| 69 | + |
| 70 | +#update the README.md file, rewrite the file with table between <center> and </center> |
| 71 | +readme_paths = [ |
| 72 | + os.path.join(os.path.dirname(__file__), '../README.md'), |
| 73 | + os.path.join(os.path.dirname(__file__), '../README_CN.md') |
| 74 | +] |
| 75 | + |
| 76 | +for readme_path in readme_paths: |
| 77 | + with open(readme_path, 'r') as f: |
| 78 | + readme = f.read() |
| 79 | + start = readme.find('<center>') |
| 80 | + end = readme.find('</center>') |
| 81 | + if 'README_CN.md' in readme_path: |
| 82 | + readme = readme[:start+8] + '\n\n' + release_table_cn + '\n' + readme[end:] |
| 83 | + else: |
| 84 | + readme = readme[:start+8] + '\n\n' + release_table + '\n' + readme[end:] |
| 85 | + with open(readme_path, 'w') as f: |
| 86 | + f.write(readme) |
0 commit comments