chart-releaser icon indicating copy to clipboard operation
chart-releaser copied to clipboard

Portion of `chart.metadata.version` unexpectedly treated as a number

Open iainsproat opened this issue 1 year ago • 1 comments
trafficstars

Recreation steps

  1. Install the latest chart releaser version:

    > cr version
    GitVersion:  v1.6.1
    GitCommit:   0102fa30dd78df0d0f8093c4607e6080972ff82d
    BuildDate:   2023-10-31T07:28:18Z
    GoVersion:   go1.20.10
    Compiler:    gc
    Platform:    darwin/arm64
    License:     Apache 2.0
    
  2. Set the helm chart version as follows:

    version: 2.18.2-branch.testing.79682.0162870
    
  3. run cr package

  4. we receive Error: validation: chart.metadata.version "2.18.2-branch.testing.79682.0162870" is invalid

Workarounds

  • remove the leading 0 in the last set of runes following the period:

    1. Set the helm chart version as follows:

      version: 2.18.2-branch.testing.79682.162870
      
    2. run cr package

    3. we receive Successfully packaged chart in....

  • add one or more non-digit runes to the set of runes following the period:

    1. Set the helm chart version as follows:

      version: 2.18.2-branch.testing.79682.016a870
      
    2. run cr package

    3. we receive Successfully packaged chart in....

Discussion

It seems that the set of runes following a period or hyphen is interpreted as a number rather than a string if all runes are digits. The presence of the leading 0 causes an error when parsing the runes as a number. This was unexpected.

Related issues

  • https://github.com/helm/chart-releaser/issues/362 discusses a similar issue with appVersion, and where the entire value is numeric. This differs from this issue which identifies the problem in version and where a portion following a period.

iainsproat avatar Feb 09 '24 15:02 iainsproat

I think the issue is that it is being parsed as semver: https://github.com/helm/helm/blob/3fc9f4b2638e76f26739cd77c7017139be81d0ea/pkg/action/package.go#L107 And it doesn't seem to be a test case covered by the semver library: https://github.com/Masterminds/semver/blob/e06051f8fcc4c8b4a4990c337b9862a2448722e5/version_test.go#L10

It seems the problem might be with the pre-release naming I have used: 2.18.2-branch.testing.79682.016a870, where the use of periods in the prerelease name branch.testing.79682.016a870 is causing it to be interpreted as semver.

iainsproat avatar Feb 09 '24 15:02 iainsproat