-
Notifications
You must be signed in to change notification settings - Fork 179
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
H4HIP: Forward compatibility: Chart.yaml
minimumHelmVersion
field
#370
base: main
Are you sure you want to change the base?
Conversation
Chart.yaml
minimumHelmVersion
50a2bd5
to
dcd384b
Compare
Signed-off-by: George Jenkins <[email protected]>
dcd384b
to
47c276b
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like this
Chart.yaml
minimumHelmVersionChart.yaml
minimumHelmVersion
field
Signed-off-by: George Jenkins <[email protected]>
Signed-off-by: George Jenkins <[email protected]>
Chart.yaml
minimumHelmVersion
fieldChart.yaml
minimumHelmVersion
field
Signed-off-by: George Jenkins <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like the idea of a minimumHelmVersion
field. I have some thoughts...
- There is a capabilities property for the current version of Helm and it's possible to encode an error rendering into a template when you don't meet the minimum version. It's not as elegant as this.
- Do we have some other new chart features so that we should have a new chart version? We are currently on chart apiVersion v2.
- I'm questioning the required nature of this and when to keep it updated. Should this only be present if some new thing was introduced along the way? And, should it only have the minimum version for the oldest version that would support the chart? I'm thinking about end-users who use a WIDE range of Helm versions. There are so many old Helm versions in use and we aren't going to see this change.
The minor and patch fields are optional. | ||
And will be inferred as zeros if not specified. | ||
|
||
When loading a chart, iff the `minimumHelmVersion` exists, Helm will verify its version exceeds or equals the version constraint specified in the field. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
iff
-> if
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is one of my favorite contractions :) iff -> if and only if
https://www.merriam-webster.com/dictionary/iff
ie. the above reads like:
When loading a chart, if and only if the
minimumHelmVersion
exists, Helm will verify its version exceeds or equals the version constraint specified in the field.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would think we would want to omit the use of abbreviations as the meaning may not be broadly understood, especially for those where English is not a first language
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok, fair. will drop usage of iff
|
||
When loading a chart, iff the `minimumHelmVersion` exists, Helm will verify its version exceeds or equals the version constraint specified in the field. | ||
|
||
When "strict" loading of `Chart.yaml` is used: ie. the loading of `Chart.yaml` errors when unknown fields are present, Helm will first 'peek' into `Chart.yaml` and extract the `minimumHelmVersion` field (iff it exists) and perform the version constraint check at this point. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
iff
-> if
While this may not be strictly necessary, it will provide a backstop for features that may be included in the chart by the user for their current Helm version or `helm create`. | ||
The user can remove/reduce the specified `minimumHelmVersion` if desired. | ||
|
||
`helm lint` will produce a warning, if the current version of Helm is newer than the minimum version constraint. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A warning if the current version is newer? Do you mean, if the current version is older?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree this is too aggressive.
I did originally mean newer, with the intention as follows. Will address in #370 (comment)
|
||
`helm lint` will produce a warning, if the current version of Helm is newer than the minimum version constraint. | ||
Or the `minimumHelmVersion` field is unset for the given chart. | ||
This is to encourage users to update the minimum version to currently utilized version of Helm (that the user is using to develop the chart). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We see a difference between people who create a chart and those who consume charts (see the profiles/roles). Consider all the charts people pull from repositories listed on Artifact Hub.
There is also a large variety of different versions of Helm in use. In our previous CDN we had data on this. While the majority were using a relatively new version, it was not unusual for people to use older version. Even those over 2 years old.
Even in those final reports, from just a few months ago, there were cases of people pulling 3.0.0 regularly. A bad idea but it's happening. Versions in use go further back than we would like.
If we want to make charts widely usable, do we want to have a relatively recent version of Helm set as the minimum version if there is no feature in a newer version of Helm (e.g., new template function) being used? What is the benefit?
|
||
## Abstract | ||
|
||
This HIP proposes supporting a `minimumHelmVersion` field in `Chart.yaml`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We already have a property called KubeVersion
to specify a range for Kubernetes support. Should this be called HelmVersion
and accept a range in the same way? The range syntax being the same used elsewhere in Helm.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Happy to call the field HelmVersion
(naming is hard :) )
I don't think we should/need to support anything for than a single, implied to be the minimum version, constraint however. I've addressed this here:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good. A few comments
The minor and patch fields are optional. | ||
And will be inferred as zeros if not specified. | ||
|
||
When loading a chart, iff the `minimumHelmVersion` exists, Helm will verify its version exceeds or equals the version constraint specified in the field. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would think we would want to omit the use of abbreviations as the meaning may not be broadly understood, especially for those where English is not a first language
When "strict" loading of `Chart.yaml` is used: ie. the loading of `Chart.yaml` errors when unknown fields are present, Helm will first 'peek' into `Chart.yaml` and extract the `minimumHelmVersion` field (iff it exists) and perform the version constraint check at this point. | ||
This is to provide better UX that simply erroring on any potential new fields in `Chart.yaml` that are unknown to the current version of Helm. | ||
|
||
`helm create` will pre-fill Chart.yaml's `minimumHelmVersion` field with the current version of Helm. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this new proposed parameter be added at chart instantiation? Other similar values, like KubeVersion
are not added automatically
It is thought a "minimum" constraint is preferred over a generic "constraint" system. | ||
ie. where a user could list multiple version constraints to be satisfied | ||
Similar to e.g. [pip's requirement-specifiers][3]. | ||
This is because Helm makes great effort to remain [backwards compatible][4]. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is because Helm makes great effort to remain [backwards compatible][4]. | |
This is because Helm makes great effort to remain [backwards compatibility][4]. |
However, since core Helm capabilities are only every additive due to Helm's [backwards-compatibility rules][4], a capabilities based system is redundant. | ||
|
||
*NB: at the time of writing, plugins for extending Helm's functionality are being heavily discussed. | ||
And while plugins will likely allow extending capabilities independent of the Helm version. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Combine with the following sentence? Its currently a fragment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oops, right
Co-authored-by: Andrew Block <[email protected]> Signed-off-by: George Jenkins <[email protected]>
Co-authored-by: Andrew Block <[email protected]> Signed-off-by: George Jenkins <[email protected]>
Co-authored-by: Andrew Block <[email protected]> Signed-off-by: George Jenkins <[email protected]>
Co-authored-by: Andrew Block <[email protected]> Signed-off-by: George Jenkins <[email protected]>
Co-authored-by: Andrew Block <[email protected]> Signed-off-by: George Jenkins <[email protected]>
Co-authored-by: Andrew Block <[email protected]> Signed-off-by: George Jenkins <[email protected]>
No description provided.