blob: 6154b2603ea27c4322e175c8e55d367130e3d4eb [file] [log] [blame]
Siddharth Shukla8e64d902017-03-12 19:50:18 +01001#!/usr/bin/env python
Craig Tiller95e81872016-02-08 15:48:55 -08002
Jan Tattermusch7897ae92017-06-07 22:57:36 +02003# Copyright 2016 gRPC authors.
Craig Tiller95e81872016-02-08 15:48:55 -08004#
Jan Tattermusch7897ae92017-06-07 22:57:36 +02005# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
Craig Tiller95e81872016-02-08 15:48:55 -08008#
Jan Tattermusch7897ae92017-06-07 22:57:36 +02009# http://www.apache.org/licenses/LICENSE-2.0
Craig Tiller95e81872016-02-08 15:48:55 -080010#
Jan Tattermusch7897ae92017-06-07 22:57:36 +020011# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
Craig Tiller95e81872016-02-08 15:48:55 -080016
Siddharth Shuklad194f592017-03-11 19:12:43 +010017from __future__ import print_function
18
Craig Tiller95e81872016-02-08 15:48:55 -080019import sys
20import yaml
21import os
22import re
23import subprocess
24
25errors = 0
26
27os.chdir(os.path.join(os.path.dirname(sys.argv[0]), '../../..'))
28
29# hack import paths to pick up extra code
30sys.path.insert(0, os.path.abspath('tools/buildgen/plugins'))
31from expand_version import Version
32
33try:
ncteisen0cd6cfe2017-12-11 16:56:44 -080034 branch_name = subprocess.check_output(
35 'git rev-parse --abbrev-ref HEAD', shell=True)
Craig Tiller95e81872016-02-08 15:48:55 -080036except:
ncteisen0cd6cfe2017-12-11 16:56:44 -080037 print('WARNING: not a git repository')
38 branch_name = None
Craig Tiller95e81872016-02-08 15:48:55 -080039
40if branch_name is not None:
ncteisen0cd6cfe2017-12-11 16:56:44 -080041 m = re.match(r'^release-([0-9]+)_([0-9]+)$', branch_name)
42 if m:
43 print('RELEASE branch')
44 # version number should align with the branched version
45 check_version = lambda version: (
46 version.major == int(m.group(1)) and
47 version.minor == int(m.group(2)))
48 warning = 'Version key "%%s" value "%%s" should have a major version %s and minor version %s' % (
49 m.group(1), m.group(2))
50 elif re.match(r'^debian/.*$', branch_name):
51 # no additional version checks for debian branches
52 check_version = lambda version: True
53 else:
54 # all other branches should have a -dev tag
55 check_version = lambda version: version.tag == 'dev'
56 warning = 'Version key "%s" value "%s" should have a -dev tag'
Craig Tiller95e81872016-02-08 15:48:55 -080057else:
ncteisen0cd6cfe2017-12-11 16:56:44 -080058 check_version = lambda version: True
Craig Tiller95e81872016-02-08 15:48:55 -080059
60with open('build.yaml', 'r') as f:
ncteisen0cd6cfe2017-12-11 16:56:44 -080061 build_yaml = yaml.load(f.read())
Craig Tiller95e81872016-02-08 15:48:55 -080062
63settings = build_yaml['settings']
64
65top_version = Version(settings['version'])
66if not check_version(top_version):
ncteisen0cd6cfe2017-12-11 16:56:44 -080067 errors += 1
68 print(warning % ('version', top_version))
Craig Tiller95e81872016-02-08 15:48:55 -080069
70for tag, value in settings.iteritems():
ncteisen0cd6cfe2017-12-11 16:56:44 -080071 if re.match(r'^[a-z]+_version$', tag):
72 value = Version(value)
73 if tag != 'core_version':
74 if value.major != top_version.major:
75 errors += 1
76 print('major version mismatch on %s: %d vs %d' %
77 (tag, value.major, top_version.major))
78 if value.minor != top_version.minor:
79 errors += 1
80 print('minor version mismatch on %s: %d vs %d' %
81 (tag, value.minor, top_version.minor))
82 if not check_version(value):
83 errors += 1
84 print(warning % (tag, value))
Craig Tiller95e81872016-02-08 15:48:55 -080085
86sys.exit(errors)