xref: /aosp_15_r20/external/grpc-grpc/tools/interop_matrix/client_matrix.py (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1# Copyright 2017 gRPC authors.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#     http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15# Defines languages, runtimes and releases for backward compatibility testing
16
17from collections import OrderedDict
18
19
20def get_github_repo(lang):
21    return {
22        "dart": "https://github.com/grpc/grpc-dart.git",
23        "go": "https://github.com/grpc/grpc-go.git",
24        "java": "https://github.com/grpc/grpc-java.git",
25        "node": "https://github.com/grpc/grpc-node.git",
26        # all other languages use the grpc.git repo.
27    }.get(lang, "https://github.com/grpc/grpc.git")
28
29
30def get_release_tags(lang):
31    """Returns list of known releases for given language."""
32    return list(LANG_RELEASE_MATRIX[lang].keys())
33
34
35def get_runtimes_for_lang_release(lang, release):
36    """Get list of valid runtimes for given release of lang."""
37    runtimes = list(LANG_RUNTIME_MATRIX[lang])
38    release_info = LANG_RELEASE_MATRIX[lang].get(release)
39    if release_info and release_info.runtimes:
40        runtimes = list(release_info.runtimes)
41    return runtimes
42
43
44def should_build_docker_interop_image_from_release_tag(lang):
45    # All dockerfile definitions live in grpc/grpc repository.
46    # For language that have a separate repo, we need to use
47    # dockerfile definitions from head of grpc/grpc.
48    if lang in ["go", "java", "node"]:
49        return False
50    return True
51
52
53# Dictionary of default runtimes per language
54LANG_RUNTIME_MATRIX = {
55    "cxx": ["cxx"],  # This is actually debian8.
56    "go": ["go1.8", "go1.11", "go1.16", "go1.19"],
57    "java": ["java"],
58    "python": ["python", "pythonasyncio"],
59    "node": ["node"],
60    "ruby": ["ruby"],
61    "php": ["php7"],
62    "csharp": ["csharp", "csharpcoreclr"],
63}
64
65
66class ReleaseInfo:
67    """Info about a single release of a language"""
68
69    def __init__(self, patch=[], runtimes=[], testcases_file=None):
70        self.patch = patch
71        self.runtimes = runtimes
72        self.testcases_file = testcases_file
73
74
75# Dictionary of known releases for given language.
76LANG_RELEASE_MATRIX = {
77    "cxx": OrderedDict(
78        [
79            ("v1.0.1", ReleaseInfo(testcases_file="cxx__v1.0.1")),
80            ("v1.1.4", ReleaseInfo(testcases_file="cxx__v1.0.1")),
81            ("v1.2.5", ReleaseInfo(testcases_file="cxx__v1.0.1")),
82            ("v1.3.9", ReleaseInfo(testcases_file="cxx__v1.0.1")),
83            ("v1.4.2", ReleaseInfo(testcases_file="cxx__v1.0.1")),
84            ("v1.6.6", ReleaseInfo(testcases_file="cxx__v1.0.1")),
85            ("v1.7.2", ReleaseInfo(testcases_file="cxx__v1.0.1")),
86            ("v1.8.0", ReleaseInfo(testcases_file="cxx__v1.0.1")),
87            ("v1.9.1", ReleaseInfo(testcases_file="cxx__v1.0.1")),
88            ("v1.10.1", ReleaseInfo(testcases_file="cxx__v1.0.1")),
89            ("v1.11.1", ReleaseInfo(testcases_file="cxx__v1.0.1")),
90            ("v1.12.0", ReleaseInfo(testcases_file="cxx__v1.0.1")),
91            ("v1.13.0", ReleaseInfo(testcases_file="cxx__v1.0.1")),
92            ("v1.14.1", ReleaseInfo(testcases_file="cxx__v1.0.1")),
93            ("v1.15.0", ReleaseInfo(testcases_file="cxx__v1.0.1")),
94            ("v1.16.0", ReleaseInfo(testcases_file="cxx__v1.0.1")),
95            ("v1.17.1", ReleaseInfo(testcases_file="cxx__v1.0.1")),
96            ("v1.18.0", ReleaseInfo(testcases_file="cxx__v1.0.1")),
97            ("v1.19.0", ReleaseInfo(testcases_file="cxx__v1.0.1")),
98            ("v1.20.0", ReleaseInfo(testcases_file="cxx__v1.31.1")),
99            ("v1.21.4", ReleaseInfo(testcases_file="cxx__v1.31.1")),
100            ("v1.22.0", ReleaseInfo(testcases_file="cxx__v1.31.1")),
101            ("v1.22.1", ReleaseInfo(testcases_file="cxx__v1.31.1")),
102            ("v1.23.0", ReleaseInfo(testcases_file="cxx__v1.31.1")),
103            ("v1.24.0", ReleaseInfo(testcases_file="cxx__v1.31.1")),
104            ("v1.25.0", ReleaseInfo(testcases_file="cxx__v1.31.1")),
105            ("v1.26.0", ReleaseInfo(testcases_file="cxx__v1.31.1")),
106            ("v1.27.3", ReleaseInfo(testcases_file="cxx__v1.31.1")),
107            ("v1.30.0", ReleaseInfo(testcases_file="cxx__v1.31.1")),
108            ("v1.31.1", ReleaseInfo(testcases_file="cxx__v1.31.1")),
109            ("v1.32.0", ReleaseInfo()),
110            ("v1.33.2", ReleaseInfo()),
111            ("v1.34.0", ReleaseInfo()),
112            ("v1.35.0", ReleaseInfo()),
113            ("v1.36.3", ReleaseInfo()),
114            ("v1.37.0", ReleaseInfo()),
115            ("v1.38.0", ReleaseInfo()),
116            ("v1.39.0", ReleaseInfo()),
117            ("v1.41.1", ReleaseInfo()),
118            ("v1.42.0", ReleaseInfo()),
119            ("v1.43.0", ReleaseInfo()),
120            ("v1.44.0", ReleaseInfo()),
121            ("v1.46.2", ReleaseInfo()),
122            ("v1.47.1", ReleaseInfo()),
123            ("v1.48.3", ReleaseInfo()),
124            ("v1.49.1", ReleaseInfo()),
125            ("v1.52.0", ReleaseInfo()),
126            ("v1.53.0", ReleaseInfo()),
127            ("v1.54.0", ReleaseInfo()),
128            ("v1.55.0", ReleaseInfo()),
129            ("v1.56.0", ReleaseInfo()),
130            ("v1.57.0", ReleaseInfo()),
131            ("v1.58.0", ReleaseInfo()),
132            ("v1.60.0", ReleaseInfo()),
133            ("v1.61.0", ReleaseInfo()),
134            ("v1.62.0", ReleaseInfo()),
135        ]
136    ),
137    "go": OrderedDict(
138        [
139            (
140                "v1.0.5",
141                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
142            ),
143            (
144                "v1.2.1",
145                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
146            ),
147            (
148                "v1.3.0",
149                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
150            ),
151            (
152                "v1.4.2",
153                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
154            ),
155            (
156                "v1.5.2",
157                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
158            ),
159            (
160                "v1.6.0",
161                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
162            ),
163            (
164                "v1.7.4",
165                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
166            ),
167            (
168                "v1.8.2",
169                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
170            ),
171            (
172                "v1.9.2",
173                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
174            ),
175            (
176                "v1.10.1",
177                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
178            ),
179            (
180                "v1.11.3",
181                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
182            ),
183            (
184                "v1.12.2",
185                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
186            ),
187            (
188                "v1.13.0",
189                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
190            ),
191            (
192                "v1.14.0",
193                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
194            ),
195            (
196                "v1.15.0",
197                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
198            ),
199            (
200                "v1.16.0",
201                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
202            ),
203            (
204                "v1.17.0",
205                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.0.5"),
206            ),
207            (
208                "v1.18.0",
209                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.0.5"),
210            ),
211            (
212                "v1.19.0",
213                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.0.5"),
214            ),
215            (
216                "v1.20.0",
217                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
218            ),
219            (
220                "v1.21.3",
221                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
222            ),
223            (
224                "v1.22.3",
225                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
226            ),
227            (
228                "v1.23.1",
229                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
230            ),
231            (
232                "v1.24.0",
233                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
234            ),
235            (
236                "v1.25.0",
237                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
238            ),
239            (
240                "v1.26.0",
241                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
242            ),
243            (
244                "v1.27.1",
245                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
246            ),
247            (
248                "v1.28.0",
249                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
250            ),
251            (
252                "v1.29.0",
253                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
254            ),
255            (
256                "v1.30.0",
257                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
258            ),
259            (
260                "v1.31.1",
261                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
262            ),
263            (
264                "v1.32.0",
265                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
266            ),
267            (
268                "v1.33.1",
269                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
270            ),
271            ("v1.34.0", ReleaseInfo(runtimes=["go1.11"])),
272            ("v1.35.0", ReleaseInfo(runtimes=["go1.11"])),
273            ("v1.36.0", ReleaseInfo(runtimes=["go1.11"])),
274            ("v1.37.0", ReleaseInfo(runtimes=["go1.11"])),
275            # NOTE: starting from release v1.38.0, use runtimes=['go1.16']
276            ("v1.38.1", ReleaseInfo(runtimes=["go1.16"])),
277            ("v1.39.1", ReleaseInfo(runtimes=["go1.16"])),
278            ("v1.40.0", ReleaseInfo(runtimes=["go1.16"])),
279            ("v1.41.0", ReleaseInfo(runtimes=["go1.16"])),
280            ("v1.42.0", ReleaseInfo(runtimes=["go1.16"])),
281            ("v1.43.0", ReleaseInfo(runtimes=["go1.16"])),
282            ("v1.44.0", ReleaseInfo(runtimes=["go1.16"])),
283            ("v1.45.0", ReleaseInfo(runtimes=["go1.16"])),
284            ("v1.46.0", ReleaseInfo(runtimes=["go1.16"])),
285            ("v1.47.0", ReleaseInfo(runtimes=["go1.16"])),
286            ("v1.48.0", ReleaseInfo(runtimes=["go1.16"])),
287            ("v1.49.0", ReleaseInfo(runtimes=["go1.16"])),
288            ("v1.50.1", ReleaseInfo(runtimes=["go1.16"])),
289            ("v1.51.0", ReleaseInfo(runtimes=["go1.16"])),
290            ("v1.52.3", ReleaseInfo(runtimes=["go1.19"])),
291            ("v1.53.0", ReleaseInfo(runtimes=["go1.19"])),
292            ("v1.54.1", ReleaseInfo(runtimes=["go1.19"])),
293            ("v1.55.0", ReleaseInfo(runtimes=["go1.19"])),
294            ("v1.56.3", ReleaseInfo(runtimes=["go1.19"])),
295            ("v1.57.2", ReleaseInfo(runtimes=["go1.19"])),
296            ("v1.58.3", ReleaseInfo(runtimes=["go1.19"])),
297            ("v1.59.0", ReleaseInfo(runtimes=["go1.19"])),
298            ("v1.60.1", ReleaseInfo(runtimes=["go1.19"])),
299            ("v1.61.2", ReleaseInfo(runtimes=["go1.19"])),
300            ("v1.62.2", ReleaseInfo(runtimes=["go1.19"])),
301            ("v1.63.2", ReleaseInfo(runtimes=["go1.19"])),
302        ]
303    ),
304    "java": OrderedDict(
305        [
306            (
307                "v1.0.3",
308                ReleaseInfo(
309                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
310                ),
311            ),
312            (
313                "v1.1.2",
314                ReleaseInfo(
315                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
316                ),
317            ),
318            (
319                "v1.2.0",
320                ReleaseInfo(
321                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
322                ),
323            ),
324            (
325                "v1.3.1",
326                ReleaseInfo(
327                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
328                ),
329            ),
330            (
331                "v1.4.0",
332                ReleaseInfo(
333                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
334                ),
335            ),
336            (
337                "v1.5.0",
338                ReleaseInfo(
339                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
340                ),
341            ),
342            (
343                "v1.6.1",
344                ReleaseInfo(
345                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
346                ),
347            ),
348            ("v1.7.1", ReleaseInfo(testcases_file="java__v1.0.3")),
349            (
350                "v1.8.0",
351                ReleaseInfo(
352                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
353                ),
354            ),
355            (
356                "v1.9.1",
357                ReleaseInfo(
358                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
359                ),
360            ),
361            (
362                "v1.10.1",
363                ReleaseInfo(
364                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
365                ),
366            ),
367            (
368                "v1.11.0",
369                ReleaseInfo(
370                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
371                ),
372            ),
373            ("v1.12.1", ReleaseInfo(testcases_file="java__v1.0.3")),
374            ("v1.13.2", ReleaseInfo(testcases_file="java__v1.0.3")),
375            (
376                "v1.14.0",
377                ReleaseInfo(
378                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
379                ),
380            ),
381            ("v1.15.1", ReleaseInfo(testcases_file="java__v1.0.3")),
382            (
383                "v1.16.1",
384                ReleaseInfo(
385                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
386                ),
387            ),
388            ("v1.17.2", ReleaseInfo(testcases_file="java__v1.0.3")),
389            (
390                "v1.18.0",
391                ReleaseInfo(
392                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
393                ),
394            ),
395            (
396                "v1.19.0",
397                ReleaseInfo(
398                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
399                ),
400            ),
401            ("v1.20.0", ReleaseInfo(runtimes=["java_oracle8"])),
402            ("v1.21.1", ReleaseInfo()),
403            ("v1.22.2", ReleaseInfo()),
404            ("v1.23.0", ReleaseInfo()),
405            ("v1.24.0", ReleaseInfo()),
406            ("v1.25.0", ReleaseInfo()),
407            ("v1.26.1", ReleaseInfo()),
408            ("v1.27.2", ReleaseInfo()),
409            ("v1.28.1", ReleaseInfo()),
410            ("v1.29.0", ReleaseInfo()),
411            ("v1.30.2", ReleaseInfo()),
412            ("v1.31.2", ReleaseInfo()),
413            ("v1.32.3", ReleaseInfo()),
414            ("v1.33.1", ReleaseInfo()),
415            ("v1.34.1", ReleaseInfo()),
416            ("v1.35.1", ReleaseInfo()),
417            ("v1.36.3", ReleaseInfo()),
418            ("v1.37.1", ReleaseInfo()),
419            ("v1.38.1", ReleaseInfo()),
420            ("v1.39.0", ReleaseInfo()),
421            ("v1.40.2", ReleaseInfo()),
422            ("v1.41.3", ReleaseInfo()),
423            ("v1.42.3", ReleaseInfo()),
424            ("v1.43.3", ReleaseInfo()),
425            ("v1.44.2", ReleaseInfo()),
426            ("v1.45.4", ReleaseInfo()),
427            ("v1.46.1", ReleaseInfo()),
428            ("v1.47.1", ReleaseInfo()),
429            ("v1.48.2", ReleaseInfo()),
430            ("v1.49.2", ReleaseInfo()),
431            ("v1.50.3", ReleaseInfo()),
432            ("v1.51.3", ReleaseInfo()),
433            ("v1.52.1", ReleaseInfo()),
434            ("v1.53.0", ReleaseInfo()),
435            ("v1.54.0", ReleaseInfo()),
436            ("v1.55.1", ReleaseInfo()),
437            ("v1.56.0", ReleaseInfo()),
438            ("v1.57.2", ReleaseInfo()),
439            ("v1.58.0", ReleaseInfo()),
440            ("v1.59.1", ReleaseInfo()),
441            ("v1.60.1", ReleaseInfo()),
442            ("v1.61.0", ReleaseInfo()),
443            ("v1.63.0", ReleaseInfo()),
444        ]
445    ),
446    "python": OrderedDict(
447        [
448            (
449                "v1.0.x",
450                ReleaseInfo(
451                    runtimes=["python"], testcases_file="python__v1.0.x"
452                ),
453            ),
454            (
455                "v1.1.4",
456                ReleaseInfo(
457                    runtimes=["python"], testcases_file="python__v1.0.x"
458                ),
459            ),
460            (
461                "v1.2.5",
462                ReleaseInfo(
463                    runtimes=["python"], testcases_file="python__v1.0.x"
464                ),
465            ),
466            (
467                "v1.3.9",
468                ReleaseInfo(
469                    runtimes=["python"], testcases_file="python__v1.0.x"
470                ),
471            ),
472            (
473                "v1.4.2",
474                ReleaseInfo(
475                    runtimes=["python"], testcases_file="python__v1.0.x"
476                ),
477            ),
478            (
479                "v1.6.6",
480                ReleaseInfo(
481                    runtimes=["python"], testcases_file="python__v1.0.x"
482                ),
483            ),
484            (
485                "v1.7.2",
486                ReleaseInfo(
487                    runtimes=["python"], testcases_file="python__v1.0.x"
488                ),
489            ),
490            (
491                "v1.8.1",
492                ReleaseInfo(
493                    runtimes=["python"], testcases_file="python__v1.0.x"
494                ),
495            ),
496            (
497                "v1.9.1",
498                ReleaseInfo(
499                    runtimes=["python"], testcases_file="python__v1.0.x"
500                ),
501            ),
502            (
503                "v1.10.1",
504                ReleaseInfo(
505                    runtimes=["python"], testcases_file="python__v1.0.x"
506                ),
507            ),
508            (
509                "v1.11.1",
510                ReleaseInfo(
511                    runtimes=["python"], testcases_file="python__v1.11.1"
512                ),
513            ),
514            (
515                "v1.12.0",
516                ReleaseInfo(
517                    runtimes=["python"], testcases_file="python__v1.11.1"
518                ),
519            ),
520            (
521                "v1.13.0",
522                ReleaseInfo(
523                    runtimes=["python"], testcases_file="python__v1.11.1"
524                ),
525            ),
526            (
527                "v1.14.1",
528                ReleaseInfo(
529                    runtimes=["python"], testcases_file="python__v1.11.1"
530                ),
531            ),
532            (
533                "v1.15.0",
534                ReleaseInfo(
535                    runtimes=["python"], testcases_file="python__v1.11.1"
536                ),
537            ),
538            (
539                "v1.16.0",
540                ReleaseInfo(
541                    runtimes=["python"], testcases_file="python__v1.11.1"
542                ),
543            ),
544            (
545                "v1.17.1",
546                ReleaseInfo(
547                    runtimes=["python"], testcases_file="python__v1.11.1"
548                ),
549            ),
550            (
551                "v1.18.0",
552                ReleaseInfo(
553                    runtimes=["python"], testcases_file="python__v1.18.0"
554                ),
555            ),
556            (
557                "v1.19.0",
558                ReleaseInfo(
559                    runtimes=["python"], testcases_file="python__v1.18.0"
560                ),
561            ),
562            (
563                "v1.20.0",
564                ReleaseInfo(
565                    runtimes=["python"], testcases_file="python__v1.18.0"
566                ),
567            ),
568            (
569                "v1.21.4",
570                ReleaseInfo(
571                    runtimes=["python"], testcases_file="python__v1.18.0"
572                ),
573            ),
574            (
575                "v1.22.0",
576                ReleaseInfo(
577                    runtimes=["python"], testcases_file="python__v1.18.0"
578                ),
579            ),
580            (
581                "v1.22.1",
582                ReleaseInfo(
583                    runtimes=["python"], testcases_file="python__v1.18.0"
584                ),
585            ),
586            (
587                "v1.23.0",
588                ReleaseInfo(
589                    runtimes=["python"], testcases_file="python__v1.18.0"
590                ),
591            ),
592            (
593                "v1.24.0",
594                ReleaseInfo(
595                    runtimes=["python"], testcases_file="python__v1.18.0"
596                ),
597            ),
598            (
599                "v1.25.0",
600                ReleaseInfo(
601                    runtimes=["python"], testcases_file="python__v1.18.0"
602                ),
603            ),
604            (
605                "v1.26.0",
606                ReleaseInfo(
607                    runtimes=["python"], testcases_file="python__v1.18.0"
608                ),
609            ),
610            (
611                "v1.27.3",
612                ReleaseInfo(
613                    runtimes=["python"], testcases_file="python__v1.18.0"
614                ),
615            ),
616            (
617                "v1.30.0",
618                ReleaseInfo(
619                    runtimes=["python"], testcases_file="python__v1.18.0"
620                ),
621            ),
622            (
623                "v1.31.1",
624                ReleaseInfo(
625                    runtimes=["python"], testcases_file="python__v1.18.0"
626                ),
627            ),
628            (
629                "v1.32.0",
630                ReleaseInfo(
631                    runtimes=["python"], testcases_file="python__v1.18.0"
632                ),
633            ),
634            (
635                "v1.33.2",
636                ReleaseInfo(
637                    runtimes=["python"], testcases_file="python__v1.18.0"
638                ),
639            ),
640            (
641                "v1.34.0",
642                ReleaseInfo(
643                    runtimes=["python"], testcases_file="python__v1.18.0"
644                ),
645            ),
646            (
647                "v1.35.0",
648                ReleaseInfo(
649                    runtimes=["python"], testcases_file="python__v1.18.0"
650                ),
651            ),
652            (
653                "v1.36.3",
654                ReleaseInfo(
655                    runtimes=["python"], testcases_file="python__v1.18.0"
656                ),
657            ),
658            (
659                "v1.37.0",
660                ReleaseInfo(
661                    runtimes=["python"], testcases_file="python__v1.18.0"
662                ),
663            ),
664            (
665                "v1.38.0",
666                ReleaseInfo(
667                    runtimes=["python"], testcases_file="python__v1.18.0"
668                ),
669            ),
670            (
671                "v1.39.0",
672                ReleaseInfo(
673                    runtimes=["python"], testcases_file="python__v1.18.0"
674                ),
675            ),
676            (
677                "v1.41.1",
678                ReleaseInfo(
679                    runtimes=["python"], testcases_file="python__v1.41.1"
680                ),
681            ),
682            (
683                "v1.42.0",
684                ReleaseInfo(
685                    runtimes=["python"], testcases_file="python__v1.41.1"
686                ),
687            ),
688            (
689                "v1.43.2",
690                ReleaseInfo(
691                    runtimes=["python"], testcases_file="python__v1.41.1"
692                ),
693            ),
694            (
695                "v1.44.0",
696                ReleaseInfo(
697                    runtimes=["python"], testcases_file="python__master"
698                ),
699            ),
700            (
701                "v1.46.2",
702                ReleaseInfo(
703                    runtimes=["python"], testcases_file="python__master"
704                ),
705            ),
706            (
707                "v1.47.1",
708                ReleaseInfo(
709                    runtimes=["python"], testcases_file="python__master"
710                ),
711            ),
712            (
713                "v1.48.3",
714                ReleaseInfo(
715                    runtimes=["python"], testcases_file="python__master"
716                ),
717            ),
718            (
719                "v1.49.1",
720                ReleaseInfo(
721                    runtimes=["python"], testcases_file="python__master"
722                ),
723            ),
724            (
725                "v1.52.0",
726                ReleaseInfo(
727                    runtimes=["python"], testcases_file="python__master"
728                ),
729            ),
730            (
731                "v1.53.0",
732                ReleaseInfo(
733                    runtimes=["python"], testcases_file="python__master"
734                ),
735            ),
736            (
737                "v1.54.0",
738                ReleaseInfo(
739                    runtimes=["python"], testcases_file="python__master"
740                ),
741            ),
742            (
743                "v1.55.0",
744                ReleaseInfo(
745                    runtimes=["python"], testcases_file="python__master"
746                ),
747            ),
748            (
749                "v1.56.0",
750                ReleaseInfo(
751                    runtimes=["python"], testcases_file="python__master"
752                ),
753            ),
754            (
755                "v1.57.0",
756                ReleaseInfo(
757                    runtimes=["python"], testcases_file="python__master"
758                ),
759            ),
760            (
761                "v1.58.0",
762                ReleaseInfo(
763                    runtimes=["python"], testcases_file="python__master"
764                ),
765            ),
766            (
767                "v1.60.0",
768                ReleaseInfo(
769                    runtimes=["python"], testcases_file="python__master"
770                ),
771            ),
772            (
773                "v1.61.0",
774                ReleaseInfo(
775                    runtimes=["python"], testcases_file="python__master"
776                ),
777            ),
778            (
779                "v1.62.0",
780                ReleaseInfo(
781                    runtimes=["python"], testcases_file="python__master"
782                ),
783            ),
784        ]
785    ),
786    "node": OrderedDict(
787        [
788            ("v1.0.1", ReleaseInfo(testcases_file="node__v1.0.1")),
789            ("v1.1.4", ReleaseInfo(testcases_file="node__v1.1.4")),
790            ("v1.2.5", ReleaseInfo(testcases_file="node__v1.1.4")),
791            ("v1.3.9", ReleaseInfo(testcases_file="node__v1.1.4")),
792            ("v1.4.2", ReleaseInfo(testcases_file="node__v1.1.4")),
793            ("v1.6.6", ReleaseInfo(testcases_file="node__v1.1.4")),
794            # TODO: https://github.com/grpc/grpc-node/issues/235.
795            # ('v1.7.2', ReleaseInfo()),
796            ("v1.8.4", ReleaseInfo()),
797            ("v1.9.1", ReleaseInfo()),
798            ("v1.10.0", ReleaseInfo()),
799            ("v1.11.3", ReleaseInfo()),
800            ("v1.12.4", ReleaseInfo()),
801        ]
802    ),
803    "ruby": OrderedDict(
804        [
805            (
806                "v1.0.1",
807                ReleaseInfo(
808                    patch=[
809                        "tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile",
810                        "tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh",
811                    ],
812                    testcases_file="ruby__v1.0.1",
813                ),
814            ),
815            ("v1.1.4", ReleaseInfo(testcases_file="ruby__v1.1.4")),
816            ("v1.2.5", ReleaseInfo(testcases_file="ruby__v1.1.4")),
817            ("v1.3.9", ReleaseInfo(testcases_file="ruby__v1.1.4")),
818            ("v1.4.2", ReleaseInfo(testcases_file="ruby__v1.1.4")),
819            ("v1.6.6", ReleaseInfo(testcases_file="ruby__v1.1.4")),
820            ("v1.7.2", ReleaseInfo(testcases_file="ruby__v1.1.4")),
821            ("v1.8.0", ReleaseInfo(testcases_file="ruby__v1.1.4")),
822            ("v1.9.1", ReleaseInfo(testcases_file="ruby__v1.1.4")),
823            ("v1.10.1", ReleaseInfo(testcases_file="ruby__v1.1.4")),
824            ("v1.11.1", ReleaseInfo(testcases_file="ruby__v1.1.4")),
825            ("v1.12.0", ReleaseInfo(testcases_file="ruby__v1.1.4")),
826            ("v1.13.0", ReleaseInfo(testcases_file="ruby__v1.1.4")),
827            ("v1.14.1", ReleaseInfo(testcases_file="ruby__v1.1.4")),
828            ("v1.15.0", ReleaseInfo(testcases_file="ruby__v1.1.4")),
829            ("v1.16.0", ReleaseInfo(testcases_file="ruby__v1.1.4")),
830            ("v1.17.1", ReleaseInfo(testcases_file="ruby__v1.1.4")),
831            (
832                "v1.18.0",
833                ReleaseInfo(
834                    patch=[
835                        "tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh",
836                    ]
837                ),
838            ),
839            ("v1.19.0", ReleaseInfo()),
840            ("v1.20.0", ReleaseInfo()),
841            ("v1.21.4", ReleaseInfo()),
842            ("v1.22.0", ReleaseInfo()),
843            ("v1.22.1", ReleaseInfo()),
844            ("v1.23.0", ReleaseInfo()),
845            ("v1.24.0", ReleaseInfo()),
846            ("v1.25.0", ReleaseInfo()),
847            # TODO: https://github.com/grpc/grpc/issues/18262.
848            # If you are not encountering the error in above issue
849            # go ahead and upload the docker image for new releases.
850            ("v1.26.0", ReleaseInfo()),
851            ("v1.27.3", ReleaseInfo()),
852            ("v1.30.0", ReleaseInfo()),
853            ("v1.31.1", ReleaseInfo()),
854            ("v1.32.0", ReleaseInfo()),
855            ("v1.33.2", ReleaseInfo()),
856            ("v1.34.0", ReleaseInfo()),
857            ("v1.35.0", ReleaseInfo()),
858            ("v1.36.3", ReleaseInfo()),
859            ("v1.37.0", ReleaseInfo()),
860            ("v1.38.0", ReleaseInfo()),
861            ("v1.39.0", ReleaseInfo()),
862            ("v1.41.1", ReleaseInfo()),
863            ("v1.42.0", ReleaseInfo()),
864            ("v1.43.0", ReleaseInfo()),
865            ("v1.44.0", ReleaseInfo()),
866            ("v1.46.2", ReleaseInfo()),
867            ("v1.47.1", ReleaseInfo()),
868            ("v1.48.3", ReleaseInfo()),
869            ("v1.49.1", ReleaseInfo()),
870            ("v1.52.0", ReleaseInfo()),
871            ("v1.53.0", ReleaseInfo()),
872            ("v1.54.0", ReleaseInfo()),
873            ("v1.55.0", ReleaseInfo()),
874            ("v1.56.0", ReleaseInfo()),
875            ("v1.57.0", ReleaseInfo()),
876            ("v1.58.0", ReleaseInfo()),
877            ("v1.60.0", ReleaseInfo()),
878            ("v1.61.0", ReleaseInfo()),
879            ("v1.62.0", ReleaseInfo()),
880        ]
881    ),
882    "php": OrderedDict(
883        [
884            ("v1.0.1", ReleaseInfo(testcases_file="php__v1.0.1")),
885            ("v1.1.4", ReleaseInfo(testcases_file="php__v1.0.1")),
886            ("v1.2.5", ReleaseInfo(testcases_file="php__v1.0.1")),
887            ("v1.3.9", ReleaseInfo(testcases_file="php__v1.0.1")),
888            ("v1.4.2", ReleaseInfo(testcases_file="php__v1.0.1")),
889            ("v1.6.6", ReleaseInfo(testcases_file="php__v1.0.1")),
890            ("v1.7.2", ReleaseInfo(testcases_file="php__v1.0.1")),
891            ("v1.8.0", ReleaseInfo(testcases_file="php__v1.0.1")),
892            ("v1.9.1", ReleaseInfo(testcases_file="php__v1.0.1")),
893            ("v1.10.1", ReleaseInfo(testcases_file="php__v1.0.1")),
894            ("v1.11.1", ReleaseInfo(testcases_file="php__v1.0.1")),
895            ("v1.12.0", ReleaseInfo(testcases_file="php__v1.0.1")),
896            ("v1.13.0", ReleaseInfo(testcases_file="php__v1.0.1")),
897            ("v1.14.1", ReleaseInfo(testcases_file="php__v1.0.1")),
898            ("v1.15.0", ReleaseInfo(testcases_file="php__v1.0.1")),
899            ("v1.16.0", ReleaseInfo(testcases_file="php__v1.0.1")),
900            ("v1.17.1", ReleaseInfo(testcases_file="php__v1.0.1")),
901            ("v1.18.0", ReleaseInfo()),
902            # v1.19 and v1.20 were deliberately omitted here because of an issue.
903            # See https://github.com/grpc/grpc/issues/18264
904            ("v1.21.4", ReleaseInfo()),
905            ("v1.22.0", ReleaseInfo()),
906            ("v1.22.1", ReleaseInfo()),
907            ("v1.23.0", ReleaseInfo()),
908            ("v1.24.0", ReleaseInfo()),
909            ("v1.25.0", ReleaseInfo()),
910            ("v1.26.0", ReleaseInfo()),
911            ("v1.27.3", ReleaseInfo()),
912            ("v1.30.0", ReleaseInfo()),
913            ("v1.31.1", ReleaseInfo()),
914            ("v1.32.0", ReleaseInfo()),
915            ("v1.33.2", ReleaseInfo()),
916            ("v1.34.0", ReleaseInfo()),
917            ("v1.35.0", ReleaseInfo()),
918            ("v1.36.3", ReleaseInfo()),
919            ("v1.37.0", ReleaseInfo()),
920            ("v1.38.0", ReleaseInfo()),
921            ("v1.39.0", ReleaseInfo()),
922            ("v1.41.1", ReleaseInfo()),
923            ("v1.42.0", ReleaseInfo()),
924            ("v1.43.0", ReleaseInfo()),
925            ("v1.44.0", ReleaseInfo()),
926            ("v1.46.2", ReleaseInfo()),
927            ("v1.47.1", ReleaseInfo()),
928            ("v1.48.3", ReleaseInfo()),
929            ("v1.49.1", ReleaseInfo()),
930            ("v1.52.0", ReleaseInfo()),
931            ("v1.53.0", ReleaseInfo()),
932            ("v1.54.0", ReleaseInfo()),
933            ("v1.55.0", ReleaseInfo()),
934            ("v1.56.0", ReleaseInfo()),
935            ("v1.57.0", ReleaseInfo()),
936            ("v1.58.0", ReleaseInfo()),
937            ("v1.60.0", ReleaseInfo()),
938            ("v1.61.0", ReleaseInfo()),
939            ("v1.62.0", ReleaseInfo()),
940        ]
941    ),
942    "csharp": OrderedDict(
943        [
944            (
945                "v1.0.1",
946                ReleaseInfo(
947                    patch=[
948                        "tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile",
949                        "tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile",
950                    ],
951                    testcases_file="csharp__v1.1.4",
952                ),
953            ),
954            ("v1.1.4", ReleaseInfo(testcases_file="csharp__v1.1.4")),
955            ("v1.2.5", ReleaseInfo(testcases_file="csharp__v1.1.4")),
956            ("v1.3.9", ReleaseInfo(testcases_file="csharp__v1.3.9")),
957            ("v1.4.2", ReleaseInfo(testcases_file="csharp__v1.3.9")),
958            ("v1.6.6", ReleaseInfo(testcases_file="csharp__v1.3.9")),
959            ("v1.7.2", ReleaseInfo(testcases_file="csharp__v1.3.9")),
960            ("v1.8.0", ReleaseInfo(testcases_file="csharp__v1.3.9")),
961            ("v1.9.1", ReleaseInfo(testcases_file="csharp__v1.3.9")),
962            ("v1.10.1", ReleaseInfo(testcases_file="csharp__v1.3.9")),
963            ("v1.11.1", ReleaseInfo(testcases_file="csharp__v1.3.9")),
964            ("v1.12.0", ReleaseInfo(testcases_file="csharp__v1.3.9")),
965            ("v1.13.0", ReleaseInfo(testcases_file="csharp__v1.3.9")),
966            ("v1.14.1", ReleaseInfo(testcases_file="csharp__v1.3.9")),
967            ("v1.15.0", ReleaseInfo(testcases_file="csharp__v1.3.9")),
968            ("v1.16.0", ReleaseInfo(testcases_file="csharp__v1.3.9")),
969            ("v1.17.1", ReleaseInfo(testcases_file="csharp__v1.3.9")),
970            ("v1.18.0", ReleaseInfo(testcases_file="csharp__v1.18.0")),
971            ("v1.19.0", ReleaseInfo(testcases_file="csharp__v1.18.0")),
972            ("v1.20.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
973            ("v1.20.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
974            ("v1.21.4", ReleaseInfo(testcases_file="csharp__v1.20.0")),
975            ("v1.22.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
976            ("v1.22.1", ReleaseInfo(testcases_file="csharp__v1.20.0")),
977            ("v1.23.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
978            ("v1.24.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
979            ("v1.25.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
980            ("v1.26.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
981            ("v1.27.3", ReleaseInfo(testcases_file="csharp__v1.20.0")),
982            ("v1.30.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
983            ("v1.31.1", ReleaseInfo(testcases_file="csharp__v1.20.0")),
984            ("v1.32.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
985            ("v1.33.2", ReleaseInfo(testcases_file="csharp__v1.20.0")),
986            ("v1.34.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
987            ("v1.35.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
988            ("v1.36.3", ReleaseInfo(testcases_file="csharp__v1.20.0")),
989            ("v1.37.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
990            ("v1.38.1", ReleaseInfo(testcases_file="csharp__v1.20.0")),
991            ("v1.39.1", ReleaseInfo(testcases_file="csharp__v1.20.0")),
992            ("v1.41.1", ReleaseInfo(testcases_file="csharp__v1.20.0")),
993            ("v1.42.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
994            ("v1.43.0", ReleaseInfo()),
995            ("v1.44.0", ReleaseInfo()),
996            ("v1.46.2", ReleaseInfo()),
997        ]
998    ),
999}
1000