diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..cdb663a86 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,87 @@ + + +# Project overview + +Apache Celix is an implementation of the OSGi specification adapted for C (C11) and C++ (C++14). +It enables a dynamic, modular software architecture using bundles, services, and components. + +Key Concepts + - Bundles: Deployment units (zip files) containing libraries and resources. + - Services: Function pointer structs (C) or abstract classes (C++) registered in a framework-wide registry. + - Components: Logic units managed by the Dependency Manager (DM) that handle service lifecycle (init, start, stop, deinit) declaratively. + - Containers: Executables created via add_celix_container that launch a framework instance with preconfigured bundles. + +## Building (Offline Priority) + +Assume no internet connection. Request confirmation before installing system packages. + +```bash + +# Initial configure build: +cmake \ + -DCMAKE_FETCHCONTENT_FULLY_DISCONNECTED=ON \ + -DENABLE_TESTING=ON \ + -DRSA_JSON_RPC=ON \ + -DRSA_REMOTE_SERVICE_ADMIN_SHM_V2=ON \ + -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ + -G Ninja \ + -S . -B build + +# Initial configure build, if a download is needed: +cmake \ + -DENABLE_TESTING=ON \ + -DRSA_JSON_RPC=ON \ + -DRSA_REMOTE_SERVICE_ADMIN_SHM_V2=ON \ + -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ + -G Ninja \ + -S . -B build + +# Compile: +cmake --build build --parallel +``` + +# Test Execution + +After building, run the tests for the components you changed. Run `ctest` from +the appropriate `build` subdirectory when possible. +For example, to test the shell bundles: + +Scoped: +```bash +ctest --output-on-failure --test-dir build/ +``` + +Full Suite: +```bash +ctest --output-on-failure --test-dir build +``` + +With exception of documentation changes, always build and run the test before submitting changes. + +# Quality Standards + +- Line Coverage: New code must aim for >95% line coverage. +- Error Injection: Use or extend the Apache Celix error_injector libraries to inject errors in unit tests to ensure high code coverage. + +# Coding Style + +- Refer to the [development guide](documents/development/README.md) for the project's coding conventions. +- New files should be formatted with the project's `.clang-format` configuration. + diff --git a/documents/development/README.md b/documents/development/README.md index d521acb34..5e9a8c56f 100644 --- a/documents/development/README.md +++ b/documents/development/README.md @@ -28,6 +28,11 @@ Note that not all existing code adheres to these conventions. New code should adhere to these conventions, and when possible, existing code should be updated to adhere to these conventions. +## Using Generative AI + +- You own any code you submit, including AI-assisted changes. GenAI suggestions do not transfer ownership or responsibility. +- Review AI-produced code critically for structure, threading behavior, resource handling, coding conventions, and test coverage. + ## Naming Conventions ### C/C++ Variables