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