1*1c12ee1eSDan Willemsen// Copyright 2019 The Go Authors. All rights reserved. 2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style 3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file. 4*1c12ee1eSDan Willemsen 5*1c12ee1eSDan Willemsen// Package version records versioning information about this module. 6*1c12ee1eSDan Willemsenpackage version 7*1c12ee1eSDan Willemsen 8*1c12ee1eSDan Willemsenimport ( 9*1c12ee1eSDan Willemsen "fmt" 10*1c12ee1eSDan Willemsen "strings" 11*1c12ee1eSDan Willemsen) 12*1c12ee1eSDan Willemsen 13*1c12ee1eSDan Willemsen// These constants determine the current version of this module. 14*1c12ee1eSDan Willemsen// 15*1c12ee1eSDan Willemsen// For our release process, we enforce the following rules: 16*1c12ee1eSDan Willemsen// - Tagged releases use a tag that is identical to String. 17*1c12ee1eSDan Willemsen// - Tagged releases never reference a commit where the String 18*1c12ee1eSDan Willemsen// contains "devel". 19*1c12ee1eSDan Willemsen// - The set of all commits in this repository where String 20*1c12ee1eSDan Willemsen// does not contain "devel" must have a unique String. 21*1c12ee1eSDan Willemsen// 22*1c12ee1eSDan Willemsen// Steps for tagging a new release: 23*1c12ee1eSDan Willemsen// 24*1c12ee1eSDan Willemsen// 1. Create a new CL. 25*1c12ee1eSDan Willemsen// 26*1c12ee1eSDan Willemsen// 2. Update Minor, Patch, and/or PreRelease as necessary. 27*1c12ee1eSDan Willemsen// PreRelease must not contain the string "devel". 28*1c12ee1eSDan Willemsen// 29*1c12ee1eSDan Willemsen// 3. Since the last released minor version, have there been any changes to 30*1c12ee1eSDan Willemsen// generator that relies on new functionality in the runtime? 31*1c12ee1eSDan Willemsen// If yes, then increment RequiredGenerated. 32*1c12ee1eSDan Willemsen// 33*1c12ee1eSDan Willemsen// 4. Since the last released minor version, have there been any changes to 34*1c12ee1eSDan Willemsen// the runtime that removes support for old .pb.go source code? 35*1c12ee1eSDan Willemsen// If yes, then increment SupportMinimum. 36*1c12ee1eSDan Willemsen// 37*1c12ee1eSDan Willemsen// 5. Send out the CL for review and submit it. 38*1c12ee1eSDan Willemsen// Note that the next CL in step 8 must be submitted after this CL 39*1c12ee1eSDan Willemsen// without any other CLs in-between. 40*1c12ee1eSDan Willemsen// 41*1c12ee1eSDan Willemsen// 6. Tag a new version, where the tag is is the current String. 42*1c12ee1eSDan Willemsen// 43*1c12ee1eSDan Willemsen// 7. Write release notes for all notable changes 44*1c12ee1eSDan Willemsen// between this release and the last release. 45*1c12ee1eSDan Willemsen// 46*1c12ee1eSDan Willemsen// 8. Create a new CL. 47*1c12ee1eSDan Willemsen// 48*1c12ee1eSDan Willemsen// 9. Update PreRelease to include the string "devel". 49*1c12ee1eSDan Willemsen// For example: "" -> "devel" or "rc.1" -> "rc.1.devel" 50*1c12ee1eSDan Willemsen// 51*1c12ee1eSDan Willemsen// 10. Send out the CL for review and submit it. 52*1c12ee1eSDan Willemsenconst ( 53*1c12ee1eSDan Willemsen Major = 1 54*1c12ee1eSDan Willemsen Minor = 30 55*1c12ee1eSDan Willemsen Patch = 0 56*1c12ee1eSDan Willemsen PreRelease = "" 57*1c12ee1eSDan Willemsen) 58*1c12ee1eSDan Willemsen 59*1c12ee1eSDan Willemsen// String formats the version string for this module in semver format. 60*1c12ee1eSDan Willemsen// 61*1c12ee1eSDan Willemsen// Examples: 62*1c12ee1eSDan Willemsen// 63*1c12ee1eSDan Willemsen// v1.20.1 64*1c12ee1eSDan Willemsen// v1.21.0-rc.1 65*1c12ee1eSDan Willemsenfunc String() string { 66*1c12ee1eSDan Willemsen v := fmt.Sprintf("v%d.%d.%d", Major, Minor, Patch) 67*1c12ee1eSDan Willemsen if PreRelease != "" { 68*1c12ee1eSDan Willemsen v += "-" + PreRelease 69*1c12ee1eSDan Willemsen 70*1c12ee1eSDan Willemsen // TODO: Add metadata about the commit or build hash. 71*1c12ee1eSDan Willemsen // See https://golang.org/issue/29814 72*1c12ee1eSDan Willemsen // See https://golang.org/issue/33533 73*1c12ee1eSDan Willemsen var metadata string 74*1c12ee1eSDan Willemsen if strings.Contains(PreRelease, "devel") && metadata != "" { 75*1c12ee1eSDan Willemsen v += "+" + metadata 76*1c12ee1eSDan Willemsen } 77*1c12ee1eSDan Willemsen } 78*1c12ee1eSDan Willemsen return v 79*1c12ee1eSDan Willemsen} 80