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. 6package version 7 8import ( 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. 52const ( 53 Major = 1 54 Minor = 30 55 Patch = 0 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 65func 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