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()),
106 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
108 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
110 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
112 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
114 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
116 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
118 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
120 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
122 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
124 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
126 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
128 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
130 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
132 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
134 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
136 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
138 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
140 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
142 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
143 ('v1.20.0', ReleaseInfo(runtimes=['go1.11'])),
144 ('v1.21.0', ReleaseInfo(runtimes=['go1.11'])),
149 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
151 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
153 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
155 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
157 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
159 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
161 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
163 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
165 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
167 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
169 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
171 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
173 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
175 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
177 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
179 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
181 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
183 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
185 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
187 ReleaseInfo(runtimes=['java_oracle8'], testcases_file='java__v1.0.3')),
188 ('v1.20.0', ReleaseInfo(runtimes=['java_oracle8'])),
189 ('v1.21.0', ReleaseInfo(runtimes=['java_oracle8'])),
193 ('v1.0.x', ReleaseInfo(testcases_file='python__v1.0.x')),
194 ('v1.1.4', ReleaseInfo(testcases_file='python__v1.0.x')),
195 ('v1.2.5', ReleaseInfo(testcases_file='python__v1.0.x')),
196 ('v1.3.9', ReleaseInfo(testcases_file='python__v1.0.x')),
197 ('v1.4.2', ReleaseInfo(testcases_file='python__v1.0.x')),
198 ('v1.6.6', ReleaseInfo(testcases_file='python__v1.0.x')),
199 ('v1.7.2', ReleaseInfo(testcases_file='python__v1.0.x')),
200 ('v1.8.1', ReleaseInfo(testcases_file='python__v1.0.x')),
201 ('v1.9.1', ReleaseInfo(testcases_file='python__v1.0.x')),
202 ('v1.10.1', ReleaseInfo(testcases_file='python__v1.0.x')),
203 ('v1.11.1', ReleaseInfo(testcases_file='python__v1.11.1')),
204 ('v1.12.0', ReleaseInfo(testcases_file='python__v1.11.1')),
205 ('v1.13.0', ReleaseInfo(testcases_file='python__v1.11.1')),
206 ('v1.14.1', ReleaseInfo(testcases_file='python__v1.11.1')),
207 ('v1.15.0', ReleaseInfo(testcases_file='python__v1.11.1')),
208 ('v1.16.0', ReleaseInfo(testcases_file='python__v1.11.1')),
209 ('v1.17.1', ReleaseInfo(testcases_file='python__v1.11.1')),
210 ('v1.18.0', ReleaseInfo()),
211 ('v1.19.0', ReleaseInfo()),
212 ('v1.20.0', ReleaseInfo()),
213 ('v1.21.4', ReleaseInfo()),
217 ('v1.0.1', ReleaseInfo(testcases_file='node__v1.0.1')),
218 ('v1.1.4', ReleaseInfo(testcases_file='node__v1.1.4')),
219 ('v1.2.5', ReleaseInfo(testcases_file='node__v1.1.4')),
220 ('v1.3.9', ReleaseInfo(testcases_file='node__v1.1.4')),
221 ('v1.4.2', ReleaseInfo(testcases_file='node__v1.1.4')),
222 ('v1.6.6', ReleaseInfo(testcases_file='node__v1.1.4')),
223 # TODO: https://github.com/grpc/grpc-node/issues/235.
224 # ('v1.7.2', ReleaseInfo()),
225 ('v1.8.4', ReleaseInfo()),
226 ('v1.9.1', ReleaseInfo()),
227 ('v1.10.0', ReleaseInfo()),
228 ('v1.11.3', ReleaseInfo()),
229 ('v1.12.4', ReleaseInfo()),
236 'tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile',
237 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
239 testcases_file='ruby__v1.0.1')),
240 ('v1.1.4', ReleaseInfo(testcases_file='ruby__v1.1.4')),
241 ('v1.2.5', ReleaseInfo(testcases_file='ruby__v1.1.4')),
242 ('v1.3.9', ReleaseInfo(testcases_file='ruby__v1.1.4')),
243 ('v1.4.2', ReleaseInfo(testcases_file='ruby__v1.1.4')),
244 ('v1.6.6', ReleaseInfo(testcases_file='ruby__v1.1.4')),
245 ('v1.7.2', ReleaseInfo(testcases_file='ruby__v1.1.4')),
246 ('v1.8.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
247 ('v1.9.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
248 ('v1.10.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
249 ('v1.11.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
250 ('v1.12.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
251 ('v1.13.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
252 ('v1.14.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
253 ('v1.15.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
254 ('v1.16.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
255 ('v1.17.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
258 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
260 ('v1.19.0', ReleaseInfo()),
261 ('v1.20.0', ReleaseInfo()),
262 ('v1.21.4', ReleaseInfo()),
263 # TODO: https://github.com/grpc/grpc/issues/18262.
264 # If you are not encountering the error in above issue
265 # go ahead and upload the docker image for new releases.
269 ('v1.0.1', ReleaseInfo(testcases_file='php__v1.0.1')),
270 ('v1.1.4', ReleaseInfo(testcases_file='php__v1.0.1')),
271 ('v1.2.5', ReleaseInfo(testcases_file='php__v1.0.1')),
272 ('v1.3.9', ReleaseInfo(testcases_file='php__v1.0.1')),
273 ('v1.4.2', ReleaseInfo(testcases_file='php__v1.0.1')),
274 ('v1.6.6', ReleaseInfo(testcases_file='php__v1.0.1')),
275 ('v1.7.2', ReleaseInfo(testcases_file='php__v1.0.1')),
276 ('v1.8.0', ReleaseInfo(testcases_file='php__v1.0.1')),
277 ('v1.9.1', ReleaseInfo(testcases_file='php__v1.0.1')),
278 ('v1.10.1', ReleaseInfo(testcases_file='php__v1.0.1')),
279 ('v1.11.1', ReleaseInfo(testcases_file='php__v1.0.1')),
280 ('v1.12.0', ReleaseInfo(testcases_file='php__v1.0.1')),
281 ('v1.13.0', ReleaseInfo(testcases_file='php__v1.0.1')),
282 ('v1.14.1', ReleaseInfo(testcases_file='php__v1.0.1')),
283 ('v1.15.0', ReleaseInfo(testcases_file='php__v1.0.1')),
284 ('v1.16.0', ReleaseInfo(testcases_file='php__v1.0.1')),
285 ('v1.17.1', ReleaseInfo(testcases_file='php__v1.0.1')),
286 ('v1.18.0', ReleaseInfo()),
287 ('v1.21.4', ReleaseInfo()),
288 # TODO:https://github.com/grpc/grpc/issues/18264
289 # Error in above issues needs to be resolved.
296 'tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile',
297 'tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile',
299 testcases_file='csharp__v1.1.4')),
300 ('v1.1.4', ReleaseInfo(testcases_file='csharp__v1.1.4')),
301 ('v1.2.5', ReleaseInfo(testcases_file='csharp__v1.1.4')),
302 ('v1.3.9', ReleaseInfo(testcases_file='csharp__v1.3.9')),
303 ('v1.4.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
304 ('v1.6.6', ReleaseInfo(testcases_file='csharp__v1.3.9')),
305 ('v1.7.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
306 ('v1.8.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
307 ('v1.9.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
308 ('v1.10.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
309 ('v1.11.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
310 ('v1.12.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
311 ('v1.13.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
312 ('v1.14.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
313 ('v1.15.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
314 ('v1.16.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
315 ('v1.17.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
316 ('v1.18.0', ReleaseInfo(testcases_file='csharp__v1.18.0')),
317 ('v1.19.0', ReleaseInfo(testcases_file='csharp__v1.18.0')),
318 ('v1.20.0', ReleaseInfo()),
319 ('v1.21.4', ReleaseInfo()),