Skip to content
This repository was archived by the owner on Jan 23, 2026. It is now read-only.

use FlasherClient for ridesx#536

Merged
bennyz merged 5 commits intojumpstarter-dev:mainfrom
bennyz:flasher-interface
Jul 2, 2025
Merged

use FlasherClient for ridesx#536
bennyz merged 5 commits intojumpstarter-dev:mainfrom
bennyz:flasher-interface

Conversation

@bennyz
Copy link
Copy Markdown
Member

@bennyz bennyz commented Jun 26, 2025

Also handle hashing and caching

address jumpstarter-dev/jumpstarter#533
jumpstarter-dev/jumpstarter#530

Summary by CodeRabbit

  • New Features

    • The flash command now supports flashing multiple images to different targets in a single operation via new CLI options.
    • Per-target operator and compression settings are supported during flashing.
  • Improvements

    • File upload during flashing is optimized by checking file hashes to avoid unnecessary uploads.
    • The CLI for flashing has been streamlined and unified across drivers for consistency.
    • The flash interface now uses "target" instead of "partition" for clearer device specification.
    • Flashing commands now accept both single and multiple image inputs with flexible operator assignment.
    • RideSXClient now inherits flashing capabilities directly, simplifying usage and CLI integration.
    • The flash target option was renamed from --partition to --target for clarity across CLI commands.
    • Flash and dump methods updated to consistently use "target" parameter naming.
  • Bug Fixes

    • Minor correction to CLI command decorators.

Also handle hashing and caching

Signed-off-by: Benny Zlotnik <bzlotnik@redhat.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 26, 2025

Walkthrough

The changes rename the flashing parameter from partition to target and extend the flashing interface to support multiple targets with per-target operators. The CLI commands are updated to accept multiple target specifications. The RideSXClient inherits from FlasherClient and reuses its CLI commands. File upload logic is improved with hash comparison. The StorageMuxFlasherClient flash/dump methods are updated to disallow target and manage host/dut transitions.

Changes

File(s) Change Summary
jumpstarter_driver_opendal/client.py Renamed partition to target in flash/dump methods and CLI; flash supports dict of targets; added _should_upload_file and _flash_single; updated StorageMuxFlasherClient flash/dump to disallow target and manage host/dut calls; CLI command decorator fixed.
jumpstarter_driver_ridesx/client.py RideSXClient now inherits from FlasherClient; flash method supports single or dict paths with per-target operators; improved upload logic with hash check; CLI refactored to reuse FlasherClient commands.
jumpstarter_driver_flashers/client.py CLI flash command option renamed from --partition to --target; parameter name updated accordingly.
jumpstarter_driver_opendal/driver.py FlasherInterface.flash method parameter renamed from partition to target.
jumpstarter_driver_opendal/driver_test.py Test parameter renamed from partition to target in test_driver_flasher; calls updated accordingly.
jumpstarter_driver_uboot/driver_test.py Changed argument name from partition to target in flasher.flash call within test.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant CLI
    participant FlasherClient
    participant OpendalAdapter

    User->>CLI: Run flash command with multiple --target specs (name:file)
    CLI->>FlasherClient: flash({target1: file1, target2: file2}, operator, compression)
    loop For each target
        FlasherClient->>FlasherClient: _flash_single(file, target, operator, compression)
        FlasherClient->>OpendalAdapter: open(file)
        OpendalAdapter-->>FlasherClient: file stream
        FlasherClient->>FlasherClient: _should_upload_file(...)
        alt File needs upload
            FlasherClient->>OpendalAdapter: upload file
        end
        FlasherClient->>FlasherClient: call flash RPC with target
    end
Loading

Possibly related PRs

  • jumpstarter-dev/jumpstarter#324: Also modifies FlasherClient and CLI to enhance flashing functionality, including multi-target support and StorageMuxFlasherClient updates.
  • jumpstarter-dev/jumpstarter#322: Introduced the original FlasherClient and FlasherInterface with basic flash methods, which this PR extends and renames parameters.

Suggested reviewers

  • NickCao
  • mangelajo

Poem

🐇✨
Targets renamed, the flash anew,
Multiple files, each with its cue.
Operators paired, hashes checked tight,
CLI commands now shine so bright.
RideSX hops with Flasher's grace,
In code's warren, a faster race!
🚀🐰


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 67046e5 and 2aa8746.

📒 Files selected for processing (1)
  • packages/jumpstarter-driver-flashers/jumpstarter_driver_flashers/client.py (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/jumpstarter-driver-flashers/jumpstarter_driver_flashers/client.py
⏰ Context from checks skipped due to timeout of 90000ms (10)
  • GitHub Check: e2e
  • GitHub Check: pytest-matrix (ubuntu-24.04, 3.11)
  • GitHub Check: pytest-matrix (ubuntu-24.04, 3.13)
  • GitHub Check: pytest-matrix (macos-15, 3.11)
  • GitHub Check: pytest-matrix (macos-15, 3.13)
  • GitHub Check: pytest-matrix (macos-15, 3.12)
  • GitHub Check: pytest-matrix (ubuntu-24.04, 3.12)
  • GitHub Check: Redirect rules - jumpstarter-docs
  • GitHub Check: Header rules - jumpstarter-docs
  • GitHub Check: Pages changed - jumpstarter-docs
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@netlify
Copy link
Copy Markdown

netlify Bot commented Jun 26, 2025

Deploy Preview for jumpstarter-docs ready!

Name Link
🔨 Latest commit 2aa8746
🔍 Latest deploy log https://app.netlify.com/projects/jumpstarter-docs/deploys/6864ffb779fc240008c33ac8
😎 Deploy Preview https://deploy-preview-536--jumpstarter-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
packages/jumpstarter-driver-ridesx/jumpstarter_driver_ridesx/client.py (1)

29-32: Remove redundant Path conversion.

path_buf is already a Path object after line 29, so converting it again on line 32 is redundant.

-        filename = Path(path_buf).name
+        filename = path_buf.name
packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py (1)

584-609: Simplify control flow by removing unnecessary else.

The static analysis correctly identifies that the else block is unnecessary after a return statement.

             if storage_hash == src_hash:
                 return False
-            else:
-                return True
+            return True
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 863169a and b6115d3.

📒 Files selected for processing (2)
  • packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py (5 hunks)
  • packages/jumpstarter-driver-ridesx/jumpstarter_driver_ridesx/client.py (3 hunks)
🧰 Additional context used
🧠 Learnings (2)
packages/jumpstarter-driver-ridesx/jumpstarter_driver_ridesx/client.py (2)
Learnt from: mangelajo
PR: jumpstarter-dev/jumpstarter#339
File: packages/jumpstarter-driver-flashers/jumpstarter_driver_flashers/client.py:349-349
Timestamp: 2025-03-14T16:05:14.577Z
Learning: The `_upload_artifact` method in `BaseFlasherClient` class should call `write_from_path` with the calculated filename parameter: `storage.write_from_path(filename, path, operator=operator)` instead of `storage.write_from_path(path, operator=operator)`.
Learnt from: bennyz
PR: jumpstarter-dev/jumpstarter#241
File: packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py:52-60
Timestamp: 2025-01-29T11:52:43.554Z
Learning: The TFTP driver (packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py) handles all low-level concerns like path validation, error handling, and checksum computation. The client (packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py) should remain simple as it delegates these responsibilities to the driver.
packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py (2)
Learnt from: mangelajo
PR: jumpstarter-dev/jumpstarter#339
File: packages/jumpstarter-driver-flashers/jumpstarter_driver_flashers/client.py:349-349
Timestamp: 2025-03-14T16:05:14.577Z
Learning: The `_upload_artifact` method in `BaseFlasherClient` class should call `write_from_path` with the calculated filename parameter: `storage.write_from_path(filename, path, operator=operator)` instead of `storage.write_from_path(path, operator=operator)`.
Learnt from: bennyz
PR: jumpstarter-dev/jumpstarter#241
File: packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py:52-60
Timestamp: 2025-01-29T11:52:43.554Z
Learning: The TFTP driver (packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py) handles all low-level concerns like path validation, error handling, and checksum computation. The client (packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py) should remain simple as it delegates these responsibilities to the driver.
🪛 Pylint (3.3.7)
packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py

[refactor] 603-606: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it

(R1705)


[error] 622-623: Context manager 'async_generator' doesn't implement enter and exit.

(E1129)

⏰ Context from checks skipped due to timeout of 90000ms (10)
  • GitHub Check: Redirect rules - jumpstarter-docs
  • GitHub Check: Header rules - jumpstarter-docs
  • GitHub Check: Pages changed - jumpstarter-docs
  • GitHub Check: e2e
  • GitHub Check: pytest-matrix (ubuntu-24.04, 3.12)
  • GitHub Check: pytest-matrix (ubuntu-24.04, 3.13)
  • GitHub Check: pytest-matrix (macos-15, 3.12)
  • GitHub Check: pytest-matrix (macos-15, 3.13)
  • GitHub Check: pytest-matrix (macos-15, 3.11)
  • GitHub Check: pytest-matrix (ubuntu-24.04, 3.11)
🔇 Additional comments (6)
packages/jumpstarter-driver-ridesx/jumpstarter_driver_ridesx/client.py (3)

34-42: Good use of hash-based upload detection.

The implementation correctly uses the inherited _should_upload_file method to avoid redundant uploads by comparing SHA-256 hashes, which is more reliable than just checking file existence.


77-93: Well-designed flexible flash interface.

The method signature and implementation correctly handle both single-image and multi-partition flashing scenarios, aligning with the FlasherClient interface while maintaining backward compatibility.


104-112: Clean CLI delegation pattern.

The implementation properly delegates to the parent class CLI, avoiding code duplication and ensuring consistency with the FlasherClient interface.

packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py (3)

625-657: Well-structured multi-partition flash support.

The implementation correctly handles both single and multi-partition flashing with proper validation and error handling. The use of type guards and appropriate error messages enhances the API usability.


545-570: Robust CLI implementation for multi-partition flashing.

The CLI correctly handles both single-file and multi-partition flashing scenarios with proper validation and clear error messages. The name:file format for partition specifications is intuitive.


730-730: Correct decorator syntax.

Good fix - the parentheses are unnecessary when the decorator doesn't take any arguments.

@bennyz bennyz requested a review from mangelajo June 26, 2025 15:23
multiple=True,
help="name:file",
)
@click.option("--single-partition", type=str, help="Partition name when flashing a single file")
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is there a way to avoid this extra parameter when flashing with a single file? , may be not all flashers will support it, and that's fine...

@click.option("--partition", type=str)
@click.argument("file", nargs=-1, required=False)
@click.option(
"--partition",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we also take the chance to call them all targets and not partitions? :)

it will work better in general, and we have that notion in the flasher bundles.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah sure, we talked about it and i forgot, sorry!

results: dict[str, object] = {}

oper_map = operator if isinstance(operator, dict) else {}
comp_map = compression if isinstance(compression, dict) else {}
Copy link
Copy Markdown
Member

@mangelajo mangelajo Jun 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
comp_map = compression if isinstance(compression, dict) else {}
comp_map = compression if isinstance(compression, dict) else {}

In this case I would just take the compression config (single one) and apply it to all targets, so it get's decompressed in runtime on the other side.

bennyz added 2 commits June 26, 2025 20:34
Signed-off-by: Benny Zlotnik <bzlotnik@redhat.com>
Signed-off-by: Benny Zlotnik <bzlotnik@redhat.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py (1)

583-608: Simplify the conditional logic.

The hash comparison logic is sound, but there's an unnecessary else after return that can be simplified.

-            if storage_hash == src_hash:
-                return False
-            else:
-                return True
+            if storage_hash == src_hash:
+                return False
+            return True
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b6115d3 and da851eb.

📒 Files selected for processing (3)
  • packages/jumpstarter-driver-flashers/jumpstarter_driver_flashers/client.py (3 hunks)
  • packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py (8 hunks)
  • packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver.py (1 hunks)
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: mangelajo
PR: jumpstarter-dev/jumpstarter#339
File: packages/jumpstarter-driver-flashers/jumpstarter_driver_flashers/client.py:349-349
Timestamp: 2025-03-14T16:05:14.577Z
Learning: The `_upload_artifact` method in `BaseFlasherClient` class should call `write_from_path` with the calculated filename parameter: `storage.write_from_path(filename, path, operator=operator)` instead of `storage.write_from_path(path, operator=operator)`.
packages/jumpstarter-driver-flashers/jumpstarter_driver_flashers/client.py (2)
Learnt from: bennyz
PR: jumpstarter-dev/jumpstarter#241
File: packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py:52-60
Timestamp: 2025-01-29T11:52:43.554Z
Learning: The TFTP driver (packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py) handles all low-level concerns like path validation, error handling, and checksum computation. The client (packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py) should remain simple as it delegates these responsibilities to the driver.
Learnt from: mangelajo
PR: jumpstarter-dev/jumpstarter#339
File: packages/jumpstarter-driver-flashers/jumpstarter_driver_flashers/client.py:349-349
Timestamp: 2025-03-14T16:05:14.577Z
Learning: The `_upload_artifact` method in `BaseFlasherClient` class should call `write_from_path` with the calculated filename parameter: `storage.write_from_path(filename, path, operator=operator)` instead of `storage.write_from_path(path, operator=operator)`.
packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver.py (2)
Learnt from: mangelajo
PR: jumpstarter-dev/jumpstarter#339
File: packages/jumpstarter-driver-flashers/jumpstarter_driver_flashers/client.py:349-349
Timestamp: 2025-03-14T16:05:14.577Z
Learning: The `_upload_artifact` method in `BaseFlasherClient` class should call `write_from_path` with the calculated filename parameter: `storage.write_from_path(filename, path, operator=operator)` instead of `storage.write_from_path(path, operator=operator)`.
Learnt from: bennyz
PR: jumpstarter-dev/jumpstarter#241
File: packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py:52-60
Timestamp: 2025-01-29T11:52:43.554Z
Learning: The TFTP driver (packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py) handles all low-level concerns like path validation, error handling, and checksum computation. The client (packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py) should remain simple as it delegates these responsibilities to the driver.
packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py (2)
Learnt from: mangelajo
PR: jumpstarter-dev/jumpstarter#339
File: packages/jumpstarter-driver-flashers/jumpstarter_driver_flashers/client.py:349-349
Timestamp: 2025-03-14T16:05:14.577Z
Learning: The `_upload_artifact` method in `BaseFlasherClient` class should call `write_from_path` with the calculated filename parameter: `storage.write_from_path(filename, path, operator=operator)` instead of `storage.write_from_path(path, operator=operator)`.
Learnt from: bennyz
PR: jumpstarter-dev/jumpstarter#241
File: packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py:52-60
Timestamp: 2025-01-29T11:52:43.554Z
Learning: The TFTP driver (packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py) handles all low-level concerns like path validation, error handling, and checksum computation. The client (packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py) should remain simple as it delegates these responsibilities to the driver.
🪛 Pylint (3.3.7)
packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py

[refactor] 602-605: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it

(R1705)


[error] 621-622: Context manager 'async_generator' doesn't implement enter and exit.

(E1129)


[error] 665-666: Context manager 'async_generator' doesn't implement enter and exit.

(E1129)

⏰ Context from checks skipped due to timeout of 90000ms (10)
  • GitHub Check: Redirect rules - jumpstarter-docs
  • GitHub Check: Header rules - jumpstarter-docs
  • GitHub Check: Pages changed - jumpstarter-docs
  • GitHub Check: pytest-matrix (ubuntu-24.04, 3.12)
  • GitHub Check: pytest-matrix (macos-15, 3.13)
  • GitHub Check: e2e
  • GitHub Check: pytest-matrix (macos-15, 3.11)
  • GitHub Check: pytest-matrix (macos-15, 3.12)
  • GitHub Check: pytest-matrix (ubuntu-24.04, 3.13)
  • GitHub Check: pytest-matrix (ubuntu-24.04, 3.11)
🔇 Additional comments (12)
packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver.py (1)

212-212: LGTM - Parameter rename aligns with codebase refactoring.

The rename from partition to target is consistent with the broader refactoring effort to support more flexible flashing scenarios as described in the PR objectives.

packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py (8)

9-9: LGTM - Import addition for type casting.

The cast import is appropriately used later in the code for type safety.


518-525: LGTM - Interface signature updated for multi-target support.

The updated signature correctly supports both single image flashing and multi-target flashing with optional operator mappings per target.


546-570: LGTM - Enhanced CLI command for multi-target flashing.

The CLI logic properly handles both single file flashing and multi-target specifications using the name:file format. The validation and error handling are appropriate.


609-651: LGTM - Well-structured multi-target flashing implementation.

The implementation correctly handles both single and multi-target flashing scenarios with proper validation. The operator mapping logic and error handling for incompatible parameter combinations are well implemented.


657-657: LGTM - Parameter rename for consistency.

The partition to target parameter rename is consistent with the interface changes.


725-725: LGTM - Decorator correction.

The change from @base.command() to @base.command is correct for the click library.


738-744: LGTM - Proper validation for unsupported features.

The error handling correctly prevents the use of target parameter in StorageMuxFlasherClient, which doesn't support multiple targets.


761-767: LGTM - Consistent parameter handling in dump method.

The same validation pattern is applied to the dump method for consistency.

packages/jumpstarter-driver-flashers/jumpstarter_driver_flashers/client.py (3)

470-470: LGTM - CLI option rename for consistency.

The rename from --partition to --target aligns with the interface changes across the codebase.


482-482: LGTM - Parameter name updated consistently.

The parameter name change matches the CLI option rename.


498-498: LGTM - Backward compatibility maintained.

The internal call correctly maps the new target parameter to the existing partition parameter, maintaining compatibility with the internal implementation.

Signed-off-by: Benny Zlotnik <bzlotnik@redhat.com>
@bennyz bennyz force-pushed the flasher-interface branch from 96f9015 to 67046e5 Compare June 26, 2025 19:10
@bennyz bennyz requested a review from mangelajo July 2, 2025 07:20
Copy link
Copy Markdown
Member

@mangelajo mangelajo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great, thank you

@bennyz bennyz enabled auto-merge July 2, 2025 09:45
@bennyz bennyz merged commit e65ead9 into jumpstarter-dev:main Jul 2, 2025
18 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants