blob: 9b38de7f8054091b5f624bb5bd757328546dedfc [file] [view]
<!--
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.
-->
# Druid Operator Agent Guide
Operational guidance for AI agents working in the druid-operator repository.
## Project Structure
| Path | Purpose |
|------|---------|
| `apis/druid/v1alpha1/` | API types for `Druid` and `DruidIngestion`. |
| `controllers/druid/` | Reconciler logic for the `Druid` custom resource. |
| `controllers/ingestion/` | Reconciler logic for the `DruidIngestion` custom resource. |
| `pkg/` | Shared libraries such as the Druid API client, HTTP helpers, and utilities. |
| `config/` | Kustomize config for CRDs, RBAC, manager, samples, and deployment manifests. |
| `chart/` | Helm chart for the operator, including generated CRDs under `chart/crds/`. |
| `e2e/` | End-to-end test scripts and manifests. |
| `docs/` | Project docs, including generated API reference docs. |
| `hack/` | Boilerplate, templates, and tooling support files. |
## Working Rules
- Hand-written source, docs, and config files generally need the Apache 2.0 header.
- Do not infer header requirements from file extension alone. `make rat` excludes some paths, including shell scripts, `zz_generated.*.go`, `PROJECT`, `.asf.yaml`, and some binary or checksum artifacts.
- Never hand-edit generated files. Regenerate them with the owning Make target.
- Follow standard Go conventions. Run `make fmt` and `make vet` when validating code changes.
## Generated Artifacts
- After editing `*_types.go`, run both `make manifests` and `make generate`.
- `apis/druid/v1alpha1/zz_generated.deepcopy.go` is generated by `make generate`.
- `config/crd/bases/*.yaml` and `config/rbac/role.yaml` are generated by `make manifests`.
- `chart/crds/*.yaml` is generated output and must not be edited by hand.
- `make manifests` prepends Apache headers to the generated YAML files it owns. Do not add those headers manually.
## Key Make Targets
- `make help`: list available targets.
- `make test`: runs `manifests`, `generate`, `fmt`, `vet`, envtest setup, and `go test ./...`.
- `make build`: lighter local compile path, but still runs `manifests`, `generate`, `fmt`, and `vet` first.
- `make docker-build`: heavyweight verification plus image build because it depends on `make test`.
- `make kind`: bootstrap a local kind cluster.
- `make e2e`: run end-to-end tests; assumes a working kind cluster.
- `make api-docs`: regenerate `docs/api_specifications/druid.md` after CRD API changes.
- `make rat`: run the Apache RAT license audit.
## Before Sending a PR
1. If you changed `*_types.go`, run `make manifests` and `make generate`.
2. Run `make fmt vet`.
3. Run `make test`.
4. Run `make rat`.
5. If you changed the CRD API, run `make api-docs`.
6. Check `.github/pull_request_template.md` and ensure the change:
- was tested on a real Kubernetes cluster when applicable,
- considered backward compatibility or called out breaking changes,
- adds comments explaining the "why" where intent is not obvious,
- updates docs for new or changed behavior.
## Common Pitfalls
- Editing `*_types.go` without regenerating manifests and DeepCopy code.
- Hand-editing generated YAML under `config/crd/bases/`, `config/rbac/role.yaml`, or `chart/crds/`.
- Adding license headers mechanically to excluded or generated files.
- Treating `make docker-build` as a cheap local smoke test.