1 #!/usr/bin/env python2.7
2 # Copyright 2017 gRPC authors.
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
16 # Defines languages, runtimes and releases for backward compatibility testing
18 from collections import OrderedDict
21 def get_github_repo(lang):
23 'dart': 'https://github.com/grpc/grpc-dart.git',
24 'go': 'https://github.com/grpc/grpc-go.git',
25 'java': 'https://github.com/grpc/grpc-java.git',
26 'node': 'https://github.com/grpc/grpc-node.git',
27 # all other languages use the grpc.git repo.
28 }.get(lang, 'https://github.com/grpc/grpc.git')
31 def get_release_tags(lang):
32 """Returns list of known releases for given language."""
33 return list(LANG_RELEASE_MATRIX[lang].keys())
36 def get_runtimes_for_lang_release(lang, release):
37 """Get list of valid runtimes for given release of lang."""
38 runtimes = list(LANG_RUNTIME_MATRIX[lang])
39 release_info = LANG_RELEASE_MATRIX[lang].get(release)
40 if release_info and release_info.runtime_subset:
41 runtimes = list(release_info.runtime_subset)
43 # check that all selected runtimes are valid for given language
44 for runtime in runtimes:
45 assert runtime in LANG_RUNTIME_MATRIX[lang]
49 def should_build_docker_interop_image_from_release_tag(lang):
50 # All dockerfile definitions live in grpc/grpc repository.
51 # For language that have a separate repo, we need to use
52 # dockerfile definitions from head of grpc/grpc.
53 if lang in ['go', 'java', 'node']:
58 # Dictionary of runtimes per language
59 LANG_RUNTIME_MATRIX = {
60 'cxx': ['cxx'], # This is actually debian8.
61 'go': ['go1.8', 'go1.11'],
62 'java': ['java_oracle8'],
66 'php': ['php', 'php7'],
67 'csharp': ['csharp', 'csharpcoreclr'],
72 """Info about a single release of a language"""
74 def __init__(self, patch=[], runtime_subset=[], testcases_file=None):
76 self.runtime_subset = runtime_subset
77 self.testcases_file = testcases_file
80 # Dictionary of known releases for given language.
81 LANG_RELEASE_MATRIX = {
84 ('v1.0.1', ReleaseInfo()),
85 ('v1.1.4', ReleaseInfo()),
86 ('v1.2.5', ReleaseInfo()),
87 ('v1.3.9', ReleaseInfo()),
88 ('v1.4.2', ReleaseInfo()),
89 ('v1.6.6', ReleaseInfo()),
90 ('v1.7.2', ReleaseInfo()),
91 ('v1.8.0', ReleaseInfo()),
92 ('v1.9.1', ReleaseInfo()),
93 ('v1.10.1', ReleaseInfo()),
94 ('v1.11.1', ReleaseInfo()),
95 ('v1.12.0', ReleaseInfo()),
96 ('v1.13.0', ReleaseInfo()),
97 ('v1.14.1', ReleaseInfo()),
98 ('v1.15.0', ReleaseInfo()),
99 ('v1.16.0', ReleaseInfo()),
100 ('v1.17.1', ReleaseInfo()),
101 ('v1.18.0', ReleaseInfo()),
102 ('v1.19.0', ReleaseInfo()),
103 ('v1.20.0', ReleaseInfo()),
107 ('v1.0.5', ReleaseInfo(runtime_subset=['go1.8'])),
108 ('v1.2.1', ReleaseInfo(runtime_subset=['go1.8'])),
109 ('v1.3.0', ReleaseInfo(runtime_subset=['go1.8'])),
110 ('v1.4.2', ReleaseInfo(runtime_subset=['go1.8'])),
111 ('v1.5.2', ReleaseInfo(runtime_subset=['go1.8'])),
112 ('v1.6.0', ReleaseInfo(runtime_subset=['go1.8'])),
113 ('v1.7.4', ReleaseInfo(runtime_subset=['go1.8'])),
114 ('v1.8.2', ReleaseInfo(runtime_subset=['go1.8'])),
115 ('v1.9.2', ReleaseInfo(runtime_subset=['go1.8'])),
116 ('v1.10.1', ReleaseInfo(runtime_subset=['go1.8'])),
117 ('v1.11.3', ReleaseInfo(runtime_subset=['go1.8'])),
118 ('v1.12.2', ReleaseInfo(runtime_subset=['go1.8'])),
119 ('v1.13.0', ReleaseInfo(runtime_subset=['go1.8'])),
120 ('v1.14.0', ReleaseInfo(runtime_subset=['go1.8'])),
121 ('v1.15.0', ReleaseInfo(runtime_subset=['go1.8'])),
122 ('v1.16.0', ReleaseInfo(runtime_subset=['go1.8'])),
123 ('v1.17.0', ReleaseInfo(runtime_subset=['go1.11'])),
124 ('v1.18.0', ReleaseInfo(runtime_subset=['go1.11'])),
125 ('v1.19.0', ReleaseInfo(runtime_subset=['go1.11'])),
126 ('v1.20.0', ReleaseInfo(runtime_subset=['go1.11'])),
130 ('v1.0.3', ReleaseInfo()),
131 ('v1.1.2', ReleaseInfo()),
132 ('v1.2.0', ReleaseInfo()),
133 ('v1.3.1', ReleaseInfo()),
134 ('v1.4.0', ReleaseInfo()),
135 ('v1.5.0', ReleaseInfo()),
136 ('v1.6.1', ReleaseInfo()),
137 ('v1.7.0', ReleaseInfo()),
138 ('v1.8.0', ReleaseInfo()),
139 ('v1.9.1', ReleaseInfo()),
140 ('v1.10.1', ReleaseInfo()),
141 ('v1.11.0', ReleaseInfo()),
142 ('v1.12.0', ReleaseInfo()),
143 ('v1.13.1', ReleaseInfo()),
144 ('v1.14.0', ReleaseInfo()),
145 ('v1.15.0', ReleaseInfo()),
146 ('v1.16.1', ReleaseInfo()),
147 ('v1.17.1', ReleaseInfo()),
148 ('v1.18.0', ReleaseInfo()),
149 ('v1.19.0', ReleaseInfo()),
150 ('v1.20.0', ReleaseInfo()),
154 ('v1.0.x', ReleaseInfo(testcases_file='python__v1.0.x')),
155 ('v1.1.4', ReleaseInfo(testcases_file='python__v1.0.x')),
156 ('v1.2.5', ReleaseInfo(testcases_file='python__v1.0.x')),
157 ('v1.3.9', ReleaseInfo(testcases_file='python__v1.0.x')),
158 ('v1.4.2', ReleaseInfo(testcases_file='python__v1.0.x')),
159 ('v1.6.6', ReleaseInfo(testcases_file='python__v1.0.x')),
160 ('v1.7.2', ReleaseInfo(testcases_file='python__v1.0.x')),
161 ('v1.8.1', ReleaseInfo(testcases_file='python__v1.0.x')),
162 ('v1.9.1', ReleaseInfo(testcases_file='python__v1.0.x')),
163 ('v1.10.1', ReleaseInfo(testcases_file='python__v1.0.x')),
164 ('v1.11.1', ReleaseInfo(testcases_file='python__v1.11.1')),
165 ('v1.12.0', ReleaseInfo(testcases_file='python__v1.11.1')),
166 ('v1.13.0', ReleaseInfo(testcases_file='python__v1.11.1')),
167 ('v1.14.1', ReleaseInfo(testcases_file='python__v1.11.1')),
168 ('v1.15.0', ReleaseInfo(testcases_file='python__v1.11.1')),
169 ('v1.16.0', ReleaseInfo(testcases_file='python__v1.11.1')),
170 ('v1.17.1', ReleaseInfo(testcases_file='python__v1.11.1')),
171 ('v1.18.0', ReleaseInfo()),
172 ('v1.19.0', ReleaseInfo()),
173 ('v1.20.0', ReleaseInfo()),
177 ('v1.0.1', ReleaseInfo(testcases_file='node__v1.0.1')),
178 ('v1.1.4', ReleaseInfo(testcases_file='node__v1.1.4')),
179 ('v1.2.5', ReleaseInfo(testcases_file='node__v1.1.4')),
180 ('v1.3.9', ReleaseInfo(testcases_file='node__v1.1.4')),
181 ('v1.4.2', ReleaseInfo(testcases_file='node__v1.1.4')),
182 ('v1.6.6', ReleaseInfo(testcases_file='node__v1.1.4')),
183 # TODO: https://github.com/grpc/grpc-node/issues/235.
184 # ('v1.7.2', ReleaseInfo()),
185 ('v1.8.4', ReleaseInfo()),
186 ('v1.9.1', ReleaseInfo()),
187 ('v1.10.0', ReleaseInfo()),
188 ('v1.11.3', ReleaseInfo()),
189 ('v1.12.4', ReleaseInfo()),
196 'tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile',
197 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
199 testcases_file='ruby__v1.0.1')),
200 ('v1.1.4', ReleaseInfo()),
201 ('v1.2.5', ReleaseInfo()),
202 ('v1.3.9', ReleaseInfo()),
203 ('v1.4.2', ReleaseInfo()),
204 ('v1.6.6', ReleaseInfo()),
205 ('v1.7.2', ReleaseInfo()),
206 ('v1.8.0', ReleaseInfo()),
207 ('v1.9.1', ReleaseInfo()),
208 ('v1.10.1', ReleaseInfo()),
209 ('v1.11.1', ReleaseInfo()),
210 ('v1.12.0', ReleaseInfo()),
211 ('v1.13.0', ReleaseInfo()),
212 ('v1.14.1', ReleaseInfo()),
213 ('v1.15.0', ReleaseInfo()),
214 ('v1.16.0', ReleaseInfo()),
215 ('v1.17.1', ReleaseInfo()),
218 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
220 # TODO: https://github.com/grpc/grpc/issues/18262.
221 # If you are not encountering the error in above issue
222 # go ahead and upload the docker image for new releases.
226 ('v1.0.1', ReleaseInfo()),
227 ('v1.1.4', ReleaseInfo()),
228 ('v1.2.5', ReleaseInfo()),
229 ('v1.3.9', ReleaseInfo()),
230 ('v1.4.2', ReleaseInfo()),
231 ('v1.6.6', ReleaseInfo()),
232 ('v1.7.2', ReleaseInfo()),
233 ('v1.8.0', ReleaseInfo()),
234 ('v1.9.1', ReleaseInfo()),
235 ('v1.10.1', ReleaseInfo()),
236 ('v1.11.1', ReleaseInfo()),
237 ('v1.12.0', ReleaseInfo()),
238 ('v1.13.0', ReleaseInfo()),
239 ('v1.14.1', ReleaseInfo()),
240 ('v1.15.0', ReleaseInfo()),
241 ('v1.16.0', ReleaseInfo()),
242 ('v1.17.1', ReleaseInfo()),
243 ('v1.18.0', ReleaseInfo()),
244 # TODO:https://github.com/grpc/grpc/issues/18264
245 # Error in above issues needs to be resolved.
252 'tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile',
253 'tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile',
255 testcases_file='csharp__v1.1.4')),
256 ('v1.1.4', ReleaseInfo(testcases_file='csharp__v1.1.4')),
257 ('v1.2.5', ReleaseInfo(testcases_file='csharp__v1.1.4')),
258 ('v1.3.9', ReleaseInfo(testcases_file='csharp__v1.3.9')),
259 ('v1.4.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
260 ('v1.6.6', ReleaseInfo(testcases_file='csharp__v1.3.9')),
261 ('v1.7.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
262 ('v1.8.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
263 ('v1.9.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
264 ('v1.10.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
265 ('v1.11.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
266 ('v1.12.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
267 ('v1.13.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
268 ('v1.14.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
269 ('v1.15.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
270 ('v1.16.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
271 ('v1.17.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
272 ('v1.18.0', ReleaseInfo(testcases_file='csharp__v1.18.0')),
273 ('v1.19.0', ReleaseInfo(testcases_file='csharp__v1.18.0')),
274 ('v1.20.0', ReleaseInfo()),