version.go raw

   1  // Copyright 2019 The Go Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style
   3  // license that can be found in the LICENSE file.
   4  
   5  // Package version records versioning information about this module.
   6  package version
   7  
   8  import (
   9  	"fmt"
  10  	"strings"
  11  )
  12  
  13  // These constants determine the current version of this module.
  14  //
  15  // For our release process, we enforce the following rules:
  16  //   - Tagged releases use a tag that is identical to String.
  17  //   - Tagged releases never reference a commit where the String
  18  //     contains "devel".
  19  //   - The set of all commits in this repository where String
  20  //     does not contain "devel" must have a unique String.
  21  //
  22  // Steps for tagging a new release:
  23  //
  24  //  1. Create a new CL.
  25  //
  26  //  2. Update Minor, Patch, and/or PreRelease as necessary.
  27  //     PreRelease must not contain the string "devel".
  28  //
  29  //  3. Since the last released minor version, have there been any changes to
  30  //     generator that relies on new functionality in the runtime?
  31  //     If yes, then increment RequiredGenerated.
  32  //
  33  //  4. Since the last released minor version, have there been any changes to
  34  //     the runtime that removes support for old .pb.go source code?
  35  //     If yes, then increment SupportMinimum.
  36  //
  37  //  5. Send out the CL for review and submit it.
  38  //     Note that the next CL in step 8 must be submitted after this CL
  39  //     without any other CLs in-between.
  40  //
  41  //  6. Tag a new version, where the tag is is the current String.
  42  //
  43  //  7. Write release notes for all notable changes
  44  //     between this release and the last release.
  45  //
  46  //  8. Create a new CL.
  47  //
  48  //  9. Update PreRelease to include the string "devel".
  49  //     For example: "" -> "devel" or "rc.1" -> "rc.1.devel"
  50  //
  51  //  10. Send out the CL for review and submit it.
  52  const (
  53  	Major      = 1
  54  	Minor      = 36
  55  	Patch      = 11
  56  	PreRelease = ""
  57  )
  58  
  59  // String formats the version string for this module in semver format.
  60  //
  61  // Examples:
  62  //
  63  //	v1.20.1
  64  //	v1.21.0-rc.1
  65  func String() string {
  66  	v := fmt.Sprintf("v%d.%d.%d", Major, Minor, Patch)
  67  	if PreRelease != "" {
  68  		v += "-" + PreRelease
  69  
  70  		// TODO: Add metadata about the commit or build hash.
  71  		// See https://golang.org/issue/29814
  72  		// See https://golang.org/issue/33533
  73  		var metadata string
  74  		if strings.Contains(PreRelease, "devel") && metadata != "" {
  75  			v += "+" + metadata
  76  		}
  77  	}
  78  	return v
  79  }
  80