This document is intended to give pointers on how to develop the charts in this repo.
Charts were mostly tested in the cloud. In order to keep the dependencies the same, we use Nix to pin the exact dependencies. We use Direnv to provide the local settings hooks
Or use Nix to install direnv
nix-env -f '<nixpkgs>' -iA direnv
nix-env -f '<nixpkgs>' -iA nix-direnv
The project directory is structured as a monorepo folder of charts. The charts
subdir uses Rancher charts convention where you store all the chart version.
For example charts/geonode
have several subdirectories with names v0.1.1
,
v0.2.1
, etc. Each of this subdirectories is a Helm chart.
The dependencies inside each Helm chart subdirectories is managed by a combination
of .envrc
file (Direnv’s) and shell.nix
file (Nix’s shell environment).
Direnv will allow your shell to execute .envrc
file, whenever you are inside that directory.
Each chart directory might need a different Helm binary version or Kubectl or KinD.
This is managed and expressed by .envrc
and .env
file.
Direnv files, .envrc
works cascadingly. In the root directory, there is a
.envrc
. In the sub chart, there can be .envrc
that overrides the root directory.
If you need to override these values, create extra file called .local.envrc
or .env
.
This will be executed to override .envrc
in that directory.
Nix function/derivation default.nix
is used to express the dependencies we need to
setup our tools. It is also called by Direnv when we enter root directory of
this project. You can customize your own Nix shell by creating a local-shell.nix
To setup the environment at first time, run this in the root project directory:
direnv allow
It will also setup your shell.
To lint the chart, we use chart-testing tools.
Chart testing works by comparing diff changes in the repo. So we need to provide
which branch we are working on against. Normally you have origin
and upstream
in a git based workflow. If not, then you need to set your upstream
remote accordingly.
Overriding any Chart testing option can be done by setting environment variable
via your .local.env
file. To see which option are available, check:
https://github.com/helm/chart-testing. If that is not enough,
set CT_CONFIG=<absolute path to this project path>/ct.override.yaml
and then
set chart testing config file in ct.override.yaml
. Example use case is when
you want to repeatedly test specific chart in local.
Running
ct lint
Will do a lint by comparing the current branch with the current main
branch
in local repo.
Chart is autodocumented using default values.yaml
and helm-docs.
Execute helm-docs
in chart subdirectory to generate the docs.
Modification can be done in respective README.md.gotmpl
file.
In order to test the chart, you need a k8s distro running.
If you already have a sandbox k8s cluster, put the kubeconfig file in kubeconfig.yaml
in the project root directory. Alternatively, specify KUBECONFIG
environment
in your .local.env
file in the project directory
If you don’t have a sandbox k8s cluster, create one in your local machine. It’s recommended to use KIND because it’s lightweight.
Create cluster by running
kind create cluster --config=kind.config.yaml
You can replace kind.config.yaml
file with any valid kind config file.
Once KIND is running, you can extract the kube config file like this:
kind export kubeconfig --kubeconfig kubeconfig.yaml
Once you got that set up,
Running
ct install
Will install changed charts into your target cluster.
ct
will also run helm test
if the chart have test hook.