// Copyright 2019 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package protoimpl import ( "fmt" "strings" ) // These constants determine the current version of this module. // // // For our release process, we enforce the following rules: // * Tagged releases use a tag that is identical to VersionString. // * Tagged releases never reference a commit where the VersionString // contains "devel". // * The set of all commits in this repository where VersionString // does not contain "devel" must have a unique VersionString. // // // Steps for tagging a new release: // 1. Create a new CL. // // 2. Update versionMinor, versionPatch, and/or versionPreRelease as necessary. // versionPreRelease must not contain the string "devel". // // 3. Since the last released minor version, have there been any changes to // generator that relies on new functionality in the runtime? // If yes, then increment GenVersion. // // 4. Since the last released minor version, have there been any changes to // the runtime that removes support for old .pb.go source code? // If yes, then increment MinVersion. // // 5. Send out the CL for review and submit it. // Note that the next CL in step 8 must be submitted after this CL // without any other CLs in-between. // // 6. Tag a new version, where the tag is is the current VersionString. // // 7. Write release notes for all notable changes // between this release and the last release. // // 8. Create a new CL. // // 9. Update versionPreRelease to include the string "devel". // For example: "" -> "devel" or "rc.1" -> "rc.1.devel" // // 10. Send out the CL for review and submit it. const ( versionMajor = 1 versionMinor = 19 versionPatch = 0 versionPreRelease = "devel" ) // VersionString formats the version string for this module in semver format. // // Examples: // v1.20.1 // v1.21.0-rc.1 func VersionString() string { v := fmt.Sprintf("v%d.%d.%d", versionMajor, versionMinor, versionPatch) if versionPreRelease != "" { v += "-" + versionPreRelease // TODO: Add metadata about the commit or build hash. // See https://golang.org/issue/29814 // See https://golang.org/issue/33533 var versionMetadata string if strings.Contains(versionPreRelease, "devel") && versionMetadata != "" { v += "+" + versionMetadata } } return v } const ( // MaxVersion is the maximum supported version for generated .pb.go files. // It is always the current version of the module. MaxVersion = versionMinor // GenVersion is the runtime version required by generated .pb.go files. // This is incremented when generated code relies on new functionality // in the runtime. GenVersion = 19 // MinVersion is the minimum supported version for generated .pb.go files. // This is incremented when the runtime drops support for old code. MinVersion = 0 ) // EnforceVersion is used by code generated by protoc-gen-go // to statically enforce minimum and maximum versions of this package. // A compilation failure implies either that: // * the runtime package is too old and needs to be updated OR // * the generated code is too old and needs to be regenerated. // // The runtime package can be upgraded by running: // go get google.golang.org/protobuf // // The generated code can be regenerated by running: // protoc --go_out=${PROTOC_GEN_GO_ARGS} ${PROTO_FILES} // // Example usage by generated code: // const ( // // Verify that this generated code is sufficiently up-to-date. // _ = protoimpl.EnforceVersion(genVersion - protoimpl.MinVersion) // // Verify that runtime/protoimpl is sufficiently up-to-date. // _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - genVersion) // ) // // The genVersion is the current minor version used to generated the code. // This compile-time check relies on negative integer overflow of a uint // being a compilation failure (guaranteed by the Go specification). type EnforceVersion uint // This enforces the following invariant: // MinVersion ≤ GenVersion ≤ MaxVersion const ( _ = EnforceVersion(GenVersion - MinVersion) _ = EnforceVersion(MaxVersion - GenVersion) )