code: func kubeadmVersion(info string) (string, error) {
  	v, err := versionutil.ParseSemantic(info)
  	if err != nil {
  		return "", errors.Wrap(err, "kubeadm version error")
  	}
  	// There is no utility in versionutil to get the version without the metadata,
  	// so this needs some manual formatting.
  	// Discard offsets after a release label and keep the labels down to e.g. `alpha.0` instead of
  	// including the offset e.g. `alpha.0.206`. This is done to comply with GCR image tags.
  	pre := v.PreRelease()
  	patch := v.Patch()
  	if len(pre) > 0 {
  		if patch > 0 {
  			// If the patch version is more than zero, decrement it and remove the label.
  			// this is done to comply with the latest stable patch release.
  			patch = patch - 1
  			pre = ""
  		} else {
  			split := strings.Split(pre, ".")
  			if len(split) > 2 {
  				pre = split[0] + "." + split[1] // Exclude the third element
  			} else if len(split) < 2 {
  				pre = split[0] + ".0" // Append .0 to a partial label
  			}
  			pre = "-" + pre
  		}
  	}
  	vStr := fmt.Sprintf("v%d.%d.%d%s", v.Major(), v.Minor(), patch, pre)
  	return vStr, nil
  }
docs: // kubeadmVersion returns the version of the client without metadata.