xref: /aosp_15_r20/external/grpc-grpc/tools/buildgen/plugins/expand_version.py (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker# Copyright 2016 gRPC authors.
2*cc02d7e2SAndroid Build Coastguard Worker#
3*cc02d7e2SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*cc02d7e2SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*cc02d7e2SAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*cc02d7e2SAndroid Build Coastguard Worker#
7*cc02d7e2SAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
8*cc02d7e2SAndroid Build Coastguard Worker#
9*cc02d7e2SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*cc02d7e2SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*cc02d7e2SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*cc02d7e2SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*cc02d7e2SAndroid Build Coastguard Worker# limitations under the License.
14*cc02d7e2SAndroid Build Coastguard Worker"""Buildgen package version plugin
15*cc02d7e2SAndroid Build Coastguard Worker
16*cc02d7e2SAndroid Build Coastguard WorkerThis parses the list of targets from the yaml build file, and creates
17*cc02d7e2SAndroid Build Coastguard Workera custom version string for each language's package.
18*cc02d7e2SAndroid Build Coastguard Worker
19*cc02d7e2SAndroid Build Coastguard Worker"""
20*cc02d7e2SAndroid Build Coastguard Worker
21*cc02d7e2SAndroid Build Coastguard Workerimport re
22*cc02d7e2SAndroid Build Coastguard Worker
23*cc02d7e2SAndroid Build Coastguard WorkerLANGUAGES = [
24*cc02d7e2SAndroid Build Coastguard Worker    "core",
25*cc02d7e2SAndroid Build Coastguard Worker    "cpp",
26*cc02d7e2SAndroid Build Coastguard Worker    "csharp",
27*cc02d7e2SAndroid Build Coastguard Worker    "node",
28*cc02d7e2SAndroid Build Coastguard Worker    "objc",
29*cc02d7e2SAndroid Build Coastguard Worker    "php",
30*cc02d7e2SAndroid Build Coastguard Worker    "python",
31*cc02d7e2SAndroid Build Coastguard Worker    "ruby",
32*cc02d7e2SAndroid Build Coastguard Worker]
33*cc02d7e2SAndroid Build Coastguard Worker
34*cc02d7e2SAndroid Build Coastguard Worker
35*cc02d7e2SAndroid Build Coastguard Workerclass Version:
36*cc02d7e2SAndroid Build Coastguard Worker    def __init__(self, version_str, override_major=None):
37*cc02d7e2SAndroid Build Coastguard Worker        self.tag = None
38*cc02d7e2SAndroid Build Coastguard Worker        if "-" in version_str:
39*cc02d7e2SAndroid Build Coastguard Worker            version_str, self.tag = version_str.split("-")
40*cc02d7e2SAndroid Build Coastguard Worker        self.major, self.minor, self.patch = [
41*cc02d7e2SAndroid Build Coastguard Worker            int(x) for x in version_str.split(".")
42*cc02d7e2SAndroid Build Coastguard Worker        ]
43*cc02d7e2SAndroid Build Coastguard Worker        if override_major:
44*cc02d7e2SAndroid Build Coastguard Worker            self.major = override_major
45*cc02d7e2SAndroid Build Coastguard Worker
46*cc02d7e2SAndroid Build Coastguard Worker    def __str__(self):
47*cc02d7e2SAndroid Build Coastguard Worker        """Version string in a somewhat idiomatic style for most languages"""
48*cc02d7e2SAndroid Build Coastguard Worker        version_str = "%d.%d.%d" % (self.major, self.minor, self.patch)
49*cc02d7e2SAndroid Build Coastguard Worker        if self.tag:
50*cc02d7e2SAndroid Build Coastguard Worker            version_str += "-%s" % self.tag
51*cc02d7e2SAndroid Build Coastguard Worker        return version_str
52*cc02d7e2SAndroid Build Coastguard Worker
53*cc02d7e2SAndroid Build Coastguard Worker    def pep440(self):
54*cc02d7e2SAndroid Build Coastguard Worker        """Version string in Python PEP440 style"""
55*cc02d7e2SAndroid Build Coastguard Worker        s = "%d.%d.%d" % (self.major, self.minor, self.patch)
56*cc02d7e2SAndroid Build Coastguard Worker        if self.tag:
57*cc02d7e2SAndroid Build Coastguard Worker            # we need to translate from grpc version tags to pep440 version
58*cc02d7e2SAndroid Build Coastguard Worker            # tags; this code is likely to be a little ad-hoc
59*cc02d7e2SAndroid Build Coastguard Worker            if self.tag == "dev":
60*cc02d7e2SAndroid Build Coastguard Worker                s += ".dev0"
61*cc02d7e2SAndroid Build Coastguard Worker            elif len(self.tag) >= 3 and self.tag[0:3] == "pre":
62*cc02d7e2SAndroid Build Coastguard Worker                s += "rc%d" % int(self.tag[3:])
63*cc02d7e2SAndroid Build Coastguard Worker            else:
64*cc02d7e2SAndroid Build Coastguard Worker                raise Exception(
65*cc02d7e2SAndroid Build Coastguard Worker                    'Don\'t know how to translate version tag "%s" to pep440'
66*cc02d7e2SAndroid Build Coastguard Worker                    % self.tag
67*cc02d7e2SAndroid Build Coastguard Worker                )
68*cc02d7e2SAndroid Build Coastguard Worker        return s
69*cc02d7e2SAndroid Build Coastguard Worker
70*cc02d7e2SAndroid Build Coastguard Worker    def ruby(self):
71*cc02d7e2SAndroid Build Coastguard Worker        """Version string in Ruby style"""
72*cc02d7e2SAndroid Build Coastguard Worker        if self.tag:
73*cc02d7e2SAndroid Build Coastguard Worker            return "%d.%d.%d.%s" % (
74*cc02d7e2SAndroid Build Coastguard Worker                self.major,
75*cc02d7e2SAndroid Build Coastguard Worker                self.minor,
76*cc02d7e2SAndroid Build Coastguard Worker                self.patch,
77*cc02d7e2SAndroid Build Coastguard Worker                self.tag,
78*cc02d7e2SAndroid Build Coastguard Worker            )
79*cc02d7e2SAndroid Build Coastguard Worker        else:
80*cc02d7e2SAndroid Build Coastguard Worker            return "%d.%d.%d" % (self.major, self.minor, self.patch)
81*cc02d7e2SAndroid Build Coastguard Worker
82*cc02d7e2SAndroid Build Coastguard Worker    def php(self):
83*cc02d7e2SAndroid Build Coastguard Worker        """Version string for PHP PECL package"""
84*cc02d7e2SAndroid Build Coastguard Worker        s = "%d.%d.%d" % (self.major, self.minor, self.patch)
85*cc02d7e2SAndroid Build Coastguard Worker        if self.tag:
86*cc02d7e2SAndroid Build Coastguard Worker            if self.tag == "dev":
87*cc02d7e2SAndroid Build Coastguard Worker                s += "dev"
88*cc02d7e2SAndroid Build Coastguard Worker            elif len(self.tag) >= 3 and self.tag[0:3] == "pre":
89*cc02d7e2SAndroid Build Coastguard Worker                s += "RC%d" % int(self.tag[3:])
90*cc02d7e2SAndroid Build Coastguard Worker            else:
91*cc02d7e2SAndroid Build Coastguard Worker                raise Exception(
92*cc02d7e2SAndroid Build Coastguard Worker                    'Don\'t know how to translate version tag "%s" to PECL'
93*cc02d7e2SAndroid Build Coastguard Worker                    " version" % self.tag
94*cc02d7e2SAndroid Build Coastguard Worker                )
95*cc02d7e2SAndroid Build Coastguard Worker        return s
96*cc02d7e2SAndroid Build Coastguard Worker
97*cc02d7e2SAndroid Build Coastguard Worker    def php_stability(self):
98*cc02d7e2SAndroid Build Coastguard Worker        """stability string for PHP PECL package.xml file"""
99*cc02d7e2SAndroid Build Coastguard Worker        if self.tag:
100*cc02d7e2SAndroid Build Coastguard Worker            return "beta"
101*cc02d7e2SAndroid Build Coastguard Worker        else:
102*cc02d7e2SAndroid Build Coastguard Worker            return "stable"
103*cc02d7e2SAndroid Build Coastguard Worker
104*cc02d7e2SAndroid Build Coastguard Worker    def php_composer(self):
105*cc02d7e2SAndroid Build Coastguard Worker        """Version string for PHP Composer package"""
106*cc02d7e2SAndroid Build Coastguard Worker        return "%d.%d.%d" % (self.major, self.minor, self.patch)
107*cc02d7e2SAndroid Build Coastguard Worker
108*cc02d7e2SAndroid Build Coastguard Worker    def php_current_version(self):
109*cc02d7e2SAndroid Build Coastguard Worker        return "8.1"
110*cc02d7e2SAndroid Build Coastguard Worker
111*cc02d7e2SAndroid Build Coastguard Worker    def php_debian_version(self):
112*cc02d7e2SAndroid Build Coastguard Worker        return "buster"
113*cc02d7e2SAndroid Build Coastguard Worker
114*cc02d7e2SAndroid Build Coastguard Worker
115*cc02d7e2SAndroid Build Coastguard Workerdef mako_plugin(dictionary):
116*cc02d7e2SAndroid Build Coastguard Worker    """Expand version numbers:
117*cc02d7e2SAndroid Build Coastguard Worker    - for each language, ensure there's a language_version tag in
118*cc02d7e2SAndroid Build Coastguard Worker      settings (defaulting to the master version tag)
119*cc02d7e2SAndroid Build Coastguard Worker    - expand version strings to major, minor, patch, and tag
120*cc02d7e2SAndroid Build Coastguard Worker    """
121*cc02d7e2SAndroid Build Coastguard Worker
122*cc02d7e2SAndroid Build Coastguard Worker    settings = dictionary["settings"]
123*cc02d7e2SAndroid Build Coastguard Worker    version_str = settings["version"]
124*cc02d7e2SAndroid Build Coastguard Worker    master_version = Version(version_str)
125*cc02d7e2SAndroid Build Coastguard Worker    settings["version"] = master_version
126*cc02d7e2SAndroid Build Coastguard Worker    for language in LANGUAGES:
127*cc02d7e2SAndroid Build Coastguard Worker        version_tag = "%s_version" % language
128*cc02d7e2SAndroid Build Coastguard Worker        override_major = settings.get("%s_major_version" % language, None)
129*cc02d7e2SAndroid Build Coastguard Worker        if version_tag in settings:
130*cc02d7e2SAndroid Build Coastguard Worker            settings[version_tag] = Version(
131*cc02d7e2SAndroid Build Coastguard Worker                settings[version_tag], override_major=override_major
132*cc02d7e2SAndroid Build Coastguard Worker            )
133*cc02d7e2SAndroid Build Coastguard Worker        else:
134*cc02d7e2SAndroid Build Coastguard Worker            settings[version_tag] = Version(
135*cc02d7e2SAndroid Build Coastguard Worker                version_str, override_major=override_major
136*cc02d7e2SAndroid Build Coastguard Worker            )
137