Add proposals about two breaking changes before we cut Helmfile 1.0

Signed-off-by: Yusuke Kuoka <ykuoka@gmail.com>
This commit is contained in:
Yusuke Kuoka 2022-06-05 08:25:49 +00:00
parent 173767d2c5
commit bf9eeba544
1 changed files with 63 additions and 0 deletions

View File

@ -0,0 +1,63 @@
# Towards Helmfile 1.0
I'd like to make two backward-incompatible changes to Helmfile and mark it as 1.0, so that we can better communicate with the current and future Helmfile users about our stance on maintaining Helmfile.
## The changes in 1.0
1. Forbid the use of `environments` and `releases` within a single helmfile.yaml part
- Helmfile currently relies on a hack called "double rendering" which no one understands correctly (I suppose) to solve the chicken-and-egg problem of rendering the helmfile template(which requires helmfile to parse `environments` as yaml first) and parsing the rendered helmfile as yaml(which requires helmfile to render the template first).
- By forcing (or print a big warning) the user to separate helmfile parts for `environments` and `releases`, it's very unlikely Helmfile needs double-rendering at all.
- After this change, every helmfile.yaml written this way:
```
environments:
default:
values:
- foo: bar
releases:
- name: myapp
chart: charts/myapp
values:
- {{ .Values | toYaml | nindent 4 }}
```
must be rewritten like:
```
environments:
default:
values:
- foo: bar
---
releases:
- name: myapp
chart: charts/myapp
values:
- {{ .Values | toYaml | nindent 4 }}
```
It might not be a deal breaker as you already had to separate helmfile parts when you need to generate `environments` dynamically:
```
environments:
default:
values:
- foo: bar
---
environments:
default:
values:
- {{ .Values | toYaml | nindent 6}}}
- bar: baz
---
releases:
- name: myapp
chart: charts/myapp
values:
- {{ .Values | toYaml | nindent 4 }}
```
2. Force `.gotmpl` (or `.tpl`) file extension for `helmfile.yaml` in case you want helmfile to render it as a go template before yaml parsing.
- As the primary maintainer of the project, I'm tired of explaining why Helmfile renders go template expressions embedded in a yaml comment. [The latest example of it](https://github.com/helmfile/helmfile/issues/127).
- When we first introduced helmfile the ability to render helmfile.yaml as a go template, I did propose it to require `.gotmpl` file extension to enable the feature. But none of active helmfile users and contributors at that time agreed with it (although I didn't have a very strong opinion on the matter either), so we enabled it without the extension. I consider it as a tech debt now.
## After 1.0
We won't add any backward-incompatible changes while in 1.x, as long as it's inevitable to fix unseen important bug(s).
We also quit saying [Helmfile is in its early days](https://github.com/helmfile/helmfile#status) in your README as... it's just untrue today.