#!/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 = 'd:/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_lcc): _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), 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