73 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
package v1alpha1
 | 
						|
 | 
						|
import "strings"
 | 
						|
 | 
						|
func IsVersionAllowed(resourceVersion, buildVersion string) bool {
 | 
						|
	if buildVersion == "dev" || resourceVersion == buildVersion || strings.HasPrefix(buildVersion, "canary-") {
 | 
						|
		return true
 | 
						|
	}
 | 
						|
 | 
						|
	rv, ok := parseSemver(resourceVersion)
 | 
						|
	if !ok {
 | 
						|
		return false
 | 
						|
	}
 | 
						|
	bv, ok := parseSemver(buildVersion)
 | 
						|
	if !ok {
 | 
						|
		return false
 | 
						|
	}
 | 
						|
	return rv.major == bv.major && rv.minor == bv.minor
 | 
						|
}
 | 
						|
 | 
						|
type semver struct {
 | 
						|
	major string
 | 
						|
	minor string
 | 
						|
}
 | 
						|
 | 
						|
func parseSemver(v string) (p semver, ok bool) {
 | 
						|
	if v == "" {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	p.major, v, ok = parseInt(v)
 | 
						|
	if !ok {
 | 
						|
		return p, false
 | 
						|
	}
 | 
						|
	if v == "" {
 | 
						|
		p.minor = "0"
 | 
						|
		return p, true
 | 
						|
	}
 | 
						|
	if v[0] != '.' {
 | 
						|
		return p, false
 | 
						|
	}
 | 
						|
	p.minor, v, ok = parseInt(v[1:])
 | 
						|
	if !ok {
 | 
						|
		return p, false
 | 
						|
	}
 | 
						|
	if v == "" {
 | 
						|
		return p, true
 | 
						|
	}
 | 
						|
	if v[0] != '.' {
 | 
						|
		return p, false
 | 
						|
	}
 | 
						|
	if _, _, ok = parseInt(v[1:]); !ok {
 | 
						|
		return p, false
 | 
						|
	}
 | 
						|
	return p, true
 | 
						|
}
 | 
						|
 | 
						|
func parseInt(v string) (t, rest string, ok bool) {
 | 
						|
	if v == "" {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	if v[0] < '0' || '9' < v[0] {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	i := 1
 | 
						|
	for i < len(v) && '0' <= v[i] && v[i] <= '9' {
 | 
						|
		i++
 | 
						|
	}
 | 
						|
	if v[0] == '0' && i != 1 {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	return v[:i], v[i:], true
 | 
						|
}
 |