blob: e0f6d002b5877375fe7b24e24442ea2a8a91a331 [file] [log] [blame]
khenaidoo5fc5cea2021-08-11 17:39:16 -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//
khenaidoo5fc5cea2021-08-11 17:39:16 -040015// For our release process, we enforce the following rules:
Joey Armstrongba3d9d12024-01-15 14:22:11 -050016// - 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.
khenaidoo5fc5cea2021-08-11 17:39:16 -040021//
22// Steps for tagging a new release:
khenaidoo5fc5cea2021-08-11 17:39:16 -040023//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050024// 1. Create a new CL.
khenaidoo5fc5cea2021-08-11 17:39:16 -040025//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050026// 2. Update Minor, Patch, and/or PreRelease as necessary.
27// PreRelease must not contain the string "devel".
khenaidoo5fc5cea2021-08-11 17:39:16 -040028//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050029// 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.
khenaidoo5fc5cea2021-08-11 17:39:16 -040032//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050033// 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.
khenaidoo5fc5cea2021-08-11 17:39:16 -040036//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050037// 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.
khenaidoo5fc5cea2021-08-11 17:39:16 -040040//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050041// 6. Tag a new version, where the tag is is the current String.
khenaidoo5fc5cea2021-08-11 17:39:16 -040042//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050043// 7. Write release notes for all notable changes
44// between this release and the last release.
khenaidoo5fc5cea2021-08-11 17:39:16 -040045//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050046// 8. Create a new CL.
khenaidoo5fc5cea2021-08-11 17:39:16 -040047//
Joey Armstrongba3d9d12024-01-15 14:22:11 -050048// 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.
khenaidoo5fc5cea2021-08-11 17:39:16 -040052const (
53 Major = 1
54 Minor = 27
55 Patch = 1
56 PreRelease = ""
57)
58
59// String formats the version string for this module in semver format.
60//
61// Examples:
Joey Armstrongba3d9d12024-01-15 14:22:11 -050062//
khenaidoo5fc5cea2021-08-11 17:39:16 -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}