Imported Upstream version 1.27.0
[platform/upstream/grpc.git] / tools / interop_matrix / client_matrix.py
1 #!/usr/bin/env python2.7
2 # Copyright 2017 gRPC authors.
3 #
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
7 #
8 #     http://www.apache.org/licenses/LICENSE-2.0
9 #
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.
15
16 # Defines languages, runtimes and releases for backward compatibility testing
17
18 from collections import OrderedDict
19
20
21 def get_github_repo(lang):
22     return {
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')
29
30
31 def get_release_tags(lang):
32     """Returns list of known releases for given language."""
33     return list(LANG_RELEASE_MATRIX[lang].keys())
34
35
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)
42     return runtimes
43
44
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']:
50         return False
51     return True
52
53
54 # Dictionary of default runtimes per language
55 LANG_RUNTIME_MATRIX = {
56     'cxx': ['cxx'],  # This is actually debian8.
57     'go': ['go1.8', 'go1.11'],
58     'java': ['java'],
59     'python': ['python'],
60     'node': ['node'],
61     'ruby': ['ruby'],
62     'php': ['php', 'php7'],
63     'csharp': ['csharp', 'csharpcoreclr'],
64 }
65
66
67 class ReleaseInfo:
68     """Info about a single release of a language"""
69
70     def __init__(self, patch=[], runtimes=[], testcases_file=None):
71         self.patch = patch
72         self.runtimes = runtimes
73         self.testcases_file = testcases_file
74
75
76 # Dictionary of known releases for given language.
77 LANG_RELEASE_MATRIX = {
78     'cxx':
79         OrderedDict([
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()),
107         ]),
108     'go':
109         OrderedDict([
110             ('v1.0.5',
111              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
112             ('v1.2.1',
113              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
114             ('v1.3.0',
115              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
116             ('v1.4.2',
117              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
118             ('v1.5.2',
119              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
120             ('v1.6.0',
121              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
122             ('v1.7.4',
123              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
124             ('v1.8.2',
125              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
126             ('v1.9.2',
127              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
128             ('v1.10.1',
129              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
130             ('v1.11.3',
131              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
132             ('v1.12.2',
133              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
134             ('v1.13.0',
135              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
136             ('v1.14.0',
137              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
138             ('v1.15.0',
139              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
140             ('v1.16.0',
141              ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
142             ('v1.17.0',
143              ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
144             ('v1.18.0',
145              ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
146             ('v1.19.0',
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'])),
155         ]),
156     'java':
157         OrderedDict([
158             ('v1.0.3',
159              ReleaseInfo(runtimes=['java_oracle8'],
160                          testcases_file='java__v1.0.3')),
161             ('v1.1.2',
162              ReleaseInfo(runtimes=['java_oracle8'],
163                          testcases_file='java__v1.0.3')),
164             ('v1.2.0',
165              ReleaseInfo(runtimes=['java_oracle8'],
166                          testcases_file='java__v1.0.3')),
167             ('v1.3.1',
168              ReleaseInfo(runtimes=['java_oracle8'],
169                          testcases_file='java__v1.0.3')),
170             ('v1.4.0',
171              ReleaseInfo(runtimes=['java_oracle8'],
172                          testcases_file='java__v1.0.3')),
173             ('v1.5.0',
174              ReleaseInfo(runtimes=['java_oracle8'],
175                          testcases_file='java__v1.0.3')),
176             ('v1.6.1',
177              ReleaseInfo(runtimes=['java_oracle8'],
178                          testcases_file='java__v1.0.3')),
179             ('v1.7.1', ReleaseInfo(testcases_file='java__v1.0.3')),
180             ('v1.8.0',
181              ReleaseInfo(runtimes=['java_oracle8'],
182                          testcases_file='java__v1.0.3')),
183             ('v1.9.1',
184              ReleaseInfo(runtimes=['java_oracle8'],
185                          testcases_file='java__v1.0.3')),
186             ('v1.10.1',
187              ReleaseInfo(runtimes=['java_oracle8'],
188                          testcases_file='java__v1.0.3')),
189             ('v1.11.0',
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')),
194             ('v1.14.0',
195              ReleaseInfo(runtimes=['java_oracle8'],
196                          testcases_file='java__v1.0.3')),
197             ('v1.15.1', ReleaseInfo(testcases_file='java__v1.0.3')),
198             ('v1.16.1',
199              ReleaseInfo(runtimes=['java_oracle8'],
200                          testcases_file='java__v1.0.3')),
201             ('v1.17.2', ReleaseInfo(testcases_file='java__v1.0.3')),
202             ('v1.18.0',
203              ReleaseInfo(runtimes=['java_oracle8'],
204                          testcases_file='java__v1.0.3')),
205             ('v1.19.0',
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()),
214         ]),
215     'python':
216         OrderedDict([
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()),
244         ]),
245     'node':
246         OrderedDict([
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()),
260         ]),
261     'ruby':
262         OrderedDict([
263             ('v1.0.1',
264              ReleaseInfo(patch=[
265                  'tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile',
266                  'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
267              ],
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')),
285             ('v1.18.0',
286              ReleaseInfo(patch=[
287                  'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
288              ])),
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()),
301         ]),
302     'php':
303         OrderedDict([
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()),
331         ]),
332     'csharp':
333         OrderedDict([
334             ('v1.0.1',
335              ReleaseInfo(patch=[
336                  'tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile',
337                  'tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile',
338              ],
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()),
366         ]),
367 }