Repository: susumutomita/os
Pull request #8: fix(scripts/launch_qemu.sh): add support for ovmf bios file to launch…
Author: login: susumutomita
Labels: name: enhancement
description: New feature or request
Created: 2025-05-13T23:05:30Z | Merged: 2025-05-13T23:06:49Z

This pull request introduces significant changes to streamline the development workflow, replace Docker-based tasks with local tools, and add support for building and running UEFI targets. Below is a summary of the most important changes, grouped by theme:

### UEFI Target Support
* Added a new target configuration for UEFI in `.cargo/config.toml`, specifying `rustflags`, `build-std` options, and a custom runner script (`scripts/launch_qemu.sh`).
* Introduced the `launch_qemu.sh` script to facilitate running UEFI builds in QEMU, including steps to prepare the environment and execute the emulator.

### Workflow Simplification
* Removed the `docker` job from `.github/workflows/ci.yml`, eliminating Docker-based build and cache steps.
* Updated `Taskfile.yml` to replace Docker-based commands with native tools for linting, formatting, testing, and running tasks. [[1]](diffhunk://#diff-cd2d359855d0301ce190f1ec3b4c572ea690c83747f6df61c9340720e3d2425eL51-R56) [[2]](diffhunk://#diff-cd2d359855d0301ce190f1ec3b4c572ea690c83747f6df61c9340720e3d2425eL70-R86) [[3]](diffhunk://#diff-cd2d359855d0301ce190f1ec3b4c572ea690c83747f6df61c9340720e3d2425eR97-R110)

### Configuration and Cleanup
* Updated `Cargo.toml` to reorganize the panic strategy configuration for `dev` and `release` profiles.
* Added `.cargo/` to the ignore list in `.yamllint.yml` to exclude it from YAML linting.… qemu

feat(scripts/launch_qemu.sh): add support for mounting fat32 partition to qemu

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added automation script to launch a QEMU virtual machine with UEFI firmware.
  - Introduced configuration for building and running Rust binaries targeting UEFI in a virtualized environment.
  - Added new tasks for running and watching Rust binaries locally for UEFI targets.

- **Chores**
  - Updated task runner to use local tools instead of Docker for most linting, formatting, testing, and coverage tasks.
  - Updated configuration to skip linting YAML files in the `.cargo` directory.
  - Rearranged sections in the Cargo configuration for improved organization.

- **Revert**
  - Removed Docker-related continuous integration tasks from the workflow.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/.cargo/config.toml b/.cargo/config.toml
new file mode 100644
index 0000000..18a2a77
--- /dev/null
+++ b/.cargo/config.toml
@@ -0,0 +1,14 @@
+[target.'x86_64-unknown-uefi']
+runner = "bash scripts/launch_qemu.sh"
+rustflags = [
+  "-Cforce-unwind-tables",
+  "-Cforce-frame-pointers",
+  "-Cno-redzone",
+]
+
+[target.'x86_64-unknown-uefi'.unstable]
+build-std = ["core", "compiler_builtins", "alloc", "panic_abort"]
+build-std-features = ["compiler-builtins-mem"]
+
+[target.'cfg(target_os = "uefi")']
+runner = "bash scripts/launch_qemu.sh"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 95cf95b..9d1d4da 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -109,31 +109,3 @@ jobs:
                 coverageSummary +
                 "\n```"
             });
-
-  docker:
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v4
-
-      - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v3
-
-      - name: Set up Docker metadata
-        id: meta
-        uses: docker/metadata-action@v5
-        with:
-          images: ${{ github.repository }}
-          tags: |
-            type=sha,format=long
-            type=ref,event=branch
-            type=ref,event=pr
-
-      - name: Build and cache Docker image
-        uses: docker/build-push-action@v5
-        with:
-          context: .
-          push: false
-          cache-from: type=gha
-          cache-to: type=gha,mode=max
-          tags: ${{ steps.meta.outputs.tags }}
-          labels: ${{ steps.meta.outputs.labels }}
diff --git a/.yamllint.yml b/.yamllint.yml
index 68f4a5d..3621498 100644
--- a/.yamllint.yml
+++ b/.yamllint.yml
@@ -11,3 +11,4 @@ rules:
 ignore: |
   /refs/
   /refs/saba/
+  /.cargo/
diff --git a/Cargo.toml b/Cargo.toml
index 4d51ded..ba3273f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -3,16 +3,15 @@ name = "wasabi"
 version = "0.1.0"
 edition = "2021"
 
-# Add panic strategy
-[profile.dev]
-panic = "abort"
-
-[profile.release]
-panic = "abort"
-
 [dependencies]
 
 [dev-dependencies]
 cargo-husky = { version = "1.5.0", default-features = false, features = [
   "user-hooks",
 ] }
+
+[profile.dev]
+panic = "abort"
+
+[profile.release]
+panic = "abort"
diff --git a/Taskfile.yml b/Taskfile.yml
index 34778b1..6896da3 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -48,14 +48,12 @@ tasks:
 
   lint:yaml:
     cmds:
-      - docker run --rm -v {{.PWD}}:/work giantswarm/yamllint .
+      - yamllint .
 
   lint:rust:
     cmds:
-      - docker compose exec -T os-dev cargo fmt --all -- --check
-      - >-
-        docker compose exec -T os-dev cargo clippy
-        --workspace -- -D warnings
+      - cargo fmt --all -- --check
+      - cargo clippy --workspace -- -D warnings
 
   # ---------------------------
   # format
@@ -67,35 +65,25 @@ tasks:
       - task format:rust
   format:yaml:
     cmds:
-      - >-
-        docker run --rm -v {{.PWD}}:/work giantswarm/yamllint
-        -f parsable . | tee format.yaml
-      - >-
-        docker run --rm -v {{.PWD}}:/work -i giantswarm/yamllint
-        -f parsable . < format.yaml
+      - yamllint -f parsable . | tee format.yaml
+      - yamllint -f parsable . < format.yaml
   format:rust:
     cmds:
-      - docker compose exec -T os-dev cargo fmt --all
-      - >-
-        docker compose exec -T os-dev cargo clippy
-        --workspace -- -D warnings
+      - cargo fmt --all
+      - cargo clippy --workspace -- -D warnings
 
   # ---------------------------
   # Test
   # ---------------------------
   test:
     cmds:
-      - >-
-        docker compose exec -T os-dev cargo test
-        --workspace
+      - cargo test --workspace
 
   test:coverage:
     desc: Run tests with coverage report using cargo-tarpaulin
     cmds:
-      - >-
-        docker compose exec -T os-dev cargo install cargo-tarpaulin --locked
-      - >-
-        docker compose exec -T os-dev cargo tarpaulin --workspace
+      - cargo install cargo-tarpaulin --locked
+      - cargo tarpaulin --workspace
 
   before-commit:
     cmds:
@@ -106,12 +94,20 @@ tasks:
   # Run
   # ---------------------------
   run:
+    cmds:
+      - cargo run -- --target x86_64-unknown-uefi --workspace
+
+  run:watch:
+    cmds:
+      - cargo watch -x "run --workspace"
+
+  run-docker:
     cmds:
       - >-
         docker compose exec -T os-dev cargo run
         --workspace
 
-  run:watch:
+  run-docker:watch:
     cmds:
       - >-
         docker compose exec -T os-dev cargo watch
diff --git a/mnt/EFI/BOOT/BOOTX64.EFI b/mnt/EFI/BOOT/BOOTX64.EFI
index bf9db8a..c7a7d4b 100755
Binary files a/mnt/EFI/BOOT/BOOTX64.EFI and b/mnt/EFI/BOOT/BOOTX64.EFI differ
diff --git a/mnt/NvVars b/mnt/NvVars
index 3a98760..ff2a3c5 100644
Binary files a/mnt/NvVars and b/mnt/NvVars differ
diff --git a/scripts/launch_qemu.sh b/scripts/launch_qemu.sh
new file mode 100644
index 0000000..dacc072
--- /dev/null
+++ b/scripts/launch_qemu.sh
@@ -0,0 +1,13 @@
+#!/bin/bash -e
+PROJ_ROOT="$(dirname $(dirname ${BASH_SOURCE:-$0}))"
+cd "${PROJ_ROOT}"
+
+PATH_TO_EFI="$1"
+rm -rf mnt
+mkdir -p mnt/EFI/BOOT/
+cp ${PATH_TO_EFI} mnt/EFI/BOOT/BOOTX64.EFI
+qemu-system-x86_64 \
+  -m 4G \
+  -bios third_party/ovmf/RELEASEX64_OVMF.fd \
+  -drive format=raw,file=fat:rw:mnt \
+  -device isa-debug-exit,iobase=0xf4,iosize=0x01


Reviews:
user: login: copilot-pull-request-reviewer[bot]
body: ## Pull Request Overview

This PR streamlines the development workflow by replacing Docker-based commands with native tools and adds support for launching UEFI targets with QEMU. Key changes include:
- Introducing the launch_qemu.sh script for mounting a FAT32 partition and booting UEFI builds in QEMU.
- Updating Taskfile.yml to replace Docker commands with native cargo and yamllint commands.
- Reorganizing panic strategy configuration in Cargo.toml, updating YAML linting ignore rules, removing the Docker job from ci.yml, and adding UEFI target configurations in .cargo/config.toml.

### Reviewed Changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

<details>
<summary>Show a summary per file</summary>

| File                              | Description                                                                                   |
| --------------------------------- | --------------------------------------------------------------------------------------------- |
| scripts/launch_qemu.sh            | New script to launch QEMU with UEFI support, mounting the EFI partition for booting.           |
| Taskfile.yml                      | Conversion of Docker-based linting, formatting, testing, and run commands into native equivalents.  |
| Cargo.toml                        | Reorganization of panic strategy settings for dev and release profiles.                        |
| .yamllint.yml                     | Added .cargo/ to the ignore list to prevent linting of generated config files.                 |
| .github/workflows/ci.yml           | Removal of the Docker job to streamline the CI workflow.                                      |
| .cargo/config.toml                | Added UEFI target configurations with a custom runner for QEMU.                                 |
</details>



<details>
<summary>Comments suppressed due to low confidence (1)</summary>

**Taskfile.yml:110**
* [nitpick] The task name 'run-docker:watch' may be inconsistent with the 'run:watch' naming convention used elsewhere. Consider standardizing the task names for clarity.
```
run-docker:watch:
```
</details>


state: COMMENTED
author_association: NONE
submitted_at: 2025-05-13T23:06:05Z
user: login: amazon-q-developer[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-13T23:06:16Z
user: login: amazon-q-developer[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-13T23:06:17Z
user: login: amazon-q-developer[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-13T23:06:48Z
user: login: amazon-q-developer[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-13T23:06:49Z

Review comments:
diff_hunk: @@ -0,0 +1,13 @@
+#!/bin/bash -e
+PROJ_ROOT="$(dirname $(dirname ${BASH_SOURCE:-$0}))"
+cd "${PROJ_ROOT}"
+
+PATH_TO_EFI="$1"
+rm -rf mnt
+mkdir -p mnt/EFI/BOOT/
+cp ${PATH_TO_EFI} mnt/EFI/BOOT/BOOTX64.EFI
path: scripts/launch_qemu.sh
user: login: Copilot
body: Consider quoting the PATH_TO_EFI variable to handle paths with spaces, e.g., cp "${PATH_TO_EFI}" mnt/EFI/BOOT/BOOTX64.EFI.
```suggestion
cp "${PATH_TO_EFI}" mnt/EFI/BOOT/BOOTX64.EFI
```
created_at: 2025-05-13T23:06:05Z
author_association: NONE
diff_hunk: @@ -0,0 +1,14 @@
+[target.'x86_64-unknown-uefi']
+runner = "bash scripts/launch_qemu.sh"
+rustflags = [
+  "-Cforce-unwind-tables",
+  "-Cforce-frame-pointers",
+  "-Cno-redzone",
+]
+
+[target.'x86_64-unknown-uefi'.unstable]
+build-std = ["core", "compiler_builtins", "alloc", "panic_abort"]
+build-std-features = ["compiler-builtins-mem"]
+
+[target.'cfg(target_os = "uefi")']
+runner = "bash scripts/launch_qemu.sh"
path: .cargo/config.toml
user: login: Copilot
body: [nitpick] There appears to be overlapping UEFI target configurations. If both configurations are intended to serve the same purpose, consolidating them may help reduce redundancy.
```suggestion
build-std = ["core", "compiler_builtins", "alloc", "panic_abort"]
build-std-features = ["compiler-builtins-mem"]
```
created_at: 2025-05-13T23:06:05Z
author_association: NONE
diff_hunk: @@ -0,0 +1,13 @@
+#!/bin/bash -e
+PROJ_ROOT="$(dirname $(dirname ${BASH_SOURCE:-$0}))"
+cd "${PROJ_ROOT}"
+
+PATH_TO_EFI="$1"
path: scripts/launch_qemu.sh
user: login: amazon-q-developer[bot]
body: > [!WARNING]
> ****Description:**** No validation for the PATH_TO_EFI argument. Script may fail if the argument is missing or invalid. Add argument validation for PATH_TO_EFI before using it.

****Severity:**** High


created_at: 2025-05-13T23:06:16Z
author_association: NONE
diff_hunk: @@ -0,0 +1,13 @@
+#!/bin/bash -e
+PROJ_ROOT="$(dirname $(dirname ${BASH_SOURCE:-$0}))"
+cd "${PROJ_ROOT}"
+
+PATH_TO_EFI="$1"
+rm -rf mnt
+mkdir -p mnt/EFI/BOOT/
path: scripts/launch_qemu.sh
user: login: amazon-q-developer[bot]
body: ****Description:**** Hard-coded paths and values may reduce script flexibility and maintainability. Consider using variables for paths and configurable values.

****Severity:**** Medium


created_at: 2025-05-13T23:06:17Z
author_association: NONE
diff_hunk: @@ -0,0 +1,13 @@
+#!/bin/bash -e
+PROJ_ROOT="$(dirname $(dirname ${BASH_SOURCE:-$0}))"
+cd "${PROJ_ROOT}"
+
+PATH_TO_EFI="$1"
path: scripts/launch_qemu.sh
user: login: amazon-q-developer[bot]
body: The fix addresses the lack of validation for the PATH_TO_EFI argument. It adds checks to ensure that an argument is provided and that the specified file exists. This prevents the script from failing due to missing or invalid input, improving its robustness and error handling.
```suggestion
PROJ_ROOT="$(dirname $(dirname ${BASH_SOURCE:-$0}))"
cd "${PROJ_ROOT}"

if [ $# -eq 0 ]; then
    echo "Error: PATH_TO_EFI argument is missing"
    exit 1
fi

PATH_TO_EFI="$1"
if [ ! -f "$PATH_TO_EFI" ]; then
    echo "Error: $PATH_TO_EFI does not exist or is not a file"
    exit 1
fi

rm -rf mnt
mkdir -p mnt/EFI/BOOT/
cp ${PATH_TO_EFI} mnt/EFI/BOOT/BOOTX64.EFI
```

created_at: 2025-05-13T23:06:48Z
author_association: NONE
diff_hunk: @@ -0,0 +1,13 @@
+#!/bin/bash -e
+PROJ_ROOT="$(dirname $(dirname ${BASH_SOURCE:-$0}))"
+cd "${PROJ_ROOT}"
+
+PATH_TO_EFI="$1"
+rm -rf mnt
+mkdir -p mnt/EFI/BOOT/
path: scripts/launch_qemu.sh
user: login: amazon-q-developer[bot]
body: The fix addresses the comment by introducing a variable `EFI_DIR` to store the path "mnt/EFI/BOOT". This improves script flexibility and maintainability by centralizing the definition of this path. The `mkdir` and `cp` commands now use this variable, making it easier to modify the path in the future if needed. This change enhances code readability and reduces the risk of errors from hard-coded paths.
```suggestion
cd "${PROJ_ROOT}"

PATH_TO_EFI="$1"
EFI_DIR="mnt/EFI/BOOT"
rm -rf mnt
mkdir -p "${EFI_DIR}"
cp ${PATH_TO_EFI} "${EFI_DIR}/BOOTX64.EFI"
qemu-system-x86_64 \
  -m 4G \
  -bios third_party/ovmf/RELEASEX64_OVMF.fd \
```

created_at: 2025-05-13T23:06:49Z
author_association: NONE

PR comments:
user: login: amazon-q-developer[bot]
created_at: 2025-05-13T23:05:34Z
body: :hourglass_flowing_sand: I'm reviewing this pull request for security vulnerabilities and code quality issues. I'll provide an update when I'm done
author_association: NONE
user: login: coderabbitai[bot]
created_at: 2025-05-13T23:05:37Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- This is an auto-generated comment: failure by coderabbit.ai -->

> [!CAUTION]
> ## Review failed
> 
> The pull request is closed.

<!-- end of auto-generated comment: failure by coderabbit.ai -->
<!-- walkthrough_start -->

"""
## Walkthrough

This update introduces a new Rust build configuration and a QEMU launch script for UEFI development, removes the Docker job from CI, and shifts most Taskfile commands from Docker-based to local execution. It also updates YAML linting configuration to ignore `.cargo/`, and reorders profile sections in `Cargo.toml` without changing their content.

## Changes

| File(s)                                         | Change Summary                                                                                                                   |
|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|
| `.cargo/config.toml`, `scripts/launch_qemu.sh` | Added new Rust target configuration for UEFI and a script to launch QEMU with UEFI firmware and built binaries.                  |
| `.github/workflows/ci.yml`                      | Removed the entire Docker-related CI job from the GitHub Actions workflow.                                                       |
| `.yamllint.yml`                                 | Updated to ignore the `.cargo/` directory during YAML linting.                                                                   |
| `Cargo.toml`                                    | Moved `[profile.dev]` and `[profile.release]` sections to below `[dev-dependencies]` without changing their content.             |
| `Taskfile.yml`                                  | Changed most tasks from Docker-based execution to direct local tool invocations; added new run/run:watch tasks for Rust binaries.|

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant Developer
    participant Taskfile
    participant Cargo
    participant QEMU Script
    participant QEMU

    Developer->>Taskfile: Run lint, format, test, or run tasks
    Taskfile->>Cargo: Invoke cargo/yamllint commands locally
    alt run or run:watch task
        Cargo->>QEMU Script: Build UEFI binary and call launch_qemu.sh
        QEMU Script->>QEMU: Prepare FAT image, launch VM with binary
    end
```

## Poem

> In the warren, tools now run free,  
> No Docker walls for Rust or YAML to see!  
> A QEMU hop with UEFI delight,  
> Scripts and configs keep builds light.  
> The CI’s less cloudy, the tasks more spry—  
> A bunny’s job is never shy!  
> 🐇✨
"""

<!-- walkthrough_end -->
<!-- internal state start -->


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

<!-- internal state end -->
<!-- announcements_start -->

> [!TIP]
> <details>
> <summary>⚡️ Faster reviews with caching</summary>
> 
> - CodeRabbit now supports caching for code and dependencies, helping speed up reviews. This means quicker feedback, reduced wait times, and a smoother review experience overall. Cached data is encrypted and stored securely. This feature will be automatically enabled for all accounts on May 16th. To opt out, configure `Review - Disable Cache` at either the organization or repository level. If you prefer to disable all data retention across your organization, simply turn off the `Data Retention` setting under your Organization Settings.
> 
> Enjoy the performance boost—your workflow just got faster.
> 
> </details>

<!-- announcements_end -->

---

<details>
<summary>📜 Recent review details</summary>

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

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 7c038c25fe278de3b7f9ddeab199c1c0d5fcb9ee and 79686bae632729158074cb27f607156745a2c4e2.

</details>

<details>
<summary>📒 Files selected for processing (6)</summary>

* `.cargo/config.toml` (1 hunks)
* `.github/workflows/ci.yml` (0 hunks)
* `.yamllint.yml` (1 hunks)
* `Cargo.toml` (1 hunks)
* `Taskfile.yml` (3 hunks)
* `scripts/launch_qemu.sh` (1 hunks)

</details>

</details>
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

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.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=susumutomita/os&utm_content=8):

- 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](https://www.coderabbit.ai/contact-us/support) 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](https://docs.coderabbit.ai/finishing-touches/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](https://docs.coderabbit.ai/guides/configure-coderabbit) 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](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: amazon-q-developer[bot]
created_at: 2025-05-13T23:06:18Z
body: :white_check_mark: I finished the code review, and left comments with the issues I found. I will now generate code fix suggestions.
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-13T23:08:02Z
body: **Tarpaulin Coverage Report**
```
0.00% coverage, 0/16 lines covered
```
author_association: NONE