blob: 0999f29d501e8567baaf251de55c7cb8cc3fdb5b [file] [log] [blame]
khenaidoo106c61a2021-08-11 18:05:46 -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//
khenaidoo106c61a2021-08-11 18:05:46 -040015// For our release process, we enforce the following rules:
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +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.
khenaidoo106c61a2021-08-11 18:05:46 -040021//
22// Steps for tagging a new release:
khenaidoo106c61a2021-08-11 18:05:46 -040023//
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +053024// 1. Create a new CL.
khenaidoo106c61a2021-08-11 18:05:46 -040025//
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +053026// 2. Update Minor, Patch, and/or PreRelease as necessary.
27// PreRelease must not contain the string "devel".
khenaidoo106c61a2021-08-11 18:05:46 -040028//
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +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.
khenaidoo106c61a2021-08-11 18:05:46 -040032//
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +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.
khenaidoo106c61a2021-08-11 18:05:46 -040036//
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +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.
khenaidoo106c61a2021-08-11 18:05:46 -040040//
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +053041// 6. Tag a new version, where the tag is is the current String.
khenaidoo106c61a2021-08-11 18:05:46 -040042//
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +053043// 7. Write release notes for all notable changes
44// between this release and the last release.
khenaidoo106c61a2021-08-11 18:05:46 -040045//
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +053046// 8. Create a new CL.
khenaidoo106c61a2021-08-11 18:05:46 -040047//
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +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.
khenaidoo106c61a2021-08-11 18:05:46 -040052const (
53 Major = 1
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +053054 Minor = 31
55 Patch = 0
khenaidoo106c61a2021-08-11 18:05:46 -040056 PreRelease = ""
57)
58
59// String formats the version string for this module in semver format.
60//
61// Examples:
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +053062//
khenaidoo106c61a2021-08-11 18:05:46 -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}