|  | @@ -15,6 +15,8 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # Defines languages, runtimes and releases for backward compatibility testing
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +from collections import OrderedDict
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def get_github_repo(lang):
 | 
	
		
			
				|  |  |      return {
 | 
	
	
		
			
				|  | @@ -27,23 +29,16 @@ def get_github_repo(lang):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def get_release_tags(lang):
 | 
	
		
			
				|  |  | -    return map(lambda r: get_release_tag_name(r), LANG_RELEASE_MATRIX[lang])
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -def get_release_tag_name(release_info):
 | 
	
		
			
				|  |  | -    assert len(release_info.keys()) == 1
 | 
	
		
			
				|  |  | -    return release_info.keys()[0]
 | 
	
		
			
				|  |  | +    """Returns list of known releases for given language."""
 | 
	
		
			
				|  |  | +    return list(LANG_RELEASE_MATRIX[lang].keys())
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def get_runtimes_for_lang_release(lang, release):
 | 
	
		
			
				|  |  |      """Get list of valid runtimes for given release of lang."""
 | 
	
		
			
				|  |  |      runtimes_to_skip = []
 | 
	
		
			
				|  |  | -    # see if any the lang release has "skip_runtime" annotation.
 | 
	
		
			
				|  |  | -    for release_info in LANG_RELEASE_MATRIX[lang]:
 | 
	
		
			
				|  |  | -        if get_release_tag_name(release_info) == release:
 | 
	
		
			
				|  |  | -            if release_info[release] is not None:
 | 
	
		
			
				|  |  | -                runtimes_to_skip = release_info[release].get('skip_runtime', [])
 | 
	
		
			
				|  |  | -                break
 | 
	
		
			
				|  |  | +    release_info = LANG_RELEASE_MATRIX[lang][release]
 | 
	
		
			
				|  |  | +    if release_info:
 | 
	
		
			
				|  |  | +        runtimes_to_skip = release_info.skip_runtime
 | 
	
		
			
				|  |  |      return [
 | 
	
		
			
				|  |  |          runtime for runtime in LANG_RUNTIME_MATRIX[lang]
 | 
	
		
			
				|  |  |          if runtime not in runtimes_to_skip
 | 
	
	
		
			
				|  | @@ -51,6 +46,9 @@ def get_runtimes_for_lang_release(lang, release):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def should_build_docker_interop_image_from_release_tag(lang):
 | 
	
		
			
				|  |  | +    # All dockerfile definitions live in grpc/grpc repository.
 | 
	
		
			
				|  |  | +    # For language that have a separate repo, we need to use
 | 
	
		
			
				|  |  | +    # dockerfile definitions from head of grpc/grpc.
 | 
	
		
			
				|  |  |      if lang in ['go', 'java', 'node']:
 | 
	
		
			
				|  |  |          return False
 | 
	
		
			
				|  |  |      return True
 | 
	
	
		
			
				|  | @@ -68,465 +66,183 @@ LANG_RUNTIME_MATRIX = {
 | 
	
		
			
				|  |  |      'csharp': ['csharp', 'csharpcoreclr'],
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class ReleaseInfo:
 | 
	
		
			
				|  |  | +    """Info about a single release of a language"""
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def __init__(self, patch=[], skip_runtime=[], testcases_file=None):
 | 
	
		
			
				|  |  | +        self.patch = patch
 | 
	
		
			
				|  |  | +        self.skip_runtime = skip_runtime
 | 
	
		
			
				|  |  | +        self.testcases_file = None
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  # Dictionary of known releases for given language.
 | 
	
		
			
				|  |  |  LANG_RELEASE_MATRIX = {
 | 
	
		
			
				|  |  | -    'cxx': [
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.0.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.1.4': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.2.5': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.3.9': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.4.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.6.6': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.7.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.8.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.9.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.10.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.11.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.12.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.13.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.14.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.15.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.16.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.17.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    'go': [
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.0.5': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.2.1': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.3.0': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.4.2': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.5.2': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.6.0': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.7.4': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.8.2': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.9.2': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.10.1': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.11.3': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.12.2': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.13.0': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.14.0': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.15.0': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.16.0': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.11']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.17.0': {
 | 
	
		
			
				|  |  | -                'skip_runtime': ['go1.7', 'go1.8']
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    'java': [
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.0.3': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.1.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.2.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.3.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.4.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.5.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.6.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.7.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.8.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.9.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.10.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.11.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.12.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.13.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.14.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.15.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.16.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.17.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    'python': [
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.0.x': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.1.4': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.2.5': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.3.9': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.4.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.6.6': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.7.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.8.1': None  # first python 1.8 release is 1.8.1
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.9.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.10.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.11.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.12.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.13.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.14.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.15.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.16.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.17.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    'node': [
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.0.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.1.4': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.2.5': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.3.9': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.4.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.6.6': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | +    'cxx':
 | 
	
		
			
				|  |  | +    OrderedDict([
 | 
	
		
			
				|  |  | +        ('v1.0.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.1.4', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.2.5', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.3.9', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.4.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.6.6', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.7.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.8.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.9.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.10.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.11.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.12.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.13.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.14.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.15.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.16.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.17.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +    ]),
 | 
	
		
			
				|  |  | +    'go':
 | 
	
		
			
				|  |  | +    OrderedDict([
 | 
	
		
			
				|  |  | +        ('v1.0.5', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.2.1', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.3.0', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.4.2', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.5.2', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.6.0', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.7.4', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.8.2', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.9.2', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.10.1', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.11.3', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.12.2', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.13.0', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.14.0', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.15.0', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.16.0', ReleaseInfo(skip_runtime=['go1.11'])),
 | 
	
		
			
				|  |  | +        ('v1.17.0', ReleaseInfo(skip_runtime=['go1.7', 'go1.8'])),
 | 
	
		
			
				|  |  | +    ]),
 | 
	
		
			
				|  |  | +    'java':
 | 
	
		
			
				|  |  | +    OrderedDict([
 | 
	
		
			
				|  |  | +        ('v1.0.3', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.1.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.2.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.3.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.4.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.5.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.6.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.7.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.8.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.9.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.10.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.11.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.12.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.13.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.14.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.15.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.16.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.17.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +    ]),
 | 
	
		
			
				|  |  | +    'python':
 | 
	
		
			
				|  |  | +    OrderedDict([
 | 
	
		
			
				|  |  | +        ('v1.0.x', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.1.4', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.2.5', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.3.9', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.4.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.6.6', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.7.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.8.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.9.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.10.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.11.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.12.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.13.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.14.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.15.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.16.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.17.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +    ]),
 | 
	
		
			
				|  |  | +    'node':
 | 
	
		
			
				|  |  | +    OrderedDict([
 | 
	
		
			
				|  |  | +        ('v1.0.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.1.4', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.2.5', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.3.9', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.4.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.6.6', ReleaseInfo()),
 | 
	
		
			
				|  |  |          # TODO: https://github.com/grpc/grpc-node/issues/235.
 | 
	
		
			
				|  |  | -        #{
 | 
	
		
			
				|  |  | -        #    'v1.7.2': None
 | 
	
		
			
				|  |  | -        #},
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.8.4': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.9.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.10.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.11.3': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.12.4': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    'ruby': [
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.0.1': {
 | 
	
		
			
				|  |  | -                'patch': [
 | 
	
		
			
				|  |  | -                    'tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile',
 | 
	
		
			
				|  |  | -                    'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
 | 
	
		
			
				|  |  | -                ]
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.1.4': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.2.5': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.3.9': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.4.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.6.6': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.7.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.8.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.9.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.10.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.11.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.12.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.13.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.14.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.15.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.16.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.17.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    'php': [
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.0.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.1.4': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.2.5': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.3.9': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.4.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.6.6': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.7.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.8.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.9.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.10.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.11.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.12.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.13.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.14.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.15.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.16.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.17.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    'csharp': [
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.0.1': {
 | 
	
		
			
				|  |  | -                'patch': [
 | 
	
		
			
				|  |  | -                    'tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile',
 | 
	
		
			
				|  |  | -                    'tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile',
 | 
	
		
			
				|  |  | -                ]
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.1.4': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.2.5': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.3.9': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.4.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.6.6': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.7.2': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.8.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.9.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.10.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.11.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.12.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.13.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.14.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.15.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.16.0': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            'v1.17.1': None
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | +        # ('v1.7.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.8.4', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.9.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.10.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.11.3', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.12.4', ReleaseInfo()),
 | 
	
		
			
				|  |  | +    ]),
 | 
	
		
			
				|  |  | +    'ruby':
 | 
	
		
			
				|  |  | +    OrderedDict([
 | 
	
		
			
				|  |  | +        ('v1.0.1',
 | 
	
		
			
				|  |  | +         ReleaseInfo(patch=[
 | 
	
		
			
				|  |  | +             'tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile',
 | 
	
		
			
				|  |  | +             'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
 | 
	
		
			
				|  |  | +         ])),
 | 
	
		
			
				|  |  | +        ('v1.1.4', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.2.5', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.3.9', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.4.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.6.6', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.7.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.8.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.9.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.10.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.11.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.12.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.13.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.14.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.15.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.16.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.17.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +    ]),
 | 
	
		
			
				|  |  | +    'php':
 | 
	
		
			
				|  |  | +    OrderedDict([
 | 
	
		
			
				|  |  | +        ('v1.0.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.1.4', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.2.5', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.3.9', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.4.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.6.6', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.7.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.8.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.9.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.10.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.11.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.12.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.13.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.14.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.15.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.16.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.17.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +    ]),
 | 
	
		
			
				|  |  | +    'csharp':
 | 
	
		
			
				|  |  | +    OrderedDict([
 | 
	
		
			
				|  |  | +        ('v1.0.1',
 | 
	
		
			
				|  |  | +         ReleaseInfo(patch=[
 | 
	
		
			
				|  |  | +             'tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile',
 | 
	
		
			
				|  |  | +             'tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile',
 | 
	
		
			
				|  |  | +         ])),
 | 
	
		
			
				|  |  | +        ('v1.1.4', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.2.5', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.3.9', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.4.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.6.6', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.7.2', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.8.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.9.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.10.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.11.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.12.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.13.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.14.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.15.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.16.0', ReleaseInfo()),
 | 
	
		
			
				|  |  | +        ('v1.17.1', ReleaseInfo()),
 | 
	
		
			
				|  |  | +    ]),
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # This matrix lists the version of testcases to use for a release. As new
 | 
	
	
		
			
				|  | @@ -535,6 +251,8 @@ LANG_RELEASE_MATRIX = {
 | 
	
		
			
				|  |  |  # particular version in some cases. If not specified, xxx__master file will be
 | 
	
		
			
				|  |  |  # used. For example, all java versions will run the commands in java__master.
 | 
	
		
			
				|  |  |  # The testcases files exist under the testcases directory.
 | 
	
		
			
				|  |  | +# TODO(jtattermusch): make this data part of LANG_RELEASE_MATRIX,
 | 
	
		
			
				|  |  | +# there is no reason for this to be a separate data structure.
 | 
	
		
			
				|  |  |  TESTCASES_VERSION_MATRIX = {
 | 
	
		
			
				|  |  |      'node_v1.0.1': 'node__v1.0.1',
 | 
	
		
			
				|  |  |      'node_v1.1.4': 'node__v1.1.4',
 |