deskflow/CI/build_version.py
SerhiiGadzhilov 70016e69a2
SYNERGY-400 Make build for every merge (#6888)
* SYNERGY-400 Generate build number and create release with tag

* SYNERGY-400 Changes for Azure Piplines

* Update ChangeLog

* SYNERGY-400 Enable not manual build

* SYNERGY-400 Removed extra space

* SYNERGY-400 Removed extra bracket

* SYNERGY-400 Correct conditions

* SYNERGY-400 Fix additional condition

* SYNERGY-400 Correct to run checks

* SYNERGY-400 Fix windows and build number

* SYNERGY-400 Fix for old python

* SYNERGY-400 Set python version for linux

* SYNERGY-400 Fix linux compilation

* SYNERGY-400 Fix getting last version for old git

* SYNERGY-400 Check python version

* SYNERGY-400 Update image for centos8
2020-12-29 12:42:07 +00:00

104 lines
3.0 KiB
Python

import subprocess
class VersionPart:
def __init__(self, part = ''):
self.prefix = ''
self.suffix = ''
self.number = 0
if part:
self.__parsePreffix(part)
self.__parseNumber(part)
self.__parseSuffix(part)
def __parsePreffix(self, part):
if not part[0].isdigit():
for i in part:
if not i.isdigit():
self.prefix += i
else:
break
def __parseNumber(self, part):
start = len(self.prefix)
end = part.find('-')
if end > 0:
self.number = int(part[start:end])
else:
self.number = int(part[start:])
def __parseSuffix(self, part):
items = part.split('-')
if len(items) == 2:
self.suffix = '-' + items[1]
def __str__(self):
return self.prefix + str(self.number) + self.suffix
class Version:
def __init__(self, version):
versionParts = version.split('.')
if len(versionParts) == 3:
self.major = VersionPart(versionParts[0])
self.minor = VersionPart(versionParts[1])
self.build = VersionPart(versionParts[2])
self.patch = VersionPart()
self.patch.number = self.build.number
elif len(versionParts) == 4:
self.major = VersionPart(versionParts[0])
self.minor = VersionPart(versionParts[1])
self.patch = VersionPart(versionParts[2])
self.build = VersionPart(versionParts[3])
else:
print('ERROR: Wrong version number')
def __str__(self):
result = str(self.major) + '.'
result += str(self.minor) + '.'
result += str(self.patch) + '.'
result += str(self.build)
return result
class VersionFile:
def __init__(self, file):
self.file = file
def setOption(self, name, value):
fp = open(self.file, 'rt+')
content = ''
for line in fp:
print(line)
if line.find(name) != -1:
line = 'set ('+ name + ' ' + value + ')'
content += line
fp.write(content)
fp.close()
def getVesionFromGit():
try:
taggedRevision = subprocess.check_output(('git rev-list --tags --max-count=1').split(), universal_newlines=True)
cmd = ('git describe --tags ' + taggedRevision).split()
versions = subprocess.check_output(cmd, universal_newlines=True).split()
print('INFO: Version '+ versions[0] + ' has been read from git')
return versions[0]
except subprocess.CalledProcessError:
print('ERROR: Unable to get version from git')
exit(1)
def updateVersionFile(number):
fp = open('cmake/Version.cmake')
content = fp.read()
fp.close()
fp = open('cmake/Version.cmake', 'wt')
fp.write(content.replace('set (SYNERGY_VERSION_BUILD 1)', 'set (SYNERGY_VERSION_BUILD ' + str(number) + ')'))
fp.close()
if __name__ == '__main__':
version = Version(getVesionFromGit())
updateVersionFile(version.build.number)
print('INFO: Generate build number is: <' + str(version) + '>')