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.runtimes:
41 runtimes = list(release_info.runtimes)
45 def should_build_docker_interop_image_from_release_tag(lang):
46 # All dockerfile definitions live in grpc/grpc repository.
47 # For language that have a separate repo, we need to use
48 # dockerfile definitions from head of grpc/grpc.
49 if lang in ['go', 'java', 'node']:
54 # Dictionary of default runtimes per language
55 LANG_RUNTIME_MATRIX = {
56 'cxx': ['cxx'], # This is actually debian8.
57 'go': ['go1.8', 'go1.11'],
62 'php': ['php', 'php7'],
63 'csharp': ['csharp', 'csharpcoreclr'],
68 """Info about a single release of a language"""
70 def __init__(self, patch=[], runtimes=[], testcases_file=None):
72 self.runtimes = runtimes
73 self.testcases_file = testcases_file
76 # Dictionary of known releases for given language.
77 LANG_RELEASE_MATRIX = {
80 ('v1.0.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
81 ('v1.1.4', ReleaseInfo(testcases_file='cxx__v1.0.1')),
82 ('v1.2.5', ReleaseInfo(testcases_file='cxx__v1.0.1')),
83 ('v1.3.9', ReleaseInfo(testcases_file='cxx__v1.0.1')),
84 ('v1.4.2', ReleaseInfo(testcases_file='cxx__v1.0.1')),
85 ('v1.6.6', ReleaseInfo(testcases_file='cxx__v1.0.1')),
86 ('v1.7.2', ReleaseInfo(testcases_file='cxx__v1.0.1')),
87 ('v1.8.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
88 ('v1.9.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
89 ('v1.10.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
90 ('v1.11.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
91 ('v1.12.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
92 ('v1.13.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
93 ('v1.14.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
94 ('v1.15.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
95 ('v1.16.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
96 ('v1.17.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
97 ('v1.18.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
98 ('v1.19.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
99 ('v1.20.0', ReleaseInfo()),
100 ('v1.21.4', ReleaseInfo()),
101 ('v1.22.0', ReleaseInfo()),
102 ('v1.22.1', ReleaseInfo()),
103 ('v1.23.0', ReleaseInfo()),
104 ('v1.24.0', ReleaseInfo()),
105 ('v1.25.0', ReleaseInfo()),
106 ('v1.26.0', ReleaseInfo()),
111 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
113 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
115 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
117 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
119 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
121 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
123 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
125 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
127 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
129 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
131 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
133 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
135 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
137 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
139 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
141 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
143 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
145 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
147 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
148 ('v1.20.0', ReleaseInfo(runtimes=['go1.11'])),
149 ('v1.21.3', ReleaseInfo(runtimes=['go1.11'])),
150 ('v1.22.3', ReleaseInfo(runtimes=['go1.11'])),
151 ('v1.23.1', ReleaseInfo(runtimes=['go1.11'])),
152 ('v1.24.0', ReleaseInfo(runtimes=['go1.11'])),
153 ('v1.25.0', ReleaseInfo(runtimes=['go1.11'])),
154 ('v1.26.0', ReleaseInfo(runtimes=['go1.11'])),
159 ReleaseInfo(runtimes=['java_oracle8'],
160 testcases_file='java__v1.0.3')),
162 ReleaseInfo(runtimes=['java_oracle8'],
163 testcases_file='java__v1.0.3')),
165 ReleaseInfo(runtimes=['java_oracle8'],
166 testcases_file='java__v1.0.3')),
168 ReleaseInfo(runtimes=['java_oracle8'],
169 testcases_file='java__v1.0.3')),
171 ReleaseInfo(runtimes=['java_oracle8'],
172 testcases_file='java__v1.0.3')),
174 ReleaseInfo(runtimes=['java_oracle8'],
175 testcases_file='java__v1.0.3')),
177 ReleaseInfo(runtimes=['java_oracle8'],
178 testcases_file='java__v1.0.3')),
179 ('v1.7.1', ReleaseInfo(testcases_file='java__v1.0.3')),
181 ReleaseInfo(runtimes=['java_oracle8'],
182 testcases_file='java__v1.0.3')),
184 ReleaseInfo(runtimes=['java_oracle8'],
185 testcases_file='java__v1.0.3')),
187 ReleaseInfo(runtimes=['java_oracle8'],
188 testcases_file='java__v1.0.3')),
190 ReleaseInfo(runtimes=['java_oracle8'],
191 testcases_file='java__v1.0.3')),
192 ('v1.12.1', ReleaseInfo(testcases_file='java__v1.0.3')),
193 ('v1.13.2', ReleaseInfo(testcases_file='java__v1.0.3')),
195 ReleaseInfo(runtimes=['java_oracle8'],
196 testcases_file='java__v1.0.3')),
197 ('v1.15.1', ReleaseInfo(testcases_file='java__v1.0.3')),
199 ReleaseInfo(runtimes=['java_oracle8'],
200 testcases_file='java__v1.0.3')),
201 ('v1.17.2', ReleaseInfo(testcases_file='java__v1.0.3')),
203 ReleaseInfo(runtimes=['java_oracle8'],
204 testcases_file='java__v1.0.3')),
206 ReleaseInfo(runtimes=['java_oracle8'],
207 testcases_file='java__v1.0.3')),
208 ('v1.20.0', ReleaseInfo(runtimes=['java_oracle8'])),
209 ('v1.21.1', ReleaseInfo()),
210 ('v1.22.2', ReleaseInfo()),
211 ('v1.23.0', ReleaseInfo()),
212 ('v1.24.0', ReleaseInfo()),
213 ('v1.25.0', ReleaseInfo()),
217 ('v1.0.x', ReleaseInfo(testcases_file='python__v1.0.x')),
218 ('v1.1.4', ReleaseInfo(testcases_file='python__v1.0.x')),
219 ('v1.2.5', ReleaseInfo(testcases_file='python__v1.0.x')),
220 ('v1.3.9', ReleaseInfo(testcases_file='python__v1.0.x')),
221 ('v1.4.2', ReleaseInfo(testcases_file='python__v1.0.x')),
222 ('v1.6.6', ReleaseInfo(testcases_file='python__v1.0.x')),
223 ('v1.7.2', ReleaseInfo(testcases_file='python__v1.0.x')),
224 ('v1.8.1', ReleaseInfo(testcases_file='python__v1.0.x')),
225 ('v1.9.1', ReleaseInfo(testcases_file='python__v1.0.x')),
226 ('v1.10.1', ReleaseInfo(testcases_file='python__v1.0.x')),
227 ('v1.11.1', ReleaseInfo(testcases_file='python__v1.11.1')),
228 ('v1.12.0', ReleaseInfo(testcases_file='python__v1.11.1')),
229 ('v1.13.0', ReleaseInfo(testcases_file='python__v1.11.1')),
230 ('v1.14.1', ReleaseInfo(testcases_file='python__v1.11.1')),
231 ('v1.15.0', ReleaseInfo(testcases_file='python__v1.11.1')),
232 ('v1.16.0', ReleaseInfo(testcases_file='python__v1.11.1')),
233 ('v1.17.1', ReleaseInfo(testcases_file='python__v1.11.1')),
234 ('v1.18.0', ReleaseInfo()),
235 ('v1.19.0', ReleaseInfo()),
236 ('v1.20.0', ReleaseInfo()),
237 ('v1.21.4', ReleaseInfo()),
238 ('v1.22.0', ReleaseInfo()),
239 ('v1.22.1', ReleaseInfo()),
240 ('v1.23.0', ReleaseInfo()),
241 ('v1.24.0', ReleaseInfo()),
242 ('v1.25.0', ReleaseInfo()),
243 ('v1.26.0', ReleaseInfo()),
247 ('v1.0.1', ReleaseInfo(testcases_file='node__v1.0.1')),
248 ('v1.1.4', ReleaseInfo(testcases_file='node__v1.1.4')),
249 ('v1.2.5', ReleaseInfo(testcases_file='node__v1.1.4')),
250 ('v1.3.9', ReleaseInfo(testcases_file='node__v1.1.4')),
251 ('v1.4.2', ReleaseInfo(testcases_file='node__v1.1.4')),
252 ('v1.6.6', ReleaseInfo(testcases_file='node__v1.1.4')),
253 # TODO: https://github.com/grpc/grpc-node/issues/235.
254 # ('v1.7.2', ReleaseInfo()),
255 ('v1.8.4', ReleaseInfo()),
256 ('v1.9.1', ReleaseInfo()),
257 ('v1.10.0', ReleaseInfo()),
258 ('v1.11.3', ReleaseInfo()),
259 ('v1.12.4', ReleaseInfo()),
265 'tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile',
266 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
268 testcases_file='ruby__v1.0.1')),
269 ('v1.1.4', ReleaseInfo(testcases_file='ruby__v1.1.4')),
270 ('v1.2.5', ReleaseInfo(testcases_file='ruby__v1.1.4')),
271 ('v1.3.9', ReleaseInfo(testcases_file='ruby__v1.1.4')),
272 ('v1.4.2', ReleaseInfo(testcases_file='ruby__v1.1.4')),
273 ('v1.6.6', ReleaseInfo(testcases_file='ruby__v1.1.4')),
274 ('v1.7.2', ReleaseInfo(testcases_file='ruby__v1.1.4')),
275 ('v1.8.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
276 ('v1.9.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
277 ('v1.10.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
278 ('v1.11.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
279 ('v1.12.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
280 ('v1.13.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
281 ('v1.14.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
282 ('v1.15.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
283 ('v1.16.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
284 ('v1.17.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
287 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
289 ('v1.19.0', ReleaseInfo()),
290 ('v1.20.0', ReleaseInfo()),
291 ('v1.21.4', ReleaseInfo()),
292 ('v1.22.0', ReleaseInfo()),
293 ('v1.22.1', ReleaseInfo()),
294 ('v1.23.0', ReleaseInfo()),
295 ('v1.24.0', ReleaseInfo()),
296 ('v1.25.0', ReleaseInfo()),
297 # TODO: https://github.com/grpc/grpc/issues/18262.
298 # If you are not encountering the error in above issue
299 # go ahead and upload the docker image for new releases.
300 ('v1.26.0', ReleaseInfo()),
304 ('v1.0.1', ReleaseInfo(testcases_file='php__v1.0.1')),
305 ('v1.1.4', ReleaseInfo(testcases_file='php__v1.0.1')),
306 ('v1.2.5', ReleaseInfo(testcases_file='php__v1.0.1')),
307 ('v1.3.9', ReleaseInfo(testcases_file='php__v1.0.1')),
308 ('v1.4.2', ReleaseInfo(testcases_file='php__v1.0.1')),
309 ('v1.6.6', ReleaseInfo(testcases_file='php__v1.0.1')),
310 ('v1.7.2', ReleaseInfo(testcases_file='php__v1.0.1')),
311 ('v1.8.0', ReleaseInfo(testcases_file='php__v1.0.1')),
312 ('v1.9.1', ReleaseInfo(testcases_file='php__v1.0.1')),
313 ('v1.10.1', ReleaseInfo(testcases_file='php__v1.0.1')),
314 ('v1.11.1', ReleaseInfo(testcases_file='php__v1.0.1')),
315 ('v1.12.0', ReleaseInfo(testcases_file='php__v1.0.1')),
316 ('v1.13.0', ReleaseInfo(testcases_file='php__v1.0.1')),
317 ('v1.14.1', ReleaseInfo(testcases_file='php__v1.0.1')),
318 ('v1.15.0', ReleaseInfo(testcases_file='php__v1.0.1')),
319 ('v1.16.0', ReleaseInfo(testcases_file='php__v1.0.1')),
320 ('v1.17.1', ReleaseInfo(testcases_file='php__v1.0.1')),
321 ('v1.18.0', ReleaseInfo()),
322 # v1.19 and v1.20 were deliberately omitted here because of an issue.
323 # See https://github.com/grpc/grpc/issues/18264
324 ('v1.21.4', ReleaseInfo()),
325 ('v1.22.0', ReleaseInfo()),
326 ('v1.22.1', ReleaseInfo()),
327 ('v1.23.0', ReleaseInfo()),
328 ('v1.24.0', ReleaseInfo()),
329 ('v1.25.0', ReleaseInfo()),
330 ('v1.26.0', ReleaseInfo()),
336 'tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile',
337 'tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile',
339 testcases_file='csharp__v1.1.4')),
340 ('v1.1.4', ReleaseInfo(testcases_file='csharp__v1.1.4')),
341 ('v1.2.5', ReleaseInfo(testcases_file='csharp__v1.1.4')),
342 ('v1.3.9', ReleaseInfo(testcases_file='csharp__v1.3.9')),
343 ('v1.4.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
344 ('v1.6.6', ReleaseInfo(testcases_file='csharp__v1.3.9')),
345 ('v1.7.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
346 ('v1.8.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
347 ('v1.9.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
348 ('v1.10.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
349 ('v1.11.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
350 ('v1.12.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
351 ('v1.13.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
352 ('v1.14.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
353 ('v1.15.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
354 ('v1.16.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
355 ('v1.17.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
356 ('v1.18.0', ReleaseInfo(testcases_file='csharp__v1.18.0')),
357 ('v1.19.0', ReleaseInfo(testcases_file='csharp__v1.18.0')),
358 ('v1.20.0', ReleaseInfo()),
359 ('v1.21.4', ReleaseInfo()),
360 ('v1.22.0', ReleaseInfo()),
361 ('v1.22.1', ReleaseInfo()),
362 ('v1.23.0', ReleaseInfo()),
363 ('v1.24.0', ReleaseInfo()),
364 ('v1.25.0', ReleaseInfo()),
365 ('v1.26.0', ReleaseInfo()),