Skip to content

Commit 8705de9

Browse files
committed
feat: add script & pre-commit for readme version update
1 parent 325cc49 commit 8705de9

File tree

7 files changed

+247
-129
lines changed

7 files changed

+247
-129
lines changed

.github/workflows/upload_component.yml

+8-5
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,22 @@ jobs:
1919
components/audio/pwm_audio;
2020
components/avi_player;
2121
components/bluetooth/ble_conn_mgr;
22-
components/bluetooth/ble_services;
22+
components/bluetooth/ble_hci;
2323
components/bluetooth/ble_profiles/esp/ble_ota;
2424
components/bluetooth/ble_profiles/std/ble_anp;
2525
components/bluetooth/ble_profiles/std/ble_hrp;
2626
components/bluetooth/ble_profiles/std/ble_htp;
27+
components/bluetooth/ble_services;
2728
components/bootloader_support_plus;
2829
components/button;
2930
components/display/lcd/esp_lcd_axs15231b;
3031
components/display/lcd/esp_lcd_ek79007;
31-
components/display/lcd/esp_lcd_jd9165;
32-
components/display/lcd/esp_lcd_jd9365;
3332
components/display/lcd/esp_lcd_gc9b71;
3433
components/display/lcd/esp_lcd_hx8399;
35-
components/display/lcd/esp_lcd_panel_io_additions;
34+
components/display/lcd/esp_lcd_jd9165;
35+
components/display/lcd/esp_lcd_jd9365;
3636
components/display/lcd/esp_lcd_nv3022b;
37+
components/display/lcd/esp_lcd_panel_io_additions;
3738
components/display/lcd/esp_lcd_sh8601;
3839
components/display/lcd/esp_lcd_spd2010;
3940
components/display/lcd/esp_lcd_st7701;
@@ -49,19 +50,21 @@ jobs:
4950
components/display/tools/esp_lv_fs;
5051
components/display/tools/esp_mmap_assets;
5152
components/elf_loader;
52-
components/keyboard_button;
5353
components/extended_vfs;
5454
components/gprof;
5555
components/i2c_bus;
5656
components/ir/ir_learn;
57+
components/keyboard_button;
5758
components/knob;
5859
components/led/led_indicator;
5960
components/led/lightbulb_driver;
61+
components/motor/drv10987;
6062
components/motor/esp_sensorless_bldc_control;
6163
components/motor/esp_simplefoc;
6264
components/openai;
6365
components/sensors/humiture/aht20;
6466
components/sensors/ntc_driver;
67+
components/sensors/power_monitor/ina236;
6568
components/sensors/radar/at581x;
6669
components/spi_bus;
6770
components/touch/touch_proximity_sensor;

.pre-commit-config.yaml

+10
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,16 @@ repos:
7171
language: python
7272
pass_filenames: false
7373
always_run: true
74+
- repo: local
75+
hooks:
76+
- id: release_versions
77+
name: Update versions in readme
78+
entry: tools/release_versions.py
79+
language: python
80+
types: [executable]
81+
additional_dependencies:
82+
- pyyaml
83+
always_run: true
7484
- repo: https://github.com/espressif/conventional-precommit-linter
7585
rev: v1.8.0
7686
hooks:

README.md

+69-59
Large diffs are not rendered by default.

README_CN.md

+73-63
Large diffs are not rendered by default.

components/bluetooth/ble_hci/idf_component.yml

-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ issues: https://github.com/espressif/esp-iot-solution/issues
77
dependencies:
88
idf: ">=5.0"
99
cmake_utilities: "0.*"
10-
examples:
11-
- path: ../../../examples/bluetooth/ble_hci
1210
sbom:
1311
supplier: 'Organization: Espressif Systems (Shanghai) CO LTD'
1412
originator: 'Organization: Espressif Systems (Shanghai) CO LTD'

tools/ci/executable-list.txt

+1
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ tools/ci/push_to_github.sh
1313
tools/cmake_utilities/scripts/gen_custom_ota.py
1414
tools/cmake_utilities/scripts/relinker/configuration.py
1515
tools/cmake_utilities/scripts/relinker/relinker.py
16+
tools/release_versions.py

tools/release_versions.py

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
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}) | [![{version}](https://img.shields.io/badge/{'Beta' if version.split('.')[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}) | [![Component Registry](https://components.espressif.com/components/espressif/{component}/badge.svg)](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

Comments
 (0)