scripts/podspec-updater.py (89 lines of code) (raw):

#!/usr/bin/env python3 import sys, getopt, re, plistlib from composite import Composite new_version = '' swift_version = '' platform_version = '' selectedComposite = Composite('') # constants acs_UI_library_Path = '../' acs_version_pattern = re.compile(r"\d\.\d\.\d(-[a-zA-Z]+\.\d)?", re.IGNORECASE) short_version_pattern = re.compile(r"[0-9]+\.[0-9]+", re.IGNORECASE) # calling calling_podspec = 'AzureCommunicationUI/sdk/AzureCommunicationUICalling/AzureCommunicationUICalling.podspec' # chat chat_podspec = 'AzureCommunicationUI/sdk/AzureCommunicationUIChat/AzureCommunicationUIChat.podspec' def update(path, replaceFrom, replaceTo): with open(path, 'r+') as f: s = f.read() f.seek(0) s = s.replace(replaceFrom, replaceTo) f.write(s) f.truncate() def extract_string(string, start, end): str = "(?s)(?<=%s).*?(?=%s)" % (start, end) return re.search(str, string).group() def update_version(): local_path = calling_podspec if selectedComposite == Composite.CALLING else chat_podspec with open(acs_UI_library_Path + local_path, 'r') as fi_pod: s_pod = fi_pod.read() segment = extract_string(s_pod, 'spec.version', '\n') current_version = acs_version_pattern.search(segment).group() update(acs_UI_library_Path + local_path, current_version, new_version) print('Step 1 of 3, spec.version updated to ' + new_version + ' from ' + current_version) def update_swift(): if swift_version == '': print('Step 2 of 3. Skipped') return local_path_pod = calling_podspec if selectedComposite == Composite.CALLING else chat_podspec with open(acs_UI_library_Path + local_path_pod, 'r') as fi_pod: s_pod = fi_pod.read() segment = extract_string(s_pod, 'spec.swift_version', '\n') current_version = short_version_pattern.search(segment).group() new_version = swift_version update(acs_UI_library_Path + local_path_pod, current_version, new_version) print('Step 2 of 3, spec.swift_version updated to ' + new_version + ' from ' + current_version) def update_platform(): if platform_version == '': print('Step 3 of 3. Skipped') return local_path_pod = calling_podspec if selectedComposite == Composite.CALLING else chat_podspec with open(acs_UI_library_Path + local_path_pod, 'r') as fi_pod: s_pod = fi_pod.read() segment = extract_string(s_pod, 'spec.platform', '\n') current_version = short_version_pattern.search(segment).group() new_version = platform_version update(acs_UI_library_Path + local_path_pod, current_version, new_version) print('Step 3 of 3, spec.platform updated to ' + new_version + ' from ' + current_version) def main(argv): try: opts, args = getopt.getopt(argv, "hv:c:s:p:", ["help", "version=", "composite=", "swift=", "platform="]) except getopt.GetoptError: sys.exit('Inputs are missing ' + 'Usage: main-repo-updater.py -c COMPOSITE -v NEW_VERSION -s SWIFT_VERSION -p PLATFORM_VERSION, '+ 'where COMPOSITE should be either calling or chat. And -s and -p are optional.') for opt, arg in opts: if opt == '-h': sys.exit('Expected parameters: ' + '1. -c or --composite of options of \'calling\' or \'chat\' ' + '2. -v or --version ' + '3. (optional) -s or --swift ' + '4. (optional) -p or --platform ') elif opt in ('-v', '--version '): global new_version new_version = arg elif opt in ('-c', '--composite'): global selectedComposite selectedComposite = Composite(arg) elif opt in ('-s', '--swift'): global swift_version swift_version = arg elif opt in ('-p', '--platform'): global platform_version platform_version = arg if selectedComposite == Composite.UNKNOWN: sys.exit('Error: Composite is Unknown. Supported Composites are \'calling\' and \'chat\'.') if swift_version == '': print('Warning: No swift version given. Swift version update would be skipped.') if platform_version == '': print("Warning: No minimum platform version given. Platform update would be skipped. ") update_version() update_swift() update_platform() main(sys.argv[1:])