Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion build_manager/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ def __init__(self,
remote_info: RemoteInfo,
git_hash: str,
board: str,
selected_features: set) -> None:
selected_features: set,
custom_defines: list[tuple[str, str | None]] = []) -> None:
"""
Initialize build information object including vehicle,
remote, git hash, selected features, and progress of the build.
Expand All @@ -61,12 +62,15 @@ def __init__(self,
git_hash (str): The git commit hash to build on.
board (str): Board to build for.
selected_features (set): Set of features selected for the build.
custom_defines (list[tuple[str,str|None]]): Custom defines to
pass to the build.
"""
self.vehicle_id = vehicle_id
self.remote_info = remote_info
self.git_hash = git_hash
self.board = board
self.selected_features = selected_features
self.custom_defines = custom_defines
self.progress = BuildProgress(
state=BuildState.PENDING,
percent=0
Expand All @@ -81,6 +85,7 @@ def to_dict(self) -> dict:
'git_hash': self.git_hash,
'board': self.board,
'selected_features': list(self.selected_features),
'custom_defines': self.custom_defines,
'progress': self.progress.to_dict(),
'time_created': self.time_created,
'time_started': getattr(self, 'time_started', None),
Expand Down
14 changes: 14 additions & 0 deletions builder/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,14 @@ def __log_build_info(self, build_id: str) -> None:
"Selected Features:\n")
for d in build_info.selected_features:
build_log.write(f"{d}\n")
if build_info.custom_defines:
build_log.write("---\n"
"Custom defines:\n")
for define, value in build_info.custom_defines:
if value:
build_log.write(f"{define}={value}\n")
else:
build_log.write(f"{define}\n")
build_log.write("---\n")

def __generate_extrahwdef(self, build_id: str) -> None:
Expand Down Expand Up @@ -119,6 +127,8 @@ def __generate_extrahwdef(self, build_id: str) -> None:
self.logger.info(f"Enabled defines for {build_id}: {enabled_defines}")
self.logger.info(f"Disabled defines for {build_id}: {enabled_defines}")

custom_defines = build_info.custom_defines

with open(self.__get_path_to_extra_hwdef(build_id), "w") as f:
# Undefine all defines at the beginning
for define in all_defines:
Expand All @@ -129,6 +139,10 @@ def __generate_extrahwdef(self, build_id: str) -> None:
# Disable the remaining defines
for define in disabled_defines:
f.write(f"define {define} 0\n")
for define, value in custom_defines:
if value is None:
value = ""
f.write(f"define {define} {value}\n")

def __ensure_remote_added(self, remote_info: RemoteInfo) -> None:
"""
Expand Down
2 changes: 1 addition & 1 deletion web/api/v1/builds.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ async def create_build(

Args:
build_request: Build configuration including vehicle, board, version,
and selected features
selected features and custom defines

Returns:
Simple response with build_id, URL, and status
Expand Down
3 changes: 3 additions & 0 deletions web/schemas/builds.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ class BuildRequest(BaseModel):
default_factory=list,
description="Feature IDs to enable for this build"
)
custom_defines: str = Field(
..., description="Custom defines to pass to this build"
)


# --- Build Submit Response ---
Expand Down
18 changes: 17 additions & 1 deletion web/services/builds.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,13 +136,29 @@ def create_build(
f"{commit_ref}"
)

# Parse custom defines string
custom_defines = []
if build_request.custom_defines:
custom_define_strings = build_request.custom_defines.split(',')
for custom_define in [s.strip() for s in custom_define_strings]:
if "=" in custom_define:
split_string = custom_define.split('=')
if len(split_string) != 2:
raise ValueError("Failed to parse custom define")
define, value = split_string
else:
define = custom_define
value = None
custom_defines.append((define, value))

# Create build info
build_info = build_manager.BuildInfo(
vehicle_id=vehicle_id,
remote_info=remote_info,
git_hash=git_hash,
board=board_name,
selected_features=selected_feature_defines
selected_features=selected_feature_defines,
custom_defines=custom_defines
)

# Submit build
Expand Down
8 changes: 6 additions & 2 deletions web/static/js/add_build.js
Original file line number Diff line number Diff line change
Expand Up @@ -693,13 +693,17 @@ async function handleFormSubmit(event) {
// The checkbox ID is already the feature define (ID)
selected_features.push(checkbox.id);
});


// Collect custom defines
const custom_defines = document.getElementById('custom_defines').value;

// Create build request payload
const buildRequest = {
vehicle_id: vehicle_id,
version_id: version_id,
board_id: board_id,
selected_features: selected_features
selected_features: selected_features,
custom_defines: custom_defines,
};

// Send POST request to API
Expand Down
8 changes: 8 additions & 0 deletions web/templates/add_build.html
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,14 @@
</div>
</div>
</div>
<hr>
<div class="container-fluid">
<div class="container-fluid w-25">
<div class="container-fluid d-flex align-content-between">
<input type="text" id="custom_defines" class="form-control" name="custom_defines" placeholder="Custom defines" aria-label="Custom defines">
</div>
</div>
</div>
</form>
</div>
<div class="card-footer">
Expand Down