Skip to content

Fix setup-rust docs and openbsd build#31

Merged
leynos merged 5 commits intomainfrom
codex/address-code-review-comments
Jul 26, 2025
Merged

Fix setup-rust docs and openbsd build#31
leynos merged 5 commits intomainfrom
codex/address-code-review-comments

Conversation

@leynos
Copy link
Copy Markdown
Owner

@leynos leynos commented Jul 25, 2025

Summary

  • remove undocumented BUILD_PROFILE input from README
  • document pinned nightly toolchain for OpenBSD
  • dynamically resolve nightly toolchain path
  • guard OpenBSD stdlib copy with existence check
  • reorder changelog entries

Testing

  • pytest -q

https://chatgpt.com/codex/tasks/task_e_6882b2efff9883228658e1a7a2016234

Summary by Sourcery

Improve OpenBSD cross-compilation support in the setup-rust action by pinning and dynamically resolving the nightly toolchain, adding error checks for stdlib copying, cleaning up undocumented inputs, and reordering changelog entries.

Enhancements:

  • Pin the OpenBSD nightly toolchain to a specific date and expose its path via environment variables
  • Dynamically set NIGHTLY_SYSROOT from the installed toolchain for caching
  • Add a directory existence check before copying OpenBSD stdlib build artifacts

Documentation:

  • Remove the undocumented BUILD_PROFILE input from README
  • Document the pinned nightly toolchain (nightly-2025-07-20) for OpenBSD in README

Chores:

  • Reorder entries in the setup-rust CHANGELOG

@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai Bot commented Jul 25, 2025

Reviewer's Guide

This PR refactors the OpenBSD setup in the GitHub Action by pinning and exporting a nightly toolchain, computing its sysroot dynamically, updating caching and installation steps to use this sysroot, and hardening the stdlib copy with an existence check, while also cleaning up documentation and the changelog.

Sequence diagram for OpenBSD stdlib build and installation in setup-rust action

sequenceDiagram
    participant Runner as GitHub Runner (Linux)
    participant Rustup
    participant RustSource as Rust Source
    participant Cache
    participant Env as GitHub Env

    Runner->>Env: Set OPENBSD_NIGHTLY=nightly-2025-07-20
    Runner->>Rustup: rustup toolchain install "$OPENBSD_NIGHTLY"
    Runner->>Env: Set NIGHTLY_SYSROOT from rustc +$OPENBSD_NIGHTLY --print sysroot
    Runner->>Cache: Restore cache at $NIGHTLY_SYSROOT/lib/rustlib/x86_64-unknown-openbsd
    alt Cache miss
        Runner->>RustSource: Clone Rust repo
        Runner->>RustSource: Build OpenBSD stdlib
        RustSource->>Runner: Build artifacts at ARTIFACT_DIR
        Runner->>Runner: Check if ARTIFACT_DIR exists
        alt ARTIFACT_DIR exists
            Runner->>Runner: mkdir -p $NIGHTLY_SYSROOT/lib/rustlib/x86_64-unknown-openbsd
            Runner->>Runner: Copy artifacts to sysroot
        else ARTIFACT_DIR missing
            Runner->>Runner: Exit with error
        end
    end
    Runner->>Rustup: rustup target add x86_64-unknown-openbsd --toolchain $OPENBSD_NIGHTLY
Loading

Class diagram for environment and caching variables in setup-rust action

classDiagram
    class Env {
      +OPENBSD_NIGHTLY: string
      +NIGHTLY_SYSROOT: string
    }
    class Cache {
      +path: string
      +key: string
    }
    Env <|-- Cache : uses
    Env : +exported to GITHUB_ENV
    Cache : +uses $NIGHTLY_SYSROOT for path
Loading

File-Level Changes

Change Details Files
Pin and export a fixed nightly toolchain for OpenBSD
  • Define OPENBSD_NIGHTLY variable with specific date
  • Install toolchain using OPENBSD_NIGHTLY instead of generic nightly
  • Export OPENBSD_NIGHTLY and its sysroot (NIGHTLY_SYSROOT) to GITHUB_ENV
.github/actions/setup-rust/action.yml
Use dynamic sysroot path for caching and copying stdlib
  • Replace hard-coded toolchain path with ${{ env.NIGHTLY_SYSROOT }}
  • Update cache key to reference dynamic path
  • Adjust cp and mkdir commands to use NIGHTLY_SYSROOT
.github/actions/setup-rust/action.yml
Guard OpenBSD stdlib copy step with existence check
  • Introduce ARTIFACT_DIR variable for build output path
  • Add if-block to error out if ARTIFACT_DIR is missing
  • Only proceed to mkdir and cp when artifacts exist
.github/actions/setup-rust/action.yml
Clean up documentation and inputs
  • Remove undocumented BUILD_PROFILE input from README
  • Document pinned nightly toolchain usage in README example
.github/actions/setup-rust/README.md
Reorder and bump versions in changelog
  • Swap and renumber v1.0.6–v1.0.8 entries
  • Update version headings to match new order
.github/actions/setup-rust/CHANGELOG.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jul 25, 2025

Summary by CodeRabbit

  • New Features
    • Added a configurable input to specify the nightly Rust toolchain version for OpenBSD cross-compilation.
    • Introduced a script to safely copy OpenBSD standard library build artefacts.
  • Documentation
    • Updated documentation to reflect the new input for OpenBSD nightly toolchain selection.
    • Improved changelog entries and corrected their order.
  • Bug Fixes
    • Removed duplicate changelog entries and clarified version notes.
  • Tests
    • Added tests to verify the correctness and safety of the new standard library copy script.
  • Chores
    • Pinned the setup of the uv tool to a specific version for improved reliability.

Walkthrough

Reorder changelog entries in the setup-rust action to correct their chronological sequence. Update the README to clarify that a pinned nightly Rust toolchain is used for OpenBSD, and remove the BUILD_PROFILE input. Modify the action to pin the nightly toolchain version, use dynamic sysroot paths, and improve error handling during OpenBSD standard library builds.

Changes

File(s) Change Summary
.github/actions/setup-rust/CHANGELOG.md Corrected the order of changelog entries for versions v1.0.4, v1.0.5, v1.0.6, and v1.0.8; no content changes.
.github/actions/setup-rust/README.md Updated OpenBSD toolchain description to specify pinned nightly version; removed BUILD_PROFILE input from documentation.
.github/actions/setup-rust/action.yml Pinned OpenBSD nightly toolchain version, used environment variables for toolchain and sysroot, improved error handling.
.github/actions/setup-rust/scripts/copy_openbsd_stdlib.py Added new Python CLI script to copy OpenBSD stdlib build artifacts into the nightly sysroot directory.
.github/actions/setup-rust/tests/conftest.py Added test utilities including root directory finder and shell stub fixture for testing environment setup.
.github/actions/setup-rust/tests/test_copy_stdlib.py Added tests for the copy OpenBSD stdlib script verifying success and failure scenarios.

Sequence Diagram(s)

sequenceDiagram
    participant Workflow
    participant SetupRustAction
    participant Rustup
    participant ShellScript

    Workflow->>SetupRustAction: Start action
    SetupRustAction->>Rustup: Install pinned nightly toolchain (nightly-2025-07-20)
    SetupRustAction->>Rustup: Add OpenBSD target using pinned nightly
    SetupRustAction->>ShellScript: Build OpenBSD stdlib from source
    ShellScript->>ShellScript: Check for build artifact directory
    alt Directory exists
        ShellScript->>Rustup: Copy build artifacts to dynamic sysroot path
    else Directory missing
        ShellScript->>Workflow: Print error and exit
    end
    SetupRustAction->>Workflow: Export environment variables for toolchain and sysroot
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Possibly related PRs

Poem

Rusty nights now pinned in time,
Sysroots found by clever rhyme.
Changelogs march in ordered rows,
Error checks where caution grows.
Let OpenBSD builds proceed,
With nightly paths and docs that lead!
🦀✨

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codex/address-code-review-comments

🪧 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 generate unit tests to generate unit tests for 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.

Copy link
Copy Markdown
Contributor

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

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

Hey @leynos - I've reviewed your changes and found some issues that need to be addressed.

Blocking issues:

  • Add tests to cover the new error handling for missing OpenBSD build artifacts. (link)

General comments:

  • Hardcoding the OPENBSD_NIGHTLY date in action.yml will force manual updates whenever that nightly changes—consider exposing it as an input or deriving it automatically to reduce maintenance.
  • The CHANGELOG entries are out of order (v1.0.8 appears before v1.0.6) which can confuse readers—please reorder them chronologically.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- Hardcoding the OPENBSD_NIGHTLY date in action.yml will force manual updates whenever that nightly changes—consider exposing it as an input or deriving it automatically to reduce maintenance.
- The CHANGELOG entries are out of order (v1.0.8 appears before v1.0.6) which can confuse readers—please reorder them chronologically.

## Individual Comments

### Comment 1
<location> `.github/actions/setup-rust/action.yml:109` </location>
<code_context>
-        cp -r build/$HOST_TRIPLE/stage1/lib/rustlib/x86_64-unknown-openbsd/* \
-          ~/.rustup/toolchains/nightly/lib/rustlib/x86_64-unknown-openbsd/
+        ARTIFACT_DIR="build/$HOST_TRIPLE/stage1/lib/rustlib/x86_64-unknown-openbsd"
+        if [ ! -d "$ARTIFACT_DIR" ]; then
+          echo "Error: Build artifacts not found at $ARTIFACT_DIR"
+          exit 1
</code_context>

<issue_to_address>
Add tests to cover the new error handling for missing OpenBSD build artifacts.

The new check for the existence of $ARTIFACT_DIR and the error message/exit is a change in behaviour. You must add tests to ensure this error path is exercised and behaves as expected.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment thread .github/actions/setup-rust/action.yml Outdated
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: 4

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between ae45ea1 and e6936a2.

📒 Files selected for processing (3)
  • .github/actions/setup-rust/CHANGELOG.md (1 hunks)
  • .github/actions/setup-rust/README.md (1 hunks)
  • .github/actions/setup-rust/action.yml (3 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
.github/actions/*/README.md

📄 CodeRabbit Inference Engine (AGENTS.md)

.github/actions/*/README.md: Each action must have a README.md containing a one-liner summary, table of inputs, table of outputs, usage example with uses: ./.github/actions/<name>@<major>, and a release history link to CHANGELOG.
Add a DEPRECATED: banner to README and repository description when deprecating an action.

Files:

  • .github/actions/setup-rust/README.md
.github/actions/*/CHANGELOG.md

📄 CodeRabbit Inference Engine (AGENTS.md)

Each action must have a CHANGELOG.md that follows SemVer-based changelog for that action only.

Files:

  • .github/actions/setup-rust/CHANGELOG.md
.github/actions/*/action.yml

📄 CodeRabbit Inference Engine (AGENTS.md)

.github/actions/*/action.yml: Each action must have an action.yml file containing every input and output, with required ones clearly marked.
Composite actions referencing sibling scripts must use ${{ github.action_path }} for portability.

Files:

  • .github/actions/setup-rust/action.yml
🪛 LanguageTool
.github/actions/setup-rust/README.md

[typographical] ~58-~58: The word ‘When’ starts a question. Add a question mark (“?”) at the end of the sentence.
Context: ...arget is readily available on later runs. ```yaml # Bring in MSYS2 plus th...

(WRB_QUESTION_MARK)

.github/actions/setup-rust/CHANGELOG.md

[typographical] ~4-~4: To join two clauses or introduce examples, consider using an em dash.
Context: # Changelog ## v1.0.8 - 2025-07-24 - Build OpenBSD standard lib...

(DASH_RULE)


[typographical] ~8-~8: To join two clauses or introduce examples, consider using an em dash.
Context: ...e updated library/std path. ## v1.0.7 - 2025-07-24 - Quote boolean defaults in ...

(DASH_RULE)


[typographical] ~12-~12: To join two clauses or introduce examples, consider using an em dash.
Context: ...ml` to avoid type mismatches. ## v1.0.6 - 2025-07-24 - Cache OpenBSD standard lib...

(DASH_RULE)


[typographical] ~19-~19: To join two clauses or introduce examples, consider using an em dash.
Context: ...x README example indentation. ## v1.0.5 - 2025-07-24 - Install macOS cross build ...

(DASH_RULE)


[typographical] ~30-~30: To join two clauses or introduce examples, consider using an em dash.
Context: ...ninput (defaultv0.0.10`). ## v1.0.4 - 2025-06-21 - Optionally install SQLite ...

(DASH_RULE)

🔇 Additional comments (1)
.github/actions/setup-rust/action.yml (1)

99-101: Guard cache path against undefined NIGHTLY_SYSROOT

path: ${{ env.NIGHTLY_SYSROOT }}/lib/... relies on NIGHTLY_SYSROOT being exported in an earlier step. If the nightly installation fails, cache resolution expands to /lib/..., polluting the workspace. Add if: env.NIGHTLY_SYSROOT != '' or exit early when the install step fails.

Comment thread .github/actions/setup-rust/action.yml
Comment on lines +108 to 115
ARTIFACT_DIR="build/$HOST_TRIPLE/stage1/lib/rustlib/x86_64-unknown-openbsd"
if [ ! -d "$ARTIFACT_DIR" ]; then
echo "Error: Build artifacts not found at $ARTIFACT_DIR"
exit 1
fi
mkdir -p "$NIGHTLY_SYSROOT/lib/rustlib/x86_64-unknown-openbsd"
cp -r "$ARTIFACT_DIR"/* "$NIGHTLY_SYSROOT/lib/rustlib/x86_64-unknown-openbsd/"
- name: Add OpenBSD target
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Copy artefacts atomically to avoid half-written stdlib

Copying with cp -r risks leaving a partial tree if the job is cancelled. Use rsync -a --delete into a temporary directory and move it into place, or copy into ${NIGHTLY_SYSROOT}/lib/rustlib/x86_64-unknown-openbsd.new and mv it afterwards to ensure consumers only ever see a complete stdlib.

🤖 Prompt for AI Agents
In .github/actions/setup-rust/action.yml around lines 108 to 115, the current
use of 'cp -r' to copy build artifacts can result in partial copies if
interrupted. To fix this, copy the artifacts into a temporary directory such as
'${NIGHTLY_SYSROOT}/lib/rustlib/x86_64-unknown-openbsd.new' using 'rsync -a
--delete' for atomicity, then move the temporary directory to replace the
original directory with 'mv' to ensure consumers only see a complete stdlib.

Comment on lines 19 to 26
## v1.0.5 - 2025-07-24

- Install macOS cross build toolchain via `with-darwin`.
- Build OpenBSD standard library and add target via `with-openbsd`.

## v1.0.4 - 2025-06-21

- Optionally install SQLite development libraries on Windows via MSYS2 using the
`install-sqlite-deps` input.

## v1.0.5 – 2025-07-22

- Integrate `sccache` on non-release runs to speed up compilation.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Remove duplicate version heading to preserve SemVer chronology

Two distinct entries use the tag v1.0.5 (lines 19 and 24). This breaks SemVer, confuses consumers and tooling, and renders the release history ambiguous.

Apply a unique version (e.g. rename the 2025-07-22 section to v1.0.4 and bump later entries) or merge the bullet points under a single correct heading.

-## v1.0.5 – 2025-07-22
+## v1.0.4 – 2025-07-22
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## v1.0.5 - 2025-07-24
- Install macOS cross build toolchain via `with-darwin`.
- Build OpenBSD standard library and add target via `with-openbsd`.
## v1.0.4 - 2025-06-21
- Optionally install SQLite development libraries on Windows via MSYS2 using the
`install-sqlite-deps` input.
## v1.0.5 – 2025-07-22
- Integrate `sccache` on non-release runs to speed up compilation.
## v1.0.5 - 2025-07-24
- Install macOS cross build toolchain via `with-darwin`.
- Build OpenBSD standard library and add target via `with-openbsd`.
## v1.0.4 – 2025-07-22
- Integrate `sccache` on non-release runs to speed up compilation.
🧰 Tools
🪛 LanguageTool

[typographical] ~19-~19: To join two clauses or introduce examples, consider using an em dash.
Context: ...x README example indentation. ## v1.0.5 - 2025-07-24 - Install macOS cross build ...

(DASH_RULE)

🤖 Prompt for AI Agents
In .github/actions/setup-rust/CHANGELOG.md around lines 19 to 26, there are two
entries with the same version tag v1.0.5, which breaks SemVer and causes
confusion. To fix this, rename the earlier entry dated 2025-07-22 to v1.0.4 and
adjust subsequent version numbers accordingly, or merge the bullet points under
a single v1.0.5 heading to maintain unique and chronological version tags.

Comment thread .github/actions/setup-rust/README.md Outdated
@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Jul 25, 2025

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jul 25, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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

♻️ Duplicate comments (1)
.github/actions/setup-rust/CHANGELOG.md (1)

20-25: Fix the duplicate version tags.

Two entries still use the same version tag v1.0.5 (lines 20 and 25) with different dates. This breaks semantic versioning and creates ambiguity in the release history.

Apply this diff to resolve the duplication:

-## v1.0.5 – 2025-07-22
+## v1.0.4 – 2025-07-22

Then update the existing v1.0.4 entry at line 31 to v1.0.3 and adjust subsequent versions accordingly.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between e6936a2 and f2673ff.

📒 Files selected for processing (6)
  • .github/actions/setup-rust/CHANGELOG.md (1 hunks)
  • .github/actions/setup-rust/README.md (2 hunks)
  • .github/actions/setup-rust/action.yml (4 hunks)
  • .github/actions/setup-rust/scripts/copy_openbsd_stdlib.py (1 hunks)
  • .github/actions/setup-rust/tests/conftest.py (1 hunks)
  • .github/actions/setup-rust/tests/test_copy_stdlib.py (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
.github/actions/setup-rust/tests/conftest.py (1)
shellstub.py (1)
  • StubManager (39-153)
🪛 LanguageTool
.github/actions/setup-rust/CHANGELOG.md

[typographical] ~4-~4: To join two clauses or introduce examples, consider using an em dash.
Context: # Changelog ## v1.0.8 - 2025-07-24 - Build OpenBSD standard lib...

(DASH_RULE)


[typographical] ~9-~9: To join two clauses or introduce examples, consider using an em dash.
Context: ...the pinned nightly toolchain. ## v1.0.7 - 2025-07-24 - Quote boolean defaults in ...

(DASH_RULE)


[typographical] ~13-~13: To join two clauses or introduce examples, consider using an em dash.
Context: ...ml` to avoid type mismatches. ## v1.0.6 - 2025-07-24 - Cache OpenBSD standard lib...

(DASH_RULE)


[typographical] ~20-~20: To join two clauses or introduce examples, consider using an em dash.
Context: ...x README example indentation. ## v1.0.5 - 2025-07-24 - Install macOS cross build ...

(DASH_RULE)


[typographical] ~31-~31: To join two clauses or introduce examples, consider using an em dash.
Context: ...ninput (defaultv0.0.10`). ## v1.0.4 - 2025-06-21 - Optionally install SQLite ...

(DASH_RULE)

🪛 Ruff (0.12.2)
.github/actions/setup-rust/tests/conftest.py

25-25: Missing return type annotation for public function shell_stubs

(ANN201)

.github/actions/setup-rust/scripts/copy_openbsd_stdlib.py

11-11: Move standard library import pathlib.Path into a type-checking block

Move into type-checking block

(TC003)

.github/actions/setup-rust/tests/test_copy_stdlib.py

9-9: Missing docstring in public function

(D103)


11-11: subprocess call: check for execution of untrusted input

(S603)


14-14: Missing docstring in public function

(D103)


29-29: Missing docstring in public function

(D103)

🔇 Additional comments (12)
.github/actions/setup-rust/README.md (2)

18-18: Documentation accurately reflects the new input parameter.

The addition of the openbsd-nightly input parameter with its default value properly documents the pinned nightly toolchain approach for OpenBSD builds.


56-58: Clear explanation of the OpenBSD nightly toolchain usage.

The updated description properly explains how the action uses the configurable nightly toolchain version for OpenBSD standard library builds, improving clarity over the previous generic description.

.github/actions/setup-rust/tests/conftest.py (1)

12-17: Root finding logic is robust and well-implemented.

The function correctly traverses the directory hierarchy looking for standard project markers (pyproject.toml or .git) and provides clear error handling when no root is found.

.github/actions/setup-rust/tests/test_copy_stdlib.py (3)

9-11: Test helper function works correctly for script execution.

The function properly uses uv run --script to execute the copy script in isolation with captured output.


14-26: Comprehensive test of successful copying behaviour.

The test creates a realistic directory structure, executes the script, and verifies both successful execution and correct file placement in the expected sysroot location.


29-37: Proper error handling test for missing artifacts.

The test correctly verifies that the script exits with error code 1 and provides an appropriate error message when the source directory doesn't exist.

.github/actions/setup-rust/scripts/copy_openbsd_stdlib.py (3)

1-6: Proper script setup with clear dependencies.

The uv script metadata correctly specifies Python 3.12+ requirement and the typer dependency needed for the CLI interface.


18-23: Robust error handling for missing source directory.

The function properly validates the artifact directory exists before proceeding and provides clear error messaging when it doesn't.


25-35: Correct implementation of recursive copying logic.

The script properly creates the target directory structure and handles both files and directories with appropriate shutil functions. The dirs_exist_ok=True parameter correctly allows merging of existing directories.

.github/actions/setup-rust/action.yml (3)

32-35: Expose nightly version as configurable input – good upgrade

Input openbsd-nightly removes the hard-coded date and lets callers override the default.
Documentation update already landed, so no further action needed.


103-103: Cache path now parameterised – looks correct

The cache key tracks the resolved sysroot, matching the earlier env export. No issues spotted.


117-117: Target addition wired to pinned toolchain – OK

rustup target add … --toolchain ${{ env.OPENBSD_NIGHTLY }} correctly uses the earlier export.
No further changes required.

Comment thread .github/actions/setup-rust/action.yml
Comment thread .github/actions/setup-rust/action.yml
Comment thread .github/actions/setup-rust/tests/conftest.py
Comment thread .github/actions/setup-rust/tests/test_copy_stdlib.py
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: 3

♻️ Duplicate comments (1)
.github/actions/setup-rust/tests/test_copy_stdlib.py (1)

9-11: Add docstring to the helper function.

The run_script function lacks documentation. Add a docstring to explain its purpose and parameters.

 def run_script(script: Path, *args: str) -> subprocess.CompletedProcess[str]:
+    """Execute a script using uv run and return the completed process."""
     cmd = ["uv", "run", "--script", str(script), *args]
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between f2673ff and 0196628.

📒 Files selected for processing (3)
  • .github/actions/setup-rust/CHANGELOG.md (1 hunks)
  • .github/actions/setup-rust/scripts/copy_openbsd_stdlib.py (1 hunks)
  • .github/actions/setup-rust/tests/test_copy_stdlib.py (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
.github/actions/*/CHANGELOG.md

📄 CodeRabbit Inference Engine (AGENTS.md)

Each action must have a CHANGELOG.md that follows SemVer-based changelog for that action only.

Files:

  • .github/actions/setup-rust/CHANGELOG.md
.github/actions/*/tests/**

📄 CodeRabbit Inference Engine (AGENTS.md)

.github/actions/*/tests/**: Tests for each action must be present in a tests/ directory within the action's directory.
Contract tests must validate that declared inputs and outputs round-trip correctly.

Files:

  • .github/actions/setup-rust/tests/test_copy_stdlib.py
🪛 LanguageTool
.github/actions/setup-rust/CHANGELOG.md

[typographical] ~4-~4: To join two clauses or introduce examples, consider using an em dash.
Context: # Changelog ## v1.0.8 - 2025-07-24 - Build OpenBSD standard lib...

(DASH_RULE)


[typographical] ~9-~9: To join two clauses or introduce examples, consider using an em dash.
Context: ...the pinned nightly toolchain. ## v1.0.7 - 2025-07-24 - Quote boolean defaults in ...

(DASH_RULE)


[typographical] ~13-~13: To join two clauses or introduce examples, consider using an em dash.
Context: ...ml` to avoid type mismatches. ## v1.0.6 - 2025-07-24 - Cache OpenBSD standard lib...

(DASH_RULE)


[typographical] ~20-~20: To join two clauses or introduce examples, consider using an em dash.
Context: ...x README example indentation. ## v1.0.5 - 2025-07-24 - Install macOS cross build ...

(DASH_RULE)

🪛 Ruff (0.12.2)
.github/actions/setup-rust/tests/test_copy_stdlib.py

9-9: Missing docstring in public function

(D103)


11-11: subprocess call: check for execution of untrusted input

(S603)


14-14: Missing docstring in public function

(D103)


29-29: Missing docstring in public function

(D103)


47-47: Missing docstring in public function

(D103)

.github/actions/setup-rust/scripts/copy_openbsd_stdlib.py

14-14: Move standard library import pathlib.Path into a type-checking block

Move into type-checking block

(TC003)


36-36: subprocess call: check for execution of untrusted input

(S603)

🔇 Additional comments (5)
.github/actions/setup-rust/CHANGELOG.md (1)

4-26: LGTM! Changelog entries properly reordered and duplicate versions resolved.

The changelog entries are now correctly ordered chronologically, and the duplicate v1.0.5 issue from previous reviews has been resolved. The v1.0.8 entry properly documents the OpenBSD-related changes including the new openbsd-nightly input and updated build path.

.github/actions/setup-rust/tests/test_copy_stdlib.py (1)

14-55: Excellent test coverage for the copy script.

The tests comprehensively cover the main scenarios: successful copying, overwriting existing content, and handling missing source directories. The test logic correctly validates both success and failure paths.

.github/actions/setup-rust/scripts/copy_openbsd_stdlib.py (3)

26-28: Excellent error handling for missing artifacts.

The guard condition properly checks for the existence of the source directory and provides a clear error message, preventing potential errors during the build process as mentioned in the PR objectives.


34-40: Robust atomic copy implementation.

The use of a temporary directory with rsync followed by atomic rename ensures consumers never see partially copied standard library files. This is a solid approach for maintaining build consistency.


14-16: Reorganise imports for better grouping.

Move the standard library import into the correct group according to PEP 8.

+import shutil
+import subprocess
 from pathlib import Path
-import shutil
-import subprocess

Likely an incorrect or invalid review comment.

Comment thread .github/actions/setup-rust/tests/test_copy_stdlib.py
Comment thread .github/actions/setup-rust/tests/test_copy_stdlib.py
Comment thread .github/actions/setup-rust/tests/test_copy_stdlib.py
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

♻️ Duplicate comments (1)
.github/actions/setup-rust/action.yml (1)

113-115: Install uv before script execution.

The script uses uv run which requires uv to be available on the runner. GitHub Actions runners don't include uv by default.

Add uv installation before script execution:

+        pip install uv
         uv run --script "${{ github.action_path }}/scripts/copy_openbsd_stdlib.py" \
           "$ARTIFACT_DIR" "$NIGHTLY_SYSROOT"
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 0196628 and 662401b.

📒 Files selected for processing (4)
  • .github/actions/setup-rust/action.yml (4 hunks)
  • .github/actions/setup-rust/scripts/copy_openbsd_stdlib.py (1 hunks)
  • .github/actions/setup-rust/tests/conftest.py (1 hunks)
  • .github/actions/setup-rust/tests/test_copy_stdlib.py (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
.github/actions/*/tests/**

📄 CodeRabbit Inference Engine (AGENTS.md)

.github/actions/*/tests/**: Tests for each action must be present in a tests/ directory within the action's directory.
Contract tests must validate that declared inputs and outputs round-trip correctly.

Files:

  • .github/actions/setup-rust/tests/conftest.py
  • .github/actions/setup-rust/tests/test_copy_stdlib.py
.github/actions/*/action.yml

📄 CodeRabbit Inference Engine (AGENTS.md)

.github/actions/*/action.yml: Each action must have an action.yml file containing every input and output, with required ones clearly marked.
Composite actions referencing sibling scripts must use ${{ github.action_path }} for portability.

Files:

  • .github/actions/setup-rust/action.yml
🧬 Code Graph Analysis (1)
.github/actions/setup-rust/tests/conftest.py (1)
shellstub.py (1)
  • StubManager (39-153)
🔇 Additional comments (11)
.github/actions/setup-rust/tests/conftest.py (1)

1-36: Test utilities implementation looks solid.

The fixture setup correctly establishes isolated test environments with proper path management and stubbed shell commands. The return type annotation addresses the previous review feedback.

.github/actions/setup-rust/tests/test_copy_stdlib.py (4)

9-12: Helper function implementation is appropriate.

The run_script function correctly uses uv run --script to execute the target script with proper output capture.


15-28: Basic success test covers expected behaviour.

Test verifies successful copying with content preservation to the correct destination path structure.


31-47: Overwrite test validates atomic replacement.

Test confirms that existing destination content is completely replaced, not merged, which aligns with the atomic copy design.


50-59: Error handling test ensures robustness.

Test properly validates the error path when source artifacts are missing, checking both exit code and error message.

.github/actions/setup-rust/scripts/copy_openbsd_stdlib.py (2)

1-5: Script metadata configuration is appropriate.

The uv script configuration correctly specifies Python 3.12+ and Typer dependency requirements.


23-42: Atomic copying implementation is well-designed.

The use of rsync with a temporary directory followed by atomic rename ensures consumers never see partial copies. Error handling for missing source directory is appropriate.

.github/actions/setup-rust/action.yml (4)

32-35: New input parameter improves toolchain management.

The openbsd-nightly input parameter provides explicit version control for the nightly toolchain, addressing the previous concern about hard-coded dates.


46-51: Nightly toolchain installation is well-structured.

The addition of defensive shell options (set -euo pipefail) and minimal profile installation addresses previous feedback. Dynamic environment variable setup enables proper caching and path resolution.


104-104: Dynamic cache path improves maintainability.

Using the NIGHTLY_SYSROOT environment variable instead of a hard-coded path makes the caching more robust and consistent with the toolchain version.


118-118: Dynamic toolchain reference ensures consistency.

Using the OPENBSD_NIGHTLY environment variable maintains consistency with the installed toolchain version.

Comment thread .github/actions/setup-rust/scripts/copy_openbsd_stdlib.py
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: 3

♻️ Duplicate comments (1)
.github/actions/setup-rust/action.yml (1)

116-118: Invoke the copy script via python, not uv
uv run adds a hard dependency on the uv binary for a single script call. Invoke the script directly with the system Python to simplify the toolchain and avoid another cache layer.

-        uv run --script "${{ github.action_path }}/scripts/copy_openbsd_stdlib.py" \
-          "$ARTIFACT_DIR" "$NIGHTLY_SYSROOT"
+        python "${{ github.action_path }}/scripts/copy_openbsd_stdlib.py" \
+          "$ARTIFACT_DIR" "$NIGHTLY_SYSROOT"
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 662401b and ffc2733.

📒 Files selected for processing (4)
  • .github/actions/generate-coverage/CHANGELOG.md (1 hunks)
  • .github/actions/generate-coverage/action.yml (1 hunks)
  • .github/actions/setup-rust/CHANGELOG.md (1 hunks)
  • .github/actions/setup-rust/action.yml (4 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
.github/actions/*/CHANGELOG.md

📄 CodeRabbit Inference Engine (AGENTS.md)

Each action must have a CHANGELOG.md that follows SemVer-based changelog for that action only.

Files:

  • .github/actions/generate-coverage/CHANGELOG.md
  • .github/actions/setup-rust/CHANGELOG.md
.github/actions/*/action.yml

📄 CodeRabbit Inference Engine (AGENTS.md)

.github/actions/*/action.yml: Each action must have an action.yml file containing every input and output, with required ones clearly marked.
Composite actions referencing sibling scripts must use ${{ github.action_path }} for portability.

Files:

  • .github/actions/generate-coverage/action.yml
  • .github/actions/setup-rust/action.yml
🪛 LanguageTool
.github/actions/setup-rust/CHANGELOG.md

[typographical] ~4-~4: To join two clauses or introduce examples, consider using an em dash.
Context: # Changelog ## v1.0.9 - 2025-07-26 - Install uv for running h...

(DASH_RULE)


[typographical] ~8-~8: To join two clauses or introduce examples, consider using an em dash.
Context: ...` for running helper scripts. ## v1.0.8 - 2025-07-24 - Build OpenBSD standard lib...

(DASH_RULE)


[typographical] ~13-~13: To join two clauses or introduce examples, consider using an em dash.
Context: ...the pinned nightly toolchain. ## v1.0.7 - 2025-07-24 - Quote boolean defaults in ...

(DASH_RULE)


[typographical] ~17-~17: To join two clauses or introduce examples, consider using an em dash.
Context: ...ml` to avoid type mismatches. ## v1.0.6 - 2025-07-24 - Cache OpenBSD standard lib...

(DASH_RULE)


[typographical] ~24-~24: To join two clauses or introduce examples, consider using an em dash.
Context: ...x README example indentation. ## v1.0.5 - 2025-07-24 - Install macOS cross build ...

(DASH_RULE)

🔇 Additional comments (4)
.github/actions/setup-rust/action.yml (1)

32-35: Expose nightly version via input – good
Adding openbsd-nightly makes the pinned date override-able and resolves earlier feedback.

.github/actions/generate-coverage/action.yml (1)

49-50: Pin UV action – good practice
Locking astral-sh/setup-uv to a commit hash ensures repeatable builds and guards against unexpected upstream changes.

.github/actions/setup-rust/CHANGELOG.md (1)

4-8: Prefer an en dash (–) over hyphen (-) in version headings
Using typographically correct dashes improves readability and matches common changelog style guides.

-## v1.0.9 - 2025-07-26
+## v1.0.9 – 2025-07-26

Likely an incorrect or invalid review comment.

.github/actions/generate-coverage/CHANGELOG.md (1)

12-18: Changelog re-ordering looks correct
Re-positioning v1.3.0 below v1.3.1 preserves chronological order.

Comment on lines +3 to 6
## v1.3.2 (2025-07-26)

- Add optional ratcheting support via `with-ratchet`. Coverage percentages for
Rust and Python are tracked separately and compared against their respective
baselines.
- Improve baseline caching to allow updates and consolidate ratcheting steps.
- Pin `setup-uv` step to v6.4.3.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Include the exact commit hash in the new entry for full traceability
Spell out the SHA (e92bafb6253dcd438e0484186d7669ea7a8ca1cc) alongside v6.4.3 so that readers can quickly verify the pinned revision without digging into the workflow file.

🤖 Prompt for AI Agents
In .github/actions/generate-coverage/CHANGELOG.md around lines 3 to 6, the
changelog entry for pinning the `setup-uv` step to v6.4.3 should include the
exact commit SHA for full traceability. Update the entry to spell out the full
commit hash alongside the version number so readers can easily verify the pinned
revision without needing to check the workflow file.

Comment on lines +44 to +46
- name: Install uv
# v6.4.3
uses: astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Install uv only when required
setup-uv executes on every platform even when the action never calls uv. Gate the step behind the same condition that triggers the OpenBSD build (or any other uv use) to trim ~100 MB download and seconds per job.

-      - name: Install uv
-        # v6.4.3
-        uses: astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc
+      - name: Install uv
+        if: ${{ inputs.with-openbsd == 'true' && runner.os == 'Linux' }}
+        # v6.4.3
+        uses: astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Install uv
# v6.4.3
uses: astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc
- name: Install uv
if: ${{ inputs.with-openbsd == 'true' && runner.os == 'Linux' }}
# v6.4.3
uses: astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc
🤖 Prompt for AI Agents
In .github/actions/setup-rust/action.yml around lines 44 to 46, the step
installing uv runs on every platform regardless of whether uv is needed. Modify
the step to run conditionally only when the OpenBSD build or any other build
requiring uv is triggered, using the same condition that controls uv usage. This
will avoid unnecessary downloads and speed up the job.

Comment on lines +49 to 55
run: |
set -euo pipefail
OPENBSD_NIGHTLY='${{ inputs.openbsd-nightly }}'
rustup toolchain install --profile minimal "$OPENBSD_NIGHTLY"
echo "OPENBSD_NIGHTLY=$OPENBSD_NIGHTLY" >> "$GITHUB_ENV"
echo "NIGHTLY_SYSROOT=$(rustc +$OPENBSD_NIGHTLY --print sysroot)" >> "$GITHUB_ENV"
- name: Cache cargo registry
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

❓ Verification inconclusive

Verify that the pinned nightly is still hosted
Rust nightly toolchains older than ~1 year are pruned. Avoid sudden CI failures by validating the URL or refreshing the pin during releases.


🏁 Script executed:

#!/usr/bin/env bash
# Abort (non-zero) if the nightly metadata file is missing.
set -euo pipefail
NIGHTLY='${{ inputs.openbsd-nightly }}'
URL="https://static.rust-lang.org/dist/channel-rust-${NIGHTLY}.toml"
curl -I --fail --silent "$URL" | head -n1

Length of output: 272


Add nightly availability check
Rust prunes nightly toolchains older than ~1 year. Insert a CI step to validate the pinned nightly before installation:

     run: |
       set -euo pipefail
-      OPENBSD_NIGHTLY='${{ inputs.openbsd-nightly }}'
+      OPENBSD_NIGHTLY=${{ inputs.openbsd-nightly }}
+      # Verify that the pinned nightly is still hosted
+      URL="https://static.rust-lang.org/dist/channel-rust-${OPENBSD_NIGHTLY}.toml"
+      curl --fail --silent --head "$URL"
       rustup toolchain install --profile minimal "$OPENBSD_NIGHTLY"
       echo "OPENBSD_NIGHTLY=$OPENBSD_NIGHTLY" >> "$GITHUB_ENV"
       echo "NIGHTLY_SYSROOT=$(rustc +$OPENBSD_NIGHTLY --print sysroot)" >> "$GITHUB_ENV"

Place this check immediately before the rustup toolchain install line to avoid sudden CI failures when old nightly channels are pruned.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
run: |
set -euo pipefail
OPENBSD_NIGHTLY='${{ inputs.openbsd-nightly }}'
rustup toolchain install --profile minimal "$OPENBSD_NIGHTLY"
echo "OPENBSD_NIGHTLY=$OPENBSD_NIGHTLY" >> "$GITHUB_ENV"
echo "NIGHTLY_SYSROOT=$(rustc +$OPENBSD_NIGHTLY --print sysroot)" >> "$GITHUB_ENV"
- name: Cache cargo registry
run: |
set -euo pipefail
OPENBSD_NIGHTLY=${{ inputs.openbsd-nightly }}
# Verify that the pinned nightly is still hosted
URL="https://static.rust-lang.org/dist/channel-rust-${OPENBSD_NIGHTLY}.toml"
curl --fail --silent --head "$URL"
rustup toolchain install --profile minimal "$OPENBSD_NIGHTLY"
echo "OPENBSD_NIGHTLY=$OPENBSD_NIGHTLY" >> "$GITHUB_ENV"
echo "NIGHTLY_SYSROOT=$(rustc +$OPENBSD_NIGHTLY --print sysroot)" >> "$GITHUB_ENV"
🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 55-55: syntax error: expected , but found ''

(syntax)

🤖 Prompt for AI Agents
In .github/actions/setup-rust/action.yml around lines 49 to 55, add a step
before the rustup toolchain install command to check if the specified nightly
toolchain is available. Implement a command that queries the availability of the
pinned nightly version and fails early if it is not found, preventing CI
failures due to pruned or outdated nightly toolchains. This validation should be
inserted immediately before the rustup toolchain install line.

@leynos leynos merged commit d806d20 into main Jul 26, 2025
1 check passed
@leynos leynos deleted the codex/address-code-review-comments branch July 26, 2025 14:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant