cilium/cilium · error
unsupported release type: %T
Error message
unsupported release type: %T
What it means
With --dry-run-helm-values, cilium-cli type-asserts the upgraded Helm release to *v1release.Release so it can YAML-marshal the release's user-supplied values (v1rel.Config). This error means the release object returned by helm.Upgrade is not the concrete v1 release type, so its Config field cannot be read directly. It is a forward-compatibility guard against Helm abstracting releases behind other types.
Source
Thrown at cilium-cli/install/upgrade.go:67
DryRun: k.params.DryRun,
DryRunHelmValues: k.params.DryRunHelmValues,
}
rel, err := helm.Upgrade(ctx, k8sClient.HelmActionConfig, upgradeParams)
if err != nil {
return err
}
if k.params.DryRun {
accessor, err := release.NewAccessor(rel)
if err != nil {
return fmt.Errorf("failed to create release accessor: %w", err)
}
fmt.Println(accessor.Manifest())
}
if k.params.DryRunHelmValues {
v1rel, ok := rel.(*v1release.Release)
if !ok {
return fmt.Errorf("unsupported release type: %T", rel)
}
helmValues, err := yaml.Marshal(v1rel.Config)
if err != nil {
return err
}
fmt.Println(string(helmValues))
}
if !k.params.Restart {
fmt.Println("⚠️ You maybe need to restart Cilium pods for configmap changes to take effect")
return nil
}
if err := k.client.DeletePodCollection(ctx, k.params.Namespace,
metav1.DeleteOptions{}, metav1.ListOptions{LabelSelector: defaults.AgentPodSelector}); err != nil {
return fmt.Errorf("⚠️ unable to restart Cilium pods: %w", err)
}
if err := k.client.DeletePodCollection(ctx, k.params.Namespace,View on GitHub (pinned to ac7b90affa)
Solutions
- Upgrade cilium-cli to the latest stable release where the upgrade path returns *v1release.Release
- If building from source, sync helm.sh/helm/v4 to the pinned version in cilium-cli's go.mod
- Preview values instead via 'helm get values <release>' or 'helm upgrade --dry-run' outside cilium-cli
- Report the concrete %T value from the error to cilium-cli if it reproduces on the latest version
Example fix
// before
v1rel, ok := rel.(*v1release.Release)
if !ok {
return fmt.Errorf("unsupported release type: %T", rel)
}
// after (use accessor instead of hard type assertion)
accessor, err := release.NewAccessor(rel)
if err != nil {
return fmt.Errorf("failed to create release accessor: %w", err)
}
_ = accessor // use accessor API for values where available
v1rel, ok := rel.(*v1release.Release)
if !ok {
return fmt.Errorf("unsupported release type: %T", rel)
} Defensive patterns
Strategy: type-guard
Validate before calling
// Guard the assertion yourself before expecting values output
rel, err := helm.Upgrade(ctx, k8sClient.HelmActionConfig, upgradeParams)
if err != nil {
return err
}
if _, ok := rel.(*v1release.Release); !ok {
return fmt.Errorf("--dry-run-helm-values needs *v1release.Release, got %T", rel)
} Type guard
func asV1Release(rel release.Release) (*v1release.Release, bool) {
v1rel, ok := rel.(*v1release.Release)
return v1rel, ok
} Try / catch
err := installer.UpgradeWithHelm(ctx, k8sClient)
if err != nil && strings.Contains(err.Error(), "unsupported release type") {
log.Printf("values preview skipped; fetch with 'helm get values <release>' instead: %v", err)
err = nil // upgrade already applied
} Prevention
- Avoid mixing cilium-cli builds with mismatched helm.sh/helm/v4 versions
- Prefer 'helm get values <release>' for reading live values instead of --dry-run-helm-values
- Pin toolchain versions in CI so the release concrete type stays v1
When it happens
Trigger: k.params.DryRunHelmValues is set, and the Go type assertion rel.(*v1release.Release) fails because helm.Upgrade returned a release wrapped in a different concrete type (e.g. an accessor-backed or future Helm release representation).
Common situations: Helm library version drift between cilium-cli's internal helm wrapper and release/v1; custom builds where the upgrade path returns a generic release interface; running a preview/alpha cilium-cli against newer Helm APIs.
Related errors
- failed to create release accessor: %w
- failed to initialize Helm client
- unsupported release type: %T
- existing clustermesh.config.clusters is invalid
- ConfigMap %q does not contain any configuration
AI-assisted analysis of cilium/cilium@ac7b90affa (2026-08-31).
Data as JSON: /api/errors/f6658405ac5edcc0.
Report an issue: GitHub.