207 lines
7.4 KiB
Python
Raw Normal View History

# SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
# SPDX-License-Identifier: Apache-2.0
import sys
import uuid
from typing import Any
from typing import Dict
from typing import Optional
from typing import Tuple
import click
from idf_py_actions.tools import PropertyDict
from idf_py_actions.tools import RunTool
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
from idf_py_actions.tools import yellow_print
def diag(action: str,
ctx: click.core.Context,
args: PropertyDict,
debug: bool,
log_prefix: bool,
force: bool,
no_color: bool,
zip_directory: Optional[str],
list_recipes: bool,
check_recipes: bool,
cmdl_recipes: Tuple,
cmdl_tags: Tuple,
purge_file: Optional[str],
append: bool,
output: Optional[str]) -> None:
diag_args: list = [sys.executable, '-m', 'esp_idf_diag']
def add_common_arguments(diag_args: list) -> None:
# Common arguments for all esp-idf-diag commands
diag_args += ['--no-hints']
if debug:
diag_args += ['--debug']
if log_prefix:
diag_args += ['--log-prefix']
if no_color:
diag_args += ['--no-color']
else:
diag_args += ['--force-terminal']
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
def add_recipe_arguments(diag_args: list) -> None:
# Recipe related arguments for create, list and check esp-idf-diag commands
diag_args += ['--project-dir', args.project_dir]
diag_args += ['--build-dir', args.build_dir]
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
for recipe in cmdl_recipes:
diag_args += ['--recipe', recipe]
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
for tag in cmdl_tags:
diag_args += ['--tag', tag]
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
if append:
diag_args += ['--append']
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
if zip_directory:
# zip command
command = 'zip'
diag_args += [command]
add_common_arguments(diag_args)
if output:
diag_args += ['--output', output]
if force:
diag_args += ['--force']
diag_args += [zip_directory]
elif list_recipes:
# list command
command = 'list'
diag_args += [command]
add_common_arguments(diag_args)
add_recipe_arguments(diag_args)
elif check_recipes:
# check command
command = 'check'
diag_args += [command]
add_common_arguments(diag_args)
add_recipe_arguments(diag_args)
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
else:
# create command
command = 'create'
diag_args += [command]
add_common_arguments(diag_args)
add_recipe_arguments(diag_args)
if not output:
output = f'idf-diag-{uuid.uuid4()}'
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
diag_args += ['--output', output]
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
if force:
diag_args += ['--force']
if purge_file:
diag_args += ['--purge', purge_file]
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
try:
RunTool('idf_diag', diag_args, args.project_dir, hints=not args.no_hints)()
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
except Exception:
raise
if command == 'create':
yellow_print(
(
f'Please make sure to thoroughly check it for any sensitive '
f'information before sharing and remove files you do not want '
f'to share. Kindly include any additional files you find '
f'relevant that were not automatically added. Please archive '
f'the contents of the final report directory using the command:\n'
f'"idf.py diag --zip {output}".'
)
)
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
def action_extensions(base_actions: Dict, project_path: str) -> Any:
return {
'actions': {
'diag': {
'callback': diag,
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
'help': 'Create diagnostic report.',
'options': [
{
'names': ['-d', '--debug'],
'is_flag': True,
'help': 'Print debug information, including exception tracebacks.',
},
{
'names': ['--no-color'],
'is_flag': True,
'help': 'Do not emit ANSI color codes.',
},
{
'names': ['--log-prefix'],
'is_flag': True,
'help': 'Add a severity character at the beginning of log messages.',
},
{
'names': ['-z', '--zip', 'zip_directory'],
'metavar': 'PATH',
'help': 'Create zip archive for diagnostic report in PATH.',
},
{
'names': ['-l', '--list', 'list_recipes'],
'is_flag': True,
'help': 'Show information about available recipes.',
},
{
'names': ['-c', '--check', 'check_recipes'],
'is_flag': True,
'help': 'Validate recipes.',
},
{
'names': ['-r', '--recipe', 'cmdl_recipes'],
'multiple': True,
'metavar': 'RECIPE',
'type': str,
'help': ('Recipe to use. This option can be specified multiple times. '
'By default, all built-in recipes are used. RECIPE refers to '
'the recipe file path or the file name stem for built-in recipes.'),
},
{
'names': ['-t', '--tag', 'cmdl_tags'],
'multiple': True,
'metavar': 'TAG',
'type': str,
'help': ('Consider only recipes containing TAG. This option can be specified '
'multiple times. By default, all recipes are used. Use -l/--list-recipes '
'option to see recipe TAG information.'),
},
{
'names': ['-a', '--append'],
'is_flag': True,
'help': ('Use recipes specified with the -r/--recipe option in '
'combination with the built-in recipes.'),
},
{
'names': ['-f', '--force'],
'is_flag': True,
'help': 'Delete the target file or directory if it already exists before creating it.',
},
{
'names': ['-o', '--output'],
'metavar': 'PATH',
'type': str,
'help': ('Diagnostic report directory PATH or zip file archive PATH. '
'If not specified, the report-UUID is used as the report directory, '
'and the report directory specified with the --zip option with a zip '
'extension is used for the zip file archive.')
},
{
'names': ['-p', '--purge', 'purge_file'],
'metavar': 'PATH',
'type': str,
'help': ('Use a custom purge file to remove sensitive information from the report.')
},
feat(tools): add idf.py diag reporting tool The initial implementation of a diagnostic tool that collects valuable information about esp-idf and failed build to assist in investigating reported issues. The gathered information includes environmental variables, details about the python virtual environment, installed tools, platform information, project_description.json, sdkconfig, build logs, map file, linker scripts, and others. usage: 1) create the default report # allow diag to create the report directory name $ idf.py diag # explicitly specify the report directory $ idf.py diag --output <report directory> 2) examine the contents of the generated <report directory> for sensitive information and add additional content to the <report directory> 3) create report archive zip file that can be shared or attached to the reported issue $ idf.py diag --zip <report directory> The tool collects information as described in what are known as recipe files. A recipe file is a YAML file, similar to an Ansible playbook or a GitHub action, but much more simplified. Each recipe outlines how to gather a set of related information. For instance, the manager.yml recipe gathers data related to the component manager. Each recipe includes metadata such as its description, tags, and steps. Tags are used to determine which recipes to use; by default, all built-in recipes located in tools/idf_py_actions/diag/recipes are used. Steps consist of a list of commands to be executed. Currently, there are four commands: file, exec, env, and glob. For more detailed information about recipes, their format, and commands, please refer to tools/idf_py_actions/diag/recipes/README.md. Recipe example for component manager: description: IDF Component Manager information tags: [manager, base, project] output: manager steps: - name: 'IDF Component Manager' cmds: - exec: cmd: 'python -m idf_component_manager version' output: manager.ver - file: path: '${PROJECT_DIR}/dependencies.lock' - glob: # Gather all idf_component.yml files from the project directory and # save them in directories relative to the project directory within # the idf_component directory. pattern: 'idf_component.yml' recursive: true relative: true path: '${PROJECT_DIR}' output: 'idf_component/' Create report for manager 1) all recipes with manager tag $ idf.py diag --tag manager 2) use only the manager recipe explicitly; built-in recipes can be referenced simply by their name, but all recipes can be referenced by their path $ idf.py diag --recipe manager or $ idf.py diag --recipe <full path> To display available recipes, use $ idf.py diag --list and to verify recipes, use $ idf.py diag --check Both --list and --check honers the --tag and --recipe options. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-07 08:59:32 +01:00
],
},
},
}