Skip to content

feat(taskfiles): Add tasks to install boost; Add test for boost install tasks. #42

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 30 commits into
base: main
Choose a base branch
from

Conversation

sitaowang1998
Copy link

@sitaowang1998 sitaowang1998 commented Apr 25, 2025

Description

Boost does not support build with cmake, so we cannot use the tasks from cmake.yaml to install Boost.

This PR adds:

  • A taskfile to download and install Boost.
  • A taskfile that uses the new task to install Boost.
  • A simple C++ project that uses the installed Boost library as dependency.
  • A task to run the whole test, and call it in main taskfile in tests.

Checklist

  • The PR satisfies the contribution guidelines.
  • This is a breaking change and that has been indicated in the PR title, OR this isn't a
    breaking change.
  • Necessary docs have been updated, OR no docs need to be updated.

Validation performed

  • task tests:boost ran successfully.

Summary by CodeRabbit

  • New Features

    • Added automated tasks for downloading, building, and installing Boost C++ libraries.
    • Introduced Boost-specific build and test configurations, including a CMake setup and formatting rules.
    • Implemented comprehensive Boost test suite covering multiple Boost components.
    • Added automated tests for remote zip file download and extraction with inclusion and exclusion filters.
  • Refactor

    • Streamlined test orchestration by consolidating and delegating test tasks to dedicated taskfiles.
  • Chores

    • Updated main test task to run all tests using a unified command.

@sitaowang1998 sitaowang1998 requested a review from a team as a code owner April 25, 2025 21:25
Copy link

coderabbitai bot commented Apr 25, 2025

## Walkthrough

This update introduces a comprehensive Boost C++ library integration and testing workflow. It adds a set of YAML taskfiles to automate downloading, building, installing, and testing Boost, including a dedicated C++ test program that exercises multiple Boost components. The test orchestration is modularized, with reusable tasks for dependency management and test execution. The main test runner now delegates to these modular taskfiles, consolidating and simplifying previous inline test logic. Supporting files for CMake configuration and code formatting are also included for the Boost test suite.

## Changes

| File(s)                                                    | Change Summary |
|------------------------------------------------------------|---------------|
| exports/taskfiles/utils/boost.yaml                         | Added a new taskfile automating Boost download, build, install, and CMake settings generation with parameterized internal tasks. |
| exports/taskfiles/utils/utils.yaml                         | Added `boost: boost.yaml` to the includes section. |
| taskfile.yaml                                              | Modified the `test` task to invoke `tests:all` instead of `tests:download-and-extract-zip-basic`. |
| taskfiles/boost/.clang-format                              | Added a .clang-format file specifying Boost, C++, and C header grouping priorities. |
| taskfiles/boost/CMakeLists.txt                             | Added a CMake configuration for building and linking a Boost-based test executable. |
| taskfiles/boost/test_boost.cpp                             | Added a C++ test program exercising Boost.Program_options, Filesystem, Iostreams, Process, Regex, and URL libraries. |
| taskfiles/boost/tests.yaml                                 | Added a Boost-specific test taskfile orchestrating dependency installation, build, execution, and cleanup. |
| taskfiles/remote/tests.yaml                                | Added a test taskfile for remote zip download/extract with basic, inclusion, and exclusion tests. |
| taskfiles/tests.yaml                                       | Refactored to delegate all test logic to included `boost/tests.yaml` and `remote/tests.yaml`, consolidating tests into an `all` task. |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant User
    participant Taskfile
    participant BoostTasks
    participant RemoteTasks
    participant CMake
    participant BoostTestExe

    User->>Taskfile: Run test
    Taskfile->>tests.yaml: Invoke all
    tests.yaml->>BoostTasks: boost:test
    BoostTasks->>BoostTasks: init
    BoostTasks->>BoostTasks: install-boost (download, build, install)
    BoostTasks->>CMake: Generate build files
    BoostTasks->>CMake: Build test executable
    BoostTasks->>BoostTestExe: Run test_boost with args
    BoostTestExe-->>BoostTasks: Return result
    BoostTasks->>BoostTasks: clean
    tests.yaml->>RemoteTasks: remote:default
    RemoteTasks->>RemoteTasks: Run remote zip tests (basic, exclusions, inclusions)

Possibly related PRs

Suggested reviewers

  • davidlion

<!-- walkthrough_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 c8e016292caae93b543978af086ff0b8127e491a and 7163bc85756d137835c9e569869dd5a36d06c64a.

</details>

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

* `exports/taskfiles/utils/boost.yaml` (1 hunks)
* `taskfiles/boost/CMakeLists.txt` (1 hunks)
* `taskfiles/boost/tests.yaml` (1 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (3)</summary>

* taskfiles/boost/CMakeLists.txt
* taskfiles/boost/tests.yaml
* exports/taskfiles/utils/boost.yaml

</details>

</details>
<!-- internal state start -->


<!-- DwQgtGAEAqAWCWBnSTIEMB26CuAXA9mAOYCmGJATmriQCaQDG+Ats2bgFyQAOFk+AIwBWJBrngA3EsgEBPRvlqU0AgfFwA6NPEgQAfACgjoCEYDEZyAAUASpETZWaCrKNwSPbABsvkCiQBHbGlcSHFcLzpIACIAMxJqAApcNEQAa1j4SMQASi4AQVp6FPTkAhQMRBSfSAF8fCqAbkhC4pDIWPw+OobQ+Erq3xK0xGja+WxESnt1NHwAd0wiAEYATlWADgrcCkVsBmlIcnmw1Iysw/LYTFpIsNgPfqq0H2p4fCx8WPuPACF6qqQLzwARUFwaSAAZX6B0g/16kFo+EOGHwoQc3G4XVCAmwWVo/SIkHm6lgkAAwgBZNBpEgAGh+kBIAA8kOIMEThshYrtmJAAAYMZg0kgaWRoZhefmMTConEeSZRTp8dTIJ6DN4fCHQfDoIr+RBlBCIBm4B7WOxoIrINCIujwBjUKLDTJ3cpI+YYLz4K3oDD0dUvXzwqoMl4fIkks1+tEPPgui73aiQPBZeAAL0uxqOJBOww6XThAL6AyDmowGiMrXU7wwQdkpvNtgqDC82CUNpmzG4d3JAGo+zxdiIxEnQkpuGRaMgPozAz4oiHQsDQc55OUpBR4LF1+b515yxD8qd0mFdRRsFgzR52PB/GF2g51I8bV5ELqrUp6DdtiQiFQaADDBymvSBhX6E9zjuRV6GVB8qkQSsDHcRhrg5Q4mG7Lx5CjMlQKYYCt1xcRZyIPElGBcgTXQe85VqfwaUJVClmkMN/URXU6P8II7w8JEGEcdhyxTbhaCdRDIAANReeAxJIrBFmQScKGVNh6Dkex9gOQ1Ym8bC/EvDAmNA/N+R6KowBoKoOHM3BLJCfltSbOxUDQCRtAPAQ7mTWBcFwbhEA4AB6IKiFJbABA0TCgtkMBECYScYvi/BJzAJQJDAVM3yC7g9KCgAWAAmJD9GMcAoCnfhvjQPBCFIcgAKiTC2GArheH4YRRHEKQZHkJglCoVR1C0HRSpMKA4FQVysBqghiDIZRAIUVh2C4KgTgcJwXHGBQBpUNRNG0XQwEMMrTAMFksQoXBECChNsiCrLbtssUJS8DgDGiL6DAsFoAEl5oap16E24Vtq+Zj0MQKscxOABNfJKQAGUg10X22XZaH2Z0P1q4UaEZD0vR9WgGVxfE2KA55Xnkod8G0mdvlApcKQHIEQTBeBpAhP7xxITIqPQSBN0QWtIAAZlRxMzWTGE2w7IX/GYNEPAIzIyIAsWfymG77AeGoUvk7lC12XFAXirduHZIgnI8NG7VbZxDk6bAVWAyg6yGM5AqMZYIQAKn9+rFpIQOuBsS9kCXAByZAzPqG6djQbgNEQWBpQt+ArYqRlEEnBhty5kH8Fd2ECX8MQugbBQMHV13jL3UsabF3h+fgZk/RBkhIjEYznFIZcOecLmJN59AGAOK3kBZJOaLIlrdbggSqhYDNDyMYrIED8mvFoMPIAAUWZUQ8EOGO44EQrpR34p6l8CDQPfUu+N4yvttw/grdrF4a4Eih/AwAwPqHwdj4F8BIeAtpbRCEEEpZwEoSA0D4D+T8NYPg/xvnPQSwFEJGHFgHf2+594R0qIyMyhUKjUylMtYU7Fyj7iLAiEC5o86iELlEVumRmQQgAPJf3QT4au6gZRYGDo1IWVIRT2EQdbbkiYsT9GtmeRkLN9zCXLl1KuKBqrSL8oSZAGi37yFQLwfAECvxIXygQom3orRgBuGAIh/sCjLSxKLAm+YZbjgWMTK0Np2IzyoGIKOxYOi8iFmFKQWAACqNgkYMk3Owo0dtEwMAeAwEYjhGxkGkUEW89YDKkNAmIp0ZM8S70ppQwYkFR7omwJibEyA1bwA1ioO48wuhpCYoYggW5WL2BLhQWEP4GHcGoLAaiKQKAD3ZquPp1ECJ/wAUAypgSoHTOwYvQsCQ0n2BoCnSAY8Xjvk/vJAp8wtxWQkdSWkujZEdAuEhFCXIUxTAfFhYGwth5tOdoWWIkRWRqGBLgeQP5/D6VnLaJWKtIIFj4DYkmTEfxrN7hyFRoSpkCCDLbGuoDfD/IWEySorsszJkfoM2EJj/BjP8OpfmXQPA3yRexfchIGQfxpQgpBZRdTLwIMwDMN40C7O4NcKYOKGFVBINwERdMsbDIpDc1WHw66a1nIgIymJEHKNiMKtMKQCaKL/GqhSpJ+DXj4KYkcN0kLmEsPkLwSDyw8sJqIA8JrGZMmZFdJahZcpeQdES8II8jBQFaFEI1FBPawv5CUmg0oOXwLYNyrg/JIQ8NieSA+AB9AAIn9Gw/IGT8j+gAOUhNAfISMkbZtsAfAAYn9AAGkWgUlabAAHED7QEhK2/kB8m3QBsPkbN+RO29srGGooEb3ZRp/qZG+CazWcuTZQQKAp02ZpzfmwtxaB1DpHWOjtvbi0ACkeG/AnQYKdX5fxzq9qefk+4l3RhXYgtdqbN02CzXmgtfay0VqrTWutjaW3FqpPkAA0jmyE3boBluPb+3dAp93DtHeOxy16WjTqAkg6NmE3HPhjQiuxDjn3EmXUm99FB138gAOo8JsJBpDfav0/p3X2xtSMYMAAl8iFQAKwADY+2xKRv+8tlbq21psA25tfb21dp7X2rtpb0PHr7b8aJf0ka5vUyegU57L0ScA9Jo9Bn+QQeg9m2D0B4OlsQxxysX1oihvOpdRpd0zho1uk9R64g3yvUlB9FzP17UAzjVEUGa4qqQ1INDZC5oEbIxrqq4S9tFIiTkjjFs8sPC2mOEG7al4BpkLlu2aQGcuq1ghJCfOhdHSCLDLDSAtJYruTbB4MZd4BS2S4C9cUkoE2pD1Le8MHJRZKC9WyJi5WFYOF2SNwU6TMnMCC1KYtQoRTrdbT+WMa6ISlt1PtvgaSWIusfjsfYuASX8FOyA9gxJKAeGFEoW1YWWiOsWrWC75olCOw9bFjz10oh+oisCBgQaazSFDZAI7cXLi6mB76y14PA23nENIaODt3XOqe/eV7opPrfWvede6opBvvWJ6536+QIsLUaiDRwYN5AQzO1DNw5p+RWVwNKfMEFufeceZT4byBlYEkyDl6lB5YT4RYLQoCEh8BdLRaBbnIRAokdoPY/0YAUV2XTFnMAWLRYMD52cCj0ZbTNRGRgJXKvORc554FIM5v0iHeOxahHyB5jPbAlaDwzDA8W6UALNBpDCxze5kYO1n2nVG2UaBf7uOE8Q2R6D1HAbIcY5DVhykih2HFAt+rqo0oBfk52ztaXerVfmht+xfkUBhhcGiM7jgWudfa/12AQ33BjepAdNEF9ZJG+QRb23oMQ/qdubAEYcnz1ixBSigeDkYBVLUBC99Wn9OgZLWi+Db47P4sw0K45R2q/1+89Sy0126XExTUInsA49ASvTEF+kHzQVbJBUcjAbMzTWlaZ+g4xVQ4V8YlEdZ7keQWAhYaVHsADb9aYfxQ9+hDhWEC5MhIcHgA83ZWwKsZQaAiAugR5LcyRUhRYiByB6BeB3hLkSC4J/wS5uBCQeZ0R6tJcjQfIEgBoxdqA0kG4PB/BSAO4xk/IPY4VGFAQVwwR5BsCeDIBEh+QAA9YARIWyHIfkHISAa4KQRkBAIgB4QEGg4gkFBQ8WHIBkToHwBYKIDSfsQcZ4f0ZwegaQmLOQtdBQ5Q4ADQPsPQTQ0gocWg9QeQQqSpckewWQKVPkdwmjTwlQnwgAHQ0FgD8K0I5S3BMPkD9j/2VVrhvxNVywqyaXl3YCaXdW3FkAEMgEYPqSYgEBIB0NoM7iOBVhtDqDwEgGSxRkvyUR4goBGD8G7k+XKEiCtCYnmAQCsjGVhH8BoGAjFg0nPyIDXy6Hxne1py+0ByDxx3gVT2+HT3oDByzyh0xwSyO3IGcxJwgFnwMHny/0X0kVpCRjZEQlwGZE4Gn230BhDiZy2lZ0PzQmPwMGPEK0eMZXKXoAQIKPtgf1AXlSVELFtCtS6iOAQXoHjl6HslLwCPsKBCWGwDQFIE0gaWumaJFjFgAAYNA/YqSciwJ+h4BmBHBBi+iogwThY10xZUAdZlF8FCpipsiUIoThIyAflp5vVsQmICNUl5cbhjZ4w74mIMQfVWCa4CQzlBFCiFZrd5dZx2TID9EHk7hvRHQlpkwzIISgoJxbottaQ4oZF9EgpsVbSSAy8mZzRkTRxUATIUowBIgpBfBPTcAGQwYHcUBQhDZv4vAcUWZXDtpyTZw/YNhJZCx9C4wUBkBuI8RaUGR0CGsCk1cfNIiaBmA+0YjEA+13gqgGJmAKzi1TEGY+1TF/wJRs1IyPg6yBQhCWQ+1EBiySBSzKl+RXZqECMPhSiIRoksQsABYCQ0UlxmtngbsxdpBEBCSPAS5/I8Bkk7QaAxBFxQkEyKwWgsAWQT4UgvJg9pltU6w1JetiwsSr9UAGAGJAIGQoSctFRWY+xCoKS9kbhnCOgEgbsDRKkn4hkswPAS9cBs0XoGBMRpQ0YcUpkZlKIBiaD3IaB9JCTtABh0UER+QiyoiyzuC11KzegazOz+QGzVymzdgWzmA2z+FKg+1uzmRez+zBzmjhyKBRyWBpyJyY8PsHV48ftE8/s3VdixK08JSQdDjM8IcTjc8oBziPBkg/ttxqprQhZQSlVniEINA3jQh7ZiIOIUQ0QwIC8dw/R5ADi7tPBjj+obx5jTichLjXNScbi7jv9nd1tN8adwtvjGdNI/jYsj8YdgSWtydr9ACxY4IWZncMyMYn8ohJgmIjyJYIjgI0BuFDkSw8DtTTz3iPYf4spgipY7gl5dSrxvZasSBNwf4ektEfx7ZRCyR3ItwxSaI+I24qDlEugiBMBBVagISGQJwpwyAVlmiwSwBwVPkfN7B2CHQCl4qMUNccVwIarH0edpQug0kQhGpOwpg8lAENzvhI1o0HABAuQuAGTxAZJDda9wT8RERX5ekhEm5KIiQWZxr/RJqSCP48zMDXFxycFPCiKSySKcCqKqydgEhay6L6ZaL6z6KqBGL2yWLi02KOLiKhyRz/CUEHlj56BIQ+NBMhNUJRBVsJCk8fFbExshkEApAGQ40mJ2TMEfMyl8QqiEr2gzyBILzIgGQLwMAjInr4JQh+a8AfkAigbA169tdKJ8sNkF5qIWr+gClWwEgxaiR6lGRMEmrwQ6TBRRiMA3c0hBjlYepGRbx7wDa3qq4cUn0jIr98wXzgLIKRqXrDbWdTqZhIhgJsInb9xjdixzaOJPR6b/EqZBgQkERoC+RbQ5aogxMAj9qMlNoOStxMDhIfxItkB9SHSJtx4mAKA5yiAg7jaRbQ7MSdrYURadzpTIh6BebAQpbBaPAP4uEZ1cpQg31uVmjfrpx+ArxzR26ZaRsk6KVRRPsH0BinZ/d+iZ08N50PwldZJXqK4SwldTSxZNzJtA9zQOl+iCV5gcVT6iUHADQ7RJw/rAFjFPrywubd5qiGcn7XEsh3727axKktbMA9aIIdTH8Fx6BaEGp1j7VNi8dtjk8pKOygdZKUcHLFKc8IqVLcwKqoLvLF9fKRdRsogP5QIrDvQSQ0V/VFKbqDBIBdABQ67EgLqXgcgqGaGTbtbpR6HZ1PYmHqGoBnb1B2GGGvBuGWGQ7bIBHOHGHmHeHq7bJHzxGV6hHp9PK58hcHpoUaA7p1rKd/LhKd8fiQqWcwrASIqQSMHoBVGPAuiYrECuSbQcNlEUDyAJb5TLaYVe8jS+I6aSZmj9c4rLxe4BFgjVSo9Ox/B4hllA8Pw9YnZ6B1Hg8P9ExtZEFkAOrIFLyXG2q1RKhZJD6bx3igklpe9msedIB3H7YxNKlQDSb+NhNKaM7HBz7ExHHDgmTHUs43RvYPosNjxQ8apHVYUvFCkjR/BA9HwDg6wMjkBjrgh5j6xJ0WhagB9IcSnBm/7SFW4IES4Zw8Be7qItdo6vUk5gkhYymLgElKAkkbbWQpU/aIYk6lrs98nhUloTLgFuxh40VhEP5bQTSf4kY/os1y0D4PHf6VsXHQJW4phbn3SNydmOj3Gfx07qafN5n8giq8DRZ4GVnrhvFI6SYDn9cdz3GJjEwWQCqlSlqlR5FqA8NJkHgsBEkOCxwvUCqqXshur0ABAoXQg9svcFqlZcKhxpB2BUWsBytMWil2hBn9mfGnnjnQJ3G5smIPh9Jk7YJqWxCo06WclGWSDBmVXdwGhHhAE8t1X2WWQ2RmiTsDFOI0RUXGBTbphPEcXXHrbQJNze7N7NFtoUFDR6ZIFCms5mikXM7ObXkpdhX0QDVGV6V7wdk8IQgnlzREqvy05u5fAFaXVyDKBjL5EDRJqNzkEuWC3mjwVfavlOrLy70sQDxaY4JMnmixMJIUJqzrtbsyAr7DgkAwFgZhbpVgKZaedlWYXXGCZ3GtdZWjnaZvQwpIcP4JdwnHtxWtYAlmQMW4qshuUIG49vssXdQk9JLAcZKfUM9kH0cXLlK4czGLHOjEYUZPw6BU07i4nNGDK8HHGmJWnxAex4mBjFDenvBedi0O8HFu9e9Hz+9Tc+0QPdcwOjcec9c122wJWqKYOu85WDd4OQhHETW0qOzoOvHSNYOMOe8sOLI1nKACb2JyD/XPlUmuq4Ih20U4nSmg2J3kUMOaslHriVGEmHpcG3odGvjItfjDG2djGEtnkb3MsKCjIc7A75AwnnmGV1JFOByzEkUahLoIdhF6Oq3YHAdkDEEPIZ0CRzECShgpXvZBja2cstdmV6BfG0VTn2XAaHnCiJWgoyXkOW4aWPYDn7YLWbnYQQ2eYBhuDskPGWiTgQmwgOlDmSq56fNU0fKtG3ppQfx+QX2BOhscUNn3hJh7gRnpFOUPErPShPC0PEOp3SO+8EOTcHQCO8WiP0OavwOEPvO8PMbuKqu4O6vsPl38O0i/cCJ3xgRstcMonRYOQ7hBGBRXcBmXXRYsJFPI4yExHuK4nzbm2ucNvMutualou7RIhBqPFdQMTrI679v1OaB29+Y+mr8DR85upu5q5oUIE0UgwKglaaE5Tg3Ta9apUAohXNnJh9JmnaAnJnzjHXXDgvv+gfu02ahM2Elvkq3Jh1zKlAvrm5jhlDQc2xKE77hUA0Yxru4/w3hPuagSmZ3A1tio9HPir71MHcEY8NjRK93XUAc8dj3sRT3yHz3g00GYBi8APHVpR3u6B5nzHH1euSP2vsOGuzdYfIesMZeLb+Q5e2uyO7JOuUOJf1OpBVeJpRfCPtdQP5edecP138OVfpfTfmvzfiPtf+vyPHWKADerape1fi8FuH3vx/E71o18wRadb7zegMuG8tv7fH09v7HQ+mILvOAdqY+NeDv/fCkw+subuSA7vdVAPMNQtlHbiLGF9ehX2YK4LMQhPAqRODGYtxPzsT8MHHCxJvQnHcSSnmy0akrFFMZsZigXWzyhkkAWnAP2m/hQk4ySCWrgKSVakeBnAphiinBdcfv+5NkXHMAKhPXqyHPwzxTnuothq0r5ziwNArBUbWyMbqIOtZJKeiRIWS2fwQVJwFB/4uoqIfczVKBdg+A0JbgTEOCFikhKpBdYP4GlNNyJC/8ugO3LrFfz5C6tSUoQCFrsHMTH9Mw/uXAPtR3LPMLOO/DonvzRQB0iAZoPtiBTD7b8YBKob4AKkQD4x9qqvRLPAPwAMUtSXbf0JIFkj4CSmukQBAnjgipMtmkhUIGOXIA4IuAENAcgoSRazYR2SyR7OBVhCtVxk2hSeovwAS4ALCKACivDWQCJALkNYT7uxH+STAEAn3PZFuFry7BsABhIWK6CQSEg2y1ZeGtoJoqGgFCB4fxuYKJBJ1GSP7OmAzHQB9lAEsAXYKiDB6gp2IiwIwUSDgigECMkQeSNoLYoKEGBPg+we3A4R+co06AQauqCFglMiBRAbQT+FTqQCmIiQCoRYMSEshIAqdH8Iy0qLi1YACIMQewDcqHxhUCbQELMVdikJbQPQU2hUAJC700UC2IIX8g8gkok2L2QVnwICZYBpm+STUg3R+BvJnc5A/od0hmz8CmQ/8QsE5Rca6osg8/HOBvwXgaCoBuZYanQPSEMhESGAf4vhUBDtDgIzjPLggPDZx0qgGgfIJiwkKpBZAoQ8IcIPcHIAABX1ZokuA0Cp04IsSP6FcJYKz0WW0qAQeEhZiFhW+gFafocCxhWDH+S/ZVvGBCBIp7wjoWwb5GaKQiogLZA4LpEESfDWBPfPoVq0gB/lZwDI3wBMNXJIR2eu7IpPuwkrc89iXqE9vJTPbZ4L2wvetP4yQI4ZU0s0XUJAJIDZp+4iADhjy2mQMB3y1wCgIHDngSAtCJ0WoMWA4AcBu+1/ZioFA4B6dsg2aYUNwHYaYAPgsgZWIV1vLSBpiJAJhlAFlH8CtYCo+brVAlrZopBzARIMaL0CmiwEzo1EE8PdHIBPRecYVD6Kwz+jFh+DWgIqJDE85s0sNSipGN0DRihhcY10YmNRJsAUxBwX0ZAAzHyivwOYkCCEGzTgiixJo0sQoRdEJjhByY70bWPrGBjGxwY5sVUGzRsV2xJYu+GWJ7EeiEE1YtMX6LlFDjH2I4/di2JHKTiYx1CRIN2LdG9j5x/Y9McuMhRBj+QSo/3P0E1FzwdRzEfUf7ENFRjtg7DCuoIB/h9jUxTDIvqVAMDjQiUhxaqLVCCqfJmoq0PwGgA2jM4YsixRQMoCGiHRRoJ0X8eVBoTqB8x04ccfVS5i+5aA2aZ4KSR/F/iKSAgAAOwUlxYJE8WHQAEwkTVgDAVYLQApIkT4gsQBgAJgYAkSSAAmMSLQAECrB8osQZYBRJID5QBMAmY6IYD/HLAsUywQqLQCokMBlgAmcWPlHFgbAhMqwEibQA0kkBVgAmQqI6EdDix+SAgIoMsFoCFRYgFNMaChMKhqTaA5kkgBsG4lCZlgZE2ieLFiBYpYgXktABsBIkCBkyQmNAAJlUlrBeJtALYDZIgC1BiJdEuiRsEvgbBaAAmOgIVDckUkNgiUgQOZLWBCYqJBUvScsDckaSJJyEmKfJPyhiQ0AsQdKUJJykUkKSJAZYPlBIAkS0AqkkiRpNakCTdJFJBgP1IExoASJUUpCX+I2COgSptAEidJIpJiTaA+UYif5KEz5R8olE7KdJLQCrAhMdkikrEA2DkT6A0UqABSRUATSQptABgJFNDz9ShMJEq6fxN1SxBQ8rU5KcsFECWTxYsIY6ZAFckCZkpHE/aaFI2DLBHQqwPyUJl0miTtJFEnKflDYkBSNgdEy+PlDKl/iSJJEoqCDPyirBWJ20xaYJLolDSPp+0ieJlNiCrB6iKUgaQJm2loyUJDADYCQApLLAdpqwAyWgDQC6TxYAgUKeLE0kbAapmUoTD5KWmyTOJOM5YLaB+kzT8pAgRmTROEwOSKJyZdiasC4kaT1JDElKWgHFhCZGJQmBgCtOllITypUAZqGhNkiIBMJECXMHQGzSVR9AQAA=== -->

<!-- internal state 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=y-scope/yscope-dev-utils&utm_content=42):

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

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

Copy link

@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

🧹 Nitpick comments (4)
tests/boost/CMakeLists.txt (2)

15-16: Including generated CMake settings from tasks.
The path build/deps/cmake-settings/all.cmake matches the taskfile’s output directory. Consider guarding it with if(EXISTS ...) if you want to fail more gracefully when settings aren’t generated.


27-32: Executable target and linkage are correctly configured.
Using target_sources and linking Boost::program_options and Boost::system privately is appropriate. Optionally, you could combine into a single add_executable(boost-test boost-test.cpp) for brevity, but the current form is clear.

tests/boost/boost-test.yaml (2)

6-15: Consistent naming for directory variables.
Variables are in UPPER_SNAKE_CASE, which is fine, but consider aligning naming conventions with the rest of your Taskfiles (e.g., lower_snake_case). Also, you may collapse redundant levels if there’s a common G_BUILD_DIR.


23-31: Reconfigure on source changes.
The config-cmake-project task only watches the Taskfile and CMakeLists.txt. If boost-test.cpp changes, CMake cache won’t regenerate automatically. Consider adding:

    sources:
      - "{{.TASKFILE}}"
      - "CMakeLists.txt"
      - "boost-test.cpp"

so that a code update triggers a reconfigure.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between e300d1b and 0b70373.

📒 Files selected for processing (7)
  • exports/taskfiles/utils/boost.yaml (1 hunks)
  • exports/taskfiles/utils/utils.yaml (1 hunks)
  • taskfile.yaml (2 hunks)
  • tests/boost/.clang-format (1 hunks)
  • tests/boost/CMakeLists.txt (1 hunks)
  • tests/boost/boost-test.cpp (1 hunks)
  • tests/boost/boost-test.yaml (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.{cpp,hpp,java,js,jsx,tpp,ts,tsx}`: - Prefer `false == ` rather than `!`.

**/*.{cpp,hpp,java,js,jsx,tpp,ts,tsx}: - Prefer false == <expression> rather than !<expression>.

  • tests/boost/boost-test.cpp
🔇 Additional comments (11)
tests/boost/.clang-format (1)

1-20: Format configuration looks good!

The .clang-format file is well-structured with clear include categories and appropriate priorities. It correctly inherits from the parent configuration and establishes a proper hierarchy for Boost headers, C system headers, and C++ standard library headers.

exports/taskfiles/utils/boost.yaml (1)

1-167: Well-structured and thorough implementation of Boost tasks

The taskfile provides a comprehensive set of utilities for downloading, building, and installing Boost. The tasks are well-documented with clear parameters and dependencies. The implementation correctly handles the Boost build process, which doesn't use CMake, and provides proper parameter customization.

exports/taskfiles/utils/utils.yaml (1)

4-4: Integration looks good

The boost.yaml taskfile is properly integrated into the utils.yaml file, maintaining alphabetical order of includes.

taskfile.yaml (2)

5-5: Boost test integration looks good

The boost-test taskfile is properly included in the main taskfile.


21-21: Test task integration looks good

The boost-test task is properly integrated into the main test task.

tests/boost/boost-test.cpp (1)

11-62: Overall implementation is solid

The Boost test program is well-structured with proper error handling, exception catching, and validation. It correctly demonstrates the use of Boost.Program_options for argument parsing.

tests/boost/CMakeLists.txt (2)

1-7: Project and CMake minimum version are well-defined.
Setting cmake_minimum_required(VERSION 3.22.1) along with project(boost-test LANGUAGES CXX VERSION 0.1.0) and enforcing C++20 is clear and correct.


8-13: Enabling export of compile commands is appropriate for tooling.
The cached CMAKE_EXPORT_COMPILE_COMMANDS option will generate compile_commands.json, which is helpful for linters and IDE integration.

tests/boost/boost-test.yaml (3)

3-5: Ensure referenced utils include contains Boost and CMake tasks.
You’re including utils.yaml under the alias utils, but later invoke utils:boost:boost-download-and-install and utils:cmake:install-deps-and-generate-settings. Please verify that exports/taskfiles/utils/utils.yaml brings in both the boost and cmake namespaces as expected.


65-71: run-boost-test task invocation looks correct.
Calling the compiled boost-test binary with flags --input 'testtest' --size 8 aligns with the test code.


72-83: Composite boost-test workflow is well-sequenced.
You initialise, install Boost, configure, build, run tests, and clean up in the correct order. This integrates cleanly into the main test suite.

sitaowang1998 and others added 3 commits April 25, 2025 17:33
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@sitaowang1998 sitaowang1998 requested a review from davidlion April 25, 2025 22:55
Copy link
Member

@davidlion davidlion left a comment

Choose a reason for hiding this comment

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

Lets reorganize the test files a bit:

  • a file to include all the tests (like utils.yaml): ./taskfiles/test.yaml
  • move the current tests.yaml to: ./taskfiles/tests/remote.yaml
  • move your ./tests/boost/ directory to ./taskfiles/tests/boost/
  • move your ./tests/boost/boost-test.yaml to ./taskfiles/tests/boost/tests.yaml

@sitaowang1998 sitaowang1998 requested a review from davidlion April 28, 2025 19:25
desc.add_options()("size", boost::program_options::value<int>(), "Size of the string.");
boost::program_options::variables_map variables;
boost::program_options::store(
// NOLINTNEXTLINE(misc-include-cleaner)
Copy link
Member

Choose a reason for hiding this comment

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

Is there really no way to properly include boost::program_options::parse_command_line?

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (3)
taskfiles/boost/test_boost.cpp (3)

27-40: Command-line argument handling implemented correctly, but missing help message support.

The argument parsing is correctly implemented using Boost.Program_options, but the code doesn't provide a way to display the help message when the "--help" option is specified.

Consider adding a check for the help option and displaying the usage when it's specified:

auto parse_args(int argc, char** argv) -> boost::program_options::variables_map {
    boost::program_options::options_description desc;
    desc.add_options()("help", "Boost task test. Check the string against its size.");
    desc.add_options()("input", boost::program_options::value<std::string>(), "Input string.");
    desc.add_options()("size", boost::program_options::value<int>(), "Size of the string.");
    boost::program_options::variables_map variables;
    boost::program_options::store(
            // NOLINTNEXTLINE(misc-include-cleaner)
            boost::program_options::parse_command_line(argc, argv, desc),
            variables
    );
    boost::program_options::notify(variables);
+   if (variables.count("help")) {
+       std::cout << desc << "\n";
+       std::exit(0);
+   }
    return variables;
}

59-59: Consider making cWaitTime more descriptive.

The constant name could be more descriptive to indicate its units and purpose.

-constexpr int cWaitTime = 10;
+constexpr int cWaitTimeMilliseconds = 10;

61-74: Process test may be brittle with fixed timeout values.

The test uses fixed timeouts (10ms) which may not be sufficient on slower systems or under high load, potentially causing flaky tests.

Consider increasing the timeout or making it configurable:

-constexpr int cWaitTime = 10;
+constexpr int cWaitTimeMilliseconds = 100; // Increased for more reliability

And in the test:

-        io_context.run_for(std::chrono::milliseconds(cWaitTime));
-        if (std::future_status::ready != result.wait_for(std::chrono::milliseconds(cWaitTime))) {
+        io_context.run_for(std::chrono::milliseconds(cWaitTimeMilliseconds));
+        if (std::future_status::ready != result.wait_for(std::chrono::milliseconds(cWaitTimeMilliseconds))) {
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 6158dc7 and 7742814.

📒 Files selected for processing (4)
  • exports/taskfiles/utils/boost.yaml (1 hunks)
  • taskfiles/boost/CMakeLists.txt (1 hunks)
  • taskfiles/boost/test_boost.cpp (1 hunks)
  • taskfiles/boost/tests.yaml (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • taskfiles/boost/CMakeLists.txt
🚧 Files skipped from review as they are similar to previous changes (2)
  • taskfiles/boost/tests.yaml
  • exports/taskfiles/utils/boost.yaml
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.{cpp,hpp,java,js,jsx,tpp,ts,tsx}`: - Prefer `false == ` rather than `!`.

**/*.{cpp,hpp,java,js,jsx,tpp,ts,tsx}: - Prefer false == <expression> rather than !<expression>.

  • taskfiles/boost/test_boost.cpp
🔇 Additional comments (10)
taskfiles/boost/test_boost.cpp (10)

8-24: Well-organized includes demonstrating good Boost component integration.

The includes are well-organized with standard library headers first, followed by Boost component headers. The code demonstrates a good breadth of Boost components: program_options, filesystem, iostreams, process, regex, and URL. This seems appropriate for a comprehensive test suite.


42-45: Simple filesystem test looks good.

This test properly checks that the current source file has a parent path, which is a good basic verification of the Boost.Filesystem library functionality.


47-57: Iostreams test is well-implemented with proper exception handling.

The test correctly creates a filtering stream, writes to it, flushes it, and verifies the output. The try-catch block properly handles potential exceptions.


76-78: Regex constants look good.

The regex pattern and test string are appropriately defined as constants.


79-88: Regex test is well-implemented.

The test correctly creates a regex pattern and verifies that it matches the expected input string. The exception handling is appropriate.


90-101: URL test correctly validates the parsed URL component.

The test properly parses a complex URL and verifies the host component. Error handling is done correctly through the result type.


103-110: Good use of error code constants.

Using named constants for error codes improves readability and maintainability. Each test has its distinct error code.


112-136: Command-line argument validation is thorough with proper error handling.

The code correctly validates the presence of both required arguments and handles type conversion errors appropriately. The error messages are clear and helpful.


137-160: Test execution flow is clear and follows the coding guidelines.

The main function correctly verifies the input size and runs all tests sequentially. The code consistently uses false == <expression> pattern as required by the coding guidelines.


1-163: Overall well-structured test program with comprehensive Boost component testing.

This test program effectively validates multiple Boost components through focused test functions. It provides clear error reporting with distinct error codes for different failure scenarios. The code follows the project's coding guidelines and demonstrates good error handling practices.

Some minor improvements could be made to the command-line argument handling and timeout values, but these are not critical issues.

@sitaowang1998 sitaowang1998 requested a review from davidlion April 30, 2025 02:08
Copy link
Member

Choose a reason for hiding this comment

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

@coderabbitai Please make an issue to use Catch2 for testing proper installation and linking of C++ libraries installed through task.

Copy link

Choose a reason for hiding this comment

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

🧩 Analysis chain

@davidlion I've created an issue as requested to suggest using Catch2 for testing proper installation and linking of C++ libraries installed through task. The issue outlines the benefits of using Catch2 compared to the current custom testing approach and proposes implementation steps. I've assigned the issue to you for tracking.


🏁 Script executed:

#!/bin/bash
# Create a GitHub issue to suggest using Catch2 for testing C++ libraries installed through task
gh issue create \
  --title "Use Catch2 for testing proper installation and linking of C++ libraries installed through task" \
  --body "## Background

The current approach for testing C++ libraries installed through task (e.g., Boost in PR #42) uses custom C++ programs with manual validation logic and error handling.

For example, in \`taskfiles/boost/test_boost.cpp\`, the current implementation:
- Uses a custom main function with manual command-line argument parsing
- Implements individual test functions that return boolean success/failure
- Manually tracks and reports different error codes for various test failures

## Proposal

Replace the current custom testing approach with [Catch2](https://github.com/catchorg/Catch2), a modern C++ test framework that would provide:

- Simpler test declarations with REQUIRE/CHECK macros
- Automatic test registration and discovery
- Better test output with clear failure messages
- Test sections and fixtures for better organization
- Built-in command-line parser with test filtering options
- Seamless integration with CI systems and test report generation
- Reduced boilerplate code

## Implementation Steps

1. Add a task to download and install Catch2 (similar to how Boost is installed)
2. Update the test C++ programs to use Catch2's test macros and framework
3. Modify the task running the tests to capture and report Catch2 test results
4. Consider adding this as a standard approach for all C++ library testing tasks

This would standardize testing across all C++ libraries and make it easier to add new tests in the future.

## References
- [Catch2 GitHub repository](https://github.com/catchorg/Catch2)
- [Catch2 documentation](https://github.com/catchorg/Catch2/blob/devel/docs/tutorial.md)" \
  --assignee "davidlion"

echo "Exit status: $?"

Length of output: 1863


@davidlion I've created GitHub issue #43 titled "Use Catch2 for testing proper installation and linking of C++ libraries installed through task" and assigned it to you. You can view it here: #43

The issue includes details about the current testing approach, the benefits of switching to Catch2, and proposed implementation steps.


If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!

@sitaowang1998 sitaowang1998 requested a review from davidlion May 2, 2025 18:13
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