Files
cariflex/tools/EVerest-main/applications/dependency_manager/src/edm_tool/bazel.py
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

89 lines
2.6 KiB
Python
Executable File

"Bazel related functions for edm_tool."
import yaml
from typing import List, Optional, Dict
def _format_optional_string(value: Optional[str]):
"""Formats a string value as a string literal (with quotes) or `None` if the value is None."""
if value is None:
return "None"
return f'"{value}"'
def _is_commit(revision: str):
# Revision is a commit if it is a hexadecimal 40-character string
return len(revision) == 40 and all(c in "0123456789abcdef" for c in revision.lower())
def _get_depname_for_label(label: str) -> str:
build, depname, bazel = label.split(":")[1].split(".")
if build != "BUILD" or bazel != "bazel":
raise ValueError(f"Invalid build file name: {label}")
return depname
def _parse_build_file_labels(labels: Optional[List[str]]) -> Dict[str, str]:
# For easier matching of build files with dependencies
# we convert the list of build files:
# ```
# [
# "@workspace//path/to/build:BUILD.<depname>.bazel",
# ...
# ]
# ```
# into a dictionary:
# ```
# {
# "<depname>": "@workspace//path/to/build:BUILD.<depname>.bazel",
# ...
# }
# ```
# and check that all build files have proper names.
if labels is None:
return {}
return dict((_get_depname_for_label(label), label) for label in labels)
def generate_deps(args):
"Parse the dependencies.yaml and print content of *.bzl file to stdout."
with open(args.dependencies_yaml, 'r', encoding='utf-8') as f:
deps = yaml.safe_load(f)
build_files = _parse_build_file_labels(args.build_file)
for name in build_files:
if name not in deps:
raise ValueError(f"Build file {name} does not have a corresponding dependency in {args.dependencies_yaml}")
print("""
load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
def edm_deps():""")
for name, desc in deps.items():
repo = desc["git"]
# The parameter is called `git_tag` but it can be a tag or a commit
revision = desc["git_tag"]
tag = None
commit = None
if _is_commit(revision):
commit = revision
else:
tag = revision
build_file = build_files.get(name)
print(
f"""
maybe(
git_repository,
name = "{name}",
remote = "{repo}",
tag = {_format_optional_string(tag)},
commit = {_format_optional_string(commit)},
build_file = {_format_optional_string(build_file)},
)
"""
)