client_matrix.py 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  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. # Defines languages, runtimes and releases for backward compatibility testing
  15. from collections import OrderedDict
  16. def get_github_repo(lang):
  17. return {
  18. 'dart': 'https://github.com/grpc/grpc-dart.git',
  19. 'go': 'https://github.com/grpc/grpc-go.git',
  20. 'java': 'https://github.com/grpc/grpc-java.git',
  21. 'node': 'https://github.com/grpc/grpc-node.git',
  22. # all other languages use the grpc.git repo.
  23. }.get(lang, 'https://github.com/grpc/grpc.git')
  24. def get_release_tags(lang):
  25. """Returns list of known releases for given language."""
  26. return list(LANG_RELEASE_MATRIX[lang].keys())
  27. def get_runtimes_for_lang_release(lang, release):
  28. """Get list of valid runtimes for given release of lang."""
  29. runtimes = list(LANG_RUNTIME_MATRIX[lang])
  30. release_info = LANG_RELEASE_MATRIX[lang].get(release)
  31. if release_info and release_info.runtimes:
  32. runtimes = list(release_info.runtimes)
  33. return runtimes
  34. def should_build_docker_interop_image_from_release_tag(lang):
  35. # All dockerfile definitions live in grpc/grpc repository.
  36. # For language that have a separate repo, we need to use
  37. # dockerfile definitions from head of grpc/grpc.
  38. if lang in ['go', 'java', 'node']:
  39. return False
  40. return True
  41. # Dictionary of default runtimes per language
  42. LANG_RUNTIME_MATRIX = {
  43. 'cxx': ['cxx'], # This is actually debian8.
  44. 'go': ['go1.8', 'go1.11', 'go1.16'],
  45. 'java': ['java'],
  46. 'python': ['python', 'pythonasyncio'],
  47. 'node': ['node'],
  48. 'ruby': ['ruby'],
  49. 'php': ['php7'],
  50. 'csharp': ['csharp', 'csharpcoreclr'],
  51. }
  52. class ReleaseInfo:
  53. """Info about a single release of a language"""
  54. def __init__(self, patch=[], runtimes=[], testcases_file=None):
  55. self.patch = patch
  56. self.runtimes = runtimes
  57. self.testcases_file = testcases_file
  58. # Dictionary of known releases for given language.
  59. LANG_RELEASE_MATRIX = {
  60. 'cxx':
  61. OrderedDict([
  62. ('v1.0.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  63. ('v1.1.4', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  64. ('v1.2.5', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  65. ('v1.3.9', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  66. ('v1.4.2', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  67. ('v1.6.6', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  68. ('v1.7.2', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  69. ('v1.8.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  70. ('v1.9.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  71. ('v1.10.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  72. ('v1.11.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  73. ('v1.12.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  74. ('v1.13.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  75. ('v1.14.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  76. ('v1.15.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  77. ('v1.16.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  78. ('v1.17.1', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  79. ('v1.18.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  80. ('v1.19.0', ReleaseInfo(testcases_file='cxx__v1.0.1')),
  81. ('v1.20.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
  82. ('v1.21.4', ReleaseInfo(testcases_file='cxx__v1.31.1')),
  83. ('v1.22.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
  84. ('v1.22.1', ReleaseInfo(testcases_file='cxx__v1.31.1')),
  85. ('v1.23.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
  86. ('v1.24.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
  87. ('v1.25.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
  88. ('v1.26.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
  89. ('v1.27.3', ReleaseInfo(testcases_file='cxx__v1.31.1')),
  90. ('v1.30.0', ReleaseInfo(testcases_file='cxx__v1.31.1')),
  91. ('v1.31.1', ReleaseInfo(testcases_file='cxx__v1.31.1')),
  92. ('v1.32.0', ReleaseInfo()),
  93. ('v1.33.2', ReleaseInfo()),
  94. ('v1.34.0', ReleaseInfo()),
  95. ('v1.35.0', ReleaseInfo()),
  96. ('v1.36.3', ReleaseInfo()),
  97. ('v1.37.0', ReleaseInfo()),
  98. ('v1.38.0', ReleaseInfo()),
  99. ('v1.39.0', ReleaseInfo()),
  100. ('v1.41.1', ReleaseInfo()),
  101. ('v1.42.0', ReleaseInfo()),
  102. ('v1.43.0', ReleaseInfo()),
  103. ('v1.44.0', ReleaseInfo()),
  104. ]),
  105. 'go':
  106. OrderedDict([
  107. ('v1.0.5',
  108. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  109. ('v1.2.1',
  110. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  111. ('v1.3.0',
  112. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  113. ('v1.4.2',
  114. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  115. ('v1.5.2',
  116. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  117. ('v1.6.0',
  118. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  119. ('v1.7.4',
  120. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  121. ('v1.8.2',
  122. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  123. ('v1.9.2',
  124. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  125. ('v1.10.1',
  126. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  127. ('v1.11.3',
  128. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  129. ('v1.12.2',
  130. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  131. ('v1.13.0',
  132. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  133. ('v1.14.0',
  134. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  135. ('v1.15.0',
  136. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  137. ('v1.16.0',
  138. ReleaseInfo(runtimes=['go1.8'], testcases_file='go__v1.0.5')),
  139. ('v1.17.0',
  140. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
  141. ('v1.18.0',
  142. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
  143. ('v1.19.0',
  144. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.0.5')),
  145. ('v1.20.0',
  146. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  147. ('v1.21.3',
  148. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  149. ('v1.22.3',
  150. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  151. ('v1.23.1',
  152. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  153. ('v1.24.0',
  154. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  155. ('v1.25.0',
  156. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  157. ('v1.26.0',
  158. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  159. ('v1.27.1',
  160. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  161. ('v1.28.0',
  162. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  163. ('v1.29.0',
  164. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  165. ('v1.30.0',
  166. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  167. ('v1.31.1',
  168. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  169. ('v1.32.0',
  170. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  171. ('v1.33.1',
  172. ReleaseInfo(runtimes=['go1.11'], testcases_file='go__v1.20.0')),
  173. ('v1.34.0', ReleaseInfo(runtimes=['go1.11'])),
  174. ('v1.35.0', ReleaseInfo(runtimes=['go1.11'])),
  175. ('v1.36.0', ReleaseInfo(runtimes=['go1.11'])),
  176. ('v1.37.0', ReleaseInfo(runtimes=['go1.11'])),
  177. # NOTE: starting from release v1.38.0, use runtimes=['go1.16']
  178. ('v1.38.1', ReleaseInfo(runtimes=['go1.16'])),
  179. ('v1.39.1', ReleaseInfo(runtimes=['go1.16'])),
  180. ('v1.40.0', ReleaseInfo(runtimes=['go1.16'])),
  181. ('v1.41.0', ReleaseInfo(runtimes=['go1.16'])),
  182. ('v1.42.0', ReleaseInfo(runtimes=['go1.16'])),
  183. ('v1.43.0', ReleaseInfo(runtimes=['go1.16'])),
  184. ]),
  185. 'java':
  186. OrderedDict([
  187. ('v1.0.3',
  188. ReleaseInfo(runtimes=['java_oracle8'],
  189. testcases_file='java__v1.0.3')),
  190. ('v1.1.2',
  191. ReleaseInfo(runtimes=['java_oracle8'],
  192. testcases_file='java__v1.0.3')),
  193. ('v1.2.0',
  194. ReleaseInfo(runtimes=['java_oracle8'],
  195. testcases_file='java__v1.0.3')),
  196. ('v1.3.1',
  197. ReleaseInfo(runtimes=['java_oracle8'],
  198. testcases_file='java__v1.0.3')),
  199. ('v1.4.0',
  200. ReleaseInfo(runtimes=['java_oracle8'],
  201. testcases_file='java__v1.0.3')),
  202. ('v1.5.0',
  203. ReleaseInfo(runtimes=['java_oracle8'],
  204. testcases_file='java__v1.0.3')),
  205. ('v1.6.1',
  206. ReleaseInfo(runtimes=['java_oracle8'],
  207. testcases_file='java__v1.0.3')),
  208. ('v1.7.1', ReleaseInfo(testcases_file='java__v1.0.3')),
  209. ('v1.8.0',
  210. ReleaseInfo(runtimes=['java_oracle8'],
  211. testcases_file='java__v1.0.3')),
  212. ('v1.9.1',
  213. ReleaseInfo(runtimes=['java_oracle8'],
  214. testcases_file='java__v1.0.3')),
  215. ('v1.10.1',
  216. ReleaseInfo(runtimes=['java_oracle8'],
  217. testcases_file='java__v1.0.3')),
  218. ('v1.11.0',
  219. ReleaseInfo(runtimes=['java_oracle8'],
  220. testcases_file='java__v1.0.3')),
  221. ('v1.12.1', ReleaseInfo(testcases_file='java__v1.0.3')),
  222. ('v1.13.2', ReleaseInfo(testcases_file='java__v1.0.3')),
  223. ('v1.14.0',
  224. ReleaseInfo(runtimes=['java_oracle8'],
  225. testcases_file='java__v1.0.3')),
  226. ('v1.15.1', ReleaseInfo(testcases_file='java__v1.0.3')),
  227. ('v1.16.1',
  228. ReleaseInfo(runtimes=['java_oracle8'],
  229. testcases_file='java__v1.0.3')),
  230. ('v1.17.2', ReleaseInfo(testcases_file='java__v1.0.3')),
  231. ('v1.18.0',
  232. ReleaseInfo(runtimes=['java_oracle8'],
  233. testcases_file='java__v1.0.3')),
  234. ('v1.19.0',
  235. ReleaseInfo(runtimes=['java_oracle8'],
  236. testcases_file='java__v1.0.3')),
  237. ('v1.20.0', ReleaseInfo(runtimes=['java_oracle8'])),
  238. ('v1.21.1', ReleaseInfo()),
  239. ('v1.22.2', ReleaseInfo()),
  240. ('v1.23.0', ReleaseInfo()),
  241. ('v1.24.0', ReleaseInfo()),
  242. ('v1.25.0', ReleaseInfo()),
  243. ('v1.26.1', ReleaseInfo()),
  244. ('v1.27.2', ReleaseInfo()),
  245. ('v1.28.1', ReleaseInfo()),
  246. ('v1.29.0', ReleaseInfo()),
  247. ('v1.30.2', ReleaseInfo()),
  248. ('v1.31.2', ReleaseInfo()),
  249. ('v1.32.3', ReleaseInfo()),
  250. ('v1.33.1', ReleaseInfo()),
  251. ('v1.34.1', ReleaseInfo()),
  252. ('v1.35.1', ReleaseInfo()),
  253. ('v1.36.1', ReleaseInfo()),
  254. ('v1.37.1', ReleaseInfo()),
  255. ('v1.38.1', ReleaseInfo()),
  256. ('v1.39.0', ReleaseInfo()),
  257. ('v1.40.2', ReleaseInfo()),
  258. ('v1.41.1', ReleaseInfo()),
  259. ('v1.42.1', ReleaseInfo()),
  260. ('v1.43.1', ReleaseInfo()),
  261. ]),
  262. 'python':
  263. OrderedDict(
  264. [
  265. ('v1.0.x',
  266. ReleaseInfo(runtimes=['python'],
  267. testcases_file='python__v1.0.x')),
  268. ('v1.1.4',
  269. ReleaseInfo(runtimes=['python'],
  270. testcases_file='python__v1.0.x')),
  271. ('v1.2.5',
  272. ReleaseInfo(runtimes=['python'],
  273. testcases_file='python__v1.0.x')),
  274. ('v1.3.9',
  275. ReleaseInfo(runtimes=['python'],
  276. testcases_file='python__v1.0.x')),
  277. ('v1.4.2',
  278. ReleaseInfo(runtimes=['python'],
  279. testcases_file='python__v1.0.x')),
  280. ('v1.6.6',
  281. ReleaseInfo(runtimes=['python'],
  282. testcases_file='python__v1.0.x')),
  283. ('v1.7.2',
  284. ReleaseInfo(runtimes=['python'],
  285. testcases_file='python__v1.0.x')),
  286. ('v1.8.1',
  287. ReleaseInfo(runtimes=['python'],
  288. testcases_file='python__v1.0.x')),
  289. ('v1.9.1',
  290. ReleaseInfo(runtimes=['python'],
  291. testcases_file='python__v1.0.x')),
  292. ('v1.10.1',
  293. ReleaseInfo(runtimes=['python'],
  294. testcases_file='python__v1.0.x')),
  295. ('v1.11.1',
  296. ReleaseInfo(runtimes=['python'],
  297. testcases_file='python__v1.11.1')),
  298. ('v1.12.0',
  299. ReleaseInfo(runtimes=['python'],
  300. testcases_file='python__v1.11.1')),
  301. ('v1.13.0',
  302. ReleaseInfo(runtimes=['python'],
  303. testcases_file='python__v1.11.1')),
  304. ('v1.14.1',
  305. ReleaseInfo(runtimes=['python'],
  306. testcases_file='python__v1.11.1')),
  307. ('v1.15.0',
  308. ReleaseInfo(runtimes=['python'],
  309. testcases_file='python__v1.11.1')),
  310. ('v1.16.0',
  311. ReleaseInfo(runtimes=['python'],
  312. testcases_file='python__v1.11.1')),
  313. ('v1.17.1',
  314. ReleaseInfo(runtimes=['python'],
  315. testcases_file='python__v1.11.1')),
  316. ('v1.18.0',
  317. ReleaseInfo(runtimes=['python'],
  318. testcases_file='python__v1.18.0')),
  319. ('v1.19.0',
  320. ReleaseInfo(runtimes=['python'],
  321. testcases_file='python__v1.18.0')),
  322. ('v1.20.0',
  323. ReleaseInfo(runtimes=['python'],
  324. testcases_file='python__v1.18.0')),
  325. ('v1.21.4',
  326. ReleaseInfo(runtimes=['python'],
  327. testcases_file='python__v1.18.0')),
  328. ('v1.22.0',
  329. ReleaseInfo(runtimes=['python'],
  330. testcases_file='python__v1.18.0')),
  331. ('v1.22.1',
  332. ReleaseInfo(runtimes=['python'],
  333. testcases_file='python__v1.18.0')),
  334. ('v1.23.0',
  335. ReleaseInfo(runtimes=['python'],
  336. testcases_file='python__v1.18.0')),
  337. ('v1.24.0',
  338. ReleaseInfo(runtimes=['python'],
  339. testcases_file='python__v1.18.0')),
  340. ('v1.25.0',
  341. ReleaseInfo(runtimes=['python'],
  342. testcases_file='python__v1.18.0')),
  343. ('v1.26.0',
  344. ReleaseInfo(runtimes=['python'],
  345. testcases_file='python__v1.18.0')),
  346. ('v1.27.3',
  347. ReleaseInfo(runtimes=['python'],
  348. testcases_file='python__v1.18.0')),
  349. ('v1.30.0',
  350. ReleaseInfo(runtimes=['python'],
  351. testcases_file='python__v1.18.0')),
  352. ('v1.31.1',
  353. ReleaseInfo(runtimes=['python'],
  354. testcases_file='python__v1.18.0')),
  355. ('v1.32.0',
  356. ReleaseInfo(runtimes=['python'],
  357. testcases_file='python__v1.18.0')),
  358. ('v1.33.2',
  359. ReleaseInfo(runtimes=['python'],
  360. testcases_file='python__v1.18.0')),
  361. ('v1.34.0',
  362. ReleaseInfo(runtimes=['python'],
  363. testcases_file='python__v1.18.0')),
  364. ('v1.35.0',
  365. ReleaseInfo(runtimes=['python'],
  366. testcases_file='python__v1.18.0')),
  367. ('v1.36.3',
  368. ReleaseInfo(runtimes=['python'],
  369. testcases_file='python__v1.18.0')),
  370. ('v1.37.0',
  371. ReleaseInfo(runtimes=['python'],
  372. testcases_file='python__v1.18.0')),
  373. ('v1.38.0',
  374. ReleaseInfo(runtimes=['python'],
  375. testcases_file='python__v1.18.0')),
  376. ('v1.39.0',
  377. ReleaseInfo(runtimes=['python'],
  378. testcases_file='python__v1.18.0')),
  379. ('v1.41.1',
  380. ReleaseInfo(runtimes=['python'],
  381. testcases_file='python__v1.41.1')),
  382. ('v1.42.0',
  383. ReleaseInfo(runtimes=['python'],
  384. testcases_file='python__v1.41.1')),
  385. ('v1.43.2',
  386. ReleaseInfo(runtimes=['python'],
  387. testcases_file='python__v1.41.1')),
  388. ('v1.44.0',
  389. ReleaseInfo(runtimes=['python'],
  390. testcases_file='python__master')),
  391. ]),
  392. 'node':
  393. OrderedDict([
  394. ('v1.0.1', ReleaseInfo(testcases_file='node__v1.0.1')),
  395. ('v1.1.4', ReleaseInfo(testcases_file='node__v1.1.4')),
  396. ('v1.2.5', ReleaseInfo(testcases_file='node__v1.1.4')),
  397. ('v1.3.9', ReleaseInfo(testcases_file='node__v1.1.4')),
  398. ('v1.4.2', ReleaseInfo(testcases_file='node__v1.1.4')),
  399. ('v1.6.6', ReleaseInfo(testcases_file='node__v1.1.4')),
  400. # TODO: https://github.com/grpc/grpc-node/issues/235.
  401. # ('v1.7.2', ReleaseInfo()),
  402. ('v1.8.4', ReleaseInfo()),
  403. ('v1.9.1', ReleaseInfo()),
  404. ('v1.10.0', ReleaseInfo()),
  405. ('v1.11.3', ReleaseInfo()),
  406. ('v1.12.4', ReleaseInfo()),
  407. ]),
  408. 'ruby':
  409. OrderedDict([
  410. ('v1.0.1',
  411. ReleaseInfo(patch=[
  412. 'tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile',
  413. 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
  414. ],
  415. testcases_file='ruby__v1.0.1')),
  416. ('v1.1.4', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  417. ('v1.2.5', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  418. ('v1.3.9', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  419. ('v1.4.2', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  420. ('v1.6.6', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  421. ('v1.7.2', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  422. ('v1.8.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  423. ('v1.9.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  424. ('v1.10.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  425. ('v1.11.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  426. ('v1.12.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  427. ('v1.13.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  428. ('v1.14.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  429. ('v1.15.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  430. ('v1.16.0', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  431. ('v1.17.1', ReleaseInfo(testcases_file='ruby__v1.1.4')),
  432. ('v1.18.0',
  433. ReleaseInfo(patch=[
  434. 'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
  435. ])),
  436. ('v1.19.0', ReleaseInfo()),
  437. ('v1.20.0', ReleaseInfo()),
  438. ('v1.21.4', ReleaseInfo()),
  439. ('v1.22.0', ReleaseInfo()),
  440. ('v1.22.1', ReleaseInfo()),
  441. ('v1.23.0', ReleaseInfo()),
  442. ('v1.24.0', ReleaseInfo()),
  443. ('v1.25.0', ReleaseInfo()),
  444. # TODO: https://github.com/grpc/grpc/issues/18262.
  445. # If you are not encountering the error in above issue
  446. # go ahead and upload the docker image for new releases.
  447. ('v1.26.0', ReleaseInfo()),
  448. ('v1.27.3', ReleaseInfo()),
  449. ('v1.30.0', ReleaseInfo()),
  450. ('v1.31.1', ReleaseInfo()),
  451. ('v1.32.0', ReleaseInfo()),
  452. ('v1.33.2', ReleaseInfo()),
  453. ('v1.34.0', ReleaseInfo()),
  454. ('v1.35.0', ReleaseInfo()),
  455. ('v1.36.3', ReleaseInfo()),
  456. ('v1.37.0', ReleaseInfo()),
  457. ('v1.38.0', ReleaseInfo()),
  458. ('v1.39.0', ReleaseInfo()),
  459. ('v1.41.1', ReleaseInfo()),
  460. ('v1.42.0', ReleaseInfo()),
  461. ('v1.43.0', ReleaseInfo()),
  462. ('v1.44.0', ReleaseInfo()),
  463. ]),
  464. 'php':
  465. OrderedDict([
  466. ('v1.0.1', ReleaseInfo(testcases_file='php__v1.0.1')),
  467. ('v1.1.4', ReleaseInfo(testcases_file='php__v1.0.1')),
  468. ('v1.2.5', ReleaseInfo(testcases_file='php__v1.0.1')),
  469. ('v1.3.9', ReleaseInfo(testcases_file='php__v1.0.1')),
  470. ('v1.4.2', ReleaseInfo(testcases_file='php__v1.0.1')),
  471. ('v1.6.6', ReleaseInfo(testcases_file='php__v1.0.1')),
  472. ('v1.7.2', ReleaseInfo(testcases_file='php__v1.0.1')),
  473. ('v1.8.0', ReleaseInfo(testcases_file='php__v1.0.1')),
  474. ('v1.9.1', ReleaseInfo(testcases_file='php__v1.0.1')),
  475. ('v1.10.1', ReleaseInfo(testcases_file='php__v1.0.1')),
  476. ('v1.11.1', ReleaseInfo(testcases_file='php__v1.0.1')),
  477. ('v1.12.0', ReleaseInfo(testcases_file='php__v1.0.1')),
  478. ('v1.13.0', ReleaseInfo(testcases_file='php__v1.0.1')),
  479. ('v1.14.1', ReleaseInfo(testcases_file='php__v1.0.1')),
  480. ('v1.15.0', ReleaseInfo(testcases_file='php__v1.0.1')),
  481. ('v1.16.0', ReleaseInfo(testcases_file='php__v1.0.1')),
  482. ('v1.17.1', ReleaseInfo(testcases_file='php__v1.0.1')),
  483. ('v1.18.0', ReleaseInfo()),
  484. # v1.19 and v1.20 were deliberately omitted here because of an issue.
  485. # See https://github.com/grpc/grpc/issues/18264
  486. ('v1.21.4', ReleaseInfo()),
  487. ('v1.22.0', ReleaseInfo()),
  488. ('v1.22.1', ReleaseInfo()),
  489. ('v1.23.0', ReleaseInfo()),
  490. ('v1.24.0', ReleaseInfo()),
  491. ('v1.25.0', ReleaseInfo()),
  492. ('v1.26.0', ReleaseInfo()),
  493. ('v1.27.3', ReleaseInfo()),
  494. ('v1.30.0', ReleaseInfo()),
  495. ('v1.31.1', ReleaseInfo()),
  496. ('v1.32.0', ReleaseInfo()),
  497. ('v1.33.2', ReleaseInfo()),
  498. ('v1.34.0', ReleaseInfo()),
  499. ('v1.35.0', ReleaseInfo()),
  500. ('v1.36.3', ReleaseInfo()),
  501. ('v1.37.0', ReleaseInfo()),
  502. ('v1.38.0', ReleaseInfo()),
  503. ('v1.39.0', ReleaseInfo()),
  504. ('v1.41.1', ReleaseInfo()),
  505. ('v1.42.0', ReleaseInfo()),
  506. ('v1.43.0', ReleaseInfo()),
  507. ('v1.44.0', ReleaseInfo()),
  508. ]),
  509. 'csharp':
  510. OrderedDict([
  511. ('v1.0.1',
  512. ReleaseInfo(patch=[
  513. 'tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile',
  514. 'tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile',
  515. ],
  516. testcases_file='csharp__v1.1.4')),
  517. ('v1.1.4', ReleaseInfo(testcases_file='csharp__v1.1.4')),
  518. ('v1.2.5', ReleaseInfo(testcases_file='csharp__v1.1.4')),
  519. ('v1.3.9', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  520. ('v1.4.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  521. ('v1.6.6', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  522. ('v1.7.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  523. ('v1.8.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  524. ('v1.9.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  525. ('v1.10.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  526. ('v1.11.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  527. ('v1.12.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  528. ('v1.13.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  529. ('v1.14.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  530. ('v1.15.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  531. ('v1.16.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  532. ('v1.17.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
  533. ('v1.18.0', ReleaseInfo(testcases_file='csharp__v1.18.0')),
  534. ('v1.19.0', ReleaseInfo(testcases_file='csharp__v1.18.0')),
  535. ('v1.20.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  536. ('v1.20.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  537. ('v1.21.4', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  538. ('v1.22.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  539. ('v1.22.1', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  540. ('v1.23.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  541. ('v1.24.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  542. ('v1.25.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  543. ('v1.26.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  544. ('v1.27.3', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  545. ('v1.30.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  546. ('v1.31.1', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  547. ('v1.32.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  548. ('v1.33.2', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  549. ('v1.34.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  550. ('v1.35.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  551. ('v1.36.3', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  552. ('v1.37.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  553. ('v1.38.1', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  554. ('v1.39.1', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  555. ('v1.41.1', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  556. ('v1.42.0', ReleaseInfo(testcases_file='csharp__v1.20.0')),
  557. ('v1.43.0', ReleaseInfo()),
  558. ('v1.44.0', ReleaseInfo()),
  559. ]),
  560. }