@@ -163,7 +163,7 @@ func (r OCIReference) HasVersion() bool {
163
163
}
164
164
165
165
if tagged , ok := r .Named .(reference.Tagged ); ok {
166
- _ , err := semver . NewVersion (tagged .Tag ())
166
+ _ , err := semverFromTag (tagged .Tag ())
167
167
return err == nil
168
168
}
169
169
return false
@@ -176,7 +176,7 @@ func (r OCIReference) Version() string {
176
176
}
177
177
178
178
if tagged , ok := r .Named .(reference.Tagged ); ok {
179
- v , err := semver . NewVersion (tagged .Tag ())
179
+ v , err := semverFromTag (tagged .Tag ())
180
180
if err == nil {
181
181
return v .String ()
182
182
}
@@ -185,6 +185,7 @@ func (r OCIReference) Version() string {
185
185
}
186
186
187
187
// WithVersion creates a new reference using the repository and the specified bundle version.
188
+ // If build metadata is present, "+" is conveted to "_".
188
189
func (r OCIReference ) WithVersion (version string ) (OCIReference , error ) {
189
190
if r .Named == nil {
190
191
return OCIReference {}, errors .New ("OCIReference has not been initialized" )
@@ -195,7 +196,7 @@ func (r OCIReference) WithVersion(version string) (OCIReference, error) {
195
196
return OCIReference {}, fmt .Errorf ("invalid bundle version specified %s: %w" , version , err )
196
197
}
197
198
198
- newRef , err := reference .WithTag (r .Named , "v" + v . String ( ))
199
+ newRef , err := reference .WithTag (r .Named , tagFromSemver ( v ))
199
200
if err != nil {
200
201
return OCIReference {}, err
201
202
}
@@ -233,3 +234,11 @@ func (r OCIReference) ParseRepositoryInfo() (*registry.RepositoryInfo, error) {
233
234
}
234
235
return registry .ParseRepositoryInfo (r .Named )
235
236
}
237
+
238
+ func semverFromTag (tag string ) (* semver.Version , error ) {
239
+ return semver .NewVersion (strings .Replace (tag , "_" , "+" , 1 ))
240
+ }
241
+
242
+ func tagFromSemver (version * semver.Version ) string {
243
+ return fmt .Sprintf ("v%s" , strings .Replace (version .String (), "+" , "_" , 1 ))
244
+ }
0 commit comments