init
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Close stale issues and PRs / stale (push) Successful in 13s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Close stale issues and PRs / stale (push) Successful in 13s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
This commit is contained in:
153
Telegram/build/set_version.py
Normal file
153
Telegram/build/set_version.py
Normal file
@@ -0,0 +1,153 @@
|
||||
'''
|
||||
This file is part of Telegram Desktop,
|
||||
the official desktop application for the Telegram messaging service.
|
||||
|
||||
For license and copyright information please follow this link:
|
||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
'''
|
||||
import sys, os, re, subprocess, io
|
||||
|
||||
def finish(code):
|
||||
global executePath
|
||||
os.chdir(executePath)
|
||||
sys.exit(code)
|
||||
|
||||
if sys.platform == 'win32' and not 'COMSPEC' in os.environ:
|
||||
print('[ERROR] COMSPEC environment variable is not set.')
|
||||
finish(1)
|
||||
|
||||
executePath = os.getcwd()
|
||||
scriptPath = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
inputVersion = ''
|
||||
versionOriginal = ''
|
||||
versionMajor = ''
|
||||
versionMinor = ''
|
||||
versionPatch = ''
|
||||
versionAlpha = '0'
|
||||
versionBeta = False
|
||||
for arg in sys.argv:
|
||||
match = re.match(r'^\s*(\d+)\.(\d+)(\.(\d+)(\.(\d+|beta))?)?\s*$', arg)
|
||||
if match:
|
||||
inputVersion = arg
|
||||
versionOriginal = inputVersion
|
||||
versionMajor = match.group(1)
|
||||
versionMinor = match.group(2)
|
||||
versionPatch = match.group(4) if match.group(4) else '0'
|
||||
versionAlphaBeta = match.group(5) if match.group(5) else ''
|
||||
if len(versionAlphaBeta) > 0:
|
||||
if match.group(6) == 'beta':
|
||||
versionBeta = True
|
||||
else:
|
||||
versionAlpha = match.group(6)
|
||||
|
||||
if not len(versionMajor):
|
||||
print("Wrong version parameter")
|
||||
finish(1)
|
||||
|
||||
def checkVersionPart(part):
|
||||
cleared = int(part) % 1000 if len(part) > 0 else 0
|
||||
if str(cleared) != part:
|
||||
print("Bad version part: " + part)
|
||||
finish(1)
|
||||
|
||||
checkVersionPart(versionMajor)
|
||||
checkVersionPart(versionMinor)
|
||||
checkVersionPart(versionPatch)
|
||||
checkVersionPart(versionAlpha)
|
||||
|
||||
versionFull = str(int(versionMajor) * 1000000 + int(versionMinor) * 1000 + int(versionPatch))
|
||||
versionFullAlpha = '0'
|
||||
if versionAlpha != '0':
|
||||
versionFullAlpha = str(int(versionFull) * 1000 + int(versionAlpha))
|
||||
|
||||
versionStr = versionMajor + '.' + versionMinor + '.' + versionPatch
|
||||
versionStrSmall = versionStr if versionPatch != '0' else versionMajor + '.' + versionMinor
|
||||
|
||||
if versionBeta:
|
||||
print('Setting version: ' + versionStr + ' beta')
|
||||
elif versionAlpha != '0':
|
||||
print('Setting version: ' + versionStr + '.' + versionAlpha + ' closed alpha')
|
||||
else:
|
||||
print('Setting version: ' + versionStr + ' stable')
|
||||
|
||||
#def replaceInFile(path, replaces):
|
||||
|
||||
def checkChangelog():
|
||||
global scriptPath, versionStr, versionStrSmall
|
||||
|
||||
count = 0
|
||||
with io.open(scriptPath + '/../../changelog.txt', encoding='utf-8') as f:
|
||||
for line in f:
|
||||
if line.startswith(versionStr + ' ') or line.startswith(versionStrSmall + ' '):
|
||||
count = count + 1
|
||||
if count == 0:
|
||||
print('Changelog entry not found!')
|
||||
finish(1)
|
||||
elif count != 1:
|
||||
print('Wrong changelog entries count found: ' + count)
|
||||
finish(1)
|
||||
|
||||
checkChangelog()
|
||||
|
||||
def replaceInFile(path, replacements):
|
||||
content = ''
|
||||
foundReplacements = {}
|
||||
updated = False
|
||||
with open(path, 'r') as f:
|
||||
for line in f:
|
||||
for replacement in replacements:
|
||||
if re.search(replacement[0], line):
|
||||
changed = re.sub(replacement[0], replacement[1], line)
|
||||
if changed != line:
|
||||
line = changed
|
||||
updated = True
|
||||
foundReplacements[replacement[0]] = True
|
||||
content = content + line
|
||||
for replacement in replacements:
|
||||
if not replacement[0] in foundReplacements:
|
||||
print('Could not find "' + replacement[0] + '" in "' + path + '".')
|
||||
finish(1)
|
||||
if updated:
|
||||
with open(path, 'w') as f:
|
||||
f.write(content)
|
||||
|
||||
print('Patching build/version...')
|
||||
replaceInFile(scriptPath + '/version', [
|
||||
[ r'(AppVersion\s+)\d+', r'\g<1>' + versionFull ],
|
||||
[ r'(AppVersionStrMajor\s+)\d[\d\.]*', r'\g<1>' + versionMajor + '.' + versionMinor ],
|
||||
[ r'(AppVersionStrSmall\s+)\d[\d\.]*', r'\g<1>' + versionStrSmall ],
|
||||
[ r'(AppVersionStr\s+)\d[\d\.]*', r'\g<1>' + versionStr ],
|
||||
[ r'(BetaChannel\s+)\d', r'\g<1>' + ('1' if versionBeta else '0') ],
|
||||
[ r'(AlphaVersion\s+)\d+', r'\g<1>' + versionFullAlpha ],
|
||||
[ r'(AppVersionOriginal\s+)\d[\d\.beta]*', r'\g<1>' + versionOriginal ],
|
||||
])
|
||||
|
||||
print('Patching core/version.h...')
|
||||
replaceInFile(scriptPath + '/../SourceFiles/core/version.h', [
|
||||
[ r'(TDESKTOP_REQUESTED_ALPHA_VERSION\s+)\(\d+ULL\)', r'\g<1>(' + versionFullAlpha + 'ULL)' ],
|
||||
[ r'(AppVersion\s+=\s+)\d+', r'\g<1>' + versionFull ],
|
||||
[ r'(AppVersionStr\s+=\s+)[^;]+', r'\g<1>"' + versionStrSmall + '"' ],
|
||||
[ r'(AppBetaVersion\s+=\s+)[a-z]+', r'\g<1>' + ('true' if versionBeta else 'false') ],
|
||||
])
|
||||
|
||||
parts = [versionMajor, versionMinor, versionPatch, versionAlpha]
|
||||
withcomma = ','.join(parts)
|
||||
withdot = '.'.join(parts)
|
||||
rcReplaces = [
|
||||
[ r'(FILEVERSION\s+)\d+,\d+,\d+,\d+', r'\g<1>' + withcomma ],
|
||||
[ r'(PRODUCTVERSION\s+)\d+,\d+,\d+,\d+', r'\g<1>' + withcomma ],
|
||||
[ r'("FileVersion",\s+)"\d+\.\d+\.\d+\.\d+"', r'\g<1>"' + withdot + '"' ],
|
||||
[ r'("ProductVersion",\s+)"\d+\.\d+\.\d+\.\d+"', r'\g<1>"' + withdot + '"' ],
|
||||
]
|
||||
|
||||
print('Patching Telegram.rc...')
|
||||
replaceInFile(scriptPath + '/../Resources/winrc/Telegram.rc', rcReplaces)
|
||||
|
||||
print('Patching Updater.rc...')
|
||||
replaceInFile(scriptPath + '/../Resources/winrc/Updater.rc', rcReplaces)
|
||||
|
||||
print('Patching appxmanifest.xml...')
|
||||
replaceInFile(scriptPath + '/../Resources/uwp/AppX/AppxManifest.xml', [
|
||||
[ r'( Version=)"\d+\.\d+\.\d+\.\d+"', r'\g<1>"' + withdot + '"' ],
|
||||
])
|
||||
Reference in New Issue
Block a user