• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.x"],
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            ("v1.63.1", ReleaseInfo()),
136            ("v1.64.1", ReleaseInfo()),
137            ("v1.65.0", ReleaseInfo()),
138            ("v1.66.0", ReleaseInfo()),
139            ("v1.67.0", ReleaseInfo()),
140        ]
141    ),
142    "go": OrderedDict(
143        [
144            (
145                "v1.0.5",
146                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
147            ),
148            (
149                "v1.2.1",
150                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
151            ),
152            (
153                "v1.3.0",
154                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
155            ),
156            (
157                "v1.4.2",
158                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
159            ),
160            (
161                "v1.5.2",
162                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
163            ),
164            (
165                "v1.6.0",
166                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
167            ),
168            (
169                "v1.7.4",
170                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
171            ),
172            (
173                "v1.8.2",
174                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
175            ),
176            (
177                "v1.9.2",
178                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
179            ),
180            (
181                "v1.10.1",
182                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
183            ),
184            (
185                "v1.11.3",
186                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
187            ),
188            (
189                "v1.12.2",
190                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
191            ),
192            (
193                "v1.13.0",
194                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
195            ),
196            (
197                "v1.14.0",
198                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
199            ),
200            (
201                "v1.15.0",
202                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
203            ),
204            (
205                "v1.16.0",
206                ReleaseInfo(runtimes=["go1.8"], testcases_file="go__v1.0.5"),
207            ),
208            (
209                "v1.17.0",
210                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.0.5"),
211            ),
212            (
213                "v1.18.0",
214                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.0.5"),
215            ),
216            (
217                "v1.19.0",
218                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.0.5"),
219            ),
220            (
221                "v1.20.0",
222                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
223            ),
224            (
225                "v1.21.3",
226                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
227            ),
228            (
229                "v1.22.3",
230                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
231            ),
232            (
233                "v1.23.1",
234                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
235            ),
236            (
237                "v1.24.0",
238                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
239            ),
240            (
241                "v1.25.0",
242                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
243            ),
244            (
245                "v1.26.0",
246                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
247            ),
248            (
249                "v1.27.1",
250                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
251            ),
252            (
253                "v1.28.0",
254                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
255            ),
256            (
257                "v1.29.0",
258                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
259            ),
260            (
261                "v1.30.0",
262                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
263            ),
264            (
265                "v1.31.1",
266                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
267            ),
268            (
269                "v1.32.0",
270                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
271            ),
272            (
273                "v1.33.1",
274                ReleaseInfo(runtimes=["go1.11"], testcases_file="go__v1.20.0"),
275            ),
276            ("v1.34.0", ReleaseInfo(runtimes=["go1.11"])),
277            ("v1.35.0", ReleaseInfo(runtimes=["go1.11"])),
278            ("v1.36.0", ReleaseInfo(runtimes=["go1.11"])),
279            ("v1.37.0", ReleaseInfo(runtimes=["go1.11"])),
280            # NOTE: starting from release v1.38.0, use runtimes=['go1.16']
281            ("v1.38.1", ReleaseInfo(runtimes=["go1.16"])),
282            ("v1.39.1", ReleaseInfo(runtimes=["go1.16"])),
283            ("v1.40.0", ReleaseInfo(runtimes=["go1.16"])),
284            ("v1.41.0", ReleaseInfo(runtimes=["go1.16"])),
285            ("v1.42.0", ReleaseInfo(runtimes=["go1.16"])),
286            ("v1.43.0", ReleaseInfo(runtimes=["go1.16"])),
287            ("v1.44.0", ReleaseInfo(runtimes=["go1.16"])),
288            ("v1.45.0", ReleaseInfo(runtimes=["go1.16"])),
289            ("v1.46.0", ReleaseInfo(runtimes=["go1.16"])),
290            ("v1.47.0", ReleaseInfo(runtimes=["go1.16"])),
291            ("v1.48.0", ReleaseInfo(runtimes=["go1.16"])),
292            ("v1.49.0", ReleaseInfo(runtimes=["go1.16"])),
293            ("v1.50.1", ReleaseInfo(runtimes=["go1.16"])),
294            ("v1.51.0", ReleaseInfo(runtimes=["go1.16"])),
295            ("v1.52.3", ReleaseInfo(runtimes=["go1.19"])),
296            ("v1.53.0", ReleaseInfo(runtimes=["go1.19"])),
297            ("v1.54.1", ReleaseInfo(runtimes=["go1.19"])),
298            ("v1.55.0", ReleaseInfo(runtimes=["go1.19"])),
299            ("v1.56.3", ReleaseInfo(runtimes=["go1.19"])),
300            ("v1.57.2", ReleaseInfo(runtimes=["go1.19"])),
301            ("v1.58.3", ReleaseInfo(runtimes=["go1.19"])),
302            ("v1.59.0", ReleaseInfo(runtimes=["go1.19"])),
303            ("v1.60.1", ReleaseInfo(runtimes=["go1.19"])),
304            ("v1.61.2", ReleaseInfo(runtimes=["go1.19"])),
305            ("v1.62.2", ReleaseInfo(runtimes=["go1.19"])),
306            ("v1.63.3", ReleaseInfo()),
307            ("v1.64.1", ReleaseInfo()),
308            ("v1.65.1", ReleaseInfo()),
309            ("v1.66.3", ReleaseInfo()),
310            ("v1.67.3", ReleaseInfo()),
311            ("v1.68.2", ReleaseInfo()),
312            ("v1.69.2", ReleaseInfo()),
313        ]
314    ),
315    "java": OrderedDict(
316        [
317            (
318                "v1.0.3",
319                ReleaseInfo(
320                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
321                ),
322            ),
323            (
324                "v1.1.2",
325                ReleaseInfo(
326                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
327                ),
328            ),
329            (
330                "v1.2.0",
331                ReleaseInfo(
332                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
333                ),
334            ),
335            (
336                "v1.3.1",
337                ReleaseInfo(
338                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
339                ),
340            ),
341            (
342                "v1.4.0",
343                ReleaseInfo(
344                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
345                ),
346            ),
347            (
348                "v1.5.0",
349                ReleaseInfo(
350                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
351                ),
352            ),
353            (
354                "v1.6.1",
355                ReleaseInfo(
356                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
357                ),
358            ),
359            ("v1.7.1", ReleaseInfo(testcases_file="java__v1.0.3")),
360            (
361                "v1.8.0",
362                ReleaseInfo(
363                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
364                ),
365            ),
366            (
367                "v1.9.1",
368                ReleaseInfo(
369                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
370                ),
371            ),
372            (
373                "v1.10.1",
374                ReleaseInfo(
375                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
376                ),
377            ),
378            (
379                "v1.11.0",
380                ReleaseInfo(
381                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
382                ),
383            ),
384            ("v1.12.1", ReleaseInfo(testcases_file="java__v1.0.3")),
385            ("v1.13.2", ReleaseInfo(testcases_file="java__v1.0.3")),
386            (
387                "v1.14.0",
388                ReleaseInfo(
389                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
390                ),
391            ),
392            ("v1.15.1", ReleaseInfo(testcases_file="java__v1.0.3")),
393            (
394                "v1.16.1",
395                ReleaseInfo(
396                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
397                ),
398            ),
399            ("v1.17.2", ReleaseInfo(testcases_file="java__v1.0.3")),
400            (
401                "v1.18.0",
402                ReleaseInfo(
403                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
404                ),
405            ),
406            (
407                "v1.19.0",
408                ReleaseInfo(
409                    runtimes=["java_oracle8"], testcases_file="java__v1.0.3"
410                ),
411            ),
412            ("v1.20.0", ReleaseInfo(runtimes=["java_oracle8"])),
413            ("v1.21.1", ReleaseInfo()),
414            ("v1.22.2", ReleaseInfo()),
415            ("v1.23.0", ReleaseInfo()),
416            ("v1.24.0", ReleaseInfo()),
417            ("v1.25.0", ReleaseInfo()),
418            ("v1.26.1", ReleaseInfo()),
419            ("v1.27.2", ReleaseInfo()),
420            ("v1.28.1", ReleaseInfo()),
421            ("v1.29.0", ReleaseInfo()),
422            ("v1.30.2", ReleaseInfo()),
423            ("v1.31.2", ReleaseInfo()),
424            ("v1.32.3", ReleaseInfo()),
425            ("v1.33.1", ReleaseInfo()),
426            ("v1.34.1", ReleaseInfo()),
427            ("v1.35.1", ReleaseInfo()),
428            ("v1.36.3", ReleaseInfo()),
429            ("v1.37.1", ReleaseInfo()),
430            ("v1.38.1", ReleaseInfo()),
431            ("v1.39.0", ReleaseInfo()),
432            ("v1.40.2", ReleaseInfo()),
433            ("v1.41.3", ReleaseInfo()),
434            ("v1.42.3", ReleaseInfo()),
435            ("v1.43.3", ReleaseInfo()),
436            ("v1.44.2", ReleaseInfo()),
437            ("v1.45.4", ReleaseInfo()),
438            ("v1.46.1", ReleaseInfo()),
439            ("v1.47.1", ReleaseInfo()),
440            ("v1.48.2", ReleaseInfo()),
441            ("v1.49.2", ReleaseInfo()),
442            ("v1.50.3", ReleaseInfo()),
443            ("v1.51.3", ReleaseInfo()),
444            ("v1.52.1", ReleaseInfo()),
445            ("v1.53.0", ReleaseInfo()),
446            ("v1.54.0", ReleaseInfo()),
447            ("v1.55.1", ReleaseInfo()),
448            ("v1.56.0", ReleaseInfo()),
449            ("v1.57.2", ReleaseInfo()),
450            ("v1.58.0", ReleaseInfo()),
451            ("v1.59.1", ReleaseInfo()),
452            ("v1.60.1", ReleaseInfo()),
453            ("v1.61.0", ReleaseInfo()),
454            ("v1.63.2", ReleaseInfo()),
455            ("v1.64.2", ReleaseInfo()),
456            ("v1.65.1", ReleaseInfo()),
457            ("v1.66.0", ReleaseInfo()),
458            ("v1.67.1", ReleaseInfo()),
459            ("v1.68.2", ReleaseInfo()),
460            ("v1.69.0", ReleaseInfo()),
461        ]
462    ),
463    "python": OrderedDict(
464        [
465            (
466                "v1.0.x",
467                ReleaseInfo(
468                    runtimes=["python"], testcases_file="python__v1.0.x"
469                ),
470            ),
471            (
472                "v1.1.4",
473                ReleaseInfo(
474                    runtimes=["python"], testcases_file="python__v1.0.x"
475                ),
476            ),
477            (
478                "v1.2.5",
479                ReleaseInfo(
480                    runtimes=["python"], testcases_file="python__v1.0.x"
481                ),
482            ),
483            (
484                "v1.3.9",
485                ReleaseInfo(
486                    runtimes=["python"], testcases_file="python__v1.0.x"
487                ),
488            ),
489            (
490                "v1.4.2",
491                ReleaseInfo(
492                    runtimes=["python"], testcases_file="python__v1.0.x"
493                ),
494            ),
495            (
496                "v1.6.6",
497                ReleaseInfo(
498                    runtimes=["python"], testcases_file="python__v1.0.x"
499                ),
500            ),
501            (
502                "v1.7.2",
503                ReleaseInfo(
504                    runtimes=["python"], testcases_file="python__v1.0.x"
505                ),
506            ),
507            (
508                "v1.8.1",
509                ReleaseInfo(
510                    runtimes=["python"], testcases_file="python__v1.0.x"
511                ),
512            ),
513            (
514                "v1.9.1",
515                ReleaseInfo(
516                    runtimes=["python"], testcases_file="python__v1.0.x"
517                ),
518            ),
519            (
520                "v1.10.1",
521                ReleaseInfo(
522                    runtimes=["python"], testcases_file="python__v1.0.x"
523                ),
524            ),
525            (
526                "v1.11.1",
527                ReleaseInfo(
528                    runtimes=["python"], testcases_file="python__v1.11.1"
529                ),
530            ),
531            (
532                "v1.12.0",
533                ReleaseInfo(
534                    runtimes=["python"], testcases_file="python__v1.11.1"
535                ),
536            ),
537            (
538                "v1.13.0",
539                ReleaseInfo(
540                    runtimes=["python"], testcases_file="python__v1.11.1"
541                ),
542            ),
543            (
544                "v1.14.1",
545                ReleaseInfo(
546                    runtimes=["python"], testcases_file="python__v1.11.1"
547                ),
548            ),
549            (
550                "v1.15.0",
551                ReleaseInfo(
552                    runtimes=["python"], testcases_file="python__v1.11.1"
553                ),
554            ),
555            (
556                "v1.16.0",
557                ReleaseInfo(
558                    runtimes=["python"], testcases_file="python__v1.11.1"
559                ),
560            ),
561            (
562                "v1.17.1",
563                ReleaseInfo(
564                    runtimes=["python"], testcases_file="python__v1.11.1"
565                ),
566            ),
567            (
568                "v1.18.0",
569                ReleaseInfo(
570                    runtimes=["python"], testcases_file="python__v1.18.0"
571                ),
572            ),
573            (
574                "v1.19.0",
575                ReleaseInfo(
576                    runtimes=["python"], testcases_file="python__v1.18.0"
577                ),
578            ),
579            (
580                "v1.20.0",
581                ReleaseInfo(
582                    runtimes=["python"], testcases_file="python__v1.18.0"
583                ),
584            ),
585            (
586                "v1.21.4",
587                ReleaseInfo(
588                    runtimes=["python"], testcases_file="python__v1.18.0"
589                ),
590            ),
591            (
592                "v1.22.0",
593                ReleaseInfo(
594                    runtimes=["python"], testcases_file="python__v1.18.0"
595                ),
596            ),
597            (
598                "v1.22.1",
599                ReleaseInfo(
600                    runtimes=["python"], testcases_file="python__v1.18.0"
601                ),
602            ),
603            (
604                "v1.23.0",
605                ReleaseInfo(
606                    runtimes=["python"], testcases_file="python__v1.18.0"
607                ),
608            ),
609            (
610                "v1.24.0",
611                ReleaseInfo(
612                    runtimes=["python"], testcases_file="python__v1.18.0"
613                ),
614            ),
615            (
616                "v1.25.0",
617                ReleaseInfo(
618                    runtimes=["python"], testcases_file="python__v1.18.0"
619                ),
620            ),
621            (
622                "v1.26.0",
623                ReleaseInfo(
624                    runtimes=["python"], testcases_file="python__v1.18.0"
625                ),
626            ),
627            (
628                "v1.27.3",
629                ReleaseInfo(
630                    runtimes=["python"], testcases_file="python__v1.18.0"
631                ),
632            ),
633            (
634                "v1.30.0",
635                ReleaseInfo(
636                    runtimes=["python"], testcases_file="python__v1.18.0"
637                ),
638            ),
639            (
640                "v1.31.1",
641                ReleaseInfo(
642                    runtimes=["python"], testcases_file="python__v1.18.0"
643                ),
644            ),
645            (
646                "v1.32.0",
647                ReleaseInfo(
648                    runtimes=["python"], testcases_file="python__v1.18.0"
649                ),
650            ),
651            (
652                "v1.33.2",
653                ReleaseInfo(
654                    runtimes=["python"], testcases_file="python__v1.18.0"
655                ),
656            ),
657            (
658                "v1.34.0",
659                ReleaseInfo(
660                    runtimes=["python"], testcases_file="python__v1.18.0"
661                ),
662            ),
663            (
664                "v1.35.0",
665                ReleaseInfo(
666                    runtimes=["python"], testcases_file="python__v1.18.0"
667                ),
668            ),
669            (
670                "v1.36.3",
671                ReleaseInfo(
672                    runtimes=["python"], testcases_file="python__v1.18.0"
673                ),
674            ),
675            (
676                "v1.37.0",
677                ReleaseInfo(
678                    runtimes=["python"], testcases_file="python__v1.18.0"
679                ),
680            ),
681            (
682                "v1.38.0",
683                ReleaseInfo(
684                    runtimes=["python"], testcases_file="python__v1.18.0"
685                ),
686            ),
687            (
688                "v1.39.0",
689                ReleaseInfo(
690                    runtimes=["python"], testcases_file="python__v1.18.0"
691                ),
692            ),
693            (
694                "v1.41.1",
695                ReleaseInfo(
696                    runtimes=["python"], testcases_file="python__v1.41.1"
697                ),
698            ),
699            (
700                "v1.42.0",
701                ReleaseInfo(
702                    runtimes=["python"], testcases_file="python__v1.41.1"
703                ),
704            ),
705            (
706                "v1.43.2",
707                ReleaseInfo(
708                    runtimes=["python"], testcases_file="python__v1.41.1"
709                ),
710            ),
711            (
712                "v1.44.0",
713                ReleaseInfo(
714                    runtimes=["python"], testcases_file="python__master"
715                ),
716            ),
717            (
718                "v1.46.2",
719                ReleaseInfo(
720                    runtimes=["python"], testcases_file="python__master"
721                ),
722            ),
723            (
724                "v1.47.1",
725                ReleaseInfo(
726                    runtimes=["python"], testcases_file="python__master"
727                ),
728            ),
729            (
730                "v1.48.3",
731                ReleaseInfo(
732                    runtimes=["python"], testcases_file="python__master"
733                ),
734            ),
735            (
736                "v1.49.1",
737                ReleaseInfo(
738                    runtimes=["python"], testcases_file="python__master"
739                ),
740            ),
741            (
742                "v1.52.0",
743                ReleaseInfo(
744                    runtimes=["python"], testcases_file="python__master"
745                ),
746            ),
747            (
748                "v1.53.0",
749                ReleaseInfo(
750                    runtimes=["python"], testcases_file="python__master"
751                ),
752            ),
753            (
754                "v1.54.0",
755                ReleaseInfo(
756                    runtimes=["python"], testcases_file="python__master"
757                ),
758            ),
759            (
760                "v1.55.0",
761                ReleaseInfo(
762                    runtimes=["python"], testcases_file="python__master"
763                ),
764            ),
765            (
766                "v1.56.0",
767                ReleaseInfo(
768                    runtimes=["python"], testcases_file="python__master"
769                ),
770            ),
771            (
772                "v1.57.0",
773                ReleaseInfo(
774                    runtimes=["python"], testcases_file="python__master"
775                ),
776            ),
777            (
778                "v1.58.0",
779                ReleaseInfo(
780                    runtimes=["python"], testcases_file="python__master"
781                ),
782            ),
783            (
784                "v1.60.0",
785                ReleaseInfo(
786                    runtimes=["python"], testcases_file="python__master"
787                ),
788            ),
789            (
790                "v1.61.0",
791                ReleaseInfo(
792                    runtimes=["python"], testcases_file="python__master"
793                ),
794            ),
795            (
796                "v1.62.0",
797                ReleaseInfo(
798                    runtimes=["python"], testcases_file="python__master"
799                ),
800            ),
801            (
802                "v1.63.0",
803                ReleaseInfo(
804                    runtimes=["python"], testcases_file="python__master"
805                ),
806            ),
807            (
808                "v1.64.1",
809                ReleaseInfo(
810                    runtimes=["python"], testcases_file="python__master"
811                ),
812            ),
813            (
814                "v1.65.0",
815                ReleaseInfo(
816                    runtimes=["python"], testcases_file="python__master"
817                ),
818            ),
819            (
820                "v1.66.0",
821                ReleaseInfo(
822                    runtimes=["python"], testcases_file="python__master"
823                ),
824            ),
825            (
826                "v1.67.0",
827                ReleaseInfo(
828                    runtimes=["python"], testcases_file="python__master"
829                ),
830            ),
831        ]
832    ),
833    "node": OrderedDict(
834        [
835            ("v1.0.1", ReleaseInfo(testcases_file="node__v1.0.1")),
836            ("v1.1.4", ReleaseInfo(testcases_file="node__v1.1.4")),
837            ("v1.2.5", ReleaseInfo(testcases_file="node__v1.1.4")),
838            ("v1.3.9", ReleaseInfo(testcases_file="node__v1.1.4")),
839            ("v1.4.2", ReleaseInfo(testcases_file="node__v1.1.4")),
840            ("v1.6.6", ReleaseInfo(testcases_file="node__v1.1.4")),
841            # TODO: https://github.com/grpc/grpc-node/issues/235.
842            # ('v1.7.2', ReleaseInfo()),
843            ("v1.8.4", ReleaseInfo()),
844            ("v1.9.1", ReleaseInfo()),
845            ("v1.10.0", ReleaseInfo()),
846            ("v1.11.3", ReleaseInfo()),
847            ("v1.12.4", ReleaseInfo()),
848        ]
849    ),
850    "ruby": OrderedDict(
851        [
852            (
853                "v1.0.1",
854                ReleaseInfo(
855                    patch=[
856                        "tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile",
857                        "tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh",
858                    ],
859                    testcases_file="ruby__v1.0.1",
860                ),
861            ),
862            ("v1.1.4", ReleaseInfo(testcases_file="ruby__v1.1.4")),
863            ("v1.2.5", ReleaseInfo(testcases_file="ruby__v1.1.4")),
864            ("v1.3.9", ReleaseInfo(testcases_file="ruby__v1.1.4")),
865            ("v1.4.2", ReleaseInfo(testcases_file="ruby__v1.1.4")),
866            ("v1.6.6", ReleaseInfo(testcases_file="ruby__v1.1.4")),
867            ("v1.7.2", ReleaseInfo(testcases_file="ruby__v1.1.4")),
868            ("v1.8.0", ReleaseInfo(testcases_file="ruby__v1.1.4")),
869            ("v1.9.1", ReleaseInfo(testcases_file="ruby__v1.1.4")),
870            ("v1.10.1", ReleaseInfo(testcases_file="ruby__v1.1.4")),
871            ("v1.11.1", ReleaseInfo(testcases_file="ruby__v1.1.4")),
872            ("v1.12.0", ReleaseInfo(testcases_file="ruby__v1.1.4")),
873            ("v1.13.0", ReleaseInfo(testcases_file="ruby__v1.1.4")),
874            ("v1.14.1", ReleaseInfo(testcases_file="ruby__v1.1.4")),
875            ("v1.15.0", ReleaseInfo(testcases_file="ruby__v1.1.4")),
876            ("v1.16.0", ReleaseInfo(testcases_file="ruby__v1.1.4")),
877            ("v1.17.1", ReleaseInfo(testcases_file="ruby__v1.1.4")),
878            (
879                "v1.18.0",
880                ReleaseInfo(
881                    patch=[
882                        "tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh",
883                    ]
884                ),
885            ),
886            ("v1.19.0", ReleaseInfo()),
887            ("v1.20.0", ReleaseInfo()),
888            ("v1.21.4", ReleaseInfo()),
889            ("v1.22.0", ReleaseInfo()),
890            ("v1.22.1", ReleaseInfo()),
891            ("v1.23.0", ReleaseInfo()),
892            ("v1.24.0", ReleaseInfo()),
893            ("v1.25.0", ReleaseInfo()),
894            # TODO: https://github.com/grpc/grpc/issues/18262.
895            # If you are not encountering the error in above issue
896            # go ahead and upload the docker image for new releases.
897            ("v1.26.0", ReleaseInfo()),
898            ("v1.27.3", ReleaseInfo()),
899            ("v1.30.0", ReleaseInfo()),
900            ("v1.31.1", ReleaseInfo()),
901            ("v1.32.0", ReleaseInfo()),
902            ("v1.33.2", ReleaseInfo()),
903            ("v1.34.0", ReleaseInfo()),
904            ("v1.35.0", ReleaseInfo()),
905            ("v1.36.3", ReleaseInfo()),
906            ("v1.37.0", ReleaseInfo()),
907            ("v1.38.0", ReleaseInfo()),
908            ("v1.39.0", ReleaseInfo()),
909            ("v1.41.1", ReleaseInfo()),
910            ("v1.42.0", ReleaseInfo()),
911            ("v1.43.0", ReleaseInfo()),
912            ("v1.44.0", ReleaseInfo()),
913            ("v1.46.2", ReleaseInfo()),
914            ("v1.47.1", ReleaseInfo()),
915            ("v1.48.3", ReleaseInfo()),
916            ("v1.49.1", ReleaseInfo()),
917            ("v1.52.0", ReleaseInfo()),
918            ("v1.53.0", ReleaseInfo()),
919            ("v1.54.0", ReleaseInfo()),
920            ("v1.55.0", ReleaseInfo()),
921            ("v1.56.0", ReleaseInfo()),
922            ("v1.57.0", ReleaseInfo()),
923            ("v1.58.0", ReleaseInfo()),
924            ("v1.60.0", ReleaseInfo()),
925            ("v1.61.0", ReleaseInfo()),
926            ("v1.62.0", ReleaseInfo()),
927            ("v1.63.0", ReleaseInfo()),
928            ("v1.64.0", ReleaseInfo()),
929            ("v1.65.0", ReleaseInfo()),
930            ("v1.66.0", ReleaseInfo()),
931            ("v1.67.0", ReleaseInfo()),
932        ]
933    ),
934    "php": OrderedDict(
935        [
936            ("v1.0.1", ReleaseInfo(testcases_file="php__v1.0.1")),
937            ("v1.1.4", ReleaseInfo(testcases_file="php__v1.0.1")),
938            ("v1.2.5", ReleaseInfo(testcases_file="php__v1.0.1")),
939            ("v1.3.9", ReleaseInfo(testcases_file="php__v1.0.1")),
940            ("v1.4.2", ReleaseInfo(testcases_file="php__v1.0.1")),
941            ("v1.6.6", ReleaseInfo(testcases_file="php__v1.0.1")),
942            ("v1.7.2", ReleaseInfo(testcases_file="php__v1.0.1")),
943            ("v1.8.0", ReleaseInfo(testcases_file="php__v1.0.1")),
944            ("v1.9.1", ReleaseInfo(testcases_file="php__v1.0.1")),
945            ("v1.10.1", ReleaseInfo(testcases_file="php__v1.0.1")),
946            ("v1.11.1", ReleaseInfo(testcases_file="php__v1.0.1")),
947            ("v1.12.0", ReleaseInfo(testcases_file="php__v1.0.1")),
948            ("v1.13.0", ReleaseInfo(testcases_file="php__v1.0.1")),
949            ("v1.14.1", ReleaseInfo(testcases_file="php__v1.0.1")),
950            ("v1.15.0", ReleaseInfo(testcases_file="php__v1.0.1")),
951            ("v1.16.0", ReleaseInfo(testcases_file="php__v1.0.1")),
952            ("v1.17.1", ReleaseInfo(testcases_file="php__v1.0.1")),
953            ("v1.18.0", ReleaseInfo()),
954            # v1.19 and v1.20 were deliberately omitted here because of an issue.
955            # See https://github.com/grpc/grpc/issues/18264
956            ("v1.21.4", ReleaseInfo()),
957            ("v1.22.0", ReleaseInfo()),
958            ("v1.22.1", ReleaseInfo()),
959            ("v1.23.0", ReleaseInfo()),
960            ("v1.24.0", ReleaseInfo()),
961            ("v1.25.0", ReleaseInfo()),
962            ("v1.26.0", ReleaseInfo()),
963            ("v1.27.3", ReleaseInfo()),
964            ("v1.30.0", ReleaseInfo()),
965            ("v1.31.1", ReleaseInfo()),
966            ("v1.32.0", ReleaseInfo()),
967            ("v1.33.2", ReleaseInfo()),
968            ("v1.34.0", ReleaseInfo()),
969            ("v1.35.0", ReleaseInfo()),
970            ("v1.36.3", ReleaseInfo()),
971            ("v1.37.0", ReleaseInfo()),
972            ("v1.38.0", ReleaseInfo()),
973            ("v1.39.0", ReleaseInfo()),
974            ("v1.41.1", ReleaseInfo()),
975            ("v1.42.0", ReleaseInfo()),
976            ("v1.43.0", ReleaseInfo()),
977            ("v1.44.0", ReleaseInfo()),
978            ("v1.46.2", ReleaseInfo()),
979            ("v1.47.1", ReleaseInfo()),
980            ("v1.48.3", ReleaseInfo()),
981            ("v1.49.1", ReleaseInfo()),
982            ("v1.52.0", ReleaseInfo()),
983            ("v1.53.0", ReleaseInfo()),
984            ("v1.54.0", ReleaseInfo()),
985            ("v1.55.0", ReleaseInfo()),
986            ("v1.56.0", ReleaseInfo()),
987            ("v1.57.0", ReleaseInfo()),
988            ("v1.58.0", ReleaseInfo()),
989            ("v1.60.0", ReleaseInfo()),
990            ("v1.61.0", ReleaseInfo()),
991            ("v1.62.0", ReleaseInfo()),
992            ("v1.63.0", ReleaseInfo()),
993            ("v1.64.0", ReleaseInfo()),
994            ("v1.65.0", ReleaseInfo()),
995            ("v1.66.0", ReleaseInfo()),
996            ("v1.67.0", ReleaseInfo()),
997        ]
998    ),
999    "csharp": OrderedDict(
1000        [
1001            (
1002                "v1.0.1",
1003                ReleaseInfo(
1004                    patch=[
1005                        "tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile",
1006                        "tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile",
1007                    ],
1008                    testcases_file="csharp__v1.1.4",
1009                ),
1010            ),
1011            ("v1.1.4", ReleaseInfo(testcases_file="csharp__v1.1.4")),
1012            ("v1.2.5", ReleaseInfo(testcases_file="csharp__v1.1.4")),
1013            ("v1.3.9", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1014            ("v1.4.2", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1015            ("v1.6.6", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1016            ("v1.7.2", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1017            ("v1.8.0", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1018            ("v1.9.1", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1019            ("v1.10.1", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1020            ("v1.11.1", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1021            ("v1.12.0", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1022            ("v1.13.0", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1023            ("v1.14.1", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1024            ("v1.15.0", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1025            ("v1.16.0", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1026            ("v1.17.1", ReleaseInfo(testcases_file="csharp__v1.3.9")),
1027            ("v1.18.0", ReleaseInfo(testcases_file="csharp__v1.18.0")),
1028            ("v1.19.0", ReleaseInfo(testcases_file="csharp__v1.18.0")),
1029            ("v1.20.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1030            ("v1.20.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1031            ("v1.21.4", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1032            ("v1.22.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1033            ("v1.22.1", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1034            ("v1.23.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1035            ("v1.24.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1036            ("v1.25.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1037            ("v1.26.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1038            ("v1.27.3", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1039            ("v1.30.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1040            ("v1.31.1", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1041            ("v1.32.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1042            ("v1.33.2", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1043            ("v1.34.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1044            ("v1.35.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1045            ("v1.36.3", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1046            ("v1.37.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1047            ("v1.38.1", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1048            ("v1.39.1", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1049            ("v1.41.1", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1050            ("v1.42.0", ReleaseInfo(testcases_file="csharp__v1.20.0")),
1051            ("v1.43.0", ReleaseInfo()),
1052            ("v1.44.0", ReleaseInfo()),
1053            ("v1.46.2", ReleaseInfo()),
1054        ]
1055    ),
1056}
1057