def main(argv=None): token = utils.get_github_api_accesstoken() asset_pattern = re.compile(utils.sapmachine_asset_pattern()) asset_map_jre = {} asset_map_jdk = {} releases = utils.get_github_releases() for release in releases: if release['prerelease'] is True: continue t = SapMachineTag.from_string(release['name']) if t is None: continue assets = release['assets'] for asset in assets: match = asset_pattern.match(asset['name']) if match is None: continue asset_image_type = match.group(1) asset_os = match.group(3) if asset_os == 'linux-x64': sapmachine_version = t.get_version() build_number = t.get_build_number() buildpack_version = str.format( '{0}.{1}.{2}_{3}.{4}.b{5}', sapmachine_version[0], sapmachine_version[1], sapmachine_version[2], sapmachine_version[3], sapmachine_version[4], build_number if build_number else '0') if asset_image_type == 'jre': asset_map_jre[buildpack_version] = asset[ 'browser_download_url'] else: asset_map_jdk[buildpack_version] = asset[ 'browser_download_url'] local_repo = join(os.getcwd(), 'gh-pages') utils.git_clone('github.com/SAP/SapMachine.git', 'gh-pages', local_repo) write_index_yaml( asset_map_jre, join(local_repo, 'assets', 'cf', 'jre', 'linux', 'x86_64')) write_index_yaml( asset_map_jdk, join(local_repo, 'assets', 'cf', 'jdk', 'linux', 'x86_64')) utils.git_commit(local_repo, 'Updated index.yml', ['assets']) utils.git_push(local_repo) utils.remove_if_exists(local_repo) return 0
def main(argv=None): parser = argparse.ArgumentParser() parser.add_argument('-t', '--tag', help='the SapMachine git tag', metavar='TAG') parser.add_argument('-b', '--build', help='the build number to use, overrules any value from tag(s)', metavar='BUILD_NR') parser.add_argument('-r', '--release', help='set if this is a release build', action='store_true', default=False) parser.add_argument('-g', '--branch', help='the SapMachine git branch', metavar='BRANCH') args = parser.parse_args() configure_opts = [] # parse tag, if given tag = None if args.tag: tag = SapMachineTag.from_string(args.tag) if tag is None: print(str.format("Passed tag {0} not recognized as SapMachine tag, handling as snapshot build", args.tag), file=sys.stderr) # parse major from SapMachine branch, if given major_from_branch = 0 if args.branch: branch_pattern = re.compile(utils.sapmachine_branch_pattern()) match = branch_pattern.match(args.branch) if match is not None: if match.group(1) is not None: major_from_branch = int(match.group(1)) else: major_from_branch = 9999 # determine and set version date release_date = None if tag is not None: releases = utils.get_github_releases() if releases is not None: for release in releases: if release['tag_name'] == tag.as_string(): release_date = release['published_at'].split('T')[0] print(str.format("Set date to release date of {0}: {1}", tag.as_string(), release_date), file=sys.stderr) break if release_date is None: print(str.format("Tag {0} does not seem to exist or data could not be loaded from GitHub", tag.as_string()), file=sys.stderr) if release_date is None: release_date = date.today().strftime("%Y-%m-%d") print(str.format("Set date to today: {0}", release_date), file=sys.stderr) configure_opts.append(VERSION_DATE_ARG.format(release_date)) # determine and set build number build_number = None if args.build is not None: build_number = args.build print(str.format("Set build number from parameter: {0}", build_number), file=sys.stderr) if build_number is None and tag is not None: build_number = tag.get_build_number() if build_number is not None: print(str.format("Set build number from tag: {0}", build_number), file=sys.stderr) else: latest_non_ga_tag = tag.get_latest_non_ga_tag() if latest_non_ga_tag is not None: build_number = latest_non_ga_tag.get_build_number() if build_number is not None: print(str.format("Tag seems to be a ga tag, using build number from latest non-ga tag {0}: {1}", latest_non_ga_tag.as_string(), build_number), file=sys.stderr) if build_number is not None: configure_opts.append(VERSION_BUILD_ARG.format(build_number)) # set version pre version_pre = '' if not args.release: if tag is None: version_pre = 'snapshot' else: version_pre = 'ea' if utils.get_arch().startswith('aarch64'): if not version_pre: version_pre = 'beta' else: version_pre += '-beta' configure_opts.append(VERSION_PRE_ARG.format(version_pre)) # set version opt if tag is None: configure_opts.append(VERSION_OPT_ARG.format(release_date)) else: if args.release and utils.sapmachine_is_lts(tag.get_major()): if tag.get_major() < 15: configure_opts.append(VERSION_OPT_ARG.format('LTS-sapmachine')) else: configure_opts.append(VERSION_OPT_ARG.format('LTS')) else: if tag.get_major() < 15: configure_opts.append(VERSION_OPT_ARG.format('sapmachine')) else: configure_opts.append(VERSION_OPT_ARG.format('')) # set version extra1 arg (= sap version) if tag is not None and tag.get_version_sap() is not None: configure_opts.append(VERSION_EXTRA1_ARG.format(tag.get_version_sap())) # set vendor version string if (tag is None or (tag.get_major() > 14) or (tag.get_major() == 14 and tag.get_update() > 1) or (tag.get_major() == 11 and tag.get_update() > 7)): configure_opts.append(VENDOR_VERSION_STRING_ARG) # set other vendor options configure_opts.append(VENDOR_NAME_ARG) configure_opts.append(VENDOR_URL_ARG) configure_opts.append(VENDOR_BUG_URL_ARG) configure_opts.append(VENDOR_VM_BUG_URL_ARG) # set getest option if 'GTEST_DIR' in os.environ: if (tag is not None and tag.get_major() >= 15) or major_from_branch >= 15: configure_opts.append(GTEST_OPT.format(os.environ['GTEST_DIR'])) print(' '.join(configure_opts)) return 0
def main(argv=None): parser = argparse.ArgumentParser() parser.add_argument('-m', '--major', help='the SapMachine major version to build', metavar='MAJOR', required=True) parser.add_argument('-d', '--destination', help='the download destination', metavar='DIR', required=True) args = parser.parse_args() boot_jdk_major_max = int(args.major) boot_jdk_major_min = boot_jdk_major_max - 1 destination = os.path.realpath(args.destination) releases = utils.get_github_releases() platform = str.format('{0}-{1}_bin', utils.get_system(), utils.get_arch()) retries = 2 releases = extra_bootjdks + releases while retries > 0: for release in releases: if release['prerelease']: continue tag = SapMachineTag.from_string(release['name']) if tag is None: print( str.format("SapMachine release {0} not recognized", release['name'])) continue major = tag.get_major() if major <= boot_jdk_major_max and major >= boot_jdk_major_min: assets = release['assets'] for asset in assets: asset_name = asset['name'] asset_url = asset['browser_download_url'] if 'jdk' in asset_name and platform in asset_name and ( asset_name.endswith('.tar.gz') or asset_name.endswith('.zip') ) and 'symbols' not in asset_name: archive_path = join(destination, asset_name) utils.remove_if_exists(archive_path) utils.download_artifact(asset_url, archive_path) boot_jdk_exploded = join(destination, 'boot_jdk') utils.remove_if_exists(boot_jdk_exploded) os.makedirs(boot_jdk_exploded) utils.extract_archive(archive_path, boot_jdk_exploded) sapmachine_folder = [ f for f_ in [ glob.glob(join(boot_jdk_exploded, e)) for e in ('sapmachine*', 'jdk*') ] for f in f_ ] if sapmachine_folder is not None: sapmachine_folder = sapmachine_folder[0] files = os.listdir(sapmachine_folder) for f in files: shutil.move(join(sapmachine_folder, f), boot_jdk_exploded) utils.remove_if_exists(sapmachine_folder) if utils.get_system() == 'osx': files = os.listdir( join(boot_jdk_exploded, 'Contents', 'Home')) for f in files: shutil.move( join(boot_jdk_exploded, 'Contents', 'Home', f), boot_jdk_exploded) utils.remove_if_exists( join(boot_jdk_exploded, 'Contents')) return 0 retries -= 1 if retries == 1: boot_jdk_major_min = boot_jdk_major_max - 2 return 0
def main(argv=None): parser = argparse.ArgumentParser() parser.add_argument('-t', '--tag', help='Test a tag', metavar='TAG') parser.add_argument('-l', '--list-latest-non-ga', default=False, help='List the latest non-ga tag', action='store_true') parser.add_argument( '-a', '--test-all-tags', nargs='?', default='not present', const='all', help='List latest tags, value could be sap,jdk,unknown') parser.add_argument('-r', '--test-all-releases', default=False, help='List latest releases', action='store_true') parser.add_argument('-v', '--jvm', help='Test a VM', metavar='VM Path') parser.add_argument('-s', '--version-string', help='Test a VM version String', metavar='Version String') args = parser.parse_args() if args.tag: tag = Tag.from_string(args.tag) if tag is None: print( str.format("Tag value {0} seems to be an invalid tag", args.tag)) sys.exit(-1) tag.print_details() if args.list_latest_non_ga: latest_non_ga_tag = tag.get_latest_non_ga_tag() if latest_non_ga_tag is None: print(str.format('Latest non-ga tag is None')) else: print(str.format('Latest non-ga tag:')) latest_non_ga_tag.print_details() if args.test_all_tags != 'not present': print_unknown = args.test_all_tags != "sap" and args.test_all_tags != "jdk" print_sap = args.test_all_tags != "unknown" and args.test_all_tags != "jdk" print_jdk = args.test_all_tags != "unknown" and args.test_all_tags != "sap" tags = utils.get_github_tags() if tags is None: print("Could not get tags from GitHub") sys.exit(-1) for tag in tags: to = Tag.from_string(tag['name']) if to is None: if print_unknown: print(str.format("Tag {0} is unknown.", tag['name'])) elif to.is_sapmachine_tag(): if print_sap: to.print_details() latest_non_ga = to.get_latest_non_ga_tag() if latest_non_ga is None: print( str.format("Latest non-ga tag for {0} is None", to.as_string())) sys.exit(-1) elif latest_non_ga != to: print(" Latest non-ga tag:") latest_non_ga.print_details(indent=' ') elif to.is_jdk_tag(): if print_jdk: to.print_details() latest_non_ga = to.get_latest_non_ga_tag() if latest_non_ga is None: print( str.format("Latest non-ga tag for {0} is None", to.as_string())) sys.exit(-1) elif latest_non_ga != to: print(" Latest non-ga tag:") latest_non_ga.print_details(indent=' ') if args.test_all_releases: releases = utils.get_github_releases() if releases is None: print("Could not get releases from GitHub") sys.exit(-1) for release in releases: t = SapMachineTag.from_string(release['name']) if t is None: print(str.format("Release {0} is unknown.", release['name'])) else: t.print_details() if args.jvm: _, std_out, std_err = utils.run_cmd( [join(args.jvm, 'bin', 'java.exe'), '-version'], std=True) print('Stdout:') print(std_out) print('Stderr') print(std_err) version, major = utils.sapmachine_version_components(std_err) version_components = [version, major] print(' '.join([ version_component if version_component else 'N/A' for version_component in version_components ])) sapmachine_version = [e for e in version.split('.')] print(sapmachine_version) if args.version_string: print( str.format("Version string to test: \"{0}\".", args.version_string)) version, major = utils.sapmachine_version_components( args.version_string) version_components = [version, major] print(' '.join([ version_component if version_component else 'N/A' for version_component in version_components ])) sapmachine_version = [e for e in version.split('.')] print(sapmachine_version) return 0
def main(argv=None): print("Querying GitHub for SapMachine releases...") sys.stdout.flush() releases = utils.get_github_releases() print("Done.") asset_pattern = re.compile(utils.sapmachine_asset_pattern()) release_dict = {} for release in releases: sapMachineTag = SapMachineTag.from_string(release['name']) if sapMachineTag is None: print(str.format("{0} is no SapMachine release, dropping", release['name'])) continue major = sapMachineTag.get_major() if not major in release_dict: sapMachineVersion = SapMachineMajorVersion(major) release_dict[major] = sapMachineVersion else: sapMachineVersion = release_dict[major] sapMachineRelease = sapMachineVersion.get_release_object_to_update_if_tag_is_newer(sapMachineTag, release['prerelease'], release['html_url']) if sapMachineRelease is None: continue for asset in release['assets']: match = asset_pattern.match(asset['name']) if match is None: continue image_type = match.group(1) os = match.group(3) file_type = match.group(4) if os == 'windows-x64' and file_type == '.msi': os = 'windows-x64-installer' if os == 'macos-x64' or os == 'osx-x64': if file_type == '.dmg': os = 'macos-x64-installer' else: os = 'macos-x64' if os == 'macos-aarch64' or os == 'osx-aarch64': if file_type == '.dmg': os = 'macos-aarch64-installer' else: os = 'macos-aarch64' sapMachineRelease.add_asset(image_type, os, asset['browser_download_url']) # reduce releases dictionary by removing obsolete versions # Keep LTS versions, latest release and the release that is currently in development latest_released_version = 0 for major in list(release_dict.keys()): if not release_dict[major].is_released(): continue if major > latest_released_version: if latest_released_version > 0 and not release_dict[latest_released_version].is_lts(): del release_dict[latest_released_version] latest_released_version = major elif not release_dict[major].is_lts(): del release_dict[major] json_root = { 'majors':[], 'imageTypes':[], 'os':[], 'assets':{} } for major in release_dict: release_dict[major].add_to_release_json(json_root) for image_type in image_type_description: json_root['imageTypes'].append({'key': image_type, 'value': image_type_description[image_type]['name'], 'ordinal': image_type_description[image_type]['ordinal']}) for os in os_description: json_root['os'].append({'key': os, 'value': os_description[os]['name'], 'ordinal': os_description[os]['ordinal']}) files = [{ 'location': join('assets', 'data', 'sapmachine_releases.json'), 'data': json.dumps(json_root, indent=4), 'commit_message': 'Updated release data.' }] for major in release_dict: if not release_dict[major].is_released(): continue files.append({ 'location': join('latest', str(major), 'index.md'), 'data': Template(latest_template).substitute( major = major, url = release_dict[major].release.url ), 'commit_message': str.format('Updated latest link for SapMachine {0}', major) }) push_to_git(files) return 0
def main(argv=None): parser = argparse.ArgumentParser() parser.add_argument('-t', '--tag', help='the SapMachine tag', metavar='MAJOR', required=True) parser.add_argument('-d', '--description', help='the description of the release', required=False) parser.add_argument('-p', '--prerelease', help='this is a pre-release', action='store_true', default=False) parser.add_argument('-a', '--asset', help='the asset to upload', metavar='ASSET', required=False) args = parser.parse_args() tag = args.tag prerelease = args.prerelease asset = args.asset description = '' if args.description is None else args.description rc = 0 if asset is not None: asset_file = os.path.realpath(asset) asset_name = os.path.basename(asset_file) asset_mime_type = mimetypes.guess_type(asset_file) if asset_mime_type is None or asset_mime_type[0] is None: asset_mime_type = 'application/octet-stream' print(str.format('could not detect mime-type: falling back to "{0}"', asset_mime_type)) else: asset_mime_type = asset_mime_type[0] print(str.format('detected mime-type "{0}"', asset_mime_type)) releases = utils.get_github_releases() release_id = None upload_url = None for release in releases: if release['tag_name'] == tag: release_id = release['id'] upload_url = release['upload_url'] break if release_id is None: ''' release does not exist yet -> create it ''' data = json.dumps({ "tag_name": tag, "name": tag, "body": description, "draft": False, "prerelease": prerelease }) response = utils.github_api_request('releases', data=data, method='POST', content_type='application/json') release_id = response['id'] upload_url = response['upload_url'] print(str.format('created release "{0}"', tag)) if asset is not None: ''' asset file is specified (-a) first check wether the asset already exists ''' gh_assets = utils.github_api_request(str.format('releases/{0}/assets', release_id), per_page=50) for gh_asset in gh_assets: if gh_asset['name'] == asset_name: ''' asset already exists -> skip ''' print(str.format('error: asset "{0}" already exists ...', asset_name)) return 1 upload_url = str(upload_url.split('{', 1)[0] + '?name=' + quote(asset_name)) ''' read the contents of the asset file ''' with open(asset_file, 'rb') as asset_file: asset_data = asset_file.read() asset_length = len(asset_data) retry = 2 rc = -1 while retry > 0: try: ''' upload the asset file ''' print(str.format('uploading asset "{0}" with a length of {1} bytes ...', asset_name, str(asset_length))) utils.github_api_request(url=upload_url, data=asset_data, method='POST', content_type=asset_mime_type) rc = 0 break except IOError as e: # _type, value, _traceback = sys.exc_info() # traceback.print_exception(_type, value, _traceback) print(str.format('Error uploading asset "{0}": {1}', asset_name, e)) retry -= 1 except URLError as e: print(str.format('Error uploading asset "{0}": {1}', asset_name, e)) retry -= 1 return rc
def main(argv=None): token = utils.get_github_api_accesstoken() org = 'SAP' repository = 'SapMachine' asset_pattern = re.compile(utils.sapmachine_asset_pattern()) major_dict = {} release_dict = {} image_dict = {} latest_link_dict = {} releases = utils.get_github_releases() for release in releases: version, version_part, major, update, version_sap, build_number, os_ext = utils.sapmachine_tag_components(release['name']) is_prerelease = release['prerelease'] if version is None or os_ext: continue if major in major_dict: if not is_prerelease and major_dict[major]: # this is not a pre-release but the release before this was a pre-release # remove all assets if major in release_dict: release_dict[major].clear_assets() # remove entry in the image dictionary if major in image_dict: del image_dict[major] else: if not major_dict[major]: # the release before this was a release # skip, we only keep the latest release version continue major_dict[major] = is_prerelease assets = release['assets'] if is_prerelease is not True and major not in latest_link_dict: latest_link_dict[major] = Template(latest_template).substitute( major=major, url = release['html_url'] ) has_dmg = False for asset in assets: match = asset_pattern.match(asset['name']) if match is not None: asset_image_type = match.group(1) asset_os = match.group(3) file_type = match.group(4) if asset_os == 'windows-x64' and file_type == '.msi': asset_os = 'windows-x64-installer' if asset_os == 'osx-x64': if file_type == '.dmg': has_dmg = True elif has_dmg: continue tag = release['name'] image_is_lts = utils.sapmachine_is_lts(major) and not release['prerelease'] if major not in image_dict: image_dict[major] = { 'label': str.format('SapMachine {0}', major), 'lts': image_is_lts, 'ea': release['prerelease'] } if major in release_dict: releases_for_major = release_dict[major] else: releases_for_major = Releases(major) release_dict[major] = releases_for_major release_dict[major].add_asset(asset['browser_download_url'], asset_image_type, asset_os, tag) latest_lts_version = 0 latest_non_lts_version = 0 for major in image_dict: if image_dict[major]['lts'] and int(major) > latest_lts_version: latest_lts_version = int(major) if not image_dict[major]['lts'] and not image_dict[major]['ea'] and int(major) > latest_non_lts_version: latest_non_lts_version = int(major) json_root = { 'majors':[], 'imageTypes':[], 'os':[], 'assets':{} } for major in sorted(image_dict): add = False if image_dict[major]['lts']: if int(major) >= latest_lts_version: add = True else: if int(major) >= latest_non_lts_version and int(major) >= latest_lts_version: add = True if add: json_root['majors'].append({'id': major, 'label': image_dict[major]['label'], 'lts': image_dict[major]['lts'], 'ea': image_dict[major]['ea']}) else: del image_dict[major] def get_os_key(os): return os_description[os]['ordinal'] def get_image_type_key(image_type): return image_type_description[image_type]['ordinal'] for os in sorted(os_description, key=get_os_key): json_root['os'].append({'key': os, 'value': os_description[os]['name'], 'ordinal': os_description[os]['ordinal']}) for image_type in sorted(image_type_description, key=get_image_type_key): json_root['imageTypes'].append({'key': image_type, 'value': image_type_description[image_type]['name'], 'ordinal': image_type_description[image_type]['ordinal']}) for major in release_dict: if major in image_dict: json_root['assets'].update(release_dict[major].transform()) files = [ { 'location': join('assets', 'data', 'sapmachine_releases.json'), 'data': json.dumps(json_root, indent=4), 'commit_message': 'Updated release data.' } ] for major in latest_link_dict: files.append({ 'location': join('latest', major, 'index.md'), 'data': latest_link_dict[major], 'commit_message': str.format('Updated latest link for SapMachine {0}', major) }) push_to_git(files) #with open('website_data.json', 'w') as website_data_json: # website_data_json.write(json.dumps(json_root, indent=4)) return 0
def main(argv=None): parser = argparse.ArgumentParser() parser.add_argument('-t', '--tag', help='the SapMachine git tag', metavar='TAG') parser.add_argument( '-m', '--major', help='the SapMachine major version, overrules any value from tag(s)', metavar='MAJOR') parser.add_argument( '-b', '--build', help='the build number, overrules any value from tag(s)', metavar='BUILD_NR') parser.add_argument('-r', '--release', help='set if this is a release build', action='store_true', default=False) args = parser.parse_args() configure_opts = [] # initialize major from args major = args.major if major is not None: major = int(major) # initialize build number from args build_number = args.build if args.build is not None: print(str.format("Set build number from parameter: {0}", build_number), file=sys.stderr) # parse tag, if given, and determine major tag = None if args.tag: tag = SapMachineTag.from_string(args.tag) if tag is None: print(str.format("Tag {0} not recognized as SapMachine tag", args.tag), file=sys.stderr) else: if (major is not None and tag.get_major() != major): print(str.format( "Warning: Using major version {0}, given by parameter. Major version from tag would be {1}.", major, tag.get_major()), file=sys.stderr) else: major = tag.get_major() # determine build number from tag if build_number is None: build_number = tag.get_build_number() if build_number is not None: print(str.format("Set build number from tag: {0}", build_number), file=sys.stderr) else: latest_non_ga_tag = tag.get_latest_non_ga_tag() if latest_non_ga_tag is not None: build_number = latest_non_ga_tag.get_build_number() if build_number is not None: print(str.format( "Tag seems to be a ga tag, using build number from latest non-ga tag {0}: {1}", latest_non_ga_tag.as_string(), build_number), file=sys.stderr) # if major could not be determined, use default if major is None: major = utils.sapmachine_default_major() # set build number if build_number is not None: configure_opts.append(VERSION_BUILD_ARG.format(build_number)) # determine and set version date in non-release builds # in release builds we rely on DEFAULT_VERSION_DATE in version-numbers.conf if not args.release: release_date = None if tag is not None: releases = utils.get_github_releases() if releases is not None: for release in releases: if release['tag_name'] == tag.as_string(): release_date = release['created_at'].split('T')[0] print(str.format( "Set date to release date of {0}: {1}", tag.as_string(), release_date), file=sys.stderr) break if release_date is None: print(str.format( "Tag {0} does not seem to exist or data could not be loaded from GitHub", tag.as_string()), file=sys.stderr) if release_date is None: release_date = date.today().strftime("%Y-%m-%d") print(str.format("Set date to today: {0}", release_date), file=sys.stderr) configure_opts.append(VERSION_DATE_ARG.format(release_date)) # set version pre version_pre = '' if not args.release: if tag is None: version_pre = 'snapshot' else: version_pre = 'ea' if utils.get_system(major) == 'linux' and utils.get_arch().startswith( 'aarch64'): if not version_pre: version_pre = 'beta' else: version_pre += '-beta' configure_opts.append(VERSION_PRE_ARG.format(version_pre)) # set version opt if tag is None: configure_opts.append(VERSION_OPT_ARG.format(release_date)) else: if args.release and utils.sapmachine_is_lts(major): if major < 15: configure_opts.append(VERSION_OPT_ARG.format('LTS-sapmachine')) else: configure_opts.append(VERSION_OPT_ARG.format('LTS')) else: if major < 15: configure_opts.append(VERSION_OPT_ARG.format('sapmachine')) else: configure_opts.append(VERSION_OPT_ARG.format('')) # set version extra1 arg (= sap version) if tag is not None and tag.get_version_sap() is not None: configure_opts.append(VERSION_EXTRA1_ARG.format(tag.get_version_sap())) # set vendor version string if (tag is None or (major > 14) or (major == 14 and tag.get_update() > 1) or (major == 11 and tag.get_update() > 7)): configure_opts.append(VENDOR_VERSION_STRING_ARG) # set other vendor options configure_opts.append(VENDOR_NAME_ARG) configure_opts.append(VENDOR_URL_ARG) configure_opts.append(VENDOR_BUG_URL_ARG) configure_opts.append(VENDOR_VM_BUG_URL_ARG) # set getest option if 'GTEST_DIR' in os.environ: if major >= 15: configure_opts.append(GTEST_OPT.format(os.environ['GTEST_DIR'])) print(' '.join(configure_opts)) return 0