diff --git a/.github/workflows/job-build-flatpak.yaml b/.github/workflows/job-build-flatpak.yaml index a77634308..fc478d961 100644 --- a/.github/workflows/job-build-flatpak.yaml +++ b/.github/workflows/job-build-flatpak.yaml @@ -57,7 +57,7 @@ jobs: - name: Version Info id: version run: | - python3 CI/build_version.py + python3 scripts/build_version.py mkdir -p version-info && cd version-info && cmake .. && cd .. . ./version-info/version rm -rf version-info diff --git a/.github/workflows/job-build-mac-10.13.yaml b/.github/workflows/job-build-mac-10.13.yaml index 3942552e6..d8fe5342a 100644 --- a/.github/workflows/job-build-mac-10.13.yaml +++ b/.github/workflows/job-build-mac-10.13.yaml @@ -47,7 +47,7 @@ jobs: CMAKE_PREFIX_PATH: "${{ env.Qt5_DIR }};${{ env.OpenSSL_DIR }}" run: | export PATH="$Qt5_DIR/bin:$PATH" - python3 CI/build_version.py + python3 scripts/build_version.py mkdir build cd build cmake \ diff --git a/.github/workflows/job-build-mac-m1.yaml b/.github/workflows/job-build-mac-m1.yaml index c03d8eec5..ca0697d9d 100644 --- a/.github/workflows/job-build-mac-m1.yaml +++ b/.github/workflows/job-build-mac-m1.yaml @@ -59,7 +59,7 @@ jobs: env: CMAKE_BUILD_TYPE: Release run: | - python3 CI/build_version.py + python3 scripts/build_version.py mkdir build cd build cmake \ diff --git a/ChangeLog b/ChangeLog index 74ab24611..c167228aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19,6 +19,7 @@ CI changes: - #7317 Bump sonar-scanner-cli to 5.0.1.3006 - #7318 Remove Azure Pipelines config entirely - #7319 Remove workflows for slow self-hosted RPi runners +- #7320 Move build_version.py script to scripts dir # 1.14.6 diff --git a/scripts/build_version.py b/scripts/build_version.py new file mode 100644 index 000000000..65883e44a --- /dev/null +++ b/scripts/build_version.py @@ -0,0 +1,137 @@ +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 isSamePatch(self, version): + return (self.major.number == version.major.number and + self.minor.number == version.minor.number and + self.patch.number == version.patch.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 findVersion(versions, cmakeVersion): + gitVersion = Version(versions[0]) + for version in versions: + ver = Version(version) + if ver.isSamePatch(cmakeVersion): + gitVersion = ver + break + print('INFO: Version '+ str(gitVersion) + ' has been read from git') + return gitVersion + +def getVesionFromGit(cmakeVersion): + try: + taggedRevision = subprocess.check_output(('git rev-list --tags --max-count=100').split(), universal_newlines=True) + cmd = ('git describe --tags ' + taggedRevision).split() + versions = subprocess.check_output(cmd, universal_newlines=True).split() + return findVersion(versions, cmakeVersion) + 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() + +def getOptionValue(source, option): + start = source.find(option) + if (start != -1): + start += len(option) + 1 + end = source.find(')', start) + return source[start : end] + else: + print("ERROR: Can't find option <" + option + ">"); + +def getVersionFromFile(): + fp = open('cmake/Version.cmake') + content = fp.read() + fp.close() + + major = getOptionValue(content, 'SYNERGY_VERSION_MAJOR') + minor = getOptionValue(content, 'SYNERGY_VERSION_MINOR') + patch = getOptionValue(content, 'SYNERGY_VERSION_PATCH') + + return Version(major + '.' + minor + '.' + patch) + +if __name__ == '__main__': + cmakeVersion = getVersionFromFile() + gitVersion = getVesionFromGit(cmakeVersion) + updateVersionFile(gitVersion.build.number) + print('INFO: Build number is: <' + str(gitVersion) + '>') \ No newline at end of file