-
Notifications
You must be signed in to change notification settings - Fork 259
Adding AGENTS.md #4573
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
+361
−0
Merged
Adding AGENTS.md #4573
Changes from all commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
9248934
Adding AGENTS.md
CsatariGergely 18dc440
Apply suggestions from code review
CsatariGergely 6ca0982
Apply suggestions from code review
CsatariGergely fdeaee6
Fixing make fmt target description
CsatariGergely a2f8a33
Fixes based on Copilot comments
CsatariGergely 6f7c4f6
Apply suggestions from code review
CsatariGergely f1a88ef
Removing references to verifyContent.yml workflow
CsatariGergely e9072e6
Corrections based on Laszlo's comments
CsatariGergely eb6c0fe
Clarificationon code review commit tagging
CsatariGergely 1ab0e4a
Apply suggestions from code review
CsatariGergely 96783d2
Fixing review comments and detailing Copilot instructons
CsatariGergely f45d6c4
Apply suggestions from code review
CsatariGergely File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,67 @@ | ||
| # Copyright 2026 The kpt Authors | ||
| # | ||
| # Licensed 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. | ||
|
|
||
| # Copilot code review configuration for kpt | ||
| # kpt is a Kubernetes configuration package management and orchestration system | ||
|
|
||
| review: | ||
| instructions: | ||
| # Linter overlap — these are already enforced by golangci-lint in CI | ||
| - "Do not comment on issues caught by: errcheck, govet, ineffassign, staticcheck, unused, nosprintfhostport, gofmt" | ||
| - "Do not comment on import ordering or formatting" | ||
|
|
||
| # Style — established project conventions | ||
| - "Do not comment on error wrapping style (this project uses fmt.Errorf with %w consistently)" | ||
| - "Do not suggest renaming variables, functions, or packages unless semantically misleading" | ||
| - "Do not suggest extracting single-use helper functions" | ||
| - "Do not suggest adding comments to exported symbols unless the function is non-obvious" | ||
|
|
||
| # Architecture context | ||
| - "This is a Kubernetes configuration management tool using kyaml/kustomize ecosystem" | ||
| - "Controllers and APIs follow kpt's Kptfile specification and package management patterns" | ||
| - "Do not flag intentional use of nil results in pkg operations (graceful fallback patterns)" | ||
| - "log.FromContext(ctx) is the logging convention — do not suggest alternatives" | ||
| - "Testing uses testutil setup patterns with git repositories and workspaces — do not refactor test helpers" | ||
|
|
||
| # What to actually review | ||
| - "Focus on: logic errors, race conditions, resource leaks, deadlocks, nil pointer dereferences" | ||
| - "Flag: missing context cancellation checks, unbounded goroutines, missing error handling in deferred Close calls" | ||
| - "Flag: incorrect kyaml/kustomize API usage, broken file system operations" | ||
| - "Flag: security issues (credential leaks, injection vulnerabilities, path traversal)" | ||
| - "Flag: incorrect Git/package handling (bad ref handling, missing upstream validation)" | ||
| - "Flag: potential issues with YAML/Kptfile parsing or manipulation" | ||
|
|
||
| path_instructions: | ||
| - path: "api/generated/**" | ||
| instructions: "Do not review — generated by k8s code-generator" | ||
| - path: "**/zz_generated*" | ||
| instructions: "Do not review — generated by controller-tools" | ||
| - path: "thirdparty/**" | ||
| instructions: "Do not review — vendored upstream code" | ||
| - path: "go.sum" | ||
| instructions: "Do not review" | ||
| - path: "go.mod" | ||
| instructions: "Only flag if a dependency looks suspicious or has a known CVE" | ||
| - path: "docs/**" | ||
| instructions: "Only flag factual errors or broken links. Do not comment on grammar or style" | ||
| - path: "site/**" | ||
| instructions: "Only flag factual errors. Do not suggest style/formatting changes to documentation" | ||
| - path: "**/*_test.go" | ||
| instructions: "Focus on correctness and flakiness risks. testify (assert/require) and table-driven tests are the standard. Do not suggest style changes or test refactoring" | ||
| - path: "test/**" | ||
| instructions: "Only flag correctness/security issues. testutil patterns are intentional — do not suggest refactoring. Note: golangci-lint excludes test/ from CI linting" | ||
| - path: ".github/**" | ||
| instructions: "Focus on security (pinned actions, minimal permissions, injection risks). Do not suggest cosmetic changes" | ||
| - path: "examples/**" | ||
| instructions: "Only flag correctness issues. These are tutorial configs — do not enforce strict linting" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| # GitHub Copilot Instructions for kpt | ||
|
|
||
| [See AGENTS.md](../AGENTS.md) for information for agents in this project. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,291 @@ | ||
| # Cloud Agent Instructions for kpt | ||
|
|
||
| For Copilot, Cursor, Codex, Gemini Code Assist, or any agents generating code or reviewing pull requests in this repository. | ||
|
|
||
| ## Generic rules | ||
|
|
||
| ### Coding | ||
|
|
||
| * Never commit directly to this repository, always aim for a pull request | ||
| * Always ask for a final review from a human before committing | ||
| * Make sure that AI agent usage is attributed in the correct way | ||
|
|
||
| ### Reviewing PRs | ||
|
|
||
| * When committing suggested changes, add a sign-off from the human author and add the `Assisted-by` | ||
| tag with the suggesting agent and its used model to the commit message | ||
| * If a comment was not accepted and the Conversation was resolved do not make the same comment again | ||
|
|
||
|
|
||
| ## Repository Overview | ||
|
|
||
| **kpt** is a package-centric toolchain that automates Kubernetes configuration editing and | ||
| management. It enables declarative configuration authoring, automation, and delivery at scale | ||
| through a "Configuration as Data" approach, supporting Kubernetes platforms and KRM-driven | ||
| infrastructure (e.g., Config Connector, Crossplane). | ||
|
|
||
| - **Language**: Go (version is defined in the [go.mod](./go.mod) file) | ||
| - **License**: Apache 2.0 | ||
| - **Key Topics**: Kubernetes, configuration management, CLI tooling, GitOps, policy-as-code, KRM (Kubernetes Resource Model) | ||
|
|
||
| ## Quick Build & Test Commands | ||
|
|
||
| **Trust these instructions first.** Only perform searches if you find this information incomplete or inaccurate. | ||
|
|
||
| ### Prerequisites | ||
| - Go (version is specified in [go.mod](./go.mod)) | ||
| - Git (required and checked at runtime) | ||
| - Docker or Podman (for `test-docker` and function runtime tests) | ||
| - KinD (CI uses the version defined in `.github/workflows/e2eEnvironment.yml`) | ||
|
|
||
| ### Build | ||
|
|
||
| ```bash | ||
| make build | ||
| ``` | ||
| This compiles kpt to `$(go env GOPATH)/bin/kpt` using LDFLAGS with git commit SHA. | ||
|
|
||
| ### Run All Checks (Build, Test, Lint) | ||
|
|
||
| ```bash | ||
| make all | ||
| ``` | ||
|
|
||
| Runs: `fix vet fmt lint test build tidy` in sequence. *Always* run this before committing. | ||
|
|
||
| ### Unit Tests | ||
|
|
||
| ```bash | ||
| make test | ||
| ``` | ||
|
|
||
| Runs Go tests with coverage. Set `KRM_FN_RUNTIME` to select function runtime (docker/podman, default uses system default). | ||
|
|
||
| ### Docker/Podman Runtime Tests | ||
|
|
||
| ```bash | ||
| make test-docker | ||
| ``` | ||
|
|
||
| Requires Docker or Podman. Tests that need container runtime (e.g., pipeline tests). Respects `KRM_FN_RUNTIME` environment variable. | ||
|
|
||
| ### E2E Function Tests | ||
|
|
||
| #### Render tests | ||
|
|
||
| ```bash | ||
| make test-fn-render T=".*" | ||
| ``` | ||
| #### Eval tests | ||
|
|
||
| ```bash | ||
| make test-fn-eval T=".*" | ||
| ``` | ||
|
|
||
| Use `T` parameter to filter tests by regex (e.g., `T=fnconfig` for function config tests). Set `KRM_FN_RUNTIME` to select runtime. | ||
|
|
||
| ### E2E Live Apply Tests | ||
|
|
||
| ```bash | ||
| make test-live-apply | ||
| ``` | ||
|
|
||
| Requires KinD with Kubernetes versions defined in `jobs.kind.strategy.matrix.version` path of the | ||
| [e2e test workflows](.github/workflows/live-e2e.yml) (specific SHAs pinned in CI). These tests use Kind | ||
| internally. Timeout is 20 minutes. | ||
|
|
||
| ### Linting | ||
|
|
||
| ```bash | ||
| make lint | ||
| ``` | ||
|
|
||
| Runs golangci-lint v2.11.4. If already installed locally with matching version, uses it; otherwise downloads and runs via `go run`. | ||
|
|
||
| ### Code Generation & Formatting | ||
|
|
||
| ```bash | ||
| make fmt # Run gofmt | ||
| make fix # Run go fix | ||
| make vet # Run go vet | ||
| make tidy # Run go mod tidy | ||
| make generate # Generate code from templates (mdtogo, copyright headers) | ||
| make schema # Generate schema | ||
| ``` | ||
|
|
||
| ### Setting Up Git Config (Required for Tests) | ||
|
|
||
| Many tests require git configuration: | ||
|
|
||
| ```bash | ||
| git config --global user.email "you@example.com" | ||
| git config --global user.name "Your Name" | ||
| ``` | ||
|
|
||
| ## Project Layout | ||
|
|
||
| ### Root Level Files & Directories | ||
|
|
||
| * **main.go**: CLI entry point; contains //go:generate directives for CLI documentation | ||
| * **Makefile**: Primary build orchestration | ||
| * **.golangci.yml**: Linting configuration (used golangci-lint version is defined in the `GOLANGCI_LINT_VERSION` variable of the [Makefile](./Makefile)) | ||
| * **go.mod / go.sum**: Dependency management | ||
| * **CONTRIBUTING.md**: Contribution guidelines and code review requirements | ||
| * **CODEOWNERS**: Default reviewers | ||
|
|
||
| ### Key Source Directories | ||
|
|
||
| * **commands/**: CLI command implementations using Cobra framework | ||
| * **run/**: Main CLI setup; contains GetMain() that initializes Cobra commands with environment setup | ||
| * **pkg/**: Core library packages (business logic, utilities) | ||
| * **internal/**: Internal packages; includes internal/docs/generated/ (generated from Markdown via mdtogo) | ||
| * **mdtogo/**: Code generator tool that converts CLI documentation Markdown files to Go variables | ||
|
|
||
| ### Build & CI Configuration | ||
|
|
||
| * **.github/workflows/go.yml**: Main CI workflow | ||
| * Runs on Linux (docker/podman matrix) and macOS | ||
| * Executes: `make all` + `make test-docker` | ||
| * Triggered on PRs (except changes limited to ignored paths like `**.md`) and pushes (pushes exclude dependabot branches) | ||
| * **.github/workflows/e2eEnvironment.yml**: KinD-based e2e tests | ||
| * Tests Kubernetes versions defined in `jobs.kind.strategy.matrix.version` with KinD (KinD version in `jobs.kind.steps["Install KinD"].with.version`) | ||
| * Runs `./e2e/live/end-to-end-test.sh -k <K8S_VERSION>` | ||
| * **.github/workflows/live-e2e.yml**: Live apply e2e tests | ||
| * Tests with pinned Kubernetes image SHAs | ||
| * Runs `make test-live-apply` with `K8S_VERSION` environment variable | ||
|
CsatariGergely marked this conversation as resolved.
|
||
| * **.github/workflows/release-api.yml**: Release the kpt API module | ||
| * Builds, tests and lints the kpt API module | ||
| * Runs `make api` | ||
|
|
||
| ### Documentation & Tests | ||
|
|
||
| * **documentation/**: Hugo-based website published to kpt.dev | ||
| * Run `make serve` from `documentation/` (serves docs locally) | ||
| * Requires `npm install` first (run in `documentation/`) | ||
| * Documentation shold follow the [style guide for documentation](documentation/README.md#style-guide-for-documentation) | ||
|
|
||
| * **e2e/**: End-to-end test suites | ||
| * Contains testdata directories for function render/eval tests | ||
| * Live tests in `e2e/live/end-to-end-test.sh` | ||
|
|
||
| ### Other Notable Directories | ||
|
|
||
| * **release/**: Release automation (GoReleaser config, Homebrew formula generation) | ||
| * **hack/**: Miscellaneous development utilities | ||
| * **healthcheck/**: Separate module for health checking (Go (Go version is defined in [healthcheck/go.mod](./healthcheck/go.mod)), local Makefile) | ||
| * **thirdparty/**: Third-party code (excluded from linting) | ||
| * **Formula/**: Homebrew package definition (generated by `go run ./release/formula/main.go VERSION`) | ||
|
|
||
| ## Linting Rules & Style | ||
|
CsatariGergely marked this conversation as resolved.
|
||
|
|
||
| ### Linter Configuration | ||
|
|
||
| * Linter configuration is defined in the [.golangci.yml](./.golangci.yml) file | ||
|
|
||
| ### Code Style Requirements (from CONTRIBUTING.md) | ||
|
|
||
| * **Copyright Headers**: All files must have Apache 2.0 license header | ||
| * Use format: // Copyright YEAR The kpt Authors (or year range if modified) | ||
| * Year should match creation year, or creation-to-modification year range (see the [instructions in Porch for more details](https://porch.kpt.dev/docs/12_contributing/code-contribution/#update-copyright-on-files)) | ||
| * **Developer Certificate of Origin (DCO)**: Commits must be signed with -s flag | ||
| * **Large Features**: Require reviewed and merged design document (use /docs/design-docs/00-template.md as template) | ||
| * **AI Usage**: Must declare AI usage in the PR description; `Assisted-by: AGENT_NAME:MODEL_VERSION` attribution in | ||
| commit messages is recommended (see CONTRIBUTING.md). | ||
|
|
||
| ## Validation Checklist for PRs | ||
|
|
||
| Before submitting a PR, verify: | ||
|
|
||
| 1. ✅ All tests pass: make all | ||
| 1. ✅ All linting passes: make lint | ||
| 1. ✅ Code formatted: make fmt | ||
| 1. ✅ Dependencies tidied: make tidy | ||
| 1. ✅ Copyright headers added/updated per CONTRIBUTING.md | ||
| 1. ✅ DCO sign-off: use git commit -s | ||
| 1. ✅ For CLI/API changes: design document reviewed and merged | ||
| 1. ✅ AI usage declared in PR description (if applicable) | ||
|
|
||
| ## Common Build Issues & Workarounds | ||
|
|
||
| ### Docker/Podman Not Available | ||
|
|
||
| If `make test-docker` fails due to missing Docker/Podman: | ||
|
|
||
| * Install Docker Desktop or Podman | ||
| * For Podman: ensure it's on PATH and `podman version` runs successfully | ||
| * Set `KRM_FN_RUNTIME=podman` if using Podman | ||
|
|
||
| ### KinD Setup Issues | ||
|
|
||
| For e2e live tests (`make test-live-apply`): | ||
|
|
||
| * KinD is auto-installed by CI workflow | ||
| * Requires Docker running in background | ||
| * Tests use specific Kubernetes image SHAs (see live-e2e.yml matrix) | ||
| * Timeout is 20 minutes; allow sufficient time | ||
|
|
||
| ### Git Configuration | ||
|
|
||
| Tests fail silently if git user not configured. Always run: | ||
|
|
||
| ```bash | ||
| git config --global user.email "you@example.com" | ||
| git config --global user.name "Your Name" | ||
| ``` | ||
|
|
||
| ### Module Generation | ||
|
|
||
| If changes modify CLI documentation in documentation/content/en/reference/cli/: | ||
|
|
||
| * Run `make generate` to regenerate `internal/docs/generated/` | ||
| * Commit generated files | ||
|
|
||
| ### Known CI Skips | ||
|
|
||
| * Windows build currently disabled (see `.github/workflows/go.yml`, issue #3463) | ||
| * Some linters disabled: `funlen`, `gosec` (marked TODO in `.golangci.yml`) | ||
|
|
||
| ## Environment Variables | ||
|
|
||
| * **KRM_FN_RUNTIME**: Select function runtime for tests: `docker`, `podman` or `nerdctl` | ||
| * **K8S_VERSION**: Kubernetes version for e2e live tests (used in CI with pinned SHAs) | ||
| * **KPT_NO_PAGER_HELP**: Set to 1 to disable pager for help output | ||
| * **PAGER**: Custom pager command (default: less -R) | ||
| * **KPT_FN_WASM_RUNTIME**: WASM function runtime selection | ||
|
CsatariGergely marked this conversation as resolved.
|
||
| * **GOPATH**: Go workspace path (used in CI workflows) | ||
| * **GOBIN**: Go binary installation directory | ||
|
|
||
| ## Key Dependencies | ||
|
|
||
| * **Cobra**: CLI framework | ||
| * **Kubernetes libraries (k8s.io/*)**: For Kubernetes resource handling | ||
| * **sigs.k8s.io/cli-utils**: CLI utilities | ||
| * **sigs.k8s.io/kustomize/kyaml**: YAML handling for Kubernetes | ||
| * **sigs.k8s.io/controller-runtime**: Controller and reconciliation patterns | ||
| * **wasmtime-go**: WebAssembly function runtime | ||
| * **go-containerregistry**: Container image handling | ||
|
|
||
| ## Testing Strategy | ||
|
|
||
| * **Unit Tests**: Run with `make test` (standard Go tests) | ||
| * **Docker-based Tests**: Run with `make test-docker` (requires container runtime) | ||
| * **Function E2E Tests**: Run with `make test-fn-render` / `make test-fn-eval` (testdata-driven) | ||
| * **Live Apply E2E**: Run with `make test-live-apply` (KinD-based, 20-minute timeout) | ||
| * **Example Verification**: Run with `make site-verify-examples` (verifies CLI examples in docs) | ||
|
|
||
| ## Implementation Notes for Code Changes | ||
|
|
||
| * **CLI Commands**: Add to `commands/` directory; use Cobra; update `documentation/content/en/reference/cli/` for documentation | ||
| * **Library Code**: Place in `pkg/` for public APIs; use `internal/` for internal utilities | ||
| * **Tests**: Colocate `*_test.go` files with source; use testdata directories for fixtures | ||
| * **Generated Code**: Run `make generate` after modifying templates | ||
| * **Linting Issues**: Address all `golangci-lint` findings; consult `.golangci.yml` for thresholds | ||
| * **Git Flow**: Always create feature branches; use squash-merge preferred per repository settings | ||
| * **Documentation**: Update Markdown in documentation/; run `make serve` to make sure that there are no errors | ||
|
|
||
| Trust these instructions. They have been validated against the Makefile, GitHub workflows, go.mod, | ||
| and contributing guidelines. Only search for additional details if: | ||
|
|
||
| * Build or test commands fail with unexpected errors | ||
| * Instructions reference non-existent paths or commands | ||
| * New tool versions are released and compatibility is unclear | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.