helm/helm · error
errMissingName
errMissingName
Error message
no name provided
What it means
ChartUploader.UploadTo (pkg/uploader/chart_uploader.go:47) requires the remote to carry a URL scheme because it dispatches to a pusher via c.Pushers.ByScheme(u.Scheme). url.Parse succeeds on bare hosts, so a scheme-less remote like registry.example.com/myrepo parses fine but has an empty Scheme, triggering this error which suggests the OCI form oci://.
Source
Thrown at internal/chart/v3/util/validate_name.go:39
"fmt"
"regexp"
)
// validName is a regular expression for resource names.
//
// According to the Kubernetes help text, the regular expression it uses is:
//
// [a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
//
// This follows the above regular expression (but requires a full string match, not partial).
//
// The Kubernetes documentation is here, though it is not entirely correct:
// https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
var validName = regexp.MustCompile(`^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`)
var (
// errMissingName indicates that a release (name) was not provided.
errMissingName = errors.New("no name provided")
// errInvalidName indicates that an invalid release name was provided
errInvalidName = fmt.Errorf(
"invalid release name, must match regex %s and the length must not be longer than 53",
validName.String())
// errInvalidKubernetesName indicates that the name does not meet the Kubernetes
// restrictions on metadata names.
errInvalidKubernetesName = fmt.Errorf(
"invalid metadata name, must match regex %s and the length must not be longer than 253",
validName.String())
)
const (
// According to the Kubernetes docs (https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#rfc-1035-label-names)
// some resource names have a max length of 63 characters while others have a max
// length of 253 characters. As we cannot be sure the resources used in a chart, we
// therefore need to limit it to 63 chars and reserve 10 chars for additional part to nameView on GitHub (pinned to 2a29f1770b)
Solutions
- Prefix the remote with oci:// — the full form is oci://<registry-host>/<path>
- For non-OCI HTTP chart repos, use helm's repo/upload tooling that accepts a repo name instead of ChartUploader with a bare host
- Validate the scheme before calling UploadTo and fail fast with a targeted message
Example fix
# before helm push mychart-1.0.0.tgz registry.example.com/myrepo # after helm push mychart-1.0.0.tgz oci://registry.example.com/myrepo
Defensive patterns
Strategy: validation
Validate before calling
func remoteHasScheme(remote string) error {
u, err := url.Parse(remote)
if err != nil { return err }
if u.Scheme == "" { return fmt.Errorf("remote %q must include a scheme such as oci://", remote) }
return nil
} Try / catch
if err := c.UploadTo(ref, remote); err != nil && strings.Contains(err.Error(), "scheme prefix missing") {
remote = "oci://" + remote // only if host was bare by construction
} Prevention
- Always push to oci://<registry-host>/<path>
- Distinguish legacy chart-repo push (repo name) from OCI push (URL)
- Default the scheme at the call site instead of relying on the error
When it happens
Trigger: uploader.ChartUploader{...}.UploadTo("mychart-1.0.0.tgz", "registry.example.com/charts") — Docker-style reference without a scheme. Any 'helm push chart.tgz <remote>' where <remote> lacks the oci:// prefix.
Common situations: Muscle memory from docker push / helm's legacy repo push where the remote was a repo name, not a URL; scripts upgraded from chart-repo (http) workflows to OCI registries without adding the scheme.
Related errors
- invalid JSON in values.schema.json
- cannot push directory, must provide chart archive (.tgz)
- missing registry client: %w
- strict mode enabled, ref basename and tag must match the cha
- failed to pull plugin from %s: %w
AI-assisted analysis of helm/helm@2a29f1770b (2026-08-15).
Data as JSON: /api/errors/67fc00bfe98a0956.
Report an issue: GitHub.