Skip to content
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

Generate docs for 0.32.x version #72

Merged
merged 22 commits into from
Sep 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/publish-b.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
steps:
- uses: helmwave/[email protected]
with:
version: '0.31.0'
version: '0.32.1'
- run: helmwave schema > schema.json
- uses: actions/checkout@v3
with:
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@ Temporary Items


.idea/
.vscode/
site/
**/.helmwave/
**/.helmwave/
5 changes: 4 additions & 1 deletion docs/anno.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ metadata:

## Helmwave's annotations

!!! danger "Initially annotations used `helmwave.dev/` namespace but in [:material-tag: v0.31.1](https://github.com/helmwave/helmwave/releases/tag/v0.31.1) it was switched to `helmwave.app/` with backward compatibility."
!!! danger "Initially annotations used `helmwave.dev/` namespace"

In [:material-tag: v0.31.1](https://github.com/helmwave/helmwave/releases/tag/v0.31.1) it was switched to `helmwave.app/` with backward compatibility.
In [:material-tag: v0.32.0](https://github.com/helmwave/helmwave/releases/tag/v0.32.0) support for old annotations was dropped.


### `helmwave.app/skip-diff`
Expand Down
61 changes: 46 additions & 15 deletions docs/comparison.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Comparison to alternatives

> Some comparisons may be outdated as we don't check every release. If any of the tools have improved, please open a [PR](https://github.com/helmwave/docs/issues/new).
> Some comparisons may be outdated as we don't check every release. If any of the tools have improved, please open
> a [PR](https://github.com/helmwave/docs/issues/new).

## As table

Expand All @@ -14,6 +15,7 @@
| **Live-tracking :simple-kubernetes: k8s resources** | [Kubedog](https://github.com/werf/kubedog) | No | No |
| Get application logs | [Kubedog](https://github.com/werf/kubedog) | No | No |
| Get :simple-kubernetes: k8s events | [Kubedog](https://github.com/werf/kubedog) and :simple-helm: helm progress | No | No |
| **Automatically rollback based on metrics** | `monitors` | No | No |
| Labels | `tags` | `labels` | ? |
| Manage kube-context via iac | Yes | Yes | Yes |
| Parallel releases | Yes | Yes | Releases with the same priority can be executed in parallel. |
Expand All @@ -27,22 +29,25 @@
| OCI | `registries` | option in `repositories` | only `pull`, not `login` |
| Lifecycle Hooks | Yes (pre_up, post_up, pre_down, post_down, pre_rollback, post_rollback, pre_build, post_build) | Yes (prepare, preapply, presync, preuninstall, postuninstall, postsync, cleanup) | No |
| Sub-main config | No | Yes | ? |
| manage render values | `render` option and options for setting delimiters | by file extension | ? |
| manage render values | `renderer` option and options for setting delimiters | by file extension | ? |
| Remote values | HTTP/HTTPS only | `go-getter` | ? |
| **Planfile** | Yes | No | No |
| Vault / AWS SSM | via `gomplate` datasources | custom functions | ? |


## Why not bare Helm?

### Managing multiple environments

Imagine you have multiple environments for same release (e.g. dev, stage, production, etc.). You likely have different settings.
Imagine you have multiple environments for same release (e.g. dev, stage, production, etc.). You likely have different
settings.

=== ":simple-helm: helm"
You will likely have bunch of bash scripts that run helm with different values files. It is quite hard to support and improve.

You will likely have bunch of bash scripts that run helm with different values files. It is quite hard to support and
improve.

=== "🌊 helmwave"

Set up `helmwave.yml.tpl` to include different values for different environments.

Check out [:material-duck: the example](../examples/single-app-multi-envs)
Expand All @@ -52,10 +57,14 @@ Check out [:material-duck: the example](../examples/single-app-multi-envs)
For example, you need to pass docker image tag.

=== ":simple-helm: helm"
Either you template values file (e.g. with ansible/jinja2 or any other templater) or you pass every individual value via `--set`.

Either you template values file (e.g. with ansible/jinja2 or any other templater) or you pass every individual value
via `--set`.

=== "🌊 helmwave"
Every values file are templated via `sprig` or `gomplate` which allows you to generate any values even with external commands.

Every values file are templated via `sprig` or `gomplate` which allows you to generate any values even with external
commands.

Check out [:material-duck: the example](../examples/pass-git-tag)

Expand All @@ -64,90 +73,112 @@ Check out [:material-duck: the example](../examples/pass-git-tag)
Imagine you need to deploy more than 1 release (e.g. deploy 10+ microservices to dynamic feature environment).

=== ":simple-helm: helm"

Either deploy releases one-by-one or create an umbrella chart (we think it is bad pattern).

=== "🌊 helmwave"

All releases are deployed in parallel with a dependency mechanism.

Check out [:material-duck: the example](../examples/umbrella-evil)

### Managing dependencies between releases

Imagine you need to deploy some DBMS and an app that uses it. While DBMS is provisioning (or scheduling) your app already starts failing probes. It may lead to failing app release.
Imagine you need to deploy some DBMS and an app that uses it. While DBMS is provisioning (or scheduling) your app
already starts failing probes. It may lead to failing app release.

=== ":simple-helm: helm"

Manually deploy releases one-by-one.

=== "🌊 helmwave"

Use `depends_on` to set up explicit dependencies between releases.

### Release stuck in pending state

If your CI for some reason killed helm process your next `helm upgrade` will fail because release is in `pending-upgrade` state.
If your CI for some reason killed helm process your next `helm upgrade` will fail because release is
in `pending-upgrade` state.

=== ":simple-helm: helm"
You need to either do `helm rollback` (doesn't work for `pending-install`) or `helm delete` (destructive in production) and try upgrade one more time.

You need to either do `helm rollback` (doesn't work for `pending-install`) or `helm delete` (destructive in production)
and try upgrade one more time.

=== "🌊 helmwave"

Use `pending_release_strategy` to automatically do rollbacks or delete before upgrade if required.

### Live-tracking release

=== ":simple-helm: helm"

You can enable debug logs which will provide you logs of what helm does.

=== "🌊 helmwave"

Use [kubedog](https://github.com/werf/kubedog) to show status progress.

Check out [:material-duck: the example](../examples/kubedog)

## Why not [Helmfile](https://github.com/helmfile/helmfile) ![GitHub Repo stars](https://img.shields.io/github/stars/helmfile/helmfile)?

We don't consider helmwave as a helmfile killer. Helmfile is an awesome project that really inspired us to implement the same in a bit different way with some other features. Probably there would be no helmwave if there was no helmfile.
We don't consider helmwave as a helmfile killer. Helmfile is an awesome project that really inspired us to implement the
same in a bit different way with some other features. Probably there would be no helmwave if there was no helmfile.

### Helm execution

=== "helmfile"

Helmfile runs `helm` via `os.Exec`. It means that:

- You need `helm` binary as well as a lot of other dependencies (e.g. libc). Helmfile's official docker image requires for around 300MB.
- Helmfile collects, parses and outputs `helm` stdout/stderr. Any helm backward incompatibility (even occasional) may be a big pain in the ass.
- `os.Exec` is not the fastest way to run helm. If 10ns of overhead does really matter to you.

=== "🌊 helmwave"

Helmwave runs `helm` as an internal bundled library. It means that:

- Helmwave already contains builtin specific (we try to keep it up to date) `helm` version.
- There are no helmwave dependencies at all - it can be completely static binary. Official docker image requires for around 30MB. And it can run both in musl and glibc environments.
- We constantly check out new `helm` features and try to enhance them in helmwave.


### Live-tracking release

=== "helmfile"
Only helm progress is available although there is [a discussion about kubedog integration](https://github.com/helmfile/helmfile/discussions/660).

Only helm progress is available although there
is [a discussion about kubedog integration](https://github.com/helmfile/helmfile/discussions/660).

=== "🌊 helmwave"

Use [kubedog](https://github.com/werf/kubedog) to show status progress.

Check out [:material-duck: the example](../examples/kubedog)

### Release stuck in pending state

If your CI for some reason killed helm process your next `helm upgrade` will fail because release is in `pending-upgrade` state.
If your CI for some reason killed helm process your next `helm upgrade` will fail because release is
in `pending-upgrade` state.

=== "helmfile"

The same as for helm

=== "🌊 helmwave"

Use `pending_release_strategy` to automatically do rollbacks or delete before upgrade if required.

### Templating engine

By templating engine we understand collection of builtin functions for default golang templates.

=== "helmfile"

Helmfile only supports `sprig` as a template engine.

=== "🌊 helmwave"
Every values file can be templated via `sprig` or `gomplate` (or even non-templated at all). Gomplate is an awesome huge engine that has a lot of features.

Every values file can be templated via `sprig` or `gomplate` (or even non-templated at all). Gomplate is an awesome huge
engine that has a lot of features.
Loading