blob: a50fcfb49b712316b8db88ed64825374224e4bb9 [file] [log] [blame]
Naveen Sampath04696f72022-06-13 15:19:14 +05301// 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//
Naveen Sampath04696f72022-06-13 15:19:14 +053015// For our release process, we enforce the following rules:
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +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.
Naveen Sampath04696f72022-06-13 15:19:14 +053021//
22// Steps for tagging a new release:
Naveen Sampath04696f72022-06-13 15:19:14 +053023//
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +053024// 1. Create a new CL.
Naveen Sampath04696f72022-06-13 15:19:14 +053025//
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +053026// 2. Update Minor, Patch, and/or PreRelease as necessary.
27// PreRelease must not contain the string "devel".
Naveen Sampath04696f72022-06-13 15:19:14 +053028//
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +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.
Naveen Sampath04696f72022-06-13 15:19:14 +053032//
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +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.
Naveen Sampath04696f72022-06-13 15:19:14 +053036//
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +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.
Naveen Sampath04696f72022-06-13 15:19:14 +053040//
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +053041// 6. Tag a new version, where the tag is is the current String.
Naveen Sampath04696f72022-06-13 15:19:14 +053042//
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +053043// 7. Write release notes for all notable changes
44// between this release and the last release.
Naveen Sampath04696f72022-06-13 15:19:14 +053045//
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +053046// 8. Create a new CL.
Naveen Sampath04696f72022-06-13 15:19:14 +053047//
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +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.
Naveen Sampath04696f72022-06-13 15:19:14 +053052const (
53 Major = 1
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +053054 Minor = 33
55 Patch = 0
Naveen Sampath04696f72022-06-13 15:19:14 +053056 PreRelease = ""
57)
58
59// String formats the version string for this module in semver format.
60//
61// Examples:
Akash Reddy Kankanala105581b2024-09-11 05:20:38 +053062//
Naveen Sampath04696f72022-06-13 15:19:14 +053063// 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}