Merge branch 'feat/diag_cpuinfo' into 'master'

feat(tools): add basic system information to diag report

Closes IDF-12100

See merge request espressif/esp-idf!36627
This commit is contained in:
Roland Dobai 2025-01-29 17:46:07 +08:00
commit 57b2ef83ea
4 changed files with 70 additions and 15 deletions

View File

@ -90,6 +90,11 @@ variable, format it as `${NAME}`, such as `${IDF_PATH}`.
Brief description of the `step`, displayed in the `idf.py diag` progress
beneath the `recipe` description.
* system: string (optional)
Can be used to restrict the operating system on which the step will be
executed. It should be Linux, Darwin, or Windows. If specified, the step
will only run on the designated system.
* output: string (optional)
Global output directory for the `step`. This directory serves as the main

View File

@ -6,7 +6,6 @@ steps:
cmds:
- exec:
cmd: 'idf.py --version'
timeout: 10
output: esp_idf.ver
- name: 'ESP-IDF Git Version'
@ -14,16 +13,3 @@ steps:
- exec:
cmd: 'git -C ${IDF_PATH} describe'
output: esp_idf_git.ver
- name: 'Platform Information'
cmds:
- exec:
cmd:
- python
- -c
- |
import platform
print(f'system: {platform.system()}')
print(f'release: {platform.release()}')
print(f'machine: {platform.machine()}')
output: platform.inf

View File

@ -0,0 +1,49 @@
description: System information
tags: [system, base, project]
steps:
- name: 'Platform Information'
cmds:
- exec:
cmd:
- python
- -c
- |
import platform
print(f'system: {platform.system()}')
print(f'release: {platform.release()}')
print(f'machine: {platform.machine()}')
output: platform.inf
- name: 'Linux System Information'
system: Linux
output: linux
cmds:
- file:
path: '/proc/cpuinfo'
- file:
path: '/etc/os-release'
- exec:
cmd: 'uname -a'
output: uname
- name: 'Darwin Information'
system: Darwin
output: darwin
cmds:
- exec:
cmd: 'sysctl machdep.cpu'
output: machdep.cpu
- exec:
cmd: 'sw_vers'
output: sw_vers
- exec:
cmd: 'uname -a'
output: uname
- name: 'Windows Information'
system: Windows
output: windows
cmds:
- exec:
cmd: 'systeminfo'
output: systeminfo

View File

@ -3,6 +3,7 @@
import atexit
import difflib
import os
import platform
import re
import shutil
import sys
@ -289,7 +290,7 @@ def validate_recipe(recipe: Dict) -> None:
dependencies and to provide more informative error messages.
"""
recipe_keys = ['description', 'tags', 'output', 'steps']
step_keys = ['name', 'cmds', 'output']
step_keys = ['name', 'cmds', 'output', 'system']
recipe_description = recipe.get('description')
recipe_tags = recipe.get('tags')
recipe_output = recipe.get('output')
@ -330,6 +331,7 @@ def validate_recipe(recipe: Dict) -> None:
step_name = step.get('name')
step_output = step.get('output')
step_cmds = step.get('cmds')
step_system = step.get('system')
if not step_name:
raise RuntimeError(f'Recipe step is missing "name" key')
@ -342,6 +344,12 @@ def validate_recipe(recipe: Dict) -> None:
if step_output:
if type(step_output) is not str:
raise RuntimeError(f'Step "output" key is not of type "str"')
if step_system:
if type(step_system) is not str:
raise RuntimeError(f'Step "system" key is not of type "str"')
if step_system not in ['Linux', 'Windows', 'Darwin']:
raise RuntimeError((f'Unknown "system" key value "{step_system}", '
f'expecting "Linux", "Windows" or "Darwin"'))
for cmd in step_cmds:
if 'exec' in cmd:
@ -769,6 +777,12 @@ def process_recipe(recipe: Dict) -> None:
"""execute commands for every stage in a recipe"""
for step in recipe['steps']:
step_name = step['name']
step_system = step.get('system')
if step_system and step_system != platform.system():
dbg(f'Skipping step "{step_name}" for "{step_system}"')
continue
dbg(f'Processing step "{step_name}"')
print(f'* {step_name}')
for cmd in step['cmds']:
@ -1014,6 +1028,7 @@ def create(action: str,
dbg(f'Recipe variables: {recipe_variables}')
dbg(f'Project directory: {project_dir}')
dbg(f'Build directory: {build_dir}')
dbg(f'System: {platform.system()}')
if list_recipes:
# List recipes command