blob: 01efc33030dd517aed75c54b3700ce0173150f4f [file] [log] [blame]
khenaidoo7d3c5582021-08-11 18:09:44 -04001// 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//
khenaidoo7d3c5582021-08-11 18:09:44 -040015// For our release process, we enforce the following rules:
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053016// - 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.
khenaidoo7d3c5582021-08-11 18:09:44 -040021//
22// Steps for tagging a new release:
khenaidoo7d3c5582021-08-11 18:09:44 -040023//
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053024// 1. Create a new CL.
khenaidoo7d3c5582021-08-11 18:09:44 -040025//
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053026// 2. Update Minor, Patch, and/or PreRelease as necessary.
27// PreRelease must not contain the string "devel".
khenaidoo7d3c5582021-08-11 18:09:44 -040028//
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053029// 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.
khenaidoo7d3c5582021-08-11 18:09:44 -040032//
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053033// 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.
khenaidoo7d3c5582021-08-11 18:09:44 -040036//
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053037// 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.
khenaidoo7d3c5582021-08-11 18:09:44 -040040//
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053041// 6. Tag a new version, where the tag is is the current String.
khenaidoo7d3c5582021-08-11 18:09:44 -040042//
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053043// 7. Write release notes for all notable changes
44// between this release and the last release.
khenaidoo7d3c5582021-08-11 18:09:44 -040045//
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053046// 8. Create a new CL.
khenaidoo7d3c5582021-08-11 18:09:44 -040047//
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053048// 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.
khenaidoo7d3c5582021-08-11 18:09:44 -040052const (
53 Major = 1
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053054 Minor = 36
55 Patch = 5
khenaidoo7d3c5582021-08-11 18:09:44 -040056 PreRelease = ""
57)
58
59// String formats the version string for this module in semver format.
60//
61// Examples:
Akash Reddy Kankanala92dfdf82025-03-23 22:07:09 +053062//
khenaidoo7d3c5582021-08-11 18:09:44 -040063// 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}