def main(): args = util.get_commandline_args() new_icons = filehandler.find_new_icons(args.devicon_json_path, args.icomoon_json_path) if len(new_icons) == 0: print("No files need to be uploaded. Ending script...") return # print list of new icons print("List of new icons:", *new_icons, sep="\n") runner = None try: runner = SeleniumRunner(args.download_path, args.geckodriver_path, args.headless) runner.upload_icomoon(args.icomoon_json_path) svgs = filehandler.get_svgs_paths(new_icons, args.icons_folder_path) runner.upload_svgs(svgs) zip_name = "devicon-v1.0.zip" zip_path = Path(args.download_path, zip_name) runner.download_icomoon_fonts(zip_path) filehandler.extract_files(str(zip_path), args.download_path) filehandler.rename_extracted_files(args.download_path) print("Task completed.") except TimeoutException as e: print(e) print(e.stacktrace) finally: runner.close()
def main(): runner = None try: args = arg_getters.get_selenium_runner_args(peek_mode=True) all_icons = filehandler.get_json_file_content(args.devicon_json_path) # get only the icon object that has the name matching the pr title filtered_icon = util.find_object_added_in_pr(all_icons, args.pr_title) check_devicon_object(filtered_icon) print("Icon being checked:", filtered_icon, sep="\n", end='\n\n') runner = PeekSeleniumRunner(args.download_path, args.geckodriver_path, args.headless) svgs = filehandler.get_svgs_paths([filtered_icon], args.icons_folder_path, True) screenshot_folder = filehandler.create_screenshot_folder("./") svgs_with_strokes = runner.peek(svgs, screenshot_folder, filtered_icon) print("Task completed.") message = "" if svgs_with_strokes != []: svgs_str = "\n\n".join(svgs_with_strokes) message = "\n### WARNING -- Strokes detected in the following SVGs:\n" + svgs_str + "\n" filehandler.write_to_file("./err_messages.txt", message) except Exception as e: filehandler.write_to_file("./err_messages.txt", str(e)) util.exit_with_err(e) finally: if runner is not None: runner.close()
def main(): runner = None try: args = arg_getters.get_selenium_runner_args(True) new_icons = filehandler.find_new_icons(args.devicon_json_path, args.icomoon_json_path) if len(new_icons) == 0: raise Exception("No files need to be uploaded. Ending script...") # get only the icon object that has the name matching the pr title filtered_icon = find_object_added_in_this_pr(new_icons, args.pr_title) print("Icon being checked:", filtered_icon, sep="\n", end='\n\n') runner = SeleniumRunner(args.download_path, args.geckodriver_path, args.headless) svgs = filehandler.get_svgs_paths([filtered_icon], args.icons_folder_path, True) screenshot_folder = filehandler.create_screenshot_folder("./") runner.upload_svgs(svgs, screenshot_folder) print("Task completed.") # no errors, do this so upload-artifact won't fail filehandler.write_to_file("./err_messages.txt", "0") except Exception as e: filehandler.write_to_file("./err_messages.txt", str(e)) util.exit_with_err(e) finally: runner.close()
def main(): args = arg_getters.get_selenium_runner_args() new_icons = filehandler.find_new_icons(args.devicon_json_path, args.icomoon_json_path) if len(new_icons) == 0: sys.exit("No files need to be uploaded. Ending script...") # print list of new icons print("List of new icons:", *new_icons, sep = "\n") runner = None try: runner = SeleniumRunner(args.download_path, args.geckodriver_path, args.headless) runner.upload_icomoon(args.icomoon_json_path) svgs = filehandler.get_svgs_paths(new_icons, args.icons_folder_path, True) runner.upload_svgs(svgs) zip_name = "devicon-v1.0.zip" zip_path = Path(args.download_path, zip_name) runner.download_icomoon_fonts(zip_path) filehandler.extract_files(str(zip_path), args.download_path) filehandler.rename_extracted_files(args.download_path) print("Task completed.") except TimeoutException as e: util.exit_with_err("Selenium Time Out Error: \n" + str(e)) except Exception as e: util.exit_with_err(e) finally: runner.close()
def main(): """ Build the icons using Icomoon. Also optimize the svgs. """ runner = None logfile = open("log.txt", "w") try: args = arg_getters.get_selenium_runner_args() new_icons = get_icons_for_building(args.icomoon_json_path, args.devicon_json_path, args.token, logfile) if len(new_icons) == 0: sys.exit("No files need to be uploaded. Ending script...") print(f"There are {len(new_icons)} icons to be build. Here are they:", *new_icons, sep = "\n", file=logfile) print("Begin optimizing files...", file=logfile) optimize_svgs(new_icons, args.icons_folder_path, logfile=logfile) print("Updating the icomoon json...", file=logfile) update_icomoon_json(new_icons, args.icomoon_json_path, logfile) print("Start the building icons process...", file=logfile) icon_svgs = filehandler.get_svgs_paths( new_icons, args.icons_folder_path, icon_versions_only=True) zip_name = "devicon-v1.0.zip" zip_path = Path(args.download_path, zip_name) screenshot_folder = filehandler.create_screenshot_folder("./") runner = BuildSeleniumRunner(args.download_path, args.geckodriver_path, args.headless, log_output=logfile) runner.build_icons(args.icomoon_json_path, zip_path, icon_svgs, screenshot_folder) filehandler.extract_files(str(zip_path), args.download_path, logfile) filehandler.rename_extracted_files(args.download_path, logfile) print("Creating the release message by querying the GitHub API...", file=logfile) get_release_message(args.token, logfile) print("Closing issues with the `in-develop` label.", file=logfile) issues = api_handler.get_issues_by_labels(args.token, ["in-develop"]) issue_nums = [issue_num["number"] for issue_num in issues] api_handler.close_issues(args.token, issue_nums) print("Task completed.", file=logfile) except TimeoutException as e: util.exit_with_err(Exception("Selenium Time Out Error: \n" + str(e)), logfile) except Exception as e: util.exit_with_err(e, logfile) finally: print("Exiting", file=logfile) if runner is not None: runner.close() logfile.close()
def main(): """ Check the quality of the svgs of the whole icons folder. """ args = arg_getters.get_check_svgs_monthly_args() try: devicon_json = filehandler.get_json_file_content( args.devicon_json_path) svgs = filehandler.get_svgs_paths(devicon_json, args.icons_folder_path) util.check_svgs(svgs) print("All SVGs found were good. Task completed.") except Exception as e: util.exit_with_err(e)
def main(): """ Check the quality of the svgs IF this is an icon PR. Else, does nothing. If any svg error is found, create a json file called 'svg_err_messages.json' in the root folder that will contains the error messages. """ args = arg_getters.get_check_icon_pr_args() try: all_icons = filehandler.get_json_file_content(args.devicon_json_path) # get only the icon object that has the name matching the pr title filtered_icon = util.find_object_added_in_pr(all_icons, args.pr_title) print("Checking devicon.json object: " + str(filtered_icon)) devicon_err_msg = check_devicon_object(filtered_icon) # check the file names filename_err_msg = "" svgs = None try: svgs = filehandler.get_svgs_paths([filtered_icon], args.icons_folder_path, as_str=False) print("SVGs to check: ", *svgs, sep='\n') except ValueError as e: filename_err_msg = "Error found regarding filenames:\n- " + e.args[ 0] # check the svgs if svgs is None or len(svgs) == 0: print("No SVGs to check, ending script.") svg_err_msg = "Error checking SVGs: no SVGs to check. Might be caused by above issues." else: svg_err_msg = check_svgs(svgs) err_msg = [] if devicon_err_msg != "": err_msg.append(devicon_err_msg) if filename_err_msg != "": err_msg.append(filename_err_msg) if svg_err_msg != "": err_msg.append(svg_err_msg) filehandler.write_to_file("./err_messages.txt", "\n\n".join(err_msg)) print("Task completed.") except Exception as e: filehandler.write_to_file("./err_messages.txt", str(e)) util.exit_with_err(e)
def optimize_svgs(new_icons: List[str], icons_folder_path: str, logfile: FileIO): """ Optimize the newly added svgs. This is done in batches since the command line has a limit on characters allowed. :param new_icons - the new icons that need to be optimized. :param icons_folder_path - the path to the /icons folder. :param logfile - the file obj to store logging info in. """ svgs = filehandler.get_svgs_paths(new_icons, icons_folder_path, icon_versions_only=False) start = 0 step = 10 for i in range(start, len(svgs), step): batch = svgs[i:i + step] print(f"Optimizing these files\n{batch}", file=logfile) subprocess.run(["npm", "run", "optimize-svg", "--", f"--svgFiles={json.dumps(batch)}"], shell=True)
def main(): """ Build the icons using Icomoon. Also optimize the svgs. """ runner = None try: args = arg_getters.get_selenium_runner_args() new_icons = get_icons_for_building(args.icomoon_json_path, args.devicon_json_path, args.token) if len(new_icons) == 0: sys.exit("No files need to be uploaded. Ending script...") print(f"There are {len(new_icons)} icons to be build. Here are they:", *new_icons, sep="\n") print("Begin optimizing files...") optimize_svgs(new_icons, args.icons_folder_path) print("Updating the icomoon json...") update_icomoon_json(new_icons, args.icomoon_json_path) print("Start the building icons process...") icon_svgs = filehandler.get_svgs_paths(new_icons, args.icons_folder_path, icon_versions_only=True) zip_name = "devicon-v1.0.zip" zip_path = Path(args.download_path, zip_name) screenshot_folder = filehandler.create_screenshot_folder("./") runner = BuildSeleniumRunner(args.download_path, args.geckodriver_path, args.headless) runner.build_icons(args.icomoon_json_path, zip_path, icon_svgs, screenshot_folder) filehandler.extract_files(str(zip_path), args.download_path) filehandler.rename_extracted_files(args.download_path) print("Creating the release message by querying the GitHub API...") get_release_message(args.token) print("Task completed.") except TimeoutException as e: util.exit_with_err("Selenium Time Out Error: \n" + str(e)) except Exception as e: util.exit_with_err(e) finally: if runner is not None: runner.close()
def main(): args = arg_getters.get_selenium_runner_args(True) new_icons = filehandler.find_new_icons(args.devicon_json_path, args.icomoon_json_path) # get only the icon object that has the name matching the pr title filtered_icons = find_object_added_in_this_pr(new_icons, args.pr_title) if len(new_icons) == 0: sys.exit("No files need to be uploaded. Ending script...") if len(filtered_icons) == 0: message = "No icons found matching the icon name in the PR's title.\n" \ "Ensure that a new icon entry is added in the devicon.json and the PR title matches the convention here: \n" \ "https://github.com/devicons/devicon/blob/master/CONTRIBUTING.md#overview\n" \ "Ending script...\n" sys.exit(message) # print list of new icons print("List of new icons:", *new_icons, sep="\n") print("Icons being uploaded:", *filtered_icons, sep="\n", end='\n\n') runner = None try: runner = SeleniumRunner(args.download_path, args.geckodriver_path, args.headless) svgs = filehandler.get_svgs_paths(filtered_icons, args.icons_folder_path, True) screenshot_folder = filehandler.create_screenshot_folder("./") runner.upload_svgs(svgs, screenshot_folder) print("Task completed.") except TimeoutException as e: util.exit_with_err("Selenium Time Out Error: \n" + str(e)) except Exception as e: util.exit_with_err(e) finally: runner.close()
def main(): """ Check the quality of the svgs. If any error is found, set an environmental variable called ERR_MSGS that will contains the error messages. """ args = arg_getters.get_check_svgs_args() new_icons = filehandler.find_new_icons(args.devicon_json_path, args.icomoon_json_path) if len(new_icons) == 0: sys.exit("No files need to be uploaded. Ending script...") # print list of new icons print("SVGs being checked:", *new_icons, sep = "\n", end='\n\n') time.sleep(1) # do this so the logs stay clean try: # check the svgs svgs = filehandler.get_svgs_paths(new_icons, args.icons_folder_path, as_str=False) check_svgs(svgs) print("All SVGs found were good.\nTask completed.") except Exception as e: github_env.set_env_var("ERR_MSGS", str(e)) sys.exit(str(e))
def main(): parser = ArgumentParser( description="Upload svgs to Icomoon to create icon files.") parser.add_argument( "--headless", help="Whether to run the browser in headless/no UI mode", action="store_true") parser.add_argument("geckodriver_path", help="The path to the firefox executable file", action=PathResolverAction) parser.add_argument( "icomoon_json_path", help= "The path to the icomoon.json aka the selection.json created by Icomoon", action=PathResolverAction) parser.add_argument("devicon_json_path", help="The path to the devicon.json", action=PathResolverAction) parser.add_argument("icons_folder_path", help="The path to the icons folder", action=PathResolverAction) parser.add_argument( "download_path", help="The path where you'd like to download the Icomoon files to", action=PathResolverAction) args = parser.parse_args() new_icons = filehandler.find_new_icons(args.devicon_json_path, args.icomoon_json_path) if len(new_icons) == 0: print("No files need to be uploaded. Ending script...") return # print list of new icons, separated by comma print("List of new icons:") print(*new_icons, sep="\n") try: runner = SeleniumRunner(args.icomoon_json_path, args.download_path, args.geckodriver_path, args.headless) runner.upload_icomoon() svgs = filehandler.get_svgs_paths(new_icons, args.icons_folder_path) runner.upload_svgs(svgs) zip_name = "devicon-v1.0.zip" zip_path = Path(args.download_path, zip_name) runner.download_icomoon_fonts(zip_path) filehandler.extract_files(str(zip_path), args.download_path) filehandler.rename_extracted_files(args.download_path) runner.close() print("Task completed.") except TimeoutException as e: print(e) print(e.stacktrace) runner.close()
from pathlib import Path import json # pycharm complains that build_assets is an unresolved ref # don't worry about it, the script still runs from build_assets import filehandler if __name__ == "__main__": """ Use as a cmd line script to check all the icons of the devicon.json. """ devicon_json_path = str(Path("./devicon.json").resolve()) icons_folder_path = str(Path("./icons").resolve()) with open(devicon_json_path) as json_file: devicon_json = json.load(json_file) svgs = filehandler.get_svgs_paths(devicon_json, icons_folder_path)