windows/assets/update-version.py
Bert van der Weerd 6d6eef5bcc
v96.0.2-0
2022-01-21 11:37:23 +01:00

145 lines
4 KiB
Python
Executable file

#!/usr/bin/env python3
import os
import sys
import optparse
import subprocess,os.path
parser = optparse.OptionParser()
parser.add_option('-n', '--no-execute', dest='no_execute', default=False, action="store_true")
options, remainder = parser.parse_args()
# native()/bash()/exec() utility functions
def native(cmd,exit_on_fail = True,do_print=True):
sys.stdout.flush()
if do_print:
print(cmd)
sys.stdout.flush()
retval = os.system(cmd)
if retval != 0 and exit_on_fail:
sys.exit(retval)
return retval
def bash(cmd,exit_on_fail = True,do_print=True):
tmp = []
tmp += ['c:/mozilla-build/msys/bin/bash.exe', '-c', cmd]
sys.stdout.flush()
if do_print:
print(cmd)
sys.stdout.flush()
retval = subprocess.run(tmp).returncode
if retval != 0 and exit_on_fail:
sys.exit(retval)
return retval
def exec(cmd,exit_on_fail = True, do_print=True):
_native = False
if not os.path.isfile('c:/mozilla-build/msys/bin/bash.exe'):
_native = True
if _native:
return native(cmd,exit_on_fail,do_print)
return bash(cmd,exit_on_fail,do_print)
#
#
#def exec(cmd, exit_on_fail = True, do_print = True):
# if cmd != '':
# if do_print:
# print(cmd)
# if not options.no_execute:
# retval = os.system(cmd)
# if retval != 0 and exit_on_fail:
# print("fatal error: command '{}' failed".format(cmd))
# sys.exit(1)
# return retval
# return None
#
#
def get_version_from_file(version_filename = './version'):
with open(version_filename) as f:
lines = f.readlines()
if len(lines) != 1:
sys.stderr.write('error: ./version contains too many lines.')
os.exit(1)
return lines[0].strip()
return None
def make_version_string(major,minor,patch):
if patch == 0:
return '{}.{}'.format(major,minor)
else:
return '{}.{}.{}'.format(major,minor,patch)
def firefox_release_url(ver):
return 'https://archive.mozilla.org/pub/firefox/releases/{}/source/firefox-{}.source.tar.xz'.format(ver, ver)
def check_url_exists(url):
print('[debug] checking url: {}'.format(url))
#i = exec('wget --spider {} 2>/dev/null'.format(url), exit_on_fail=False)
i = exec('wget --spider {}'.format(url), exit_on_fail=False)
print('[debug] return value: {}'.format(i))
if i == 0:
return True
else:
return False
#
# main script
#
base_version = get_version_from_file()
# split base_version into major.minor.patch
split_version = base_version.split(sep='.')
if len(split_version) > 3 or len(split_version) < 1:
sys.stderr.write('error: ./version file contains invalid version number')
sys.exit(1)
elif len(split_version) == 1:
major = int(split_version[0])
minor = 0
patch = 0
elif len(split_version) == 2:
major = int(split_version[0])
minor = int(split_version[1])
patch = 0
elif len(split_version) == 3:
major = int(split_version[0])
minor = int(split_version[1])
patch = int(split_version[2])
# now check if this version exists with Mozilla
if not check_url_exists(firefox_release_url(make_version_string(major,minor,patch))):
sys.stderr.write('error: The current version is unavailable.\n')
sys.exit(1)
# Check for releases..
s = ''
if check_url_exists(firefox_release_url(make_version_string(major,minor,patch+1))):
s = ('{}.{}.{}'.format(major,minor,patch+1))
elif check_url_exists(firefox_release_url(make_version_string(major,minor+1,0))):
s = ('{}.{}'.format(major,minor+1))
elif check_url_exists(firefox_release_url(make_version_string(major+1,0,0))):
s = ('{}.0'.format(major+1))
else:
s = base_version
if s != base_version:
print('The wheel has turned, and version {} has been released.'.format(s))
with open('./version', 'w') as f:
f.write(s)
exec('echo 0 > release')
else:
print('Latest Firefox release is still {}.'.format(base_version))
sys.exit(0) # ensure 0 exit code