Skip to content
Back to skills

Helm Update

ASecurity

Apply helm chart updates for Bifrost. Detects config.schema.json changes since the last helm release, applies user-requested changes, updates values.yaml / values.schema.json / _helpers.tpl, bumps Chart.yaml version, updates helm README (Latest Version + Upcoming section), creates a docs MDX changelog, and updates docs.json navigation. Ends with a diff review to verify every helm field maps back to a config.schema.json counterpart. Invoked with /helm-update.

  • 8,748 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 13, 2026
ai-agentsgobashgit

Security analysis

A100/100

Scanned October 13, 2026

npx -y skills add maximhq/bifrost --skill helm-update --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Helm Update?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Helm Update
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/maximhq-helm-update/badge)](https://www.skillsdirectory.com/skills/maximhq-helm-update)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: helm-update
description: Apply helm chart updates for Bifrost. Detects config.schema.json changes since the last helm release, applies user-requested changes, updates values.yaml / values.schema.json / _helpers.tpl, bumps Chart.yaml version, updates helm README (Latest Version + Upcoming section), creates a docs MDX changelog, and updates docs.json navigation. Ends with a diff review to verify every helm field maps back to a config.schema.json counterpart. Invoked with /helm-update.
allowed-tools: Read, Grep, Glob, Bash, Edit, Write, AskUserQuestion
---

# Helm Update

Apply changes to the Bifrost Helm chart, keep it in sync with `config.schema.json`, and update all changelogs.

## Key File Paths

| File | Path |
|------|------|
| Config schema | `transports/config.schema.json` |
| Chart metadata | `helm-charts/bifrost/Chart.yaml` |
| Values | `helm-charts/bifrost/values.yaml` |
| Values schema | `helm-charts/bifrost/values.schema.json` |
| Helpers template | `helm-charts/bifrost/templates/_helpers.tpl` |
| Helm README | `helm-charts/bifrost/README.md` |
| Docs changelogs | `docs/changelogs/helm-v<version>.mdx` |
| Docs navigation | `docs/docs.json` |

---

## Workflow

### Step 1: Gather Current State

Read the current helm chart version and identify the last helm release commit:

```bash
# Current helm chart version
cat helm-charts/bifrost/Chart.yaml | grep '^version:'

# Latest docs helm changelog (= last released version)
ls -1t docs/changelogs/helm-v*.mdx | head -1

# Find the commit that added the latest helm changelog
LAST_HELM_MDX=$(ls -1t docs/changelogs/helm-v*.mdx | head -1)
git log --oneline -- "$LAST_HELM_MDX" | head -1
```

Save the last-release commit SHA — you'll need it to scope the config.schema.json diff.

### Step 2: Check config.schema.json Changes Since Last Helm Release

```bash
LAST_COMMIT=$(git log --oneline -- "$(ls -1t docs/changelogs/helm-v*.mdx | head -1)" | awk '{print $1}')

# What changed in config.schema.json since then?
git diff ${LAST_COMMIT}..HEAD -- transports/config.schema.json
```

Identify any fields added, removed, or changed in `config.schema.json` that are **not yet reflected** in the helm chart. These are gaps that must be closed — even if the user did not explicitly ask for them. Note each gap; you will apply them alongside the user's requested changes.

### Step 3: Apply User-Requested Changes + Fill Gaps

For every change (user-requested AND schema gaps detected in Step 2):

#### values.yaml

Add new fields as **commented-out** blocks with a realistic sample value. Place new sections near related existing fields. Keep existing uncommented defaults intact.

```yaml
# bifrost.newFeature.someField -- brief description
# someField: "example-value"
```

#### values.schema.json

Add a matching JSON schema property with:
- Correct `type` (string/boolean/integer/object/array)
- `description` matching the config.schema.json description (paraphrased concisely)
- Any `enum`, `default`, `minimum`/`maximum`, or nested `properties`/`items` needed
- Mark required fields in the parent object's `required` array if mandatory

Locate the correct parent path in `values.schema.json` by searching for the nearest ancestor field.

#### _helpers.tpl

Wire new values into the generated config.json block inside `{{- define "bifrost.config" -}}`. Follow the existing rendering patterns:

- Simple scalar: `{{- if .Values.bifrost.someField }}` → emit `"some_field": {{ .Values.bifrost.someField | toJson }}`
- Optional block: wrap in `{{- if ... }}` / `{{- end }}`
- Duration strings: pass through `toJson` unchanged
- `env.VAR_NAME` references: pass through `toJson` unchanged

Search the existing template for a nearby field to find the right insertion point.

### Step 4: Determine New Helm Chart Version

Read `helm-charts/bifrost/Chart.yaml`. Increment the **patch** version (third number) unless the scope of changes clearly warrants a minor bump. Ask the user if unsure:

```
Current: 2.1.27  →  New: 2.1.28
```

Update `Chart.yaml`:

```yaml
version: 2.1.28   # updated line
```

### Step 5: Update Helm README

File: `helm-charts/bifrost/README.md`

**5a. Bump "Latest Version" line**

Find and update:
```
**Latest Version:** 2.1.27
```
→
```
**Latest Version:** 2.1.28
```

**5b. Update the Upcoming section**

Look for an `### Upcoming` section immediately after the `## Changelog` heading. If it **does not exist**, insert one. On every run, **append** bullet points for the current changes to `### Upcoming` — do not create a new versioned heading; that happens at release time.

Structure:
```markdown
## Changelog

### Upcoming

- Brief bullet describing what was added/changed. Reference the values.yaml path (e.g. `bifrost.foo.bar`) and the config.json field it renders into (`foo_bar`). One bullet per logical change.

### 2.1.27
...existing entries...
```

Keep bullets concise — one line each. No paragraph prose. Mirror the style of existing changelog entries.

### Step 6: Create Docs MDX Changelog

Create a new file `docs/changelogs/helm-v<NEW_VERSION>.mdx`:

```mdx
---
title: "v<NEW_VERSION>"
description: "Helm v<NEW_VERSION> changelog - <YYYY-MM-DD>"
---

<Update label="Bifrost Helm" description="v<NEW_VERSION>">

## Changelog

- <bullet 1 — same content as README Upcoming bullets>
- <bullet 2>
...

</Update>
```

Use today's date (`2026-07-10` or whatever the current date is). Mirror the bullet style from `docs/changelogs/helm-v2.1.26.mdx`.

### Step 7: Update docs.json Navigation

In `docs/docs.json`, find the `"item": "Helm"` group (under changelogs). Prepend the new entry at the top of its `pages` array:

```json
"pages": [
  "changelogs/helm-v2.1.28",   ← insert here
  "changelogs/helm-v2.1.27",
  ...
]
```

### Step 8: Final Diff Review (Correctness Check)

After all edits, run a fresh perspective check:

```bash
git diff -- helm-charts/bifrost/values.yaml helm-charts/bifrost/values.schema.json helm-charts/bifrost/templates/_helpers.tpl
```

For **every** new field in the diff, verify:

1. **values.yaml** — field exists (commented out with sample value)
2. **values.schema.json** — matching property with correct type and description
3. **_helpers.tpl** — field is rendered into config.json output under the correct JSON key
4. **config.schema.json counterpart** — confirm the JSON key emitted by `_helpers.tpl` exists in `transports/config.schema.json` (or is a known helm-only field like `replicaCount`)

If any field fails check 4, either fix the mapping or flag it to the user explicitly.

Report a short table:

| Helm values path | config.json key | In config.schema.json? |
|---|---|---|
| `bifrost.foo.bar` | `foo_bar` | ✓ |
| `bifrost.baz` | `baz_config` | ✓ |

---

## Common Rendering Patterns in _helpers.tpl

```go-template
{{/* Simple optional string */}}
{{- if .Values.bifrost.server.readBufferSize }}
"read_buffer_size": {{ .Values.bifrost.server.readBufferSize | toJson }},
{{- end }}

{{/* Optional boolean */}}
{{- if hasKey .Values.bifrost.loadBalancer "directionSelectionEnabled" }}
"direction_selection_enabled": {{ .Values.bifrost.loadBalancer.directionSelectionEnabled | toJson }},
{{- end }}

{{/* Nested object — only emit if any subfield set */}}
{{- if .Values.bifrost.newFeature }}
"new_feature": {
  {{- if .Values.bifrost.newFeature.timeout }}
  "timeout": {{ .Values.bifrost.newFeature.timeout | toJson }},
  {{- end }}
},
{{- end }}
```

## Important Rules

- **Never** omit the `### Upcoming` section after Step 5 — always ensure it exists and is populated.
- **Never** promote `### Upcoming` to a versioned heading — that is done by the changelog-writer skill at release time.
- **Never** write values.yaml fields as uncommented unless they were already uncommented (i.e., they are mandatory defaults like `replicaCount`).
- **Always** verify config.schema.json mapping in the final diff review.
- If a config.schema.json gap is found but its helm mapping would be complex (e.g. a new top-level plugin system), flag it to the user rather than silently skipping.
- Keep changelog bullets brief: one line, what was added/changed, what values.yaml path, what config.json key it renders into.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.