helm/helm · error

version %w

Error message

version %w

What it means

Lint rule applying the semver constraint ">0.0.0-0" to the parsed version: the chart version must be strictly greater than the smallest possible 0.0.0 prerelease. If not, the first constraint-validation error message (an error value) is wrapped with %w. Practically only `version: 0.0.0` (or an equivalent-zero) fails, since anything positive passes.

Source

Thrown at pkg/chart/v2/lint/rules/chartfile.go:156

func validateChartVersion(cf *chart.Metadata) error {
	if cf.Version == "" {
		return errors.New("version is required")
	}

	version, err := semver.NewVersion(cf.Version)
	if err != nil {
		return fmt.Errorf("version '%s' is not a valid SemVer", cf.Version)
	}

	c, err := semver.NewConstraint(">0.0.0-0")
	if err != nil {
		return err
	}
	valid, msg := c.Validate(version)

	if !valid && len(msg) > 0 {
		return fmt.Errorf("version %w", msg[0])
	}

	return nil
}

func validateChartVersionStrictSemVerV2(cf *chart.Metadata) error {
	_, err := semver.StrictNewVersion(cf.Version)
	if err != nil {
		return fmt.Errorf("version '%s' is not a valid SemVerV2", cf.Version)
	}

	return nil
}

func validateChartMaintainer(cf *chart.Metadata) error {
	for _, maintainer := range cf.Maintainers {
		switch {
		case maintainer == nil:

View on GitHub (pinned to 2a29f1770b)

Solutions

  1. Bump the version to at least 0.0.1 (or 0.1.0) before linting/publishing.
  2. Fix CI tag detection so 0.0.0 is never the fallback.
  3. Treat 0.0.0 as 'unreleased' and skip `helm package`/upload steps until bumped.

Example fix

# before
apiVersion: v2
name: mychart
version: "0.0.0"   # -> version 0.0.0 is less than or equal to 0.0.0-0

# after
apiVersion: v2
name: mychart
version: "0.0.1"
Defensive patterns

Strategy: validation

Validate before calling

// Reject placeholder zero versions before lint/publish
v, err := semver.NewVersion(md.Version)
if err != nil { return err }
c, _ := semver.NewConstraint(">0.0.0-0")
if ok, _ := c.Validate(v); !ok {
	return fmt.Errorf("chart version %s must be > 0.0.0", md.Version)
}

Prevention

When it happens

Trigger: `version: "0.0.0"` in Chart.yaml — semver reports it does not satisfy >0.0.0-0. Scaffolding placeholders left un-bumped hit exactly this.

Common situations: A chart created with a placeholder zero version that was never set before publishing; automated pipelines defaulting to 0.0.0 when the tag detection fails.

Related errors


AI-assisted analysis of helm/helm@2a29f1770b (2026-08-15). Data as JSON: /api/errors/5828c7cf0dd895ed. Report an issue: GitHub.