Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 10 additions & 13 deletions .github/scripts/build_assets/SeleniumRunner.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,14 @@ def set_options(self, download_path: str, geckodriver_path: str,
self.driver = WebDriver(options=options, executable_path=geckodriver_path)
self.driver.get(self.ICOMOON_URL)
assert "IcoMoon App" in self.driver.title

# wait until the whole web page is loaded by testing the hamburger input
WebDriverWait(self.driver, self.LONG_WAIT_IN_SEC).until(
ec.element_to_be_clickable((By.XPATH, "(//i[@class='icon-menu'])[2]"))
hamburger_input = WebDriverWait(self.driver, SeleniumRunner.LONG_WAIT_IN_SEC).until(
ec.element_to_be_clickable((By.CSS_SELECTOR,
"button.btn5.lh-def.transparent i.icon-menu"))
)
hamburger_input.click()
print("Accessed icomoon.io")


def upload_icomoon(self, icomoon_json_path: str):
"""
Expand All @@ -90,16 +92,11 @@ def upload_icomoon(self, icomoon_json_path: str):
"""
print("Uploading icomoon.json file...")
try:
self.click_hamburger_input()

# find the file input and enter the file path
import_btn = self.driver.find_element(By.XPATH, "(//li[@class='file'])[1]//input")
import_btn = WebDriverWait(self.driver, SeleniumRunner.LONG_WAIT_IN_SEC).until(
ec.element_to_be_clickable((By.CSS_SELECTOR, "div#file input"))
)
import_btn.send_keys(icomoon_json_path)
except SeleniumTimeoutException as e:
print(e.stacktrace)
print("Selenium timed out. Couldn't find import button.")
self.close()
raise e
except Exception as e:
self.close()
raise e
Expand Down Expand Up @@ -162,8 +159,8 @@ def click_hamburger_input(self):
:return: None.
"""
try:
hamburger_input = self.driver.find_element_by_xpath(
"(//i[@class='icon-menu'])[2]"
hamburger_input = self.driver.find_element_by_css_selector(
"button.btn5.lh-def.transparent i.icon-menu"
)

menu_appear_callback = ec.element_to_be_clickable(
Expand Down
33 changes: 0 additions & 33 deletions .github/scripts/build_assets/util.py

This file was deleted.

42 changes: 0 additions & 42 deletions .github/scripts/icomoon_build.py

This file was deleted.

48 changes: 39 additions & 9 deletions .github/scripts/icomoon_peek.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,61 @@
from pathlib import Path
from argparse import ArgumentParser
from selenium.common.exceptions import TimeoutException

# pycharm complains that build_assets is an unresolved ref
# don't worry about it, the script still runs
from build_assets.SeleniumRunner import SeleniumRunner
from build_assets import filehandler, util
from build_assets import filehandler
from build_assets.PathResolverAction import PathResolverAction


def main():
args = util.get_commandline_args()
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...")
print("No files need to be peek. Ending script...")
return

# print list of new icons
print("List of new icons:", *new_icons, sep = "\n")

runner = None
# print list of new icons, separated by comma
print("List of new icons:")
print(*new_icons, sep = "\n")
try:
runner = SeleniumRunner(args.download_path, args.geckodriver_path, args.headless)
runner = SeleniumRunner(args.download_path,
args.geckodriver_path, args.headless)
svgs = filehandler.get_svgs_paths(new_icons, args.icons_folder_path)
runner.upload_svgs(svgs)
runner.close()
print("Task completed.")
except TimeoutException as e:
print(e)
print(e.stacktrace)
finally:
runner.close()


Expand Down
71 changes: 71 additions & 0 deletions .github/scripts/icomoon_upload.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
from pathlib import Path
from argparse import ArgumentParser
from selenium.common.exceptions import TimeoutException

# pycharm complains that build_assets is an unresolved ref
# don't worry about it, the script still runs
from build_assets.SeleniumRunner import SeleniumRunner
from build_assets import filehandler
from build_assets.PathResolverAction import PathResolverAction


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.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)
runner.close()
print("Task completed.")
except TimeoutException as e:
print(e)
print(e.stacktrace)
runner.close()


if __name__ == "__main__":
main()
9 changes: 6 additions & 3 deletions .github/workflows/build_icons.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,11 @@ jobs:
python -m pip install --upgrade pip
pip install -r ./.github/scripts/requirements.txt
npm install
- name: Executing build and create fonts via icomoon
run: npm run build
- name: Run icomoon_upload.py
run: >
python ./.github/scripts/icomoon_upload.py
./.github/scripts/build_assets/geckodriver-v0.27.0-win64/geckodriver.exe
./icomoon.json ./devicon.json ./icons ./ --headless
- name: Upload geckodriver.log for debugging purposes
uses: actions/upload-artifact@v2
if: ${{failure()}}
Expand All @@ -32,7 +35,7 @@ jobs:
with:
name: new_icons
path: ./new_icons.png
- name: Build devicon.min.css
- name: Running npm task for building devicon.min.css
if: ${{ success() }}
run: npm run build-css
- name: Create Pull Request
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/peek_icons.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,16 @@ jobs:
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install dependencies (python, pip)
- name: Install dependencies (python, pip, npm)
run: |
python -m pip install --upgrade pip
pip install -r ./.github/scripts/requirements.txt
npm install
- name: Run icomoon_peek.py
run: npm run peek
run: >
python ./.github/scripts/icomoon_peek.py
./.github/scripts/build_assets/geckodriver-v0.27.0-win64/geckodriver.exe
./icomoon.json ./devicon.json ./icons ./ --headless
- name: Upload geckodriver.log for debugging purposes
uses: actions/upload-artifact@v2
if: ${{failure()}}
Expand Down
Loading