Skip to content

build(deps): Migrate core's submodule-based dependencies to task-based installation.#858

Merged
kirkrodrigues merged 36 commits into
y-scope:mainfrom
kirkrodrigues:core-taskfile-install-deps
Apr 28, 2025
Merged

build(deps): Migrate core's submodule-based dependencies to task-based installation.#858
kirkrodrigues merged 36 commits into
y-scope:mainfrom
kirkrodrigues:core-taskfile-install-deps

Conversation

@kirkrodrigues

@kirkrodrigues kirkrodrigues commented Apr 26, 2025

Copy link
Copy Markdown
Member

Description

Continuing the effort started in #835, this PR migrates core's submodule-based dependencies to task-based installation.

This is similar to the work done in y-scope/spider#115

There are three types of dependencies:

  • CMake-based libraries
  • Non-CMake-based libraries
  • Files

For each dependency, we download it, extract it (if necessary), install it, and then generate a CMake-settings file that contains any CMake variables necessary to reference it. After all dependencies are installed, we generate a single CMake-settings file, that includes all the other settings files, and include this single settings file in core's CMakeLists.txt.

For each dependency, we also generate a checksum file and amalgamate all of these checksum files into a single checksum file that the package build can depend on to detect changes in any of the dependencies.

For CMake-based libraries, we reference them in core's CMakeLists.txt using find_package.

For non-CMake-based libraries, we reference them in core's CMakeLists files either using add_subdirectory, or if the library is header-only, by adding them as include directories in target_include_directories.

Below are the dependencies migrated and any nuances of the migration:

  • absl (CMake-based)
    • Included in core's CMakeLists.txt using find_package rather than add_subdirectory.
    • Installation task renamed from abseil-cpp to absl to match the name of the CMake target.
    • Removed the submodule.
  • ANTLR (JAR)
    • Moved the ANTLR_EXECUTABLE CMake variable to the dependency's CMake settings file.
    • Removed the components/core/third-party directory from .gitignore since it's no longer used.
    • Renamed the installation task to remove the version number.
  • Catch2 (CMake-based)
    • Included in core's CMakeLists.txt using find_package.
    • Changed include path from Catch2/single_include/catch2/catch.hpp to catch2/catch.hpp.
    • Removed the submodule.
    • Installation task renamed from Catch2 to catch2 to be consistent with our task-naming conventions.
  • date (CMake-based)
    • Included in core's CMakeLists.txt using find_package.
    • Switched to using date::date CMake target rather than including date.h directly.
    • Changed include path from date/include/date.h to date/date.h.
    • Removed its submodule.
  • log-surgeon (CMake-based)
    • Included in core's CMakeLists.txt using find_package rather than add_subdirectory.
    • Removed its submodule.
  • nlohmann_json
    • Included in core's CMakeLists.txt using find_package.
    • Changed include path from json/single_include/nlohmann/json.hpp to nlohmann/json.hpp.
    • Addressed new misc-include-cleaner clang-tidy violations caused by not using the single-header include.
    • Replaced json with nlohmann_json in .clang-format.
    • Removed its submodule.
    • Added unzip and xz to the core dependency container images that require it.
    • Renamed its installation task from json to nlohmann_json to match the name of the CMake target.
  • outcome (non-CMake-based)
    • Added to CMakeLists files using source-directory variable in target_include_directories.
    • Removed its submodule.
    • NOTE: outcome can be installed through CMake but requires quickcpplib which causes issues with absl in Debug builds. This can be addressed by switching to boost's version of outcome.
  • simdjson (CMake-based)
    • Included in core's CMakeLists.txt using find_package rather than add_subdirectory.
    • Changed cmake-target from simdjson to simdjson:: simdjson.
    • Removed submodule.
  • sqlite3 (non-CMake based)
    • Added to CMakeLists files using source-directory variable in target_include_directories.
    • Changed include path from sqlite3/sqlite3.h to sqlite3.h.
    • Removed from .gitignore since it's now downloaded into the build directory.
  • utfcpp (non-CMake based)
    • Removed its submodule.
  • yaml-cpp
    • Included in core's CMakeLists.txt using find_package rather than add_subdirectory.

    • Changed CMake-target from yaml-cpp:: yaml-cpp to yaml-cpp to resolve this error:

      CMake Error at src/clp/clg/CMakeLists.txt:136 (target_link_libraries):
        Target "clg" links to:
      
          yaml-cpp::yaml-cpp
      
        but the target was not found.  Possible reasons include:
      
          * There is a typo in the target name.
          * A find_package call is missing for an IMPORTED target.
          * An ALIAS target is missing.
      
    • Changed include path from yaml-cpp/include/yaml-cpp/yaml.h to yaml-cpp/yaml.h.

    • Removed its submodule.

  • ystdlib-cpp:
    • Changed path passed to add_subdirectory and added the directory where it would be built since we're building outside its source directory.
    • Removed its submodule.
    • Installation task renamed from ystdlib-cpp to ystdlib to match the name of the CMake target.

To support the above, we also:

  • Update yscope-dev-utils to the latest version.
  • Move taskfiles/deps.yaml to taskfiles/deps/main.yaml and split any utilities into taskfiles/deps/utils.yaml.
  • Build all CMake-based libraries in Release mode and with LAZY install messages to reduce the installation output.

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

  • GH workflows succeed.
  • Tested that each dependency's task didn't download and extract the dependency if it had already been downloaded and extracted.

Summary by CodeRabbit

  • Chores
    • Migrated from embedded submodules to external dependency management for core libraries, removing bundled third-party code.
    • Updated build scripts and configuration files to use external package discovery and installation for dependencies.
    • Introduced new, modular taskfiles for dependency management with improved checksum validation and parallel execution.
    • Updated installation scripts to include additional required packages (unzip, xz).
    • Adjusted workflow triggers and linting to cover all relevant files and directories.
  • Refactor
    • Standardized include paths for third-party libraries across the codebase.
    • Updated build and test configurations to align with new dependency management approach.
  • Style
    • Simplified and unified include directives for external libraries in source and test files.
  • Documentation
    • Improved clarity and structure in task and utility YAML files for dependency handling.

…ernal-deps task to core-all-parallel; Remove obsolete comment about submodule download parallelization.
@kirkrodrigues kirkrodrigues requested review from a team, gibber9809 and wraymo as code owners April 26, 2025 19:06
@coderabbitai

coderabbitai Bot commented Apr 26, 2025

Copy link
Copy Markdown
Contributor
## Walkthrough

This change removes all embedded third-party submodules from the repository, including libraries such as Catch2, abseil-cpp, date, json, log-surgeon, outcome, simdjson, utfcpp, yaml-cpp, and ystdlib-cpp. The build system is refactored to use external package discovery through CMake's `find_package` and a new Taskfile-based dependency management system. The previous monolithic `taskfiles/deps.yaml` is replaced by a modular structure with `taskfiles/deps/main.yaml` and `taskfiles/deps/utils.yaml`. All relevant source and test files update their include paths to use system or installed package headers. GitHub Actions workflows and taskfile references are updated to reflect the new dependency structure.

## Changes

| Files / Groups                                                                                     | Change Summary |
|--------------------------------------------------------------------------------------------------|----------------|
| `.github/workflows/clp-core-build.yaml`, `.github/workflows/clp-core-build-macos.yaml`           | Broadened workflow trigger paths from `taskfiles/deps.yaml` to `taskfiles/**`. |
| `.gitmodules`, `components/core/submodules/*`                                                    | Removed all submodules except `tools/yscope-dev-utils`. |
| `components/core/.clang-format`                                                                  | Updated regex for library header grouping: replaced `json` with `nlohmann`. |
| `components/core/.gitignore`                                                                     | Removed ignore rules for submodules and third-party directories; only `build/**` remains. |
| `components/core/CMakeLists.txt`, `components/core/src/clp/clg/CMakeLists.txt`, `components/core/src/clp/clo/CMakeLists.txt`, `components/core/src/clp/clp/CMakeLists.txt`, `components/core/src/clp_s/CMakeLists.txt`, `components/core/src/clp_s/indexer/CMakeLists.txt`, `components/core/src/clp_s/search/ast/CMakeLists.txt`, `components/core/src/glt/glt/CMakeLists.txt`, `components/core/src/make_dictionaries_readable/CMakeLists.txt`, `components/core/src/reducer/CMakeLists.txt`, `components/core/src/regex_utils/CMakeLists.txt` | Refactored build to remove submodule references, use `find_package`, update include/link paths for dependencies, and use variables for source/include directories. |
| `components/core/cmake/Modules/FindANTLR.cmake`                                                  | Removed hardcoded ANTLR jar path; now relies on `find_program`. |
| `components/core/src/**/*.[ch]pp`                                                                | Updated include directives for third-party headers to use system/installed package paths (e.g., `<nlohmann/json.hpp>`, `<catch2/catch.hpp>`, `<date/date.h>`, `<outcome/outcome.hpp>`, `<sqlite3/sqlite3.h>`, etc.). |
| `components/core/tests/*`                                                                         | Updated Catch2 and nlohmann JSON include paths to standard installed package headers. |
| `taskfile.yaml`                                                                                   | Updated included deps taskfile reference from `taskfiles/deps.yaml` to `taskfiles/deps/main.yaml` and updated utility variable path. |
| `taskfiles/deps.yaml`                                                                             | Removed: previously contained all dependency management tasks and variables. |
| `taskfiles/deps/main.yaml`, `taskfiles/deps/utils.yaml`                                          | Added: new modular taskfiles for dependency management, installation, and checksum handling with parallelized and improved dependency tasks. |
| `taskfiles/lint.yaml`                                                                             | Changed `yamllint` to lint the entire `taskfiles` directory instead of specific files. |
| `tools/scripts/deps-download/init.sh`                                                            | Updated `yscope-dev-utils` version and extracted directory name. |
| `components/core/tools/scripts/lib_install/centos-stream-9/install-prebuilt-packages.sh`          | Added `unzip` and `xz` to prebuilt package installation scripts. |
| `components/core/tools/scripts/lib_install/ubuntu-focal/install-prebuilt-packages.sh`             | Added `unzip` to prebuilt package installation scripts. |
| `components/core/tools/scripts/lib_install/ubuntu-jammy/install-prebuilt-packages.sh`             | Added `unzip` to prebuilt package installation scripts. |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant Developer
    participant Taskfile
    participant DependencyInstaller
    participant CMake
    participant SystemPackages

    Developer->>Taskfile: Run dependency tasks (e.g., core)
    Taskfile->>DependencyInstaller: Download & extract dependencies (parallel)
    DependencyInstaller->>SystemPackages: Install/verify packages (e.g., unzip, xz)
    DependencyInstaller->>CMake: Generate settings, set variables for found packages
    CMake->>SystemPackages: find_package for dependencies (Catch2, date, etc.)
    CMake-->>Developer: Build proceeds using system/external dependencies

Possibly related PRs

  • y-scope/clp#802: Updates taskfile paths and variables related to the yscope-dev-utils submodule, similar to the changes here for taskfile and utility path updates.
  • y-scope/clp#835: Removes the yscope-log-viewer submodule and replaces its download with a delegated task-based approach, related to the migration from submodules to task-based dependency management.
  • y-scope/clp#829: Renames and relocates taskfiles, including moving deps-tasks.yml to taskfiles/deps.yaml, which is further built upon by this PR's modularization and trigger expansion.

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 e08214ce9ef69e817cbc4ae0554df2cd9f4d3797 and b3b4ff59f2359ed8edc0990b28d4be7b1ed74e90.

</details>

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

* `components/core/src/clp/ffi/ir_stream/search/NewProjectedSchemaTreeNodeCallbackReq.hpp` (1 hunks)

</details>

<details>
<summary>✅ Files skipped from review due to trivial changes (1)</summary>

* components/core/src/clp/ffi/ir_stream/search/NewProjectedSchemaTreeNodeCallbackReq.hpp

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (7)</summary>

* GitHub Check: centos-stream-9-deps-image
* GitHub Check: ubuntu-jammy-deps-image
* GitHub Check: build-macos (macos-15, false)
* GitHub Check: build-macos (macos-13, true)
* GitHub Check: build-macos (macos-15, true)
* GitHub Check: build-macos (macos-13, false)
* GitHub Check: lint-check (macos-latest)

</details>

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


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

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

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

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

</details>

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

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

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

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

</details>

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

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=y-scope/clp&utm_content=858):

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

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai 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 -->

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 5

🧹 Nitpick comments (6)
components/core/src/clp/clo/CMakeLists.txt (1)

158-163: Expand include directories for external dependencies
Adding ${CLP_OUTCOME_SOURCE_DIRECTORY} and ${CLP_SQLITE3_SOURCE_DIRECTORY} enables consumption of external packages. Consider removing the legacy ${PROJECT_SOURCE_DIR}/submodules entry if the embedded submodules have been fully removed to avoid stale include paths.

components/core/src/glt/glt/CMakeLists.txt (1)

177-182: Expand include directories for external dependencies
The target now includes ${CLP_OUTCOME_SOURCE_DIRECTORY} and ${CLP_SQLITE3_SOURCE_DIRECTORY}. If all submodules are removed, consider dropping ${PROJECT_SOURCE_DIR}/submodules to clean up obsolete include paths.

taskfiles/deps/utils.yaml (2)

20-30: combine-core-checksum-files concatenates individual checksums.

The loop correctly excludes the combined file itself and rebuilds it from fresh .md5 files. Consider sorting input files for deterministic ordering.


48-79: install-remote-cmake-lib implements idempotent CMake install with checksum.

You orchestrate remote tarball install, validate and compute checksums. To improve idempotency, consider removing or backing up an existing INSTALL_PREFIX before re-extracting, or add a cleanup flag var.

taskfiles/deps/main.yaml (2)

7-20: Review variable definitions for consistency and usage
Centralising directory and checksum paths is great. However, G_DEPS_CORE_CMAKE_SETTINGS_FILE (line 19) isn’t referenced in any task—consider removing it or using it in place of hardcoded "all.cmake".


262-280: yscope stdlib download & CMake integration
The pattern matches ANTLR and Outcome. To reduce repetition, consider templating the echo-to-file step via a YAML anchor/alias.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between d0b354e and bd2e81f.

📒 Files selected for processing (107)
  • .github/workflows/clp-core-build-macos.yaml (2 hunks)
  • .github/workflows/clp-core-build.yaml (3 hunks)
  • .gitmodules (0 hunks)
  • components/core/.clang-format (1 hunks)
  • components/core/.gitignore (0 hunks)
  • components/core/CMakeLists.txt (6 hunks)
  • components/core/cmake/Modules/FindANTLR.cmake (0 hunks)
  • components/core/src/clp/GlobalMetadataDBConfig.cpp (1 hunks)
  • components/core/src/clp/SQLiteDB.hpp (1 hunks)
  • components/core/src/clp/SQLitePreparedStatement.hpp (1 hunks)
  • components/core/src/clp/TimestampPattern.cpp (1 hunks)
  • components/core/src/clp/clg/CMakeLists.txt (1 hunks)
  • components/core/src/clp/clo/CMakeLists.txt (2 hunks)
  • components/core/src/clp/clo/clo.cpp (1 hunks)
  • components/core/src/clp/clp/CMakeLists.txt (2 hunks)
  • components/core/src/clp/ffi/KeyValuePairLogEvent.cpp (1 hunks)
  • components/core/src/clp/ffi/KeyValuePairLogEvent.hpp (1 hunks)
  • components/core/src/clp/ffi/ir_stream/Deserializer.hpp (1 hunks)
  • components/core/src/clp/ffi/ir_stream/Serializer.cpp (1 hunks)
  • components/core/src/clp/ffi/ir_stream/Serializer.hpp (1 hunks)
  • components/core/src/clp/ffi/ir_stream/encoding_methods.cpp (1 hunks)
  • components/core/src/clp/ffi/ir_stream/ir_unit_deserialization_methods.cpp (1 hunks)
  • components/core/src/clp/ffi/ir_stream/ir_unit_deserialization_methods.hpp (1 hunks)
  • components/core/src/clp/ffi/ir_stream/utils.cpp (1 hunks)
  • components/core/src/clp/ffi/ir_stream/utils.hpp (1 hunks)
  • components/core/src/clp/ir/LogEventDeserializer.cpp (1 hunks)
  • components/core/src/clp/ir/LogEventDeserializer.hpp (1 hunks)
  • components/core/src/clp/make_dictionaries_readable/CMakeLists.txt (0 hunks)
  • components/core/src/clp/regex_utils/CMakeLists.txt (1 hunks)
  • components/core/src/clp/regex_utils/regex_translation_utils.cpp (1 hunks)
  • components/core/src/clp/regex_utils/regex_translation_utils.hpp (1 hunks)
  • components/core/src/clp/streaming_archive/writer/Archive.cpp (1 hunks)
  • components/core/src/clp_s/ArchiveWriter.cpp (1 hunks)
  • components/core/src/clp_s/CMakeLists.txt (2 hunks)
  • components/core/src/clp_s/JsonConstructor.cpp (1 hunks)
  • components/core/src/clp_s/TimestampPattern.cpp (1 hunks)
  • components/core/src/clp_s/clp-s.cpp (1 hunks)
  • components/core/src/clp_s/indexer/CMakeLists.txt (1 hunks)
  • components/core/src/clp_s/search/ast/CMakeLists.txt (1 hunks)
  • components/core/src/glt/GlobalMetadataDBConfig.cpp (1 hunks)
  • components/core/src/glt/SQLiteDB.hpp (1 hunks)
  • components/core/src/glt/SQLitePreparedStatement.hpp (1 hunks)
  • components/core/src/glt/TimestampPattern.cpp (1 hunks)
  • components/core/src/glt/ffi/ir_stream/encoding_methods.cpp (1 hunks)
  • components/core/src/glt/glt/CMakeLists.txt (2 hunks)
  • components/core/src/glt/ir/LogEventDeserializer.cpp (1 hunks)
  • components/core/src/glt/ir/LogEventDeserializer.hpp (1 hunks)
  • components/core/src/glt/streaming_archive/writer/Archive.cpp (1 hunks)
  • components/core/src/reducer/CMakeLists.txt (1 hunks)
  • components/core/src/reducer/DeserializedRecordGroup.cpp (1 hunks)
  • components/core/src/reducer/DeserializedRecordGroup.hpp (1 hunks)
  • components/core/src/reducer/JsonArrayRecordIterator.hpp (1 hunks)
  • components/core/src/reducer/JsonRecord.hpp (1 hunks)
  • components/core/src/reducer/ServerContext.cpp (1 hunks)
  • components/core/src/reducer/ServerContext.hpp (1 hunks)
  • components/core/src/reducer/reducer_server.cpp (1 hunks)
  • components/core/submodules/Catch2 (0 hunks)
  • components/core/submodules/abseil-cpp (0 hunks)
  • components/core/submodules/date (0 hunks)
  • components/core/submodules/json (0 hunks)
  • components/core/submodules/log-surgeon (0 hunks)
  • components/core/submodules/outcome (0 hunks)
  • components/core/submodules/simdjson (0 hunks)
  • components/core/submodules/utfcpp (0 hunks)
  • components/core/submodules/yaml-cpp (0 hunks)
  • components/core/submodules/ystdlib-cpp (0 hunks)
  • components/core/tests/test-BoundedReader.cpp (1 hunks)
  • components/core/tests/test-BufferedFileReader.cpp (1 hunks)
  • components/core/tests/test-EncodedVariableInterpreter.cpp (1 hunks)
  • components/core/tests/test-FileDescriptorReader.cpp (1 hunks)
  • components/core/tests/test-Grep.cpp (1 hunks)
  • components/core/tests/test-MemoryMappedFile.cpp (1 hunks)
  • components/core/tests/test-NetworkReader.cpp (1 hunks)
  • components/core/tests/test-ParserWithUserSchema.cpp (1 hunks)
  • components/core/tests/test-SQLiteDB.cpp (1 hunks)
  • components/core/tests/test-Segment.cpp (1 hunks)
  • components/core/tests/test-Stopwatch.cpp (1 hunks)
  • components/core/tests/test-StreamingCompression.cpp (1 hunks)
  • components/core/tests/test-TimestampPattern.cpp (1 hunks)
  • components/core/tests/test-Utils.cpp (1 hunks)
  • components/core/tests/test-clp_s-end_to_end.cpp (1 hunks)
  • components/core/tests/test-clp_s-search.cpp (1 hunks)
  • components/core/tests/test-encoding_methods.cpp (1 hunks)
  • components/core/tests/test-ffi_IrUnitHandlerInterface.cpp (1 hunks)
  • components/core/tests/test-ffi_KeyValuePairLogEvent.cpp (1 hunks)
  • components/core/tests/test-ffi_SchemaTree.cpp (1 hunks)
  • components/core/tests/test-hash_utils.cpp (1 hunks)
  • components/core/tests/test-ir_encoding_methods.cpp (1 hunks)
  • components/core/tests/test-ir_parsing.cpp (1 hunks)
  • components/core/tests/test-ir_serializer.cpp (1 hunks)
  • components/core/tests/test-kql.cpp (1 hunks)
  • components/core/tests/test-main.cpp (1 hunks)
  • components/core/tests/test-math_utils.cpp (1 hunks)
  • components/core/tests/test-query_methods.cpp (1 hunks)
  • components/core/tests/test-regex_utils.cpp (1 hunks)
  • components/core/tests/test-sql.cpp (1 hunks)
  • components/core/tests/test-string_utils.cpp (1 hunks)
  • components/core/tests/test-utf8_utils.cpp (1 hunks)
  • components/core/tools/scripts/lib_install/centos-stream-9/install-prebuilt-packages.sh (1 hunks)
  • components/core/tools/scripts/lib_install/ubuntu-focal/install-prebuilt-packages.sh (1 hunks)
  • components/core/tools/scripts/lib_install/ubuntu-jammy/install-prebuilt-packages.sh (1 hunks)
  • taskfile.yaml (2 hunks)
  • taskfiles/deps.yaml (0 hunks)
  • taskfiles/deps/main.yaml (1 hunks)
  • taskfiles/deps/utils.yaml (1 hunks)
  • taskfiles/lint.yaml (1 hunks)
  • tools/scripts/deps-download/init.sh (1 hunks)
⛔ Files not processed due to max files limit (1)
  • tools/yscope-dev-utils
💤 Files with no reviewable changes (15)
  • components/core/.gitignore
  • components/core/submodules/abseil-cpp
  • components/core/submodules/date
  • components/core/submodules/outcome
  • components/core/cmake/Modules/FindANTLR.cmake
  • components/core/submodules/log-surgeon
  • components/core/submodules/Catch2
  • components/core/submodules/ystdlib-cpp
  • components/core/submodules/json
  • components/core/submodules/utfcpp
  • components/core/submodules/simdjson
  • .gitmodules
  • components/core/submodules/yaml-cpp
  • components/core/src/clp/make_dictionaries_readable/CMakeLists.txt
  • taskfiles/deps.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>.

  • components/core/src/clp/ffi/ir_stream/ir_unit_deserialization_methods.hpp
  • components/core/tests/test-MemoryMappedFile.cpp
  • components/core/src/reducer/JsonRecord.hpp
  • components/core/src/clp/SQLitePreparedStatement.hpp
  • components/core/tests/test-hash_utils.cpp
  • components/core/tests/test-ffi_SchemaTree.cpp
  • components/core/src/clp_s/clp-s.cpp
  • components/core/tests/test-ir_parsing.cpp
  • components/core/src/reducer/DeserializedRecordGroup.cpp
  • components/core/tests/test-SQLiteDB.cpp
  • components/core/src/clp/SQLiteDB.hpp
  • components/core/src/clp/TimestampPattern.cpp
  • components/core/tests/test-Utils.cpp
  • components/core/tests/test-sql.cpp
  • components/core/src/clp/ffi/ir_stream/utils.cpp
  • components/core/src/clp_s/JsonConstructor.cpp
  • components/core/src/glt/streaming_archive/writer/Archive.cpp
  • components/core/src/glt/SQLitePreparedStatement.hpp
  • components/core/tests/test-kql.cpp
  • components/core/tests/test-BoundedReader.cpp
  • components/core/src/reducer/JsonArrayRecordIterator.hpp
  • components/core/tests/test-math_utils.cpp
  • components/core/tests/test-string_utils.cpp
  • components/core/tests/test-FileDescriptorReader.cpp
  • components/core/src/clp/ffi/ir_stream/encoding_methods.cpp
  • components/core/src/clp/ir/LogEventDeserializer.hpp
  • components/core/tests/test-ParserWithUserSchema.cpp
  • components/core/src/reducer/DeserializedRecordGroup.hpp
  • components/core/tests/test-regex_utils.cpp
  • components/core/tests/test-Stopwatch.cpp
  • components/core/tests/test-StreamingCompression.cpp
  • components/core/src/reducer/ServerContext.cpp
  • components/core/tests/test-clp_s-end_to_end.cpp
  • components/core/src/clp_s/TimestampPattern.cpp
  • components/core/src/reducer/reducer_server.cpp
  • components/core/src/clp/GlobalMetadataDBConfig.cpp
  • components/core/tests/test-encoding_methods.cpp
  • components/core/src/clp/ir/LogEventDeserializer.cpp
  • components/core/src/clp/streaming_archive/writer/Archive.cpp
  • components/core/src/glt/ir/LogEventDeserializer.hpp
  • components/core/tests/test-utf8_utils.cpp
  • components/core/tests/test-query_methods.cpp
  • components/core/src/clp/clo/clo.cpp
  • components/core/src/clp/ffi/KeyValuePairLogEvent.hpp
  • components/core/src/clp_s/ArchiveWriter.cpp
  • components/core/tests/test-main.cpp
  • components/core/tests/test-clp_s-search.cpp
  • components/core/src/glt/ir/LogEventDeserializer.cpp
  • components/core/src/clp/regex_utils/regex_translation_utils.cpp
  • components/core/src/glt/ffi/ir_stream/encoding_methods.cpp
  • components/core/src/reducer/ServerContext.hpp
  • components/core/src/clp/ffi/ir_stream/Serializer.cpp
  • components/core/src/glt/TimestampPattern.cpp
  • components/core/tests/test-EncodedVariableInterpreter.cpp
  • components/core/tests/test-ir_serializer.cpp
  • components/core/src/glt/SQLiteDB.hpp
  • components/core/tests/test-BufferedFileReader.cpp
  • components/core/tests/test-NetworkReader.cpp
  • components/core/tests/test-TimestampPattern.cpp
  • components/core/src/clp/ffi/ir_stream/ir_unit_deserialization_methods.cpp
  • components/core/src/glt/GlobalMetadataDBConfig.cpp
  • components/core/tests/test-Grep.cpp
  • components/core/tests/test-ffi_IrUnitHandlerInterface.cpp
  • components/core/tests/test-ffi_KeyValuePairLogEvent.cpp
  • components/core/src/clp/regex_utils/regex_translation_utils.hpp
  • components/core/src/clp/ffi/ir_stream/Deserializer.hpp
  • components/core/src/clp/ffi/ir_stream/utils.hpp
  • components/core/src/clp/ffi/KeyValuePairLogEvent.cpp
  • components/core/tests/test-Segment.cpp
  • components/core/src/clp/ffi/ir_stream/Serializer.hpp
  • components/core/tests/test-ir_encoding_methods.cpp
🧠 Learnings (6)
components/core/tests/test-encoding_methods.cpp (1)
Learnt from: LinZhihao-723
PR: y-scope/clp#570
File: components/core/tests/test-ir_encoding_methods.cpp:376-399
Timestamp: 2024-11-01T03:26:26.386Z
Learning: In the test code (`components/core/tests/test-ir_encoding_methods.cpp`), exception handling for `msgpack::unpack` can be omitted because the Catch2 testing framework captures exceptions if they occur.
components/core/src/clp/ir/LogEventDeserializer.cpp (1)
Learnt from: LinZhihao-723
PR: y-scope/clp#558
File: components/core/tests/test-ffi_KeyValuePairLogEvent.cpp:14-14
Timestamp: 2024-10-14T03:42:10.355Z
Learning: In the file `components/core/tests/test-ffi_KeyValuePairLogEvent.cpp`, including `<json/single_include/nlohmann/json.hpp>` is consistent with the project's coding standards.
components/core/src/clp/ffi/KeyValuePairLogEvent.hpp (1)
Learnt from: LinZhihao-723
PR: y-scope/clp#558
File: components/core/tests/test-ffi_KeyValuePairLogEvent.cpp:14-14
Timestamp: 2024-10-14T03:42:10.355Z
Learning: In the file `components/core/tests/test-ffi_KeyValuePairLogEvent.cpp`, including `<json/single_include/nlohmann/json.hpp>` is consistent with the project's coding standards.
components/core/tests/test-ffi_KeyValuePairLogEvent.cpp (1)
Learnt from: LinZhihao-723
PR: y-scope/clp#558
File: components/core/tests/test-ffi_KeyValuePairLogEvent.cpp:14-14
Timestamp: 2024-10-14T03:42:10.355Z
Learning: In the file `components/core/tests/test-ffi_KeyValuePairLogEvent.cpp`, including `<json/single_include/nlohmann/json.hpp>` is consistent with the project's coding standards.
components/core/src/clp/ffi/KeyValuePairLogEvent.cpp (1)
Learnt from: LinZhihao-723
PR: y-scope/clp#558
File: components/core/tests/test-ffi_KeyValuePairLogEvent.cpp:14-14
Timestamp: 2024-10-14T03:42:10.355Z
Learning: In the file `components/core/tests/test-ffi_KeyValuePairLogEvent.cpp`, including `<json/single_include/nlohmann/json.hpp>` is consistent with the project's coding standards.
components/core/tests/test-ir_encoding_methods.cpp (1)
Learnt from: LinZhihao-723
PR: y-scope/clp#570
File: components/core/tests/test-ir_encoding_methods.cpp:376-399
Timestamp: 2024-11-01T03:26:26.386Z
Learning: In the test code (`components/core/tests/test-ir_encoding_methods.cpp`), exception handling for `msgpack::unpack` can be omitted because the Catch2 testing framework captures exceptions if they occur.
⏰ Context from checks skipped due to timeout of 90000ms (7)
  • GitHub Check: ubuntu-jammy-deps-image
  • GitHub Check: centos-stream-9-deps-image
  • GitHub Check: build-macos (macos-15, false)
  • GitHub Check: build-macos (macos-15, true)
  • GitHub Check: build-macos (macos-13, false)
  • GitHub Check: build-macos (macos-14, false)
  • GitHub Check: build-macos (macos-13, true)
🔇 Additional comments (135)
components/core/tools/scripts/lib_install/centos-stream-9/install-prebuilt-packages.sh (1)

23-24: Approve addition of unzip and xz packages: Including these utilities ensures that compressed archives can be properly extracted during the dependency installation process, maintaining consistency with the Ubuntu scripts.

components/core/tools/scripts/lib_install/ubuntu-jammy/install-prebuilt-packages.sh (1)

28-29: Verify necessity and scope of new packages: Adding unzip is appropriate for archive extraction, aligning with other platforms. However, software-properties-common provides add-apt-repository but is not used in this script. Please confirm whether it’s required here or if it should be installed only in the specific task or documented accordingly.

components/core/src/clp/SQLitePreparedStatement.hpp (1)

6-6: Ensure system include path for SQLite3: Switching the include to <sqlite3.h> aligns with external package usage. Verify that find_package(SQLite3) or updated CMake target_include_directories for the clp target correctly exposes the system’s SQLite3 include directory so this header resolves.

components/core/src/glt/SQLitePreparedStatement.hpp (1)

6-6: Validate include path for the glt component: As with the CLP version, confirm that the glt target’s CMakeLists now uses find_package(SQLite3) or sets its include directories such that <sqlite3.h> is discoverable, preventing build failures.

components/core/tests/test-Utils.cpp (1)

11-11: Update Catch2 include to external package path: The new #include <catch2/catch.hpp> matches external Catch2 usage after removing the submodule. Please ensure the CMake test targets now call find_package(Catch2 REQUIRED) and update any documentation or CMake examples so this path is resolvable.

components/core/src/clp_s/JsonConstructor.cpp (1)

12-12: Standardize JSON include path. Updated the include directive to <nlohmann/json.hpp> to use the external nlohmann_json package instead of the removed submodule.

components/core/tests/test-StreamingCompression.cpp (1)

11-11: Update Catch2 include. Changed to <catch2/catch.hpp> to reference the installed Catch2 package rather than the embedded submodule.

components/core/src/glt/ir/LogEventDeserializer.hpp (1)

6-6: Simplify Outcome include path. Replaced the nested submodule path with the single-header <outcome.hpp> for consistency with the external Outcome package.

components/core/src/reducer/DeserializedRecordGroup.cpp (1)

5-5: Switch to public JSON header. Updated the include to <nlohmann/json.hpp> to align with the external nlohmann_json installation.

components/core/src/clp/TimestampPattern.cpp (1)

7-7: Use external date header. Changed the include from the submodule path to <date/date.h>, matching the external date package layout.

components/core/src/glt/TimestampPattern.cpp (1)

7-7: Include path updated to use external package.

The include directive has been updated to use the standard include path for the date library (<date/date.h>) instead of the embedded submodule path. This change aligns with the PR objective of migrating from submodule-based dependencies to task-based installation.

components/core/tests/test-math_utils.cpp (1)

1-1: Include path updated for Catch2 framework.

The include directive for Catch2 has been properly updated to use the standard system include path. This change is part of the PR objective to migrate from submodule-based dependencies to externally managed packages.

components/core/tests/test-ir_parsing.cpp (1)

1-1: Include path updated for Catch2 framework.

The include directive for the Catch2 testing framework has been properly updated to use the standard system include path. This change is consistent with the PR's objective of removing embedded submodules and switching to externally managed packages.

components/core/src/glt/SQLiteDB.hpp (1)

6-7: Include path updated for SQLite3.

The include directive has been properly updated to use the standard system include path for SQLite3. This change is part of the broader effort to migrate from submodule-based dependencies to task-based installation of external packages.

components/core/src/clp/SQLiteDB.hpp (1)

6-6: Update to system include path is appropriate.

This change correctly updates the SQLite3 include from a relative path to a system path, aligning with the PR objective of migrating from submodule-based dependencies to task-based installation.

components/core/tests/test-ffi_SchemaTree.cpp (1)

3-3: Well-structured include path update for Catch2.

The change from the submodule path to the standardized system include path is consistent with the PR's goal of removing embedded submodules and transitioning to task-based dependency management.

components/core/src/reducer/ServerContext.hpp (1)

10-10: Appropriate update to nlohmann/json include path.

This change correctly updates the JSON library include from the submodule path to the standardized system path, which is consistent with the removal of the embedded JSON submodule and transition to external package management.

components/core/src/clp/ffi/ir_stream/encoding_methods.cpp (1)

3-3: JSON include path correctly updated.

The update from the submodule path to the standardized system include path aligns with the project-wide migration to external dependency management. The code follows good practices, including the coding guideline of using false == <expression> pattern instead of !<expression> as seen throughout the file.

components/core/tests/test-Stopwatch.cpp (1)

3-3: Approve updated Catch2 include path
The include directive has been simplified from the embedded submodule path to the standard installed Catch2 package (<catch2/catch.hpp>), matching the new external dependency approach.

components/core/tests/test-encoding_methods.cpp (1)

1-1: Approve updated Catch2 include path
Changed to <catch2/catch.hpp> to use the externally installed Catch2 package rather than the removed submodule.

components/core/src/clp_s/TimestampPattern.cpp (1)

11-11: Approve date library include update
Switching from the submodule header to the system-installed <date/date.h> aligns with the new CMake find_package(date) configuration.

components/core/src/reducer/DeserializedRecordGroup.hpp (1)

8-8: Approve nlohmann JSON include update
Updating to <nlohmann/json.hpp> correctly uses the externally managed JSON library instead of the removed submodule path.

components/core/src/reducer/JsonRecord.hpp (1)

4-4: Approve nlohmann JSON include update
The include directive now references the standard installed header (<nlohmann/json.hpp>), consistent with the external dependency migration.

components/core/src/glt/GlobalMetadataDBConfig.cpp (1)

4-4: Include path simplified
The include for yaml-cpp has been updated to the public header <yaml-cpp/yaml.h>. This aligns with the external package layout—please ensure your CMakeLists uses find_package(yaml-cpp REQUIRED) and correctly links or propagates the include directories.

components/core/src/reducer/reducer_server.cpp (1)

9-9: Standardize nlohmann/json include
Switched to <nlohmann/json.hpp> to reflect the external nlohmann_json package. Verify that your CMakeLists calls find_package(nlohmann_json REQUIRED) and links nlohmann_json::nlohmann_json to the reducer-server target so this header resolves.

components/core/tests/test-Segment.cpp (1)

4-4: Catch2 include path updated
Changed to <catch2/catch.hpp> to use the installed Catch2 package. Make sure the test CMakeLists invokes find_package(Catch2 REQUIRED) and links with Catch2::Catch2.

components/core/src/reducer/JsonArrayRecordIterator.hpp (1)

4-4: Align JSON include with external dependency
The header now uses <nlohmann/json.hpp>, matching the nlohmann_json package. Confirm that your build configuration exports the include path via the nlohmann_json::nlohmann_json target.

components/core/src/clp/ffi/ir_stream/ir_unit_deserialization_methods.hpp (1)

9-9: Simplify Outcome include directive
Updated to #include <outcome.hpp> which matches the installed Outcome package layout. Ensure the corresponding CMakeLists invokes the correct find_package(Outcome REQUIRED) (or similar) and exposes the include path.

components/core/tests/test-main.cpp (1)

2-2: Update Catch2 include directive
The include path has been correctly updated to use the installed Catch2 package (<catch2/catch.hpp>), aligning with the new external dependency management approach.

components/core/src/clp/streaming_archive/writer/Archive.cpp (1)

15-15: Standardise nlohmann JSON include
The JSON include path has been updated to <nlohmann/json.hpp>, matching the external nlohmann_json package. Please confirm that your CMake find_package(nlohmann_json) invocation exposes the correct include directory.

components/core/tests/test-sql.cpp (1)

4-4: Update Catch2 include directive
The test include has been switched to <catch2/catch.hpp>, ensuring consistency with the external Catch2 installation. Verify that all test CMake targets link against the Catch2 package.

components/core/src/clp/regex_utils/regex_translation_utils.cpp (1)

8-8: Simplify Outcome include path
The Outcome include directive now uses <outcome.hpp>, reflecting the external Outcome library. Ensure that the CMakeLists for regex_utils adds the proper include directory (e.g., ${CLP_OUTCOME_SOURCE_DIRECTORY} or the system-installed path).

components/core/src/clp/ffi/ir_stream/ir_unit_deserialization_methods.cpp (1)

13-13: Simplify Outcome include path
The Outcome include has been streamlined to <outcome.hpp>, consistent with the new package-based dependency approach. Confirm that your build system’s include paths for Outcome are correctly configured.

components/core/src/glt/ffi/ir_stream/encoding_methods.cpp (1)

3-3: Standardize JSON include path
The include directive has been updated to reference the externally installed nlohmann/json.hpp rather than the embedded submodule path, matching the new task-based dependency installation.

components/core/tests/test-ParserWithUserSchema.cpp (1)

10-10: Standardize Catch2 include path
The Catch2 header include has been simplified to <catch2/catch.hpp>, aligning with the move away from the embedded Catch2 submodule and using the external package.

components/core/tests/test-hash_utils.cpp (1)

4-4: Standardize Catch2 include in hash utils test
The test now includes <catch2/catch.hpp> instead of the old submodule path, consistent with the project-wide dependency migration.

components/core/tests/test-SQLiteDB.cpp (1)

13-13: Update Catch2 include for SQLiteDB tests
The Catch2 framework is now referenced via <catch2/catch.hpp>, reflecting the external dependency installation and removal of the old submodule.

components/core/src/clp/regex_utils/regex_translation_utils.hpp (1)

7-7: Switch Outcome include to external header
The Outcome include has been changed to <outcome.hpp>, matching the external package usage after removing the embedded submodule.

components/core/src/clp/ffi/ir_stream/utils.cpp (1)

8-9: Migration to system-installed JSON library
Replacing the submodule-based include with <nlohmann/json.hpp> and adding <nlohmann/json_fwd.hpp> correctly aligns with external dependency management.

components/core/src/clp_s/clp-s.cpp (1)

11-11: Update to external JSON include path
Good replacement of the submodule-based path with <nlohmann/json.hpp> to match the external package discovery approach.

components/core/tests/test-TimestampPattern.cpp (1)

1-1: Standardize Catch2 include path
Updating to <catch2/catch.hpp> is consistent with the removal of the Catch2 submodule and external dependency usage.

components/core/tests/test-ir_serializer.cpp (1)

8-8: Standardize Catch2 include path
Switching to <catch2/catch.hpp> aligns this test file with the external Catch2 package.

components/core/tests/test-ffi_IrUnitHandlerInterface.cpp (1)

6-6: Standardize Catch2 include path
The updated include <catch2/catch.hpp> correctly reflects the external Catch2 installation.

components/core/src/clp/GlobalMetadataDBConfig.cpp (1)

3-5: Include path updated for external yaml-cpp package
The include directive now uses <yaml-cpp/yaml.h>, matching the standard installation layout. Ensure that your CMake find_package(yaml-cpp REQUIRED) is configuring the include directories so this header is resolved correctly.

components/core/tests/test-MemoryMappedFile.cpp (1)

7-7: Standardised Catch2 include path
The test now includes <catch2/catch.hpp> to use the externally installed Catch2. Verify that find_package(Catch2 REQUIRED) and target_link_libraries(... PRIVATE Catch2::Catch2WithMain) are configured so this header is available.

components/core/tests/test-string_utils.cpp (1)

5-5: Updated Catch2 include for external package
Switched to the canonical <catch2/catch.hpp> after migrating Catch2 out of a submodule. Confirm that your test target links against the external Catch2 target so this path is on the include search path.

components/core/src/reducer/CMakeLists.txt (1)

44-54:

Details

✅ Verification successful

Add JSON library to reducer-server
Linking nlohmann_json::nlohmann_json is required for JSON support now that the embedded json submodule is removed. Please verify that find_package(nlohmann_json REQUIRED) (or the equivalent find_package(nlohmann_json CONFIG REQUIRED)) is called earlier in the CMake hierarchy so the target is available.

Run this script from the repo root to confirm:


🏁 Script executed:

#!/bin/bash
# Verify that nlohmann_json is located in the CMake configuration
rg "find_package.*nlohmann_json" -n .

Length of output: 113


Confirmed nlohmann_json is available in the CMake hierarchy

The find_package(nlohmann_json REQUIRED) call exists at line 167 of components/core/CMakeLists.txt, which precedes the inclusion of components/core/src/reducer/CMakeLists.txt. No further changes are needed here.

components/core/tests/test-query_methods.cpp (1)

3-3: Standardised Catch2 include directive
The Catch2 header path has been updated to <catch2/catch.hpp> to reflect external dependency usage. Ensure the corresponding CMake test target is linking Catch2::Catch2WithMain (or similar) so this include resolves correctly.

components/core/src/clp_s/ArchiveWriter.cpp (1)

7-7: Include path updated for nlohmann/json.

The include directive has been updated from a submodule-based path to a standard installed package path, which aligns with the migration from submodule-based dependencies to task-based installation.

components/core/tests/test-clp_s-end_to_end.cpp (1)

8-8: Include path updated for Catch2.

The include directive has been updated from a submodule-based path to a standard installed package path, which aligns with the migration from submodule-based dependencies to task-based installation.

components/core/tests/test-kql.cpp (1)

5-5: Include path updated for Catch2.

The include directive has been updated from a submodule-based path to a standard installed package path, which aligns with the migration from submodule-based dependencies to task-based installation.

components/core/src/reducer/ServerContext.cpp (1)

12-12: Include path updated for nlohmann/json.

The include directive has been updated from a submodule-based path to a standard installed package path, which aligns with the migration from submodule-based dependencies to task-based installation.

components/core/src/clp_s/search/ast/CMakeLists.txt (1)

65-65: Transition to fully qualified simdjson target
Using simdjson::simdjson ensures we link against the externally provided package rather than a local submodule.

components/core/src/clp/clo/clo.cpp (1)

7-7: Update JSON include path to external package
Including <nlohmann/json.hpp> aligns with the shift to external dependency management and ensures compatibility with the found package.

components/core/src/clp/ir/LogEventDeserializer.cpp (1)

5-6: Adopt standard package includes for JSON and Outcome
Replacing submodule-relative headers with <nlohmann/json.hpp> and <outcome.hpp> aligns this source with the external package discovery approach.

components/core/tests/test-regex_utils.cpp (1)

3-3: Standardize Catch2 include path
Updating to <catch2/catch.hpp> matches the external Catch2 package and cleans up the include to a single, consistent form.

components/core/tests/test-FileDescriptorReader.cpp (1)

7-7: Simplify Catch2 include for external package
Switching to <catch2/catch.hpp> ensures the test suite uses the externally managed Catch2 target.

components/core/src/clp/ir/LogEventDeserializer.hpp (1)

6-6: Standardize Outcome include path. The updated directive <outcome.hpp> matches the external package and aligns with the project’s include style after removing the embedded Outcome submodule.

components/core/src/glt/streaming_archive/writer/Archive.cpp (1)

13-13: Update nlohmann JSON include path. The new <nlohmann/json.hpp> header is the canonical include for the nlohmann_json package and aligns with the CMake find_package(nlohmann_json …) approach.

components/core/tests/test-BoundedReader.cpp (1)

6-6: Simplify Catch2 include path. Switching to <catch2/catch.hpp> ensures compatibility with the external Catch2 package and removes reliance on the embedded submodule.

components/core/.clang-format (1)

7-9: Adjust library header regex for nlohmann. The regex now correctly recognises nlohmann instead of the removed json submodule, keeping include grouping in sync with project dependencies.

components/core/tests/test-EncodedVariableInterpreter.cpp (1)

3-3: Simplify Catch2 include path. Updated to <catch2/catch.hpp> to use the external package convention and remove the submodule path.

components/core/tests/test-Grep.cpp (1)

3-3: Good include standardization

The include path for Catch2 has been properly updated to use the standard format that is more consistent with external package management rather than embedded submodules.

components/core/tests/test-utf8_utils.cpp (1)

10-11: Include paths properly standardized

The include paths for both Catch2 and nlohmann/json have been correctly updated to use standard external package formats, which aligns with the migration away from submodule-based dependencies.

components/core/src/clp/ffi/ir_stream/Serializer.hpp (1)

11-12: Library includes properly updated

The include paths for nlohmann/json and outcome have been appropriately updated to use the standard paths expected when using external package management rather than embedded submodules.

components/core/src/clp/regex_utils/CMakeLists.txt (1)

18-18: Build configuration properly updated

The addition of ${CLP_OUTCOME_SOURCE_DIRECTORY} as a public include directory correctly supports the transition to external package management for the Outcome library.

components/core/tests/test-BufferedFileReader.cpp (1)

4-4: Catch2 include directive updated to external package
The include line has been changed to reference the installed Catch2 package (<catch2/catch.hpp>) instead of the removed submodule path. This aligns with the new CMake find_package(Catch2) usage and ensures tests pick up the external Catch2 installation.

.github/workflows/clp-core-build-macos.yaml (1)

16-16: Broaden workflow trigger paths for taskfiles directory
The paths filter for both pull_request and push events now includes "taskfiles/**", so any changes under the taskfiles/ directory will correctly trigger the macOS core build workflow.

Also applies to: 30-30

components/core/tools/scripts/lib_install/ubuntu-focal/install-prebuilt-packages.sh (1)

30-32: Add unzip to prebuilt packages installation
Including unzip guarantees the build environment can extract downloaded archives during task-based dependency installation. This addition matches updates in the other OS-specific scripts.

components/core/src/clp/ffi/ir_stream/Deserializer.hpp (1)

12-13: Update JSON and Outcome include paths to external packages
Switched from submodule-based headers to system-installed ones (<nlohmann/json.hpp> and <outcome.hpp>), reflecting the removal of embedded submodules and the use of find_package for these dependencies.

components/core/src/glt/ir/LogEventDeserializer.cpp (1)

5-6: Use external JSON and Outcome headers
Replaced relative single-header paths with <nlohmann/json.hpp> and <outcome.hpp> to align with the transition to externally managed dependencies and CMake find_package configuration.

tools/scripts/deps-download/init.sh (1)

13-15: Ensure the updated commit‐hash and extraction directory match GitHub’s archive layout.

The URL has been updated to use e300d1b.zip and the target folder to yscope-dev-utils-e300d1bab4c2f33cbf9ddf9f0c08185faf035070. Please confirm that downloading that archive from GitHub actually produces the directory with the full hash suffix as named here.

components/core/src/clp/ffi/KeyValuePairLogEvent.cpp (1)

14-17: Include new external package headers consistently.

Updating to <nlohmann/json.hpp>, <nlohmann/json_fwd.hpp>, and <outcome.hpp> aligns with the migration to external dependencies. The ordering (full header before forward header) is acceptable, but consider swapping to forward first if you want lighter includes for compile-time savings.

components/core/src/clp/ffi/ir_stream/utils.hpp (1)

12-13: Replace embedded single-header includes with external package paths.

Switching to <nlohmann/json.hpp> and <outcome.hpp> is correct under the new task-based dependency installation. Ensure CMakeLists.txt has been updated to find_package(nlohmann_json) and find_package(Outcome) so these headers are on the include path.

taskfiles/lint.yaml (1)

121-121: Broaden YAML linting to the entire taskfiles/ directory.

Changing the source to taskfiles ensures new dependency taskfiles (e.g., taskfiles/deps/main.yaml) are included in the lint step. This keeps lint coverage in sync with the refactor.

components/core/src/clp/ffi/ir_stream/Serializer.cpp (1)

15-17: Align include directives with external dependency usage.

Replacing json/single_include/nlohmann/json.hpp and outcome/single-header/outcome.hpp with <nlohmann/json.hpp> and <outcome.hpp> matches the global shift. Confirm that msgpack.hpp and these new includes remain in the correct order and that no missing forward declarations are needed.

components/core/tests/test-clp_s-search.cpp (2)

12-12: Align Catch2 include with external package
Updating to <catch2/catch.hpp> correctly switches from the embedded submodule to the installed Catch2 package.


14-14: Use system-installed nlohmann JSON header
Switching to <nlohmann/json.hpp> aligns with the new external-package approach.

components/core/tests/test-NetworkReader.cpp (2)

12-12: Standardise Catch2 include path
The include has been updated to catch2/catch.hpp, reflecting the move to the external Catch2 package.


15-15: Update nlohmann JSON include
Replacing the submodule path with <nlohmann/json.hpp> properly references the installed JSON library.

components/core/tests/test-ffi_KeyValuePairLogEvent.cpp (1)

13-15: Consolidate Catch2 and nlohmann JSON includes
Switching from submodule-based paths to <catch2/catch.hpp>, <nlohmann/json.hpp>, and adding <nlohmann/json_fwd.hpp> aligns with the external-package migration and reduces dependency on embedded headers.

components/core/src/clp/ffi/KeyValuePairLogEvent.hpp (1)

10-11: Use forward-declarations and standard Outcome header
Including <nlohmann/json_fwd.hpp> and <outcome.hpp> replaces the prior single-header embeds, reducing direct header dependencies and relying on the external packages.

components/core/src/clp_s/indexer/CMakeLists.txt (3)

92-92: Link against the date library
Adding date::date ensures the indexer target uses the externally installed date package.


95-95: Adopt the simdjson imported target
Using simdjson::simdjson correctly references the CMake-exported simdjson target.


97-97: Verify YAML-CPP target name
The target yaml-cpp may not match the imported namespace target (often yaml-cpp::yaml-cpp). Please confirm the exact target provided by find_package(yaml-cpp) to avoid linkage errors.

.github/workflows/clp-core-build.yaml (3)

12-12: Broaden pull_request trigger to include all taskfiles/
Replacing the specific taskfiles/deps.yaml path with taskfiles/** ensures that changes to any modularised dependency taskfile will trigger the CI.


23-23: Broaden push trigger to include all taskfiles/
Applying the same update for the push event ensures that any change under taskfiles/ kicks off the CI pipeline.


91-91: Expand filter to detect changes in all taskfiles/
Updating the clp filter’s paths to taskfiles/** aligns with the new modularised taskfile structure so that relevant modifications are captured.

components/core/src/clp/clo/CMakeLists.txt (3)

122-124: Use external SQLite3 source directory variable
The new entries include sqlite3.c, sqlite3.h, and sqlite3ext.h from ${CLP_SQLITE3_SOURCE_DIRECTORY}. Please verify that CLP_SQLITE3_SOURCE_DIRECTORY is defined correctly (e.g., via a find_package or CMake option) and points to the intended external source.


167-167: Link against the date library
Including date::date in the link libraries aligns with the external Date dependency.


172-172: Link against the nlohmann_json library
Adding nlohmann_json::nlohmann_json ensures the JSON target is linked correctly.

components/core/src/glt/glt/CMakeLists.txt (4)

154-156: Use external SQLite3 source directory variable
Including SQLite3 sources via ${CLP_SQLITE3_SOURCE_DIRECTORY} matches the external dependency approach. Please confirm that this variable is properly set and points to the correct files in your dependency installation.


186-186: Link against the date library
Adding date::date to target_link_libraries reflects the use of the external Date package.


192-192: Link against the nlohmann_json library
Including nlohmann_json::nlohmann_json ensures the JSON dependency is linked correctly.


195-195: Verify YAML-CPP imported target
The linked target yaml-cpp may differ from the imported name (often yaml-cpp::yaml-cpp or YAML::YamlCpp). Please confirm that yaml-cpp matches the CMake find_package(YAML-CPP) imported target and adjust if necessary.

taskfile.yaml (3)

4-4: Update dependency taskfile include path
The deps include now points to taskfiles/deps/main.yaml, matching the new modular structure. Please verify that taskfiles/deps/main.yaml exists and is reachable.


7-7: Update utils taskfile include path
Reference to the utils taskfile was changed to tools/yscope-dev-utils/exports/taskfiles/utils/utils.yaml. Confirm that the repository layout reflects this new path.


30-30: Set G_UTILS_TASKFILE to updated utils taskfile
The G_UTILS_TASKFILE variable now points to the relocated utils taskfile under utils/utils.yaml. Ensure this aligns with the actual file location in the yscope-dev-utils submodule.

components/core/tests/test-ir_encoding_methods.cpp (2)

15-15: Switch to external Catch2 include path
Replacing the submodule include with <catch2/catch.hpp> aligns with the externally managed Catch2 dependency.


17-17: Switch to external nlohmann::json include path
Using <nlohmann/json.hpp> matches the standard include path for the external JSON library.

components/core/src/clp/clp/CMakeLists.txt (2)

150-151: Verify external SQLite3 source directory variable.

You’ve replaced hardcoded submodule paths with ${CLP_SQLITE3_SOURCE_DIRECTORY} for sqlite3.c and sqlite3.h. Ensure that ${CLP_SQLITE3_SOURCE_DIRECTORY} is defined (e.g., via the dependency settings include) before this file is processed and points to the correct checkout/install location.


179-185: Link against imported CMake targets for date, JSON and YAML.

You’ve added date::date, nlohmann_json::nlohmann_json and simplified yaml-cpp linkage. Confirm that find_package(date), find_package(nlohmann_json), and find_package(yaml-cpp) are invoked in the top-level CMakeLists and that their imported targets match these names.

Also applies to: 187-187, 190-190

components/core/src/clp_s/CMakeLists.txt (2)

212-214: Ensure date::date target is available.

The clp_s_TimestampPattern library now links date::date. Verify that find_package(date REQUIRED) is in the top-level CMakeLists so that the target is defined and the appropriate include paths are propagated.


236-243: Update clp-s to link JSON, simdjson and YAML targets.

You’ve added nlohmann_json::nlohmann_json, simdjson::simdjson, and yaml-cpp to clp-s. Please confirm that these packages are discovered upstream (find_package) and that the imported target names and versions align with the expected installs.

components/core/src/clp/clg/CMakeLists.txt (2)

120-123: Use variable-based SQLite3 sources.

You’ve introduced ${CLP_SQLITE3_SOURCE_DIRECTORY} for sqlite3.c, sqlite3.h, and sqlite3ext.h. Validate that this variable is set correctly (via dependency settings) before inclusion so the sources are found during configure/generate.


138-144: Align link libraries with imported targets.

You’ve added date::date, nlohmann_json::nlohmann_json, and replaced yaml-cpp::yaml-cpp with yaml-cpp. Ensure that the root CMakeLists invokes the appropriate find_package calls so these imported targets exist and version boundaries are consistent.

Also applies to: 148-148

components/core/CMakeLists.txt (10)

99-114: Conditional include for external dependency settings.

The if (PROJECT_IS_TOP_LEVEL) block loads CMake settings for external tasks, falling back if not found. This is a solid pattern to decouple subprojects. Ensure the relative path ../../build/deps/core/cmake-settings/all.cmake matches your repo layout in all CI and local dev cases.


116-119: Discover Abseil via find_package.

Adding find_package(absl REQUIRED) and printing the version is good for transparency. You might want to guard usage of specific Abseil components (e.g., flat_hash_map) by listing them as imported targets if needed.


141-145: Add Catch2 to the test suite.

You’ve introduced find_package(Catch2 REQUIRED) and echo the version. Confirm that you link against Catch2::Catch2 in the test target—and not the legacy Catch2WithMain—so tests are driven by your own main.


146-150: Externalise date dependency.

Finding date externally and printing its version ensures version consistency with other projects. The imported target date::date should now be used across all subdirectories.


162-166: Externalise log_surgeon.

Calling find_package(log_surgeon REQUIRED) is correct. Just verify that downstream subprojects link to log_surgeon::log_surgeon (or adjust if the target name differs).


167-170: Externalise nlohmann_json.

Switching to find_package(nlohmann_json) and linking nlohmann_json::nlohmann_json is the recommended approach. No further changes needed here.


172-176: Externalise simdjson.

Analogous to JSON, find_package(simdjson REQUIRED) is correct. Ensure you use simdjson::simdjson downstream.


261-265: Externalise yaml-cpp.

Adding find_package(yaml-cpp REQUIRED) and using the simple target yaml-cpp matches CMake’s modern usage.


267-269: Include YSTDLIB subdirectory via variable.

You now drive add_subdirectory("${CLP_YSTDLIB_SOURCE_DIRECTORY}" ...) rather than a hardcoded path. Confirm CLP_YSTDLIB_SOURCE_DIRECTORY is passed correctly (e.g., via upstream CMake settings) so builds outside of CI still work.


689-702: Link test executable with modern imported targets.

You’ve added Catch2::Catch2, date::date, nlohmann_json::nlohmann_json, simdjson::simdjson, and yaml-cpp. Verify all imported targets align with those discovered via find_package, and consider grouping them by functionality or adding comments for clarity.

taskfiles/deps/utils.yaml (3)

3-5: Validate included utility taskfile path.

You reference ../../tools/yscope-dev-utils/exports/taskfiles/utils/utils.yaml. Ensure this relative path resolves correctly in CI and local checkouts. A typo or misplaced folder could break checksum and install tasks.


11-19: clean-old-core-checksum-files task clears stale checksums.

This internal task removes all .md5 files under G_DEPS_CORE_CHECKSUMS_DIR. It’s the right approach to prevent orphaned checksum entries when deps change.


31-39: init task bootstraps dependency directories.

Creating directories for deps, core, checksums, and CMake settings is essential. Confirm that any permission issues are handled upstream or documented for first-time users.

taskfiles/deps/main.yaml (16)

1-2: Ensure correct Taskfile version directive
Taskfile specifies version: "3". Confirm your project’s Task runner supports v3 syntax (e.g., Task v3.x) to avoid version mismatch errors.


3-6: Verify included utility files exist and paths are accurate
The includes: block references ./utils.yaml and ../../tools/yscope-dev-utils/exports/taskfiles/utils/utils.yaml. Please ensure these files are present at those relative locations to prevent include failures at runtime.


21-26: Default task orchestrates core and log-viewer
Having the default task depend on both core and log-viewer aligns with the PR’s goal of migrating to task-based installs.


27-39: Critical: Validate safe cleanup for CMake settings directory
The core task runs rm -rf '{{.G_DEPS_CORE_CMAKE_SETTINGS_DIR}}'. Double-check that G_DEPS_CORE_CMAKE_SETTINGS_DIR is correctly scoped to avoid accidental deletion of unrelated directories.


40-51: Verify definition of G_LOG_VIEWER_WEBUI_SRC_DIR
The log-viewer task writes to {{.G_LOG_VIEWER_WEBUI_SRC_DIR}}/yscope-log-viewer, but that variable isn’t set here. Ensure utils:init (or another include) defines G_LOG_VIEWER_WEBUI_SRC_DIR.


52-68: Parallelise dependency installation with core-all-parallel
Using an internal, once-only task that depends on each individual dependency task is efficient and clean—nice abstraction.


69-82: Verify Abseil remote CMake install configuration
The absl task sets LIB_NAME: "absl". Confirm your CMakeLists use find_package(absl) (or the correct target name) so that the generated settings align with your CMake expectations.


117-130: Catch2 installation is configured correctly
Disabling tests (-DBUILD_TESTING=OFF) and setting Release build ensures Catch2 won’t bloat the core build—approved.


131-143: Date library installation appears correct
The task mirrors the standard CMake-based pattern—no issues detected.


144-156: Log-surgeon CMake install configuration
Consistent use of utils:install-remote-cmake-lib here fits the overall structure.


157-170: nlohmann::json CMake install parameters
You’ve turned off tests with -DJSON_BuildTests=OFF, which is recommended for a production build.


171-194: Outcome download & CMake settings
The two-step process (download/extract then write CMake snippet) is well-structured and clear.


195-207: Simdjson CMake installation is consistent
Follows the established pattern perfectly—no changes needed.


208-229: SQLite3 extraction & settings generation
Downloading the official amalgamation zip is appropriate. Confirm that the version in ZIP_FILENAME_STEM (3360000) matches the version your CMakeLists expect.


230-247: UTFCPP extraction and CMake settings
This mirrors the other non-CMake downloads and looks correct.


248-261: YAML-CPP remote CMake installation
Disabling tests and using Release build is consistent with other CMake-based libraries.

Comment thread components/core/src/clp/clp/CMakeLists.txt
Comment thread components/core/src/clp_s/CMakeLists.txt
Comment thread components/core/src/clp/clg/CMakeLists.txt
Comment thread components/core/CMakeLists.txt Outdated
Comment thread taskfiles/deps/main.yaml

@LinZhihao-723 LinZhihao-723 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Overall lgtm. Some small comments.
Also verified that coderabit's comments about submodules are valid.

Comment thread components/core/CMakeLists.txt Outdated
Comment thread components/core/.gitignore
Comment thread components/core/CMakeLists.txt Outdated
)
target_include_directories(unitTest
PRIVATE
${CLP_OUTCOME_SOURCE_DIRECTORY}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nit: Shall we use CLP_XXX_HEADER_DIRECTORY instead for non-cmake header-only libs?
It's a bit misleading that we include "source" directory where there're no source files being directly compiled.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

How about CLP_XXX_INCLUDES_DIRECTORY?

@LinZhihao-723 LinZhihao-723 Apr 27, 2025

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

sure, sgtm

Comment thread taskfiles/deps/main.yaml Outdated
Comment on lines +208 to +228
sqlite3:
internal: true
vars:
LIB_NAME: "sqlite3"

# Paths
EXTRACTION_DIR: "{{.G_DEPS_CORE_DIR}}/{{.LIB_NAME}}-src"
ZIP_FILENAME_STEM: "sqlite-amalgamation-3360000"
SRC_DIR: "{{.EXTRACTION_DIR}}/{{.ZIP_FILENAME_STEM}}"
run: "once"
cmds:
- task: "yscope-dev-utils:remote:download-and-extract-zip"
vars:
CHECKSUM_FILE: "{{.G_DEPS_CORE_CHECKSUMS_DIR}}/{{.LIB_NAME}}.md5"
FILE_SHA256: "999826fe4c871f18919fdb8ed7ec9dd8217180854dd1fe21eea96aed36186729"
OUTPUT_DIR: "{{.EXTRACTION_DIR}}"
URL: "https://www.sqlite.org/2021/{{.ZIP_FILENAME_STEM}}.zip"
- >-
echo "set(
CLP_SQLITE3_SOURCE_DIRECTORY \"{{.SRC_DIR}}\"
)" > "{{.G_DEPS_CORE_CMAKE_SETTINGS_DIR}}/{{.LIB_NAME}}.cmake"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Can we set CLP_SQLITE3_SOURCE_DIRECTORY to splite3-src directly and rename sqlite-amalgamation-3360000 to sqlite3 to add one more layer to the sqlite header? In this way, we include sqlite headers using <sqlite3/splite3.h>, which could avoid potential conflicts if other subprojects also have <sqlite3.h> exposed to clp core.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Same problem for <outcome.hpp>. But since we will move to use boost outcome soon, I'm ok to leave it without modification.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

If we rename the directories, the source directory's checksum will change and the task will think it needs to re-extract the source directory. I could create a new sqlite3-install/include/sqlite3 symlink to sqlite3-src/sqlite-amalgamation-3360000. What do you think?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

sure, I think that works.

Comment thread components/core/CMakeLists.txt Outdated
set(SOURCE_FILES_unitTest
"${CLP_SQLITE3_SOURCE_DIRECTORY}/sqlite3.c"
"${CLP_SQLITE3_SOURCE_DIRECTORY}/sqlite3.h"
"${CLP_SQLITE3_SOURCE_DIRECTORY}/sqlite3ext.h"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Might be out of this PR's scope: do we need sqlite3ext.h? It's not included in any of CLP core files, only referred in cmake configs.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Iirc, I did this for CLion, but I guess we could remove it now.

Comment on lines +14 to +15
#include <nlohmann/json.hpp>
#include <nlohmann/json_fwd.hpp>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I see this is to resolve clang-tidy warnings. However, this becomes tricky to use since it's not that clear whether we should include json.hpp or json_fwd.hpp.
Shall we add a wrapped facade header for it later?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Sounds good. @coderabbitai, can you open an issue in https://github.com/y-scope/ystdlib-cpp to add a wrapped facade header nlohmann/json.hpp that includes nlohamnn/json_fwd.hpp?

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.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Create an issue in the ystdlib-cpp repository
gh issue create \
  --repo y-scope/ystdlib-cpp \
  --title "Add wrapped facade header for nlohmann/json" \
  --body "## Description

Add a wrapped facade header for nlohmann/json.hpp that includes nlohmann/json_fwd.hpp to make it clearer which header to include. This is to resolve clang-tidy warnings and simplify usage across the codebase.

## Context

During the migration from submodule-based dependencies to task-based installation in the CLP project, it became unclear whether to include json.hpp or json_fwd.hpp, leading to inconsistent usage.

## Links

- Referenced in PR: https://github.com/y-scope/clp/pull/858
- Requested in comment: https://github.com/y-scope/clp/pull/858#discussion_r2061711641

## Acceptance Criteria

- [ ] Create a facade header that provides a clear, single point of entry for nlohmann/json functionality
- [ ] Ensure it includes necessary forward declarations from json_fwd.hpp
- [ ] Document the usage pattern for consistent implementation across projects
" \
  --assignee kirkrodrigues

Length of output: 1058


@kirkrodrigues I've created the issue in the ystdlib-cpp repository as requested. You can find it here: y-scope/ystdlib-cpp#60

The issue includes details about creating a wrapped facade header for nlohmann/json that includes nlohmann/json_fwd.hpp, along with context from this PR discussion and acceptance criteria. I've assigned the issue to you as well.


🧬 Code Graph Analysis Results

Relevant snippets for understanding components/core/src/clp/ffi/KeyValuePairLogEvent.cpp


File: components/core/src/clp/ffi/KeyValuePairLogEvent.hpp

Lines: 45-51, 65-101 (selected excerpts)

  • Declaration of KeyValuePairLogEvent::create factory method:

    create(
        std::shared_ptr<SchemaTree const> auto_gen_keys_schema_tree,
        std::shared_ptr<SchemaTree const> user_gen_keys_schema_tree,
        NodeIdValuePairs auto_gen_node_id_value_pairs,
        NodeIdValuePairs user_gen_node_id_value_pairs,
        UtcOffset utc_offset
    ) -> OUTCOME_V2_NAMESPACE::std_result<KeyValuePairLogEvent>;
  • Accessors for schema trees and node-value pairs:

    [[nodiscard]] auto get_auto_gen_keys_schema_tree() const -> SchemaTree const&;
    [[nodiscard]] auto get_user_gen_keys_schema_tree() const -> SchemaTree const&;
    [[nodiscard]] auto get_auto_gen_node_id_value_pairs() const -> NodeIdValuePairs const&;
    [[nodiscard]] auto get_user_gen_node_id_value_pairs() const -> NodeIdValuePairs const&;
    [[nodiscard]] auto get_utc_offset() const -> UtcOffset;

These declarations provide the interface for creating and accessing the key-value pair log event data, which is implemented in the .cpp file.


File: components/core/src/clp/ffi/SchemaTree.hpp

Line: 166 (single line)

  • Method to append a new child node ID to a schema tree node:
    auto append_new_child(id_t child_id) -> void { m_children_ids.push_back(child_id); }

This is relevant because the SchemaTree and its nodes are heavily used in the .cpp file for traversing and validating schema nodes.


File: components/core/src/clp/ffi/ir_stream/Deserializer.hpp

Lines: 137-180 (summary)

  • Deserializer<IrUnitHandler>::create method parses metadata from a reader, validates JSON encoding and protocol version, and returns a deserializer instance or error codes.

  • It uses nlohmann::json for JSON parsing and checks for protocol compatibility.

This snippet is relevant as it shows usage patterns of nlohmann::json and error handling with OUTCOME_V2_NAMESPACE::std_result, which is consistent with the style in KeyValuePairLogEvent.cpp.


File: components/core/src/clp/ffi/ir_stream/Serializer.cpp

Lines: 525-567 (summary)

  • Serializer<encoded_variable_t>::create method creates a serializer with optional user-defined metadata, serializes metadata into a buffer, and returns a serializer or error code.

  • Uses nlohmann::json to build metadata JSON objects.

This snippet is relevant for understanding how JSON metadata is constructed and serialized, similar to how KeyValuePairLogEvent.cpp serializes node-value pairs into JSON.


File: components/core/src/clp/ffi/ir_stream/ir_unit_deserialization_methods.cpp

Lines: 458-482 (full snippet)

[[nodiscard]] auto deserialize_encoded_text_ast_and_insert_to_node_id_value_pairs(
        ReaderInterface& reader,
        SchemaTree::Node::id_t node_id,
        KeyValuePairLogEvent::NodeIdValuePairs& node_id_value_pairs
) -> IRErrorCode {
    encoded_tag_t tag{};
    if (auto const err{deserialize_tag(reader, tag)}; IRErrorCode::IRErrorCode_Success != err) {
        return err;
    }

    std::string logtype;
    std::vector<encoded_variable_t> encoded_vars;
    std::vector<std::string> dict_vars;
    if (auto const err{deserialize_encoded_text_ast(reader, tag, logtype, encoded_vars, dict_vars)};
        IRErrorCode::IRErrorCode_Success != err)
    {
        return err;
    }

    node_id_value_pairs.emplace(
            node_id,
            Value{ir::EncodedTextAst<encoded_variable_t>{logtype, dict_vars, encoded_vars}}
    );
    return IRErrorCode::IRErrorCode_Success;
}

This snippet shows how encoded text ASTs are deserialized and inserted into the node ID-value pairs map, which is the data structure used in KeyValuePairLogEvent.cpp for storing values.


File: components/core/src/clp_s/JsonParser.cpp

Lines: 482-608 (summary)

  • JsonParser::parse() method reads JSON documents, validates them, and handles errors.

  • Uses nlohmann::json and simdjson for JSON parsing and error handling.

  • Shows patterns of JSON parsing and error handling relevant to the JSON serialization and validation in KeyValuePairLogEvent.cpp.


Summary of relevance:

  • The header KeyValuePairLogEvent.hpp provides the interface and data types used in the .cpp file.

  • SchemaTree.hpp snippet shows how schema nodes manage children, relevant for tree traversal in serialization.

  • ir_stream/Deserializer.hpp and Serializer.cpp snippets illustrate JSON metadata handling and error management patterns consistent with the .cpp file.

  • ir_unit_deserialization_methods.cpp snippet shows deserialization of encoded text ASTs into the node-value pairs, directly related to the Value type usage.

  • JsonParser.cpp snippet provides context on JSON parsing and error handling, relevant to the JSON serialization logic in the .cpp file.


[End of relevant snippets.]


🧠 Learnings used
Learnt from: LinZhihao-723
PR: y-scope/clp#558
File: components/core/tests/test-ffi_KeyValuePairLogEvent.cpp:14-14
Timestamp: 2024-10-14T03:42:10.355Z
Learning: In the file `components/core/tests/test-ffi_KeyValuePairLogEvent.cpp`, including `<json/single_include/nlohmann/json.hpp>` is consistent with the project's coding standards.

Comment thread components/core/src/clp_s/CMakeLists.txt Outdated
Comment thread taskfiles/deps/utils.yaml Outdated
Comment thread taskfiles/deps/utils.yaml
Comment thread taskfiles/deps/utils.yaml Outdated
Comment thread taskfiles/deps/main.yaml
INCLUDE_PATTERNS:
- "*/single-header"
OUTPUT_DIR: "{{.SRC_DIR}}"
URL: "https://github.com/ned14/outcome/archive/refs/tags/v2.2.9.tar.gz"

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Although outcome v2.2.9 recommends not using this tar, this tar is available directly from GitHub rather than githubusercontent.com, meaning it shouldn't get blocked by some dev's firewalls. In addition, I verified that the single-header directory within the previous tar and this tar are identical.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

lgtm

….com; Add comments to document choice of GH-generated source tarball.
@kirkrodrigues kirkrodrigues requested review from LinZhihao-723 and removed request for LinZhihao-723 April 27, 2025 21:09
LinZhihao-723
LinZhihao-723 previously approved these changes Apr 27, 2025

@LinZhihao-723 LinZhihao-723 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't have more comments on the changes since the last review.
The PR title lgtm!

@kirkrodrigues kirkrodrigues merged commit 49c2858 into y-scope:main Apr 28, 2025
@kirkrodrigues kirkrodrigues deleted the core-taskfile-install-deps branch April 28, 2025 03:28
quinntaylormitchell added a commit to quinntaylormitchell/clp that referenced this pull request May 29, 2025
junhaoliao pushed a commit to junhaoliao/clp that referenced this pull request May 17, 2026
…d installation. (y-scope#858)

Co-authored-by: Lin Zhihao <59785146+LinZhihao-723@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants