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': 78 OrderedDict([ 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 ]), 130 'go': 131 OrderedDict([ 132 ('v1.0.5', 133 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 134 ('v1.2.1', 135 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 136 ('v1.3.0', 137 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 138 ('v1.4.2', 139 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 140 ('v1.5.2', 141 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 142 ('v1.6.0', 143 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 144 ('v1.7.4', 145 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 146 ('v1.8.2', 147 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 148 ('v1.9.2', 149 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 150 ('v1.10.1', 151 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 152 ('v1.11.3', 153 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 154 ('v1.12.2', 155 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 156 ('v1.13.0', 157 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 158 ('v1.14.0', 159 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 160 ('v1.15.0', 161 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 162 ('v1.16.0', 163 ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')), 164 ('v1.17.0', 165 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')), 166 ('v1.18.0', 167 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')), 168 ('v1.19.0', 169 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')), 170 ('v1.20.0', 171 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 172 ('v1.21.3', 173 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 174 ('v1.22.3', 175 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 176 ('v1.23.1', 177 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 178 ('v1.24.0', 179 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 180 ('v1.25.0', 181 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 182 ('v1.26.0', 183 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 184 ('v1.27.1', 185 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 186 ('v1.28.0', 187 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 188 ('v1.29.0', 189 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 190 ('v1.30.0', 191 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 192 ('v1.31.1', 193 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 194 ('v1.32.0', 195 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 196 ('v1.33.1', 197 ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')), 198 ('v1.34.0', ReleaseInfo(runtimes=['go1.11'])), 199 ('v1.35.0', ReleaseInfo(runtimes=['go1.11'])), 200 ('v1.36.0', ReleaseInfo(runtimes=['go1.11'])), 201 ('v1.37.0', ReleaseInfo(runtimes=['go1.11'])), 202 # NOTE: starting from release v1.38.0, use runtimes=['go1.16'] 203 ('v1.38.1', ReleaseInfo(runtimes=['go1.16'])), 204 ('v1.39.1', ReleaseInfo(runtimes=['go1.16'])), 205 ('v1.40.0', ReleaseInfo(runtimes=['go1.16'])), 206 ('v1.41.0', ReleaseInfo(runtimes=['go1.16'])), 207 ('v1.42.0', ReleaseInfo(runtimes=['go1.16'])), 208 ('v1.43.0', ReleaseInfo(runtimes=['go1.16'])), 209 ('v1.44.0', ReleaseInfo(runtimes=['go1.16'])), 210 ('v1.45.0', ReleaseInfo(runtimes=['go1.16'])), 211 ('v1.46.0', ReleaseInfo(runtimes=['go1.16'])), 212 ('v1.47.0', ReleaseInfo(runtimes=['go1.16'])), 213 ('v1.48.0', ReleaseInfo(runtimes=['go1.16'])), 214 ('v1.49.0', ReleaseInfo(runtimes=['go1.16'])), 215 ('v1.50.1', ReleaseInfo(runtimes=['go1.16'])), 216 ('v1.51.0', ReleaseInfo(runtimes=['go1.16'])), 217 ('v1.52.3', ReleaseInfo(runtimes=['go1.19'])), 218 ('v1.53.0', ReleaseInfo(runtimes=['go1.19'])), 219 ('v1.54.1', ReleaseInfo(runtimes=['go1.19'])), 220 ('v1.55.0', ReleaseInfo(runtimes=['go1.19'])), 221 ]), 222 'java': 223 OrderedDict([ 224 ('v1.0.3', 225 ReleaseInfo(runtimes=['java_oracle8'], 226 testcases_file='java__v1.0.3')), 227 ('v1.1.2', 228 ReleaseInfo(runtimes=['java_oracle8'], 229 testcases_file='java__v1.0.3')), 230 ('v1.2.0', 231 ReleaseInfo(runtimes=['java_oracle8'], 232 testcases_file='java__v1.0.3')), 233 ('v1.3.1', 234 ReleaseInfo(runtimes=['java_oracle8'], 235 testcases_file='java__v1.0.3')), 236 ('v1.4.0', 237 ReleaseInfo(runtimes=['java_oracle8'], 238 testcases_file='java__v1.0.3')), 239 ('v1.5.0', 240 ReleaseInfo(runtimes=['java_oracle8'], 241 testcases_file='java__v1.0.3')), 242 ('v1.6.1', 243 ReleaseInfo(runtimes=['java_oracle8'], 244 testcases_file='java__v1.0.3')), 245 ('v1.7.1', ReleaseInfo(testcases_file='java__v1.0.3')), 246 ('v1.8.0', 247 ReleaseInfo(runtimes=['java_oracle8'], 248 testcases_file='java__v1.0.3')), 249 ('v1.9.1', 250 ReleaseInfo(runtimes=['java_oracle8'], 251 testcases_file='java__v1.0.3')), 252 ('v1.10.1', 253 ReleaseInfo(runtimes=['java_oracle8'], 254 testcases_file='java__v1.0.3')), 255 ('v1.11.0', 256 ReleaseInfo(runtimes=['java_oracle8'], 257 testcases_file='java__v1.0.3')), 258 ('v1.12.1', ReleaseInfo(testcases_file='java__v1.0.3')), 259 ('v1.13.2', ReleaseInfo(testcases_file='java__v1.0.3')), 260 ('v1.14.0', 261 ReleaseInfo(runtimes=['java_oracle8'], 262 testcases_file='java__v1.0.3')), 263 ('v1.15.1', ReleaseInfo(testcases_file='java__v1.0.3')), 264 ('v1.16.1', 265 ReleaseInfo(runtimes=['java_oracle8'], 266 testcases_file='java__v1.0.3')), 267 ('v1.17.2', ReleaseInfo(testcases_file='java__v1.0.3')), 268 ('v1.18.0', 269 ReleaseInfo(runtimes=['java_oracle8'], 270 testcases_file='java__v1.0.3')), 271 ('v1.19.0', 272 ReleaseInfo(runtimes=['java_oracle8'], 273 testcases_file='java__v1.0.3')), 274 ('v1.20.0', ReleaseInfo(runtimes=['java_oracle8'])), 275 ('v1.21.1', ReleaseInfo()), 276 ('v1.22.2', ReleaseInfo()), 277 ('v1.23.0', ReleaseInfo()), 278 ('v1.24.0', ReleaseInfo()), 279 ('v1.25.0', ReleaseInfo()), 280 ('v1.26.1', ReleaseInfo()), 281 ('v1.27.2', ReleaseInfo()), 282 ('v1.28.1', ReleaseInfo()), 283 ('v1.29.0', ReleaseInfo()), 284 ('v1.30.2', ReleaseInfo()), 285 ('v1.31.2', ReleaseInfo()), 286 ('v1.32.3', ReleaseInfo()), 287 ('v1.33.1', ReleaseInfo()), 288 ('v1.34.1', ReleaseInfo()), 289 ('v1.35.1', ReleaseInfo()), 290 ('v1.36.3', ReleaseInfo()), 291 ('v1.37.1', ReleaseInfo()), 292 ('v1.38.1', ReleaseInfo()), 293 ('v1.39.0', ReleaseInfo()), 294 ('v1.40.2', ReleaseInfo()), 295 ('v1.41.3', ReleaseInfo()), 296 ('v1.42.3', ReleaseInfo()), 297 ('v1.43.3', ReleaseInfo()), 298 ('v1.44.2', ReleaseInfo()), 299 ('v1.45.3', ReleaseInfo()), 300 ('v1.46.1', ReleaseInfo()), 301 ('v1.47.1', ReleaseInfo()), 302 ('v1.48.2', ReleaseInfo()), 303 ('v1.49.2', ReleaseInfo()), 304 ('v1.50.2', ReleaseInfo()), 305 ('v1.51.1', ReleaseInfo()), 306 ('v1.52.0', ReleaseInfo()), 307 ('v1.54.0', ReleaseInfo()), 308 ]), 309 'python': 310 OrderedDict( 311 [ 312 ('v1.0.x', 313 ReleaseInfo(runtimes=['python'], 314 testcases_file='python__v1.0.x')), 315 ('v1.1.4', 316 ReleaseInfo(runtimes=['python'], 317 testcases_file='python__v1.0.x')), 318 ('v1.2.5', 319 ReleaseInfo(runtimes=['python'], 320 testcases_file='python__v1.0.x')), 321 ('v1.3.9', 322 ReleaseInfo(runtimes=['python'], 323 testcases_file='python__v1.0.x')), 324 ('v1.4.2', 325 ReleaseInfo(runtimes=['python'], 326 testcases_file='python__v1.0.x')), 327 ('v1.6.6', 328 ReleaseInfo(runtimes=['python'], 329 testcases_file='python__v1.0.x')), 330 ('v1.7.2', 331 ReleaseInfo(runtimes=['python'], 332 testcases_file='python__v1.0.x')), 333 ('v1.8.1', 334 ReleaseInfo(runtimes=['python'], 335 testcases_file='python__v1.0.x')), 336 ('v1.9.1', 337 ReleaseInfo(runtimes=['python'], 338 testcases_file='python__v1.0.x')), 339 ('v1.10.1', 340 ReleaseInfo(runtimes=['python'], 341 testcases_file='python__v1.0.x')), 342 ('v1.11.1', 343 ReleaseInfo(runtimes=['python'], 344 testcases_file='python__v1.11.1')), 345 ('v1.12.0', 346 ReleaseInfo(runtimes=['python'], 347 testcases_file='python__v1.11.1')), 348 ('v1.13.0', 349 ReleaseInfo(runtimes=['python'], 350 testcases_file='python__v1.11.1')), 351 ('v1.14.1', 352 ReleaseInfo(runtimes=['python'], 353 testcases_file='python__v1.11.1')), 354 ('v1.15.0', 355 ReleaseInfo(runtimes=['python'], 356 testcases_file='python__v1.11.1')), 357 ('v1.16.0', 358 ReleaseInfo(runtimes=['python'], 359 testcases_file='python__v1.11.1')), 360 ('v1.17.1', 361 ReleaseInfo(runtimes=['python'], 362 testcases_file='python__v1.11.1')), 363 ('v1.18.0', 364 ReleaseInfo(runtimes=['python'], 365 testcases_file='python__v1.18.0')), 366 ('v1.19.0', 367 ReleaseInfo(runtimes=['python'], 368 testcases_file='python__v1.18.0')), 369 ('v1.20.0', 370 ReleaseInfo(runtimes=['python'], 371 testcases_file='python__v1.18.0')), 372 ('v1.21.4', 373 ReleaseInfo(runtimes=['python'], 374 testcases_file='python__v1.18.0')), 375 ('v1.22.0', 376 ReleaseInfo(runtimes=['python'], 377 testcases_file='python__v1.18.0')), 378 ('v1.22.1', 379 ReleaseInfo(runtimes=['python'], 380 testcases_file='python__v1.18.0')), 381 ('v1.23.0', 382 ReleaseInfo(runtimes=['python'], 383 testcases_file='python__v1.18.0')), 384 ('v1.24.0', 385 ReleaseInfo(runtimes=['python'], 386 testcases_file='python__v1.18.0')), 387 ('v1.25.0', 388 ReleaseInfo(runtimes=['python'], 389 testcases_file='python__v1.18.0')), 390 ('v1.26.0', 391 ReleaseInfo(runtimes=['python'], 392 testcases_file='python__v1.18.0')), 393 ('v1.27.3', 394 ReleaseInfo(runtimes=['python'], 395 testcases_file='python__v1.18.0')), 396 ('v1.30.0', 397 ReleaseInfo(runtimes=['python'], 398 testcases_file='python__v1.18.0')), 399 ('v1.31.1', 400 ReleaseInfo(runtimes=['python'], 401 testcases_file='python__v1.18.0')), 402 ('v1.32.0', 403 ReleaseInfo(runtimes=['python'], 404 testcases_file='python__v1.18.0')), 405 ('v1.33.2', 406 ReleaseInfo(runtimes=['python'], 407 testcases_file='python__v1.18.0')), 408 ('v1.34.0', 409 ReleaseInfo(runtimes=['python'], 410 testcases_file='python__v1.18.0')), 411 ('v1.35.0', 412 ReleaseInfo(runtimes=['python'], 413 testcases_file='python__v1.18.0')), 414 ('v1.36.3', 415 ReleaseInfo(runtimes=['python'], 416 testcases_file='python__v1.18.0')), 417 ('v1.37.0', 418 ReleaseInfo(runtimes=['python'], 419 testcases_file='python__v1.18.0')), 420 ('v1.38.0', 421 ReleaseInfo(runtimes=['python'], 422 testcases_file='python__v1.18.0')), 423 ('v1.39.0', 424 ReleaseInfo(runtimes=['python'], 425 testcases_file='python__v1.18.0')), 426 ('v1.41.1', 427 ReleaseInfo(runtimes=['python'], 428 testcases_file='python__v1.41.1')), 429 ('v1.42.0', 430 ReleaseInfo(runtimes=['python'], 431 testcases_file='python__v1.41.1')), 432 ('v1.43.2', 433 ReleaseInfo(runtimes=['python'], 434 testcases_file='python__v1.41.1')), 435 ('v1.44.0', 436 ReleaseInfo(runtimes=['python'], 437 testcases_file='python__master')), 438 ('v1.46.2', 439 ReleaseInfo(runtimes=['python'], 440 testcases_file='python__master')), 441 ('v1.47.1', 442 ReleaseInfo(runtimes=['python'], 443 testcases_file='python__master')), 444 ('v1.48.3', 445 ReleaseInfo(runtimes=['python'], 446 testcases_file='python__master')), 447 ('v1.49.1', 448 ReleaseInfo(runtimes=['python'], 449 testcases_file='python__master')), 450 ('v1.52.0', 451 ReleaseInfo(runtimes=['python'], 452 testcases_file='python__master')), 453 ('v1.53.0', 454 ReleaseInfo(runtimes=['python'], 455 testcases_file='python__master')), 456 ('v1.54.0', 457 ReleaseInfo(runtimes=['python'], 458 testcases_file='python__master')), 459 ('v1.55.0', 460 ReleaseInfo(runtimes=['python'], 461 testcases_file='python__master')), 462 ]), 463 'node': 464 OrderedDict([ 465 ('v1.0.1', ReleaseInfo(testcases_file='node__v1.0.1')), 466 ('v1.1.4', ReleaseInfo(testcases_file='node__v1.1.4')), 467 ('v1.2.5', ReleaseInfo(testcases_file='node__v1.1.4')), 468 ('v1.3.9', ReleaseInfo(testcases_file='node__v1.1.4')), 469 ('v1.4.2', ReleaseInfo(testcases_file='node__v1.1.4')), 470 ('v1.6.6', ReleaseInfo(testcases_file='node__v1.1.4')), 471 # TODO: https://github.com/grpc/grpc-node/issues/235. 472 # ('v1.7.2', ReleaseInfo()), 473 ('v1.8.4', ReleaseInfo()), 474 ('v1.9.1', ReleaseInfo()), 475 ('v1.10.0', ReleaseInfo()), 476 ('v1.11.3', ReleaseInfo()), 477 ('v1.12.4', ReleaseInfo()), 478 ]), 479 'ruby': 480 OrderedDict([ 481 ('v1.0.1', 482 ReleaseInfo(patch=[ 483 'tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile', 484 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh', 485 ], 486 testcases_file='ruby__v1.0.1')), 487 ('v1.1.4', ReleaseInfo(testcases_file='ruby__v1.1.4')), 488 ('v1.2.5', ReleaseInfo(testcases_file='ruby__v1.1.4')), 489 ('v1.3.9', ReleaseInfo(testcases_file='ruby__v1.1.4')), 490 ('v1.4.2', ReleaseInfo(testcases_file='ruby__v1.1.4')), 491 ('v1.6.6', ReleaseInfo(testcases_file='ruby__v1.1.4')), 492 ('v1.7.2', ReleaseInfo(testcases_file='ruby__v1.1.4')), 493 ('v1.8.0', ReleaseInfo(testcases_file='ruby__v1.1.4')), 494 ('v1.9.1', ReleaseInfo(testcases_file='ruby__v1.1.4')), 495 ('v1.10.1', ReleaseInfo(testcases_file='ruby__v1.1.4')), 496 ('v1.11.1', ReleaseInfo(testcases_file='ruby__v1.1.4')), 497 ('v1.12.0', ReleaseInfo(testcases_file='ruby__v1.1.4')), 498 ('v1.13.0', ReleaseInfo(testcases_file='ruby__v1.1.4')), 499 ('v1.14.1', ReleaseInfo(testcases_file='ruby__v1.1.4')), 500 ('v1.15.0', ReleaseInfo(testcases_file='ruby__v1.1.4')), 501 ('v1.16.0', ReleaseInfo(testcases_file='ruby__v1.1.4')), 502 ('v1.17.1', ReleaseInfo(testcases_file='ruby__v1.1.4')), 503 ('v1.18.0', 504 ReleaseInfo(patch=[ 505 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh', 506 ])), 507 ('v1.19.0', ReleaseInfo()), 508 ('v1.20.0', ReleaseInfo()), 509 ('v1.21.4', ReleaseInfo()), 510 ('v1.22.0', ReleaseInfo()), 511 ('v1.22.1', ReleaseInfo()), 512 ('v1.23.0', ReleaseInfo()), 513 ('v1.24.0', ReleaseInfo()), 514 ('v1.25.0', ReleaseInfo()), 515 # TODO: https://github.com/grpc/grpc/issues/18262. 516 # If you are not encountering the error in above issue 517 # go ahead and upload the docker image for new releases. 518 ('v1.26.0', ReleaseInfo()), 519 ('v1.27.3', ReleaseInfo()), 520 ('v1.30.0', ReleaseInfo()), 521 ('v1.31.1', ReleaseInfo()), 522 ('v1.32.0', ReleaseInfo()), 523 ('v1.33.2', ReleaseInfo()), 524 ('v1.34.0', ReleaseInfo()), 525 ('v1.35.0', ReleaseInfo()), 526 ('v1.36.3', ReleaseInfo()), 527 ('v1.37.0', ReleaseInfo()), 528 ('v1.38.0', ReleaseInfo()), 529 ('v1.39.0', ReleaseInfo()), 530 ('v1.41.1', ReleaseInfo()), 531 ('v1.42.0', ReleaseInfo()), 532 ('v1.43.0', ReleaseInfo()), 533 ('v1.44.0', ReleaseInfo()), 534 ('v1.46.2', ReleaseInfo()), 535 ('v1.47.1', ReleaseInfo()), 536 ('v1.48.3', ReleaseInfo()), 537 ('v1.49.1', ReleaseInfo()), 538 ('v1.52.0', ReleaseInfo()), 539 ('v1.53.0', ReleaseInfo()), 540 ('v1.54.0', ReleaseInfo()), 541 ('v1.55.0', ReleaseInfo()), 542 ]), 543 'php': 544 OrderedDict([ 545 ('v1.0.1', ReleaseInfo(testcases_file='php__v1.0.1')), 546 ('v1.1.4', ReleaseInfo(testcases_file='php__v1.0.1')), 547 ('v1.2.5', ReleaseInfo(testcases_file='php__v1.0.1')), 548 ('v1.3.9', ReleaseInfo(testcases_file='php__v1.0.1')), 549 ('v1.4.2', ReleaseInfo(testcases_file='php__v1.0.1')), 550 ('v1.6.6', ReleaseInfo(testcases_file='php__v1.0.1')), 551 ('v1.7.2', ReleaseInfo(testcases_file='php__v1.0.1')), 552 ('v1.8.0', ReleaseInfo(testcases_file='php__v1.0.1')), 553 ('v1.9.1', ReleaseInfo(testcases_file='php__v1.0.1')), 554 ('v1.10.1', ReleaseInfo(testcases_file='php__v1.0.1')), 555 ('v1.11.1', ReleaseInfo(testcases_file='php__v1.0.1')), 556 ('v1.12.0', ReleaseInfo(testcases_file='php__v1.0.1')), 557 ('v1.13.0', ReleaseInfo(testcases_file='php__v1.0.1')), 558 ('v1.14.1', ReleaseInfo(testcases_file='php__v1.0.1')), 559 ('v1.15.0', ReleaseInfo(testcases_file='php__v1.0.1')), 560 ('v1.16.0', ReleaseInfo(testcases_file='php__v1.0.1')), 561 ('v1.17.1', ReleaseInfo(testcases_file='php__v1.0.1')), 562 ('v1.18.0', ReleaseInfo()), 563 # v1.19 and v1.20 were deliberately omitted here because of an issue. 564 # See https://github.com/grpc/grpc/issues/18264 565 ('v1.21.4', ReleaseInfo()), 566 ('v1.22.0', ReleaseInfo()), 567 ('v1.22.1', ReleaseInfo()), 568 ('v1.23.0', ReleaseInfo()), 569 ('v1.24.0', ReleaseInfo()), 570 ('v1.25.0', ReleaseInfo()), 571 ('v1.26.0', ReleaseInfo()), 572 ('v1.27.3', ReleaseInfo()), 573 ('v1.30.0', ReleaseInfo()), 574 ('v1.31.1', ReleaseInfo()), 575 ('v1.32.0', ReleaseInfo()), 576 ('v1.33.2', ReleaseInfo()), 577 ('v1.34.0', ReleaseInfo()), 578 ('v1.35.0', ReleaseInfo()), 579 ('v1.36.3', ReleaseInfo()), 580 ('v1.37.0', ReleaseInfo()), 581 ('v1.38.0', ReleaseInfo()), 582 ('v1.39.0', ReleaseInfo()), 583 ('v1.41.1', ReleaseInfo()), 584 ('v1.42.0', ReleaseInfo()), 585 ('v1.43.0', ReleaseInfo()), 586 ('v1.44.0', ReleaseInfo()), 587 ('v1.46.2', ReleaseInfo()), 588 ('v1.47.1', ReleaseInfo()), 589 ('v1.48.3', ReleaseInfo()), 590 ('v1.49.1', ReleaseInfo()), 591 ('v1.52.0', ReleaseInfo()), 592 ('v1.53.0', ReleaseInfo()), 593 ('v1.54.0', ReleaseInfo()), 594 ('v1.55.0', ReleaseInfo()), 595 ]), 596 'csharp': 597 OrderedDict([ 598 ('v1.0.1', 599 ReleaseInfo(patch=[ 600 'tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile', 601 'tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile', 602 ], 603 testcases_file='csharp__v1.1.4')), 604 ('v1.1.4', ReleaseInfo(testcases_file='csharp__v1.1.4')), 605 ('v1.2.5', ReleaseInfo(testcases_file='csharp__v1.1.4')), 606 ('v1.3.9', ReleaseInfo(testcases_file='csharp__v1.3.9')), 607 ('v1.4.2', ReleaseInfo(testcases_file='csharp__v1.3.9')), 608 ('v1.6.6', ReleaseInfo(testcases_file='csharp__v1.3.9')), 609 ('v1.7.2', ReleaseInfo(testcases_file='csharp__v1.3.9')), 610 ('v1.8.0', ReleaseInfo(testcases_file='csharp__v1.3.9')), 611 ('v1.9.1', ReleaseInfo(testcases_file='csharp__v1.3.9')), 612 ('v1.10.1', ReleaseInfo(testcases_file='csharp__v1.3.9')), 613 ('v1.11.1', ReleaseInfo(testcases_file='csharp__v1.3.9')), 614 ('v1.12.0', ReleaseInfo(testcases_file='csharp__v1.3.9')), 615 ('v1.13.0', ReleaseInfo(testcases_file='csharp__v1.3.9')), 616 ('v1.14.1', ReleaseInfo(testcases_file='csharp__v1.3.9')), 617 ('v1.15.0', ReleaseInfo(testcases_file='csharp__v1.3.9')), 618 ('v1.16.0', ReleaseInfo(testcases_file='csharp__v1.3.9')), 619 ('v1.17.1', ReleaseInfo(testcases_file='csharp__v1.3.9')), 620 ('v1.18.0', ReleaseInfo(testcases_file='csharp__v1.18.0')), 621 ('v1.19.0', ReleaseInfo(testcases_file='csharp__v1.18.0')), 622 ('v1.20.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 623 ('v1.20.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 624 ('v1.21.4', ReleaseInfo(testcases_file='csharp__v1.20.0')), 625 ('v1.22.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 626 ('v1.22.1', ReleaseInfo(testcases_file='csharp__v1.20.0')), 627 ('v1.23.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 628 ('v1.24.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 629 ('v1.25.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 630 ('v1.26.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 631 ('v1.27.3', ReleaseInfo(testcases_file='csharp__v1.20.0')), 632 ('v1.30.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 633 ('v1.31.1', ReleaseInfo(testcases_file='csharp__v1.20.0')), 634 ('v1.32.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 635 ('v1.33.2', ReleaseInfo(testcases_file='csharp__v1.20.0')), 636 ('v1.34.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 637 ('v1.35.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 638 ('v1.36.3', ReleaseInfo(testcases_file='csharp__v1.20.0')), 639 ('v1.37.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 640 ('v1.38.1', ReleaseInfo(testcases_file='csharp__v1.20.0')), 641 ('v1.39.1', ReleaseInfo(testcases_file='csharp__v1.20.0')), 642 ('v1.41.1', ReleaseInfo(testcases_file='csharp__v1.20.0')), 643 ('v1.42.0', ReleaseInfo(testcases_file='csharp__v1.20.0')), 644 ('v1.43.0', ReleaseInfo()), 645 ('v1.44.0', ReleaseInfo()), 646 ('v1.46.2', ReleaseInfo()), 647 ]), 648} 649