• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
18from collections import OrderedDict
19
20
21def 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
31def get_release_tags(lang):
32    """Returns list of known releases for given language."""
33    return list(LANG_RELEASE_MATRIX[lang].keys())
34
35
36def 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
45def 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
55LANG_RUNTIME_MATRIX = {
56    'cxx': ['cxx'],  # This is actually debian8.
57    'go': ['go1.8', 'go1.11', 'go1.16'],
58    'java': ['java'],
59    'python': ['python', 'pythonasyncio'],
60    'node': ['node'],
61    'ruby': ['ruby'],
62    'php': ['php7'],
63    'csharp': ['csharp', 'csharpcoreclr'],
64}
65
66
67class 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.
77LANG_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(testcases_file='cxx__v1.31.1')),
100            ('v1.21.4', ReleaseInfo(testcases_file='cxx__v1.31.1')),
101            ('v1.22.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
102            ('v1.22.1', ReleaseInfo(testcases_file='cxx__v1.31.1')),
103            ('v1.23.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
104            ('v1.24.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
105            ('v1.25.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
106            ('v1.26.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
107            ('v1.27.3', ReleaseInfo(testcases_file='cxx__v1.31.1')),
108            ('v1.30.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
109            ('v1.31.1', ReleaseInfo(testcases_file='cxx__v1.31.1')),
110            ('v1.32.0', ReleaseInfo()),
111            ('v1.33.2', ReleaseInfo()),
112            ('v1.34.0', ReleaseInfo()),
113            ('v1.35.0', ReleaseInfo()),
114            ('v1.36.3', ReleaseInfo()),
115            ('v1.37.0', ReleaseInfo()),
116        ]),
117    'go':
118        OrderedDict([
119            ('v1.0.5',
120             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
121            ('v1.2.1',
122             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
123            ('v1.3.0',
124             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
125            ('v1.4.2',
126             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
127            ('v1.5.2',
128             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
129            ('v1.6.0',
130             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
131            ('v1.7.4',
132             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
133            ('v1.8.2',
134             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
135            ('v1.9.2',
136             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
137            ('v1.10.1',
138             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
139            ('v1.11.3',
140             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
141            ('v1.12.2',
142             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
143            ('v1.13.0',
144             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
145            ('v1.14.0',
146             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
147            ('v1.15.0',
148             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
149            ('v1.16.0',
150             ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
151            ('v1.17.0',
152             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
153            ('v1.18.0',
154             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
155            ('v1.19.0',
156             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
157            ('v1.20.0',
158             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
159            ('v1.21.3',
160             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
161            ('v1.22.3',
162             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
163            ('v1.23.1',
164             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
165            ('v1.24.0',
166             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
167            ('v1.25.0',
168             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
169            ('v1.26.0',
170             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
171            ('v1.27.1',
172             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
173            ('v1.28.0',
174             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
175            ('v1.29.0',
176             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
177            ('v1.30.0',
178             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
179            ('v1.31.1',
180             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
181            ('v1.32.0',
182             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
183            ('v1.33.1',
184             ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
185            ('v1.34.0', ReleaseInfo(runtimes=['go1.11'])),
186            ('v1.35.0', ReleaseInfo(runtimes=['go1.11'])),
187            ('v1.36.0', ReleaseInfo(runtimes=['go1.11'])),
188            ('v1.37.0', ReleaseInfo(runtimes=['go1.11'])),
189            # NOTE: starting from release v1.38.0, use runtimes=['go1.16']
190        ]),
191    'java':
192        OrderedDict([
193            ('v1.0.3',
194             ReleaseInfo(runtimes=['java_oracle8'],
195                         testcases_file='java__v1.0.3')),
196            ('v1.1.2',
197             ReleaseInfo(runtimes=['java_oracle8'],
198                         testcases_file='java__v1.0.3')),
199            ('v1.2.0',
200             ReleaseInfo(runtimes=['java_oracle8'],
201                         testcases_file='java__v1.0.3')),
202            ('v1.3.1',
203             ReleaseInfo(runtimes=['java_oracle8'],
204                         testcases_file='java__v1.0.3')),
205            ('v1.4.0',
206             ReleaseInfo(runtimes=['java_oracle8'],
207                         testcases_file='java__v1.0.3')),
208            ('v1.5.0',
209             ReleaseInfo(runtimes=['java_oracle8'],
210                         testcases_file='java__v1.0.3')),
211            ('v1.6.1',
212             ReleaseInfo(runtimes=['java_oracle8'],
213                         testcases_file='java__v1.0.3')),
214            ('v1.7.1', ReleaseInfo(testcases_file='java__v1.0.3')),
215            ('v1.8.0',
216             ReleaseInfo(runtimes=['java_oracle8'],
217                         testcases_file='java__v1.0.3')),
218            ('v1.9.1',
219             ReleaseInfo(runtimes=['java_oracle8'],
220                         testcases_file='java__v1.0.3')),
221            ('v1.10.1',
222             ReleaseInfo(runtimes=['java_oracle8'],
223                         testcases_file='java__v1.0.3')),
224            ('v1.11.0',
225             ReleaseInfo(runtimes=['java_oracle8'],
226                         testcases_file='java__v1.0.3')),
227            ('v1.12.1', ReleaseInfo(testcases_file='java__v1.0.3')),
228            ('v1.13.2', ReleaseInfo(testcases_file='java__v1.0.3')),
229            ('v1.14.0',
230             ReleaseInfo(runtimes=['java_oracle8'],
231                         testcases_file='java__v1.0.3')),
232            ('v1.15.1', ReleaseInfo(testcases_file='java__v1.0.3')),
233            ('v1.16.1',
234             ReleaseInfo(runtimes=['java_oracle8'],
235                         testcases_file='java__v1.0.3')),
236            ('v1.17.2', ReleaseInfo(testcases_file='java__v1.0.3')),
237            ('v1.18.0',
238             ReleaseInfo(runtimes=['java_oracle8'],
239                         testcases_file='java__v1.0.3')),
240            ('v1.19.0',
241             ReleaseInfo(runtimes=['java_oracle8'],
242                         testcases_file='java__v1.0.3')),
243            ('v1.20.0', ReleaseInfo(runtimes=['java_oracle8'])),
244            ('v1.21.1', ReleaseInfo()),
245            ('v1.22.2', ReleaseInfo()),
246            ('v1.23.0', ReleaseInfo()),
247            ('v1.24.0', ReleaseInfo()),
248            ('v1.25.0', ReleaseInfo()),
249            ('v1.26.1', ReleaseInfo()),
250            ('v1.27.2', ReleaseInfo()),
251            ('v1.28.1', ReleaseInfo()),
252            ('v1.29.0', ReleaseInfo()),
253            ('v1.30.2', ReleaseInfo()),
254            ('v1.31.2', ReleaseInfo()),
255            ('v1.32.3', ReleaseInfo()),
256            ('v1.33.1', ReleaseInfo()),
257            ('v1.34.1', ReleaseInfo()),
258            ('v1.35.1', ReleaseInfo()),
259            ('v1.36.1', ReleaseInfo()),
260            ('v1.37.0', ReleaseInfo()),
261        ]),
262    'python':
263        OrderedDict([
264            ('v1.0.x',
265             ReleaseInfo(runtimes=['python'], testcases_file='python__v1.0.x')),
266            ('v1.1.4',
267             ReleaseInfo(runtimes=['python'], testcases_file='python__v1.0.x')),
268            ('v1.2.5',
269             ReleaseInfo(runtimes=['python'], testcases_file='python__v1.0.x')),
270            ('v1.3.9',
271             ReleaseInfo(runtimes=['python'], testcases_file='python__v1.0.x')),
272            ('v1.4.2',
273             ReleaseInfo(runtimes=['python'], testcases_file='python__v1.0.x')),
274            ('v1.6.6',
275             ReleaseInfo(runtimes=['python'], testcases_file='python__v1.0.x')),
276            ('v1.7.2',
277             ReleaseInfo(runtimes=['python'], testcases_file='python__v1.0.x')),
278            ('v1.8.1',
279             ReleaseInfo(runtimes=['python'], testcases_file='python__v1.0.x')),
280            ('v1.9.1',
281             ReleaseInfo(runtimes=['python'], testcases_file='python__v1.0.x')),
282            ('v1.10.1',
283             ReleaseInfo(runtimes=['python'], testcases_file='python__v1.0.x')),
284            ('v1.11.1',
285             ReleaseInfo(runtimes=['python'],
286                         testcases_file='python__v1.11.1')),
287            ('v1.12.0',
288             ReleaseInfo(runtimes=['python'],
289                         testcases_file='python__v1.11.1')),
290            ('v1.13.0',
291             ReleaseInfo(runtimes=['python'],
292                         testcases_file='python__v1.11.1')),
293            ('v1.14.1',
294             ReleaseInfo(runtimes=['python'],
295                         testcases_file='python__v1.11.1')),
296            ('v1.15.0',
297             ReleaseInfo(runtimes=['python'],
298                         testcases_file='python__v1.11.1')),
299            ('v1.16.0',
300             ReleaseInfo(runtimes=['python'],
301                         testcases_file='python__v1.11.1')),
302            ('v1.17.1',
303             ReleaseInfo(runtimes=['python'],
304                         testcases_file='python__v1.11.1')),
305            ('v1.18.0', ReleaseInfo(runtimes=['python'])),
306            ('v1.19.0', ReleaseInfo(runtimes=['python'])),
307            ('v1.20.0', ReleaseInfo(runtimes=['python'])),
308            ('v1.21.4', ReleaseInfo(runtimes=['python'])),
309            ('v1.22.0', ReleaseInfo(runtimes=['python'])),
310            ('v1.22.1', ReleaseInfo(runtimes=['python'])),
311            ('v1.23.0', ReleaseInfo(runtimes=['python'])),
312            ('v1.24.0', ReleaseInfo(runtimes=['python'])),
313            ('v1.25.0', ReleaseInfo(runtimes=['python'])),
314            ('v1.26.0', ReleaseInfo(runtimes=['python'])),
315            ('v1.27.3', ReleaseInfo(runtimes=['python'])),
316            ('v1.30.0', ReleaseInfo(runtimes=['python'])),
317            ('v1.31.1', ReleaseInfo(runtimes=['python'])),
318            ('v1.32.0', ReleaseInfo(runtimes=['python'])),
319            ('v1.33.2', ReleaseInfo(runtimes=['python'])),
320            ('v1.34.0', ReleaseInfo(runtimes=['python'])),
321            ('v1.35.0', ReleaseInfo(runtimes=['python'])),
322            ('v1.36.3', ReleaseInfo(runtimes=['python'])),
323            ('v1.37.0', ReleaseInfo(runtimes=['python'])),
324        ]),
325    'node':
326        OrderedDict([
327            ('v1.0.1', ReleaseInfo(testcases_file='node__v1.0.1')),
328            ('v1.1.4', ReleaseInfo(testcases_file='node__v1.1.4')),
329            ('v1.2.5', ReleaseInfo(testcases_file='node__v1.1.4')),
330            ('v1.3.9', ReleaseInfo(testcases_file='node__v1.1.4')),
331            ('v1.4.2', ReleaseInfo(testcases_file='node__v1.1.4')),
332            ('v1.6.6', ReleaseInfo(testcases_file='node__v1.1.4')),
333            # TODO: https://github.com/grpc/grpc-node/issues/235.
334            # ('v1.7.2', ReleaseInfo()),
335            ('v1.8.4', ReleaseInfo()),
336            ('v1.9.1', ReleaseInfo()),
337            ('v1.10.0', ReleaseInfo()),
338            ('v1.11.3', ReleaseInfo()),
339            ('v1.12.4', ReleaseInfo()),
340        ]),
341    'ruby':
342        OrderedDict([
343            ('v1.0.1',
344             ReleaseInfo(patch=[
345                 'tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile',
346                 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
347             ],
348                         testcases_file='ruby__v1.0.1')),
349            ('v1.1.4', ReleaseInfo(testcases_file='ruby__v1.1.4')),
350            ('v1.2.5', ReleaseInfo(testcases_file='ruby__v1.1.4')),
351            ('v1.3.9', ReleaseInfo(testcases_file='ruby__v1.1.4')),
352            ('v1.4.2', ReleaseInfo(testcases_file='ruby__v1.1.4')),
353            ('v1.6.6', ReleaseInfo(testcases_file='ruby__v1.1.4')),
354            ('v1.7.2', ReleaseInfo(testcases_file='ruby__v1.1.4')),
355            ('v1.8.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
356            ('v1.9.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
357            ('v1.10.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
358            ('v1.11.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
359            ('v1.12.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
360            ('v1.13.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
361            ('v1.14.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
362            ('v1.15.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
363            ('v1.16.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
364            ('v1.17.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
365            ('v1.18.0',
366             ReleaseInfo(patch=[
367                 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
368             ])),
369            ('v1.19.0', ReleaseInfo()),
370            ('v1.20.0', ReleaseInfo()),
371            ('v1.21.4', ReleaseInfo()),
372            ('v1.22.0', ReleaseInfo()),
373            ('v1.22.1', ReleaseInfo()),
374            ('v1.23.0', ReleaseInfo()),
375            ('v1.24.0', ReleaseInfo()),
376            ('v1.25.0', ReleaseInfo()),
377            # TODO: https://github.com/grpc/grpc/issues/18262.
378            # If you are not encountering the error in above issue
379            # go ahead and upload the docker image for new releases.
380            ('v1.26.0', ReleaseInfo()),
381            ('v1.27.3', ReleaseInfo()),
382            ('v1.30.0', ReleaseInfo()),
383            ('v1.31.1', ReleaseInfo()),
384            ('v1.32.0', ReleaseInfo()),
385            ('v1.33.2', ReleaseInfo()),
386            ('v1.34.0', ReleaseInfo()),
387            ('v1.35.0', ReleaseInfo()),
388            ('v1.36.3', ReleaseInfo()),
389            ('v1.37.0', ReleaseInfo()),
390        ]),
391    'php':
392        OrderedDict([
393            ('v1.0.1', ReleaseInfo(testcases_file='php__v1.0.1')),
394            ('v1.1.4', ReleaseInfo(testcases_file='php__v1.0.1')),
395            ('v1.2.5', ReleaseInfo(testcases_file='php__v1.0.1')),
396            ('v1.3.9', ReleaseInfo(testcases_file='php__v1.0.1')),
397            ('v1.4.2', ReleaseInfo(testcases_file='php__v1.0.1')),
398            ('v1.6.6', ReleaseInfo(testcases_file='php__v1.0.1')),
399            ('v1.7.2', ReleaseInfo(testcases_file='php__v1.0.1')),
400            ('v1.8.0', ReleaseInfo(testcases_file='php__v1.0.1')),
401            ('v1.9.1', ReleaseInfo(testcases_file='php__v1.0.1')),
402            ('v1.10.1', ReleaseInfo(testcases_file='php__v1.0.1')),
403            ('v1.11.1', ReleaseInfo(testcases_file='php__v1.0.1')),
404            ('v1.12.0', ReleaseInfo(testcases_file='php__v1.0.1')),
405            ('v1.13.0', ReleaseInfo(testcases_file='php__v1.0.1')),
406            ('v1.14.1', ReleaseInfo(testcases_file='php__v1.0.1')),
407            ('v1.15.0', ReleaseInfo(testcases_file='php__v1.0.1')),
408            ('v1.16.0', ReleaseInfo(testcases_file='php__v1.0.1')),
409            ('v1.17.1', ReleaseInfo(testcases_file='php__v1.0.1')),
410            ('v1.18.0', ReleaseInfo()),
411            # v1.19 and v1.20 were deliberately omitted here because of an issue.
412            # See https://github.com/grpc/grpc/issues/18264
413            ('v1.21.4', ReleaseInfo()),
414            ('v1.22.0', ReleaseInfo()),
415            ('v1.22.1', ReleaseInfo()),
416            ('v1.23.0', ReleaseInfo()),
417            ('v1.24.0', ReleaseInfo()),
418            ('v1.25.0', ReleaseInfo()),
419            ('v1.26.0', ReleaseInfo()),
420            ('v1.27.3', ReleaseInfo()),
421            ('v1.30.0', ReleaseInfo()),
422            ('v1.31.1', ReleaseInfo()),
423            ('v1.32.0', ReleaseInfo()),
424            ('v1.33.2', ReleaseInfo()),
425            ('v1.34.0', ReleaseInfo()),
426            ('v1.35.0', ReleaseInfo()),
427            ('v1.36.3', ReleaseInfo()),
428            ('v1.37.0', ReleaseInfo()),
429        ]),
430    'csharp':
431        OrderedDict([
432            ('v1.0.1',
433             ReleaseInfo(patch=[
434                 'tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile',
435                 'tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile',
436             ],
437                         testcases_file='csharp__v1.1.4')),
438            ('v1.1.4', ReleaseInfo(testcases_file='csharp__v1.1.4')),
439            ('v1.2.5', ReleaseInfo(testcases_file='csharp__v1.1.4')),
440            ('v1.3.9', ReleaseInfo(testcases_file='csharp__v1.3.9')),
441            ('v1.4.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
442            ('v1.6.6', ReleaseInfo(testcases_file='csharp__v1.3.9')),
443            ('v1.7.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
444            ('v1.8.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
445            ('v1.9.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
446            ('v1.10.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
447            ('v1.11.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
448            ('v1.12.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
449            ('v1.13.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
450            ('v1.14.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
451            ('v1.15.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
452            ('v1.16.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
453            ('v1.17.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
454            ('v1.18.0', ReleaseInfo(testcases_file='csharp__v1.18.0')),
455            ('v1.19.0', ReleaseInfo(testcases_file='csharp__v1.18.0')),
456            ('v1.20.0', ReleaseInfo()),
457            ('v1.21.4', ReleaseInfo()),
458            ('v1.22.0', ReleaseInfo()),
459            ('v1.22.1', ReleaseInfo()),
460            ('v1.23.0', ReleaseInfo()),
461            ('v1.24.0', ReleaseInfo()),
462            ('v1.25.0', ReleaseInfo()),
463            ('v1.26.0', ReleaseInfo()),
464            ('v1.27.3', ReleaseInfo()),
465            ('v1.30.0', ReleaseInfo()),
466            ('v1.31.1', ReleaseInfo()),
467            ('v1.32.0', ReleaseInfo()),
468            ('v1.33.2', ReleaseInfo()),
469            ('v1.34.0', ReleaseInfo()),
470            ('v1.35.0', ReleaseInfo()),
471            ('v1.36.3', ReleaseInfo()),
472            ('v1.37.0', ReleaseInfo()),
473        ]),
474}
475