Development Guide
2. Module Dependencies
jhelm (parent) ├── jhelm-gotemplate-helm (Helm template functions; depends on: gotmpl4j) ├── jhelm-core (depends on: jhelm-gotemplate-helm, gotmpl4j) ├── jhelm-kube (depends on: jhelm-core) ├── jhelm-rest (depends on: jhelm-core, jhelm-kube) ├── jhelm-plugin (Maven packaging plugin) └── jhelm-cli (depends on: jhelm-core, jhelm-kube)
The Go template + Sprig engine is the external gotmpl4j library (Maven Central); jhelm provides only the Helm-specific function layer.
3. Testing
-
Unit Tests: Each module has comprehensive unit tests.
-
Integration Tests:
KpsComparisonTest.javacompares output with native Helm. -
Template Tests:
GoTemplateStandardTest.java,TemplateTest.java.
3.1. Testing Guidelines
| Always run tests after making code changes to ensure they don’t break existing functionality. |
# Run all tests
./mvnw test
# Run tests for specific module
./mvnw test -pl jhelm-core
# Run specific test class
./mvnw test -Dtest=KpsComparisonTest -pl jhelm-core
# Run specific test method
./mvnw test -Dtest=KpsComparisonTest#testSimpleRendering -pl jhelm-core
Before committing changes:
-
Run relevant tests to verify your changes work
-
Check that existing tests still pass
-
Add new tests for new functionality
-
Fix any test failures before pushing
4. Debugging Tips
-
Enable detailed logging with
@Slf4jannotations. -
Check
test_output.txtandjhelm-core/test_output.txtfor test results. -
Use
GoTemplateStandardTestto verify template behavior. -
Compare output with Helm using dry-run tests in
KpsComparisonTest.
5. Common Operations
5.1. Adding a new template function
Helm-specific functions live in this repository, in jhelm-gotemplate-helm. Sprig and Go
builtins live in the external gotmpl4j project — add or
fix those there.
To add a Helm function:
-
Choose the category package:
helm/conversion/,helm/template/,helm/kubernetes/, orhelm/chart/ -
Add the function to the appropriate category class (e.g.,
ConversionFunctions.java) -
Register it in the
HelmFunctionscoordinator -
Add tests in the corresponding test class (e.g.,
Helm4FunctionsTest.java)