Skip to content

feat: subsample jobs to speed-up scheduler#3112

Merged
fgvieira merged 13 commits intosnakemake:mainfrom
fgvieira:sched_random
Oct 20, 2024
Merged

feat: subsample jobs to speed-up scheduler#3112
fgvieira merged 13 commits intosnakemake:mainfrom
fgvieira:sched_random

Conversation

@fgvieira
Copy link
Copy Markdown
Contributor

@fgvieira fgvieira commented Oct 4, 2024

I am running a workflow with ~700k jobs and, at each given time, there are around 230k jobs ready to be run. The initial building of the DAG is quite slow (~2h, but I'll leave that for another PR 😄), but the main issue is that the scheduler takes a lot of time deciding the next jobs to be submitted.

In my case, all jobs are quite fast and similar in terms of resources, so the cluster is idle most of the time. The greedy scheduler is considerably faster, but still too slow.

The ILP should switch to the greedy after 10s, but it sometimes ignores the timeout (coin-or/Cbc#487) and it has been reported being quite slow instantiating large problems (coin-or/pulp#749). In my case, the ILP runs for 60s (the pulp file is 100Mb) before switching to greedy. Apart from that, and specially on slow file systems, the scheduler can still be quite slow checking all temp and input files.

Here, I propose sampling ready jobs, so that only a subset of jobs (instead of all ready jobs) are evaluated by the scheduler. In my tests, this greatly reduces the scheduler time:

ILP greedy
Native 15 - 20 mins 30s - 1 min
Sampling 1000 jobs 1 - 2 s

QC

  • The PR contains a test case for the changes or the changes are already covered by an existing test case.
  • The documentation (docs/) is updated to reflect the changes or this is not necessary (e.g. if the change does neither modify the language nor the behavior or functionalities of Snakemake).

Summary by CodeRabbit

Summary by CodeRabbit

  • New Features

    • Introduced a new argument --scheduler-subsample to optimize job scheduling by limiting the number of jobs considered for execution.
    • Added a method for inferring resource requirements, enhancing user experience with better error handling.
    • Updated settings to include a new attribute for job subsampling, improving scheduling flexibility.
  • Bug Fixes

    • Improved error handling and logging for resource evaluation and parsing, providing clearer guidance for users.
    • Enhanced job selection process with a subsampling mechanism to optimize scheduling efficiency.
  • Refactor

    • Enhanced structure and organization of job scheduling logic for better integration with existing functionality.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Oct 4, 2024

Walkthrough

The pull request introduces modifications to the snakemake/resources.py, snakemake/scheduler.py, and snakemake/settings/types.py files, enhancing resource management and job scheduling functionalities within the Snakemake framework. Key changes include the addition of the infer_resources method for improved resource inference, updates to existing methods for better error handling, the implementation of job subsampling in the JobScheduler class to optimize job selection, and the introduction of a new subsample attribute in the SchedulingSettings class.

Changes

File Change Summary
snakemake/cli.py - Added --scheduler-subsample argument in get_argument_parser function.
snakemake/resources.py - Added infer_resources(name, value, resources: dict) method for inferring resources.
- Updated eval_resource_expression(val, threads_arg=True) for enhanced error handling.
- Updated parse_resources(resources_args, fallback=None) to include validation checks and specific error raising.
- Added debug logging in infer_resources for runtime value insights.
snakemake/scheduler.py - Modified JobScheduler class to include job subsampling in the schedule method when job count exceeds SNAKEMAKE_SOLVER_MAX_JOBS.
- Updated logging for clearer insights into job selection process.
snakemake/settings/types.py - Added subsample: Optional[int] = None attribute in SchedulingSettings class.
- Added validation check for subsample in _check method of SchedulingSettings class.
- Updated greediness validation in _check method of SchedulingSettings class.
- Modified __post_init__ methods in SchedulingSettings and DeploymentSettings classes for improved initialization.

Possibly related PRs

Suggested reviewers

  • johanneskoester

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @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 generate unit testing code.
    • @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.

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 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.

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: 2

🧹 Outside diff range and nitpick comments (1)
snakemake/scheduler.py (1)

276-278: Consider logging subsampling at 'info' level

Currently, subsampling information is logged at debug level. To make users aware when subsampling affects job scheduling, consider logging this information at info level.

Apply this diff to change the logging level:

-    logger.debug(
+    logger.info(
         f"Ready subsampled jobs: {len(needrun)} (out of {n_total_needrun})"
     )
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 19a2ab7 and 151ad16.

📒 Files selected for processing (2)
  • snakemake/resources.py (0 hunks)
  • snakemake/scheduler.py (1 hunks)
💤 Files with no reviewable changes (1)
  • snakemake/resources.py
🧰 Additional context used
📓 Path-based instructions (1)
snakemake/scheduler.py (1)

Pattern **/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.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

🧹 Outside diff range and nitpick comments (1)
snakemake/scheduler.py (1)

266-280: Consider future performance optimizations

The current implementation significantly improves performance for large workflows. In the future, you might consider additional optimizations:

  1. Implement adaptive subsampling based on the workflow size and available resources.
  2. Explore parallel processing for job selection in extremely large workflows.
  3. Consider caching job priorities to reduce sorting overhead in subsequent scheduling rounds.

These suggestions are not urgent but could be considered for future enhancements.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 151ad16 and 89b02c1.

📒 Files selected for processing (1)
  • snakemake/scheduler.py (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
snakemake/scheduler.py (1)

Pattern **/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

🔇 Additional comments (4)
snakemake/scheduler.py (4)

272-278: LGTM: Efficient job subsampling implementation

The job subsampling logic is well-implemented. It efficiently sorts jobs by priority and selects a subset when necessary. The use of sorted() with a key function is a good practice for performance. The debug logging provides valuable information for troubleshooting.


279-280: LGTM: Consistent logging for job count

This code segment maintains consistent logging whether job subsampling occurs or not. This is good practice for maintaining clear and informative debug output.


266-280: Overall: Good implementation of job subsampling for large workflows

The introduced changes effectively address the PR objective of speeding up the scheduler for workflows with a large number of jobs. The implementation is non-intrusive, maintains existing functionality, and provides flexibility through the use of an environment variable. This approach allows for easy testing and configuration in different environments.


266-271: ⚠️ Potential issue

Consider adding error handling for invalid environment variable values

The current implementation assumes that the SNAKEMAKE_SOLVER_MAX_JOBS environment variable, if set, will always be a valid integer. It's a good practice to add error handling to provide a clear message to the user if an invalid value is provided.

Consider applying this diff to handle invalid values:

 try:
     solver_max_jobs = int(
         os.environ.get("SNAKEMAKE_SOLVER_MAX_JOBS", sys.maxsize)
     )
+except ValueError:
+    raise ValueError(
+        "Invalid value for SNAKEMAKE_SOLVER_MAX_JOBS. It must be an integer."
+    )

Likely invalid or redundant comment.

@fgvieira fgvieira mentioned this pull request Oct 4, 2024
2 tasks
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

🧹 Outside diff range and nitpick comments (1)
snakemake/scheduler.py (1)

279-281: Consider including 'solver_max_jobs' in the debug log message for clarity

Including the value of solver_max_jobs in the debug log message can aid in understanding and debugging the subsampling behavior.

Apply this diff to enhance the log message:

 logger.debug(
-    f"Ready subsampled jobs: {len(needrun)} (out of {n_total_needrun})"
+    f"Ready subsampled jobs: {len(needrun)} (out of {n_total_needrun}), "
+    f"solver_max_jobs: {solver_max_jobs}"
 )
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 89b02c1 and 57e2e05.

📒 Files selected for processing (1)
  • snakemake/scheduler.py (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
snakemake/scheduler.py (1)

Pattern **/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

🔇 Additional comments (1)
snakemake/scheduler.py (1)

268-281: Subsampling ready jobs by priority is correctly implemented

The logic for subsampling ready jobs based on priority is well-implemented, which should enhance the scheduler's performance when handling a large number of jobs.

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: 2

🧹 Outside diff range and nitpick comments (1)
snakemake/cli.py (1)

1422-1431: LGTM! Consider a minor improvement to the help text.

The addition of the --scheduler-subsample argument is well-implemented and aligns with the PR objectives. It provides a useful option for optimizing scheduler performance on large DAGs.

Consider adding a brief example to the help text to make it even more user-friendly. For instance:

 help="Number of jobs to be considered for scheduling. If number of ready "
 "jobs is greater than this value, this number of jobs is randomly chosen "
 "for scheduling; if number of ready jobs is lower, this option has no "
 "effect. This can be useful on very large DAGs, where the scheduler can "
-"take some time selecting which jobs to run.",
+"take some time selecting which jobs to run. Example: --scheduler-subsample 1000",
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 57e2e05 and 7f06876.

📒 Files selected for processing (3)
  • snakemake/cli.py (2 hunks)
  • snakemake/scheduler.py (2 hunks)
  • snakemake/settings/types.py (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • snakemake/scheduler.py
🧰 Additional context used
📓 Path-based instructions (2)
snakemake/cli.py (1)

Pattern **/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

snakemake/settings/types.py (1)

Pattern **/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

🔇 Additional comments (4)
snakemake/cli.py (2)

2145-2147: LGTM! Proper integration of the new scheduler subsample parameter.

The new subsample parameter has been correctly added to the SchedulingSettings class and is properly populated with the value from args.scheduler_subsample. This ensures that the command-line argument is effectively passed to the scheduler.


Line range hint 1-2484: Overall, excellent implementation of the scheduler subsample feature.

The changes to snakemake/cli.py are focused, minimal, and well-integrated into the existing codebase. The new --scheduler-subsample argument is properly added to the parser and correctly passed to the scheduler settings. This implementation aligns well with the PR objectives and should effectively address the performance issues in workflows with a large number of jobs.

snakemake/settings/types.py (2)

302-302: Addition of the subsample attribute looks good.

The subsample attribute is appropriately added to the SchedulingSettings class with the correct type annotation and default value.


320-321: ⚠️ Potential issue

Correct the typo in attribute name 'greedyness' to 'greediness'.

In the _check method, the attribute self.greedyness is misspelled. This typo will lead to an AttributeError at runtime since self.greediness is the correct attribute name.

Apply this diff to fix the typo:

         def _check(self):
-            if not (0 < self.greedyness <= 1.0):
+            if not (0 < self.greediness <= 1.0):
                 raise ApiError("greediness must be >0 and <=1")
             if self.subsample is not None:
                 if self.subsample <= 0:
                     raise ApiError("subsample must be >0")

Likely invalid or redundant comment.

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: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 7f06876 and c664d2f.

📒 Files selected for processing (2)
  • snakemake/cli.py (2 hunks)
  • snakemake/settings/types.py (2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
snakemake/cli.py (1)

Pattern **/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

snakemake/settings/types.py (1)

Pattern **/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

🔇 Additional comments (4)
snakemake/settings/types.py (1)

302-302: LGTM: New attribute subsample added.

The addition of the subsample attribute is consistent with the docstring description and properly typed as Optional[int] with a default value of None.

snakemake/cli.py (3)

1422-1431: New CLI argument added for scheduler subsampling.

A new command-line argument --scheduler-subsample has been added to allow users to set the number of jobs to be considered for scheduling. This can be useful for large DAGs where the scheduler might take a long time to select jobs.

The implementation looks correct and includes:

  • Appropriate type (int)
  • Default value (None)
  • Clear help text explaining the purpose and effect of the argument

2145-2146: SchedulingSettings updated to include new subsample parameter.

The SchedulingSettings class has been updated to include the new subsample parameter, which corresponds to the --scheduler-subsample CLI argument.

This change ensures that the new CLI argument is properly passed to the scheduling settings and can be used by the scheduler.


Line range hint 1422-2146: Overall assessment: Well-implemented feature for scheduler subsampling.

The changes introduce a new CLI argument --scheduler-subsample and update the SchedulingSettings to support job subsampling during the scheduling process. This feature can be particularly useful for large workflows where the scheduler might take a long time to select jobs.

The implementation is clean, consistent with the existing code style, and provides clear documentation for users. It adds flexibility to the Snakemake CLI without introducing unnecessary complexity.

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: 1

🧹 Outside diff range and nitpick comments (1)
snakemake/settings/types.py (1)

292-294: Improve docstring formatting for better readability.

The docstring for the SchedulingSettings class has some formatting issues. Please consider the following improvements:

  1. Ensure consistent indentation for parameter descriptions.
  2. Remove the extra quotation mark at the end of the subsample description.
  3. Use consistent punctuation at the end of each parameter description.

Apply this diff to improve the formatting:

-        Set the greediness of scheduling. This value, between 0 and 1, determines how careful jobs are selected for execution. The default value (0.5 if prioritytargets are used, 1.0 else) provides the best speed and still acceptable scheduling quality.
+        Set the greediness of scheduling. This value, between 0 and 1, determines how carefully jobs are selected for execution.
+        The default value (0.5 if prioritytargets are used, 1.0 else) provides the best speed and still acceptable scheduling quality.
     subsample:
-        Set the number of jobs to be considered for scheduling. If number of ready jobs is greater than this value, this number of jobs is randomly chosen for scheduling; if number of ready jobs is lower, this option has no effect. This can be useful on very large DAGs, where the scheduler can take some time selecting which jobs to run."
+        Set the number of jobs to be considered for scheduling. If the number of ready jobs is greater than this value,
+        this number of jobs is randomly chosen for scheduling; if the number of ready jobs is lower, this option has no effect.
+        This can be useful on very large DAGs, where the scheduler can take some time selecting which jobs to run.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between c664d2f and a10a70c.

📒 Files selected for processing (1)
  • snakemake/settings/types.py (2 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
snakemake/settings/types.py (1)

Pattern **/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

🔇 Additional comments (1)
snakemake/settings/types.py (1)

302-302: LGTM: New subsample attribute added.

The addition of the subsample attribute is consistent with the docstring changes and provides a useful feature for improving scheduling performance in large DAGs.

@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud bot commented Oct 17, 2024

Quality Gate Passed Quality Gate passed

Issues
0 New issues
0 Accepted issues

Measures
0 Security Hotspots
No data about Coverage
0.0% Duplication on New Code

See analysis details on SonarCloud

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: 1

🧹 Outside diff range and nitpick comments (1)
snakemake/settings/types.py (1)

292-294: Remove extra quotation mark and improve clarity in docstring.

The docstring for subsample contains an extra quotation mark at the end. Additionally, the description can be slightly improved for clarity.

Apply this diff to fix the issues:

         subsample:
-        Set the number of jobs to be considered for scheduling. If number of ready jobs is greater than this value, this number of jobs is randomly chosen for scheduling; if number of ready jobs is lower, this option has no effect. This can be useful on very large DAGs, where the scheduler can take some time selecting which jobs to run."
+        Set the number of jobs to consider for scheduling. If the number of ready jobs exceeds this value, a random subset of jobs equal to `subsample` is selected for scheduling. If the number of ready jobs is lower, this option has no effect. This can be useful on very large DAGs, where the scheduler can take significant time deciding which jobs to run.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between a10a70c and 4a29e7c.

📒 Files selected for processing (1)
  • snakemake/settings/types.py (2 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
snakemake/settings/types.py (1)

Pattern **/*.py: Do not try to improve formatting.
Do not suggest type annotations for functions that are defined inside of functions or methods.
Do not suggest type annotation of the self argument of methods.
Do not suggest type annotation of the cls argument of classmethods.
Do not suggest return type annotation if a function or method does not contain a return statement.

🪛 Ruff
snakemake/settings/types.py

320-321: Use a single if statement instead of nested if statements

(SIM102)

🔇 Additional comments (2)
snakemake/settings/types.py (2)

302-302: LGTM: New subsample attribute added.

The addition of the subsample attribute as an optional integer with a default value of None is well-implemented. This aligns with the PR objectives of enhancing scheduler performance for large DAGs by allowing subsampling of jobs for scheduling.


Line range hint 292-322: Summary: Well-implemented subsample feature for enhancing scheduler performance.

The changes in this file successfully implement the subsample feature for enhancing scheduler performance on large DAGs. The new attribute is properly documented, typed, and validated. The minor suggestions provided will further improve code clarity and consistency.

Overall, these changes align well with the PR objectives and should significantly improve scheduling time for workflows with a large number of jobs.

@fgvieira fgvieira merged commit e10feef into snakemake:main Oct 20, 2024
@fgvieira fgvieira deleted the sched_random branch October 20, 2024 17:17
johanneskoester pushed a commit that referenced this pull request Oct 21, 2024
🤖 I have created a release *beep* *boop*
---


##
[8.24.0](v8.23.2...v8.24.0)
(2024-10-21)


### Features

* subsample jobs to speed-up scheduler
([#3112](#3112))
([e10feef](e10feef))


### Documentation

* addition of interction/visualization/reporting tutorial
([#3159](#3159))
([1d94bd1](1d94bd1))
* fix tutorial step numbering
([2d7b9e9](2d7b9e9))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants