This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new 30b1ba7b5f Add AGENTS.md & CLAUDE.md
30b1ba7b5f is described below

commit 30b1ba7b5fd76cfe34a9f4ee36b0e959329f8e67
Author: James Netherton <[email protected]>
AuthorDate: Tue Mar 3 12:53:47 2026 +0000

    Add AGENTS.md & CLAUDE.md
---
 AGENTS.md | 251 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 CLAUDE.md |   1 +
 2 files changed, 252 insertions(+)

diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000000..1652f63dae
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,251 @@
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+# Apache Camel Quarkus - AI Agent Guidelines
+Rules & guidelines for AI agents working on this codebase.
+
+## Project Overview
+Apache Camel Quarkus provides Quarkus extensions for Apache Camel components, 
enabling users to build integration applications with fast boot times and low 
memory footprints.
+
+## What NOT to do
+- Do NOT directly modify generated files under `docs/modules` or 
`src/main/generated`
+- Do NOT use dynamic class loading or reflection (impacts native compilation)
+- Do NOT introduce Spring Boot or Spring unless explicitly required
+
+## Technology Stack
+- Java 17+
+- GraalVM 25+ / Mandrel 25+
+- Maven 3.9.11+ (For convenience the maven wrapper is provided in the root 
directory and can be invoked as `./mvnw` or `./mvnw.cmd`)
+- Apache Camel 4.x, Quarkus 3.x. Check `pom.xml` for the current Camel, and 
Quarkus versions used.
+
+## Repository Structure
+```
+extensions/          # Native-supported Camel component extensions
+extensions-jvm/      # JVM-only extensions (not yet native-compatible)
+extensions-core/     # Core Camel Quarkus extensions (core, yaml-dsl, etc.)
+extensions-support/  # Shared support libraries used by multiple extensions
+integration-tests/   # Integration tests JVM + native
+integration-test-groups/  # Groupings of integration tests, primarilly for 
boosting CI speed & efficiency
+integration-tests-jvm/   # JVM-only extension integration tests
+integration-tests-support/ # Shared test utilities and test containers support
+poms/bom/            # Runtime Bill of Materials
+poms/bom-deployment/ # Deployment Bill of Materials
+tooling/             # Maven plugin, scripts, templates, and tooling
+catalog/             # Camel Quarkus catalog
+docs/                # AsciiDoc documentation (Antora-based)
+examples/            # Example projects (separate repo: camel-quarkus-examples)
+```
+
+## Key Files
+- `pom.xml` - Project Maven dependency version properties and test container 
image names
+- `poms/bom/pom.xml` - Runtime dependencies BOM
+- `poms/bom-test/pom.xml` - Test dependencies BOM
+- `tooling/scripts/test-categories.yaml` - Test categorization for GitHub 
Actions CI
+- `docs/antora/antora.yml` - Antora documentation metadata. Note that 
`docs/local-build.sh` relies on an external `camel-website` repository and is 
not intended for self-contained local documentation generation within this 
project.
+
+## Build Commands
+```bash
+./mvnw clean install -Dquickly                 # fast build, no tests
+./mvnw clean install -T1C -Dquickly            # parallel fast build, no tests
+./mvnw clean install                           # full build with JVM tests
+./mvnw clean install -Dnative -Ddocker         # full build with native tests 
(very slow, -Ddocker can usually be omitted on MacOS)
+./mvnw clean install -pl extensions/kafka -am  # single extension
+./mvnw process-resources -Pformat              # format code & update metadata
+```
+
+**Tip:** Use `mvnd` (Maven Daemon) for faster builds. Use `-T1C` for parallel 
builds (1 thread per CPU core).
+
+## Testing Commands
+```bash
+./mvnw test                              # unit tests
+./mvnw verify                            # integration tests JVM mode
+./mvnw verify -Dnative -Ddocker          # integration tests JVM + native mode 
(-Ddocker can usually be omitted on MacOS)
+./mvnw test -Dtest=MyTest                # specific test
+./mvnw test -pl integration-tests/kafka  # specific module
+```
+
+## Extension Structure
+```
+extensions/kafka/
+├── pom.xml                           # Parent POM
+├── runtime/
+│   ├── pom.xml
+│   └── src/
+│       ├── main/java/org/apache/camel/quarkus/component/kafka/
+│       ├── main/resources/META-INF/quarkus-extension.yaml
+│       └── main/doc/                 # Extension documentation
+│           ├── configuration.adoc
+│           └── usage.adoc
+└── deployment/
+    ├── pom.xml
+    └── src/
+        ├── main/java/org/apache/camel/quarkus/component/kafka/deployment/
+        │   └── KafkaProcessor.java
+        └── test/java/
+```
+
+### Naming Conventions
+Classes:
+- Deployment: `*Processor.java` for build-time processing `@BuildStep`
+- Runtime: `*Recorder.java` for recording and producing `RuntimeValue` used in 
deployment build steps
+- Runtime: `*BuildTimeConfig.java` for `ConfigPhase.BUILD_TIME` & 
`ConfigPhase.BUILD_AND_RUN_TIME_FIXED` annotated `@ConfigMapping` interfaces
+- Runtime: `*RunTimeConfig.java` for `ConfigPhase.RUN_TIME` annotated 
`@ConfigMapping` interfaces
+- Runtime: `*Substitutions.java` for GraalVM substitutions that live in 
`src/main/java/.../graal/`
+- Tests: `*Test.java` (JUnit 6), `*IT.java` for native tests
+
+Packages:
+- Runtime: `org.apache.camel.quarkus.component.<name>`
+- Deployment: `org.apache.camel.quarkus.component.<name>.deployment`
+
+Annotations:
+- `@BuildStep` for deployment processors
+- `@Record(ExecutionTime.STATIC_INIT)` for static init
+- `@Record(ExecutionTime.RUNTIME_INIT)` for runtime init
+- Recorder classes are annotated with `@Recorder`
+
+Configuration:
+- `@ConfigRoot(phase = ConfigPhase.BUILD_TIME)` for build-time configuration 
(read during build, baked into native image)
+- `@ConfigRoot(phase = ConfigPhase.RUN_TIME)` for runtime configuration (can 
be changed at runtime)
+- `@ConfigRoot(phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED)` for config read 
at build time but also available at runtime (value cannot change)
+- Build-time config: extension enablement & configuration options used to 
bootstrap components at build time
+- Runtime config: connection strings, credentials, timeouts, dynamic behavior
+- Prefer runtime config when possible for flexibility; use build-time only 
when necessary for native compilation
+
+Maven version properties:
+- `artifactId.version` for general version properties
+- `*-maven-plugin.version` for plugin version properties
+- Where appropriate, use `@sync` comments to automatically update version 
properties
+- Dependency versions MUST always be defined in the root project pom.xml
+
+## Creating Extensions
+
+### 1. Scaffold Extension
+For extensions providing native support:
+
+```bash
+./mvnw cq:create -N -Dcq.artifactIdBase=kafka
+```
+
+For extensions providing JVM only support:
+```bash
+./mvnw cq:create -N -Dcq.artifactIdBase=kafka -Dcq.nativeSupported=false
+```
+
+### 2. Add to Test Categories (native only)
+Add the extension name to `tooling/scripts/test-categories.yaml`. Test 
categories should not be overloaded with too many extensions. But should be 
'balanced' to ensure each one completes in roughly the same time as others.
+
+### 3. Review Extension Metadata
+View 
`extensions/kafka/runtime/src/main/resources/META-INF/quarkus-extension.yaml`
+
+Update / sync with:
+```bash
+./mvnw -N cq:update-quarkus-metadata
+```
+
+### 4. Complete Integration Tests
+Follow `docs/modules/ROOT/pages/contributor-guide/extension-testing.adoc`
+
+### 5. Add Documentation
+Follow 
`docs/modules/ROOT/pages/contributor-guide/extension-documentation.adoc`.
+
+After making changes, run the following from the project root to sync and 
regenerate the project documentation:
+```bash
+./mvnw -pl extensions/kafka/deployment process-classes
+```
+
+### 6. Format & style
+```bash
+./mvnw process-resources -Pformat
+```
+
+## Integration Tests
+Tests use the Quarkus test framework based on JUnit 6.
+
+### Test Structure
+Follow `docs/modules/root/contributor-guide/extension-testing.adoc`.
+
+JVM mode tests should be annotated with `@QuarkusTest`.
+
+```java
+@QuarkusTest
+class KafkaTest {
+    // test code
+}
+```
+
+Native mode tests should extend the JVM mode test and be annotated with 
`@QuarkusIntegrationTest`.
+
+```java
+@QuarkusIntegrationTest
+class KafkaIT extends KafkaTest {
+}
+```
+
+## Troubleshooting Native Build Failures
+Native compilation with GraalVM requires explicit registration of classes, 
resources, and proxies. Register these in the deployment module's 
`*Processor.java` using `@BuildStep` methods. Common patterns:
+
+| Issue | Symptom | Build item | Example |
+|-------|---------|------------|---------|
+| Reflection | `ClassNotFoundException` / `NoSuchMethodException` in native 
mode | `ReflectiveClassBuildItem` | 
`extensions/sql/deployment/.../SqlProcessor.java` |
+| Missing resources | `FileNotFoundException` in native mode | 
`NativeImageResourceBuildItem` / `NativeImageResourceDirectoryBuildItem` | 
`extensions/xj/deployment/.../XJProcessor.java` |
+| Resource bundles | `MissingResourceException` in native mode | 
`NativeImageResourceBundleBuildItem` | 
`extensions/fhir/deployment/.../FhirProcessor.java` |
+| Proxy classes | `ClassNotFoundException` for proxies | 
`NativeImageProxyDefinitionBuildItem` | 
`extensions/influxdb/deployment/.../InfluxdbProcessor.java` |
+| Service providers | `ServiceConfigurationError` in native mode | 
`ServiceProviderBuildItem` | `extensions/fop/deployment/.../FopProcessor.java` |
+
+Use `CombinedIndexBuildItem` to discover classes at build time — see 
`extensions/servicenow/deployment/.../ServicenowProcessor.java`.
+
+See also https://quarkus.io/guides/writing-extensions.
+
+## Common Tasks
+
+### Update Camel Version
+Edit both the project `camel-dependencies` parent version and properties in 
root `pom.xml`:
+
+1. Parent `camel-dependencies` version (e.g., `<version>4.18.0</version>`)
+2. Property `camel.major.minor` (e.g., 
`<camel.major.minor>4.18</camel.major.minor>`)
+3. Property `camel.version` (defined as `${camel.major.minor}.0`)
+
+### Update Quarkus Version
+Edit `quarkus.version` in the project root `pom.xml`.
+
+### Sync Dependency Versions
+**When to sync dependency versions**: Whenever the Camel or Quarkus version is 
updated. Or when version properties are updated that influence other properties 
annotated with `@sync` comments.
+
+```bash
+./mvnw cq:sync-versions -N
+```
+
+### Regenerate camel-quarkus-bom
+**When to regenerate:** Whenever a dependency version is updated in the root 
`pom.xml` or a new dependency is added to the project in `poms/bom/pom.xml`.
+
+```bash
+./mvnw clean install -pl poms/bom
+```
+
+### Promote an extension from JVM-only support to Native mode support
+```bash
+./mvnw -N cq:promote -Dcq.artifactIdBase=kafka
+```
+
+## Commit Messages
+Reference GitHub issues when applicable.
+```
+Fixes #issueNumber. Brief description of the change
+
+Longer detailed explanation of changes made.
+```
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 120000
index 0000000000..47dc3e3d86
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1 @@
+AGENTS.md
\ No newline at end of file

Reply via email to