The component manager for ESP-IDF
Reason this release was yanked:
Broken `python -m idf-component-manager upload-component` command used in CI
Project description
IDF Component Manager
The IDF Component manager is a tool that downloads dependencies for any ESP-IDF CMake project. It makes sure that the right versions of all components required for a successful build of your project are in place. The download happens automatically during a run of CMake. It can source components either from the component registry or from a git repository.
A list of components can be found at https://components.espressif.com/
Installing the IDF Component Manager
IDF component manager can be used with ESP-IDF v4.1 and later. It is installed by default with ESP-IDF v4.4+ and recent bug-fix releases of ESP-IDF 4.1+.
To check the installed version of the IDF component manager, first, activate ESP-IDF environment. On macOS and Linux:
source $IDF_PATH/export.sh
Then run the command:
python -m idf_component_manager -h
To update to the most recent version:
pip install idf-component-manager --upgrade
Disabling the Component Manager
The component manager can be explicitly disabled by setting IDF_COMPONENT_MANAGER
environment variable to 0
.
Using with a project
You can add idf_component.yml
manifest files with the list of dependencies to any component in your project.
IDF Component Manager will download dependencies automatically during the project build process.
When CMake configures the project (e.g. idf.py reconfigure
) component manager does a few things:
- Processes
idf_component.yml
manifests for every component in the project - Creates a
dependencies.lock
file in the root of the project with a full list of dependencies - Downloads all dependencies to the
managed_components
directory
The component manager won't try to regenerate dependencies.lock
or download any components if manifests, lock file, and content of managed_component
directory weren't modified since the last successful build.
Defining dependencies in the manifest
All dependencies are defined in the manifest file.
dependencies:
# Required IDF version
idf: ">=4.1"
# For components maintained by Espressif only name can be used.
# Same as `espressif/component`
component:
version: "~2.0.0"
# Or in a shorter form
component2: ">=1.0.0"
# For 3rd party components :
username/component:
version: "~1.0.0"
# For transient dependencies `public` flag can be set.
public: true
anotheruser/component: "<3.2.20"
# For components hosted on non-default registry:
company_user/component:
version: "~1.0.0"
service_url: "https://componentregistry.company.com"
# For components in git repository:
test_component:
path: test_component
git: ssh://git@gitlab.com/user/components.git
# For test projects during component development
# components can be used from a local directory
# with relative or absolute path
some_local_component:
path: ../../projects/component
# For optional dependencies
optional_component:
version: "~1.0.0"
rules: # will add "optional_component" only when all if clauses are True
- if: "idf_version >=3.3,<5.0" # supports all SimpleSpec grammars (https://python-semanticversion.readthedocs.io/en/latest/reference.html#semantic_version.SimpleSpec)
- if: "target in [esp32, esp32c3]" # supports boolean operator ==, !=, in, not in.
# For example of the component
namespace/component_with_example:
version: "~1.0.0" # if there is no `override_path` field, use component from registry
override_path: "../../" # use component in a local directory, not from registry
namespace/no_required_component:
version: "*"
require: no # Download component but don't add it as a requirement
namespace/pre_release_component:
version: "*"
pre_release: true # Allow downloading of pre-release versions
Environment variables in manifest
You can use environment variables in values in idf_component.yml
manifests. $VAR
or ${VAR}
is replaced with the value of the VAR
environment variable. If the environment variable is not defined, the component manager will raise an error.
Variable name should be ASCII alphanumeric string (including underscores) and start with an underscore or ASCII letter. The first non-identifier character after the $
terminates this placeholder specification. You can escape $
with one more$
character, i.e., $$
is replaced with $
.
One possible use-case is providing authentication to git repositories accessed through HTTPS:
dependencies:
my_component:
git: https://git:${ACCESS_TOKEN}@git.my_git.com/my_component.git
Component metadata caching
By default information about available versions of components is cached for 5 minutes. You can adjust caching period by setting the duration in minutes to IDF_COMPONENT_API_CACHE_EXPIRATION_MINUTES
environment variable or disable the cache entirely by setting it to 0.
External links
You can add links to the idf_component.yml
file to the root of the manifest:
url: "https://example.com/homepage" # URL of the component homepage
repository: "https://gitexample.com/test_project" # URL of the public repository with component source code, i.e GitHub, GitLab, etc.
documentation: "https://example.com/documentation" # URL of the component documentation
issues: "https://git.example.com/test_project/tracker" # URL of the issue tracker
discussion: "https://discord.example.com/test_project" # URL of the component discussion, i.e. Discord, Gitter, forum, etc.
A link should be a correct HTTP(S) URL like https://example.com/path
except the repository
field,
it is expected to be a valid Git remote URL.
Add examples to the component
To add examples to your component place them in the examples
directory inside your component.
Examples are discovered recursively in subdirectories at this path.
A directory with CMakeLists.txt
that registers a project is considered as an example.
Custom example paths
You can specify custom example paths for uploading them to the component registry.
For that, add examples
field to the root of the manifest:
examples:
- path: ../some/path
- path: ../some/other_path
Contributions Guide
We welcome all contributions to the Component Manager project.
You can contribute by fixing bugs, adding features, adding documentation, or reporting an issue. We accept contributions via Github Pull Requests.
Before reporting an issue, make sure you've searched for a similar one that was already created. If you are reporting a new issue, please follow the Issue Template.
Resources
- The Python Package Index project page https://pypi.org/project/idf-component-manager/
- The Component Manager section in the ESP-IDF Programming Guide
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file idf_component_manager-1.2.0.tar.gz
.
File metadata
- Download URL: idf_component_manager-1.2.0.tar.gz
- Upload date:
- Size: 87.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 87cb5b31bbc27af231322f2b6fadafb18dcb9539d10ca655292c6f45862f7202 |
|
MD5 | 72a0a5b0e84f8997d0f9b8678cd55a9d |
|
BLAKE2b-256 | 7e4204235a3cc53641e3f165b67fa22fa520a2fa62fb2f91cf38fa0f415fdabb |
File details
Details for the file idf_component_manager-1.2.0-py3-none-any.whl
.
File metadata
- Download URL: idf_component_manager-1.2.0-py3-none-any.whl
- Upload date:
- Size: 116.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bcf6430315eed89bc5a96304af1064594de29f436957f4ed678dafe68e5dd605 |
|
MD5 | c16047c985febbe44c4b1a9741151560 |
|
BLAKE2b-256 | 0631114cf6ba3fb146ae6cdf0c4a6fa156da671237fb4684f63a0dd6f4743133 |