Skip to content

Add GitHub Actions CI workflow with cargo-nextest#23

Merged
tcrypt25519 merged 20 commits into
masterfrom
ci/add-github-actions-workflow
Feb 6, 2026
Merged

Add GitHub Actions CI workflow with cargo-nextest#23
tcrypt25519 merged 20 commits into
masterfrom
ci/add-github-actions-workflow

Conversation

@tcrypt25519

Copy link
Copy Markdown
Owner

Summary

  • Adds efficient GitHub Actions CI workflow with single sequential job
  • Integrates cargo-nextest for faster test execution
  • Uses nightly Rust for formatting and linting, stable for building and testing
  • Enhances Makefile with comprehensive CI targets

Changes

CI Workflow (.github/workflows/ci.yml)

  • Single sequential job to minimize runner costs (no parallel job waste)
  • Nightly Rust first for fmt and clippy checks (fail fast)
  • Stable Rust for building and testing
  • cargo-nextest for faster test execution
  • LLVM 21 auto-installation
  • Smart caching of cargo registry, git deps, and build artifacts

Makefile Enhancements

  • make test - Run tests with cargo-nextest
  • make test-all - Run all tests including doctests
  • make fmt / make fmt-check - Format code
  • make clippy / make clippy-fix - Lint code
  • make ci - Run all CI checks locally
  • make commit-check - Pre-commit validation
  • make install-tools - Install cargo-nextest

Configuration Files

  • .nextest.toml - nextest configuration with default and CI profiles
  • rust-toolchain.toml - Specifies stable as default toolchain
  • DEVELOPMENT.md - Comprehensive developer guide

Test Plan

  • CI workflow runs successfully
  • All checks pass (formatting, clippy, build, tests)
  • cargo-nextest executes tests correctly
  • Documentation is clear and accurate

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings February 6, 2026 00:15
@semanticdiff-com

semanticdiff-com Bot commented Feb 6, 2026

Copy link
Copy Markdown

Review changes with  SemanticDiff

Changed Files
File Status
  crates/jet_ir/src/types.rs  100% smaller
  crates/jet_runtime/src/runtime_builder.rs  99% smaller
  crates/jet_runtime/src/binding/mod.rs  91% smaller
  crates/jet/src/builder/contract.rs  87% smaller
  crates/jet_runtime/src/layout_tests.rs  86% smaller
  crates/jet/src/engine/mod.rs  84% smaller
  crates/jet_runtime/src/exec.rs  77% smaller
  crates/jet/src/builder/ops.rs  59% smaller
  crates/jet/src/bin/jetdbg.rs  45% smaller
  crates/jet_ir/src/lib.rs  39% smaller
  crates/jet_runtime/src/builtins.rs  37% smaller
  .github/workflows/ci.yml  0% smaller
  .nextest.toml Unsupported file format
  DEVELOPMENT.md Unsupported file format
  Makefile Unsupported file format
  crates/jet/src/builder/env.rs  0% smaller
  crates/jet_ir/src/constants.rs  0% smaller
  crates/jet_runtime/src/lib.rs  0% smaller
  rust-toolchain.toml Unsupported file format
  scripts/install-llvm.sh Unsupported file format

@gemini-code-assist

Copy link
Copy Markdown

Summary of Changes

Hello @tcrypt25519, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly upgrades the project's development infrastructure by implementing a new, efficient GitHub Actions CI workflow. It streamlines local development practices through an expanded Makefile and integrates cargo-nextest to optimize test execution, ensuring faster feedback and consistent code quality. The changes also include comprehensive developer documentation and a cleanup of obsolete build-related files, providing a more robust and user-friendly development experience.

Highlights

  • New GitHub Actions CI Workflow: Introduced a new GitHub Actions CI workflow (ci.yml) designed for efficiency, featuring a single sequential job to minimize runner costs. It prioritizes nightly Rust for formatting and linting (fail-fast) and stable Rust for building and testing.
  • Integrated cargo-nextest: The CI workflow and local development now leverage cargo-nextest for significantly faster test execution, with specific configurations for default and CI profiles, including test retries and JUnit output.
  • Enhanced Makefile Targets: The Makefile has been substantially updated with new and improved targets for local development, including make test (using nextest), make test-all (including doctests), make fmt/fmt-check, make clippy/clippy-fix, make ci (to run all CI checks locally), make commit-check, and make install-tools.
  • Standardized Rust Toolchain Management: A rust-toolchain.toml file was added to explicitly define the default Rust toolchain as stable, ensuring consistency across development environments.
  • Comprehensive Development Guide: A new DEVELOPMENT.md document was added, providing a detailed guide on prerequisites, development workflow, Makefile targets, CI pipeline features, configuration files, best practices, and troubleshooting.
  • Removed Outdated Documentation: Several outdated build restoration and architecture analysis documents from the docs/build-restoration/ and docs/ directories have been removed, streamlining the project's documentation.
Changelog
  • .nextest.toml
    • Added a new configuration file for cargo-nextest.
    • Defined default and ci profiles for test execution, including settings for test-threads, retries, failure-output, and JUnit report paths.
  • DEVELOPMENT.md
    • Added a new comprehensive development guide.
    • Details prerequisites (Rust toolchains, LLVM 21, cargo-nextest), installation steps, development workflow (building, testing, formatting, linting), and pre-commit checks.
    • Includes a table of Makefile targets, an overview of the Continuous Integration pipeline, and best practices for development.
  • Makefile
    • Updated test target to use cargo nextest run --all-features.
    • Added test-cargo target for running tests with the built-in cargo test.
    • Added doctest target for running documentation tests.
    • Introduced test-all target to run both nextest and doctests.
    • Modified check target to include --all-targets --all-features.
    • Added fmt and fmt-check targets for rustfmt.
    • Added clippy-fix target for running clippy with automatic fixes.
    • Added install-tools target to install cargo-nextest.
    • Introduced ci target to run all local CI checks (fmt-check, check, clippy, test-all).
    • Updated commit-check target to reflect the new CI checks (fmt-check, check, clippy, test-all).
  • docs/architecture.md
    • Changed the main heading from 'JET Architecture Documentation' to 'Jet Architecture Documentation'.
  • docs/build-restoration/00-issue-tracker.md
    • Removed the build restoration issue tracker document.
  • docs/build-restoration/01-initial-build-output.txt
    • Removed the initial build output log file.
  • docs/layout-mismatch-analysis.md
    • Removed the document detailing execution context layout mismatch analysis.
  • docs/plans/2026-01-27-restore-build-system.md
    • Removed the detailed plan for restoring the build system.
  • rust-toolchain.toml
    • Added a new file to specify stable as the default Rust toolchain channel.
    • Configured rustfmt and clippy as default components for the toolchain.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/ci.yml
Activity
  • The author, tcrypt25519, initiated this pull request to establish a robust and efficient Continuous Integration (CI) system for the project.
  • A new GitHub Actions workflow was created to automate build, test, lint, and format checks.
  • The cargo-nextest tool was integrated to enhance test execution speed and capabilities.
  • The project's Makefile was significantly expanded to provide comprehensive local development and CI targets.
  • New documentation (DEVELOPMENT.md) was added to guide contributors through the updated development workflow and CI processes.
  • Outdated documentation related to build restoration and architecture analysis was removed to streamline the project's documentation.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Code Review

This pull request is a solid step towards improving the project's development and CI infrastructure by integrating cargo-nextest and setting up a GitHub Actions workflow. The new Makefile targets and DEVELOPMENT.md guide are valuable additions.

I've added a few comments to DEVELOPMENT.md to point out some inconsistencies between the documentation, the PR description, and the Makefile.

Most importantly, there's a configuration conflict that will prevent the project from building. The Cargo.toml files use edition = "2024", which requires a nightly compiler, while the new rust-toolchain.toml specifies the stable channel. To resolve this, you'll likely need to change the edition to "2021" in the Cargo.toml files to match the documented goal of building on stable Rust. I was unable to comment on the specific files due to technical constraints.

Addressing these points will make this a very strong contribution to the project.

Comment thread DEVELOPMENT.md Outdated
Comment thread DEVELOPMENT.md Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR introduces GitHub Actions CI infrastructure with cargo-nextest integration, adding automated testing and quality checks to the Jet project. While adding CI is a valuable improvement, the implementation has several inconsistencies between documentation, configuration, and actual behavior that need to be addressed.

Changes:

  • Adds GitHub Actions CI workflow with formatting, linting, building, and testing steps
  • Integrates cargo-nextest as the primary test runner with configuration profiles
  • Adds rust-toolchain.toml to specify stable as the default Rust toolchain
  • Enhances Makefile with comprehensive targets for formatting, linting, and testing
  • Adds DEVELOPMENT.md with detailed developer workflow documentation
  • Removes obsolete build restoration planning documents

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 16 comments.

Show a summary per file
File Description
.github/workflows/ci.yml New CI workflow with sequential steps for LLVM setup, formatting, linting, building, and testing
.nextest.toml Configuration for cargo-nextest with default and CI profiles (though CI profile is unused)
rust-toolchain.toml Specifies stable Rust as default with rustfmt/clippy components
Makefile Added targets for fmt, fmt-check, clippy-fix, test variants, install-tools, and ci/commit-check
DEVELOPMENT.md Comprehensive new developer guide with tooling and workflow documentation
docs/architecture.md Minor cosmetic change (added space)
docs/plans/2026-01-27-restore-build-system.md Deleted 997-line build restoration plan
docs/layout-mismatch-analysis.md Deleted 386-line layout analysis document
docs/build-restoration/00-issue-tracker.md Deleted build issue tracker template
docs/build-restoration/01-initial-build-output.txt Deleted initial build error capture

Comment thread .github/workflows/ci.yml
Comment thread Makefile
Comment thread DEVELOPMENT.md
Comment thread .github/workflows/ci.yml Outdated
Comment thread rust-toolchain.toml Outdated
Comment thread docs/architecture.md
Comment thread .nextest.toml Outdated
Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/ci.yml
Comment thread Makefile
@tcrypt25519
tcrypt25519 force-pushed the ci/add-github-actions-workflow branch from d74fb6e to e03a3b5 Compare February 6, 2026 05:41

Copilot AI commented Feb 6, 2026

Copy link
Copy Markdown

@tcrypt25519 I've opened a new pull request, #25, to work on those changes. Once the pull request is ready, I'll request review from you.

tcrypt25519 and others added 20 commits February 6, 2026 05:34
Add comprehensive CI setup with single sequential job to minimize runner costs.

- GitHub Actions workflow with efficient sequential execution
  - Use nightly Rust for formatting and linting (fail fast)
  - Use stable Rust for building and testing
  - Install cargo-nextest for faster test execution
  - Setup LLVM 21 and dependency caching
- Enhanced Makefile with nextest and CI targets
  - Add test, test-all, doctest targets using nextest
  - Add fmt, fmt-check, clippy, clippy-fix targets
  - Add ci and commit-check targets for pre-commit validation
  - Add install-tools target for cargo-nextest setup
- Add .nextest.toml for test runner configuration
- Add rust-toolchain.toml specifying stable as default
- Add DEVELOPMENT.md with comprehensive developer guide

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fix formatting issues identified by CI:
- Reorder imports alphabetically
- Format long function calls and method chains
- Apply consistent line wrapping

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Address PR review feedback to fix documentation accuracy and improve
CI workflow reliability.

Makefile changes:
- Add +nightly back to fmt/clippy targets for explicit toolchain control
- Update target descriptions to reflect nightly usage

CI workflow improvements:
- Use scripts/install-llvm.sh instead of duplicating installation logic
- Remove libpolly-21-dev (not used by the project)
- Replace manual caching with Swatinem/rust-cache for better optimization
- Add explicit +stable to build/test commands for clarity

Documentation fixes (DEVELOPMENT.md):
- Fix install-tools description to match actual behavior (only installs nextest)
- Update CI section to accurately describe single sequential job
- Clarify that Makefile uses cargo +nightly for fmt/clippy
- Update configuration file descriptions

Configuration improvements:
- Remove rustfmt/clippy from rust-toolchain.toml (using nightly versions)
- Simplify .nextest.toml by removing unused CI profile
- Update comments to reflect actual usage

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fix formatting issues detected by CI after rebasing onto master.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fix clippy error: empty line after doc comment.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fix clippy deprecation warnings by using Context::ptr_type instead of
StructType::ptr_type as required by LLVM 15+.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Format runtime_builder.rs after ptr_type changes.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Wrap unsafe function call in unsafe block (edition 2024 requirement)
- Add #[allow(dead_code)] to stack methods called from generated IR

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Remove empty line after doc comment
- Convert BasicTypeEnum to AnyTypeEnum with .into()

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Cast functions to *const () before usize per clippy
- Add explicit '_ lifetimes to avoid elision confusion

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Remove unused 'error' import from engine/mod.rs
- Fix BasicTypeEnum to AnyTypeEnum conversion in layout_tests.rs by matching on enum variants
- Remove unnecessary let binding in ops.rs (clippy::let-and-return)
- Add explicit '_ lifetime to iter() return type (mismatched-lifetime-syntaxes)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add missing ScalableVectorType case in BasicTypeEnum match to handle all
possible variants and fix non-exhaustive pattern error.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Change coinbase from 20-byte to 2-byte array to match ADDRESS_SIZE_BYTES
constant defined in jet_runtime.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Remove nightly toolchain usage and use stable Rust for all operations:
- Formatting (rustfmt)
- Linting (clippy)
- Building
- Testing

This avoids toolchain-specific issues and simplifies the CI workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add libpolly-21-dev package to LLVM installation to provide the Polly
static library required for linking.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Update test_runtime_builder_creates_module to check for the actual
function names generated by the builder:
- "jet.stack.push.ptr" instead of "jet.stack.push.word"
- Add checks for all generated stack and memory functions

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add the jet.jit_engine global variable to the runtime module so that the
Symbols loader can find all required runtime functions and globals.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Expand memory_len to accommodate writes when copying return data from
contract calls. This fixes out-of-bounds panics when writing to memory
that hasn't been expanded yet.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@tcrypt25519
tcrypt25519 force-pushed the ci/add-github-actions-workflow branch from 791bf4c to 5ba279d Compare February 6, 2026 11:34
@tcrypt25519
tcrypt25519 merged commit c15cba7 into master Feb 6, 2026
1 check passed
@tcrypt25519
tcrypt25519 deleted the ci/add-github-actions-workflow branch February 10, 2026 12:26
tcrypt25519 added a commit that referenced this pull request Feb 16, 2026
* ci: add GitHub Actions workflow with cargo-nextest

Add comprehensive CI setup with single sequential job to minimize runner costs.

- GitHub Actions workflow with efficient sequential execution
  - Use nightly Rust for formatting and linting (fail fast)
  - Use stable Rust for building and testing
  - Install cargo-nextest for faster test execution
  - Setup LLVM 21 and dependency caching
- Enhanced Makefile with nextest and CI targets
  - Add test, test-all, doctest targets using nextest
  - Add fmt, fmt-check, clippy, clippy-fix targets
  - Add ci and commit-check targets for pre-commit validation
  - Add install-tools target for cargo-nextest setup
- Add .nextest.toml for test runner configuration
- Add rust-toolchain.toml specifying stable as default
- Add DEVELOPMENT.md with comprehensive developer guide

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* style: apply rustfmt formatting

Fix formatting issues identified by CI:
- Reorder imports alphabetically
- Format long function calls and method chains
- Apply consistent line wrapping

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* docs: fix documentation inconsistencies and improve CI configuration

Address PR review feedback to fix documentation accuracy and improve
CI workflow reliability.

Makefile changes:
- Add +nightly back to fmt/clippy targets for explicit toolchain control
- Update target descriptions to reflect nightly usage

CI workflow improvements:
- Use scripts/install-llvm.sh instead of duplicating installation logic
- Remove libpolly-21-dev (not used by the project)
- Replace manual caching with Swatinem/rust-cache for better optimization
- Add explicit +stable to build/test commands for clarity

Documentation fixes (DEVELOPMENT.md):
- Fix install-tools description to match actual behavior (only installs nextest)
- Update CI section to accurately describe single sequential job
- Clarify that Makefile uses cargo +nightly for fmt/clippy
- Update configuration file descriptions

Configuration improvements:
- Remove rustfmt/clippy from rust-toolchain.toml (using nightly versions)
- Simplify .nextest.toml by removing unused CI profile
- Update comments to reflect actual usage

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* style: apply rustfmt formatting after rebase

Fix formatting issues detected by CI after rebasing onto master.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: remove empty line after doc comment in constants.rs

Fix clippy error: empty line after doc comment.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: replace deprecated ptr_type with Context::ptr_type

Fix clippy deprecation warnings by using Context::ptr_type instead of
StructType::ptr_type as required by LLVM 15+.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* style: apply rustfmt formatting to runtime_builder

Format runtime_builder.rs after ptr_type changes.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: add unsafe block and allow dead_code for IR-called methods

- Wrap unsafe function call in unsafe block (edition 2024 requirement)
- Add #[allow(dead_code)] to stack methods called from generated IR

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* style: apply rustfmt formatting

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: clippy errors in layout_tests

- Remove empty line after doc comment
- Convert BasicTypeEnum to AnyTypeEnum with .into()

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: clippy errors - function casts and lifetime elision

- Cast functions to *const () before usize per clippy
- Add explicit '_ lifetimes to avoid elision confusion

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* style: apply rustfmt

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: resolve unused import, type conversion, and clippy lints

- Remove unused 'error' import from engine/mod.rs
- Fix BasicTypeEnum to AnyTypeEnum conversion in layout_tests.rs by matching on enum variants
- Remove unnecessary let binding in ops.rs (clippy::let-and-return)
- Add explicit '_ lifetime to iter() return type (mismatched-lifetime-syntaxes)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: add ScalableVectorType variant to match expression

Add missing ScalableVectorType case in BasicTypeEnum match to handle all
possible variants and fix non-exhaustive pattern error.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: correct coinbase address size in jetdbg

Change coinbase from 20-byte to 2-byte array to match ADDRESS_SIZE_BYTES
constant defined in jet_runtime.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* chore: simplify CI to use stable Rust only

Remove nightly toolchain usage and use stable Rust for all operations:
- Formatting (rustfmt)
- Linting (clippy)
- Building
- Testing

This avoids toolchain-specific issues and simplifies the CI workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: install Polly library for LLVM static linking

Add libpolly-21-dev package to LLVM installation to provide the Polly
static library required for linking.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: correct function names in runtime_builder test

Update test_runtime_builder_creates_module to check for the actual
function names generated by the builder:
- "jet.stack.push.ptr" instead of "jet.stack.push.word"
- Add checks for all generated stack and memory functions

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: add JIT_ENGINE global to runtime module

Add the jet.jit_engine global variable to the runtime module so that the
Symbols loader can find all required runtime functions and globals.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: ensure memory is expanded before writing return data

Expand memory_len to accommodate writes when copying return data from
contract calls. This fixes out-of-bounds panics when writing to memory
that hasn't been expanded yet.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.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.

3 participants