windows/assets/update-version.py
Bert van der Weerd 58b2271e34
removed old zip
2022-02-28 23:52:32 +01:00

142 lines
3.9 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()
bash_loc = 'c:/mozilla-build/msys/bin/bash.exe'
# 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 += [bash_loc, '-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(bash_loc):
_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):
i = exec('wget --spider {} 2>/dev/null'.format(url), do_print=False, exit_on_fail=False)
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