Merge branch 'develop' into master
9
.github/PULL_REQUEST_TEMPLATE/new_feature.md
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
## This PR adds...
|
||||
|
||||
*List your features here and their reasons for creation.*
|
||||
|
||||
## Notes
|
||||
|
||||
*List anything note-worthy here (potential issues, this needs merge to `master` before working, etc....).*
|
||||
|
||||
*Don't forget to link any issues that this PR will solved.*
|
9
.github/PULL_REQUEST_TEMPLATE/new_icon.md
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
**Double check these details before you open a PR**
|
||||
|
||||
- [] PR does not match another non-stale PR currently opened
|
||||
- [] PR name matches the format *new icon: <i>Icon name</i> (<i>versions separated by comma</i>)* as seen [here](https://github.com/devicons/devicon/blob/develop/CONTRIBUTING.md#overview)
|
||||
- [] Your icons are put in a folder as seen [here](https://github.com/devicons/devicon/blob/develop/CONTRIBUTING.md#organizational-guidelines)
|
||||
- [] SVG matches the standards laid out [here](https://github.com/devicons/devicon/blob/develop/CONTRIBUTING.md#svgStandards)
|
||||
- [] A new object is added in the `devicon.json` file as seen [here](https://github.com/devicons/devicon/blob/develop/CONTRIBUTING.md#-updating-the-deviconjson-)
|
||||
|
||||
Refer to the [`CONTRIBUTING.md`](https://github.com/devicons/devicon/blob/develop/CONTRIBUTING.md#contributing-to-devicon) for more details.
|
37
.github/drafts/check_devicon_object.py
vendored
@ -1,37 +0,0 @@
|
||||
from typing import List
|
||||
|
||||
# abandoned since it's not too hard to check devicon objects using our eyes
|
||||
# however, still keep in case we need it in the future
|
||||
|
||||
def check_devicon_objects(icons: List[dict]):
|
||||
"""
|
||||
Check that the devicon objects added is up to standard.
|
||||
"""
|
||||
err_msgs = []
|
||||
for icon in icons:
|
||||
if type(icon["name"]) != str:
|
||||
err_msgs.append("'name' must be a string, not: " + str(icon["name"]))
|
||||
|
||||
try:
|
||||
for tag in icon["tags"]:
|
||||
if type(tag) != str:
|
||||
raise TypeError()
|
||||
except TypeError:
|
||||
err_msgs.append("'tags' must be an array of strings, not: " + str(icon["tags"]))
|
||||
break
|
||||
|
||||
|
||||
if type(icon["versions"]["svg"]) != list or len(icon["versions"]["svg"]) == 0:
|
||||
err_msgs.append("Icon name must be a string")
|
||||
|
||||
if type(icon["versions"]["font"]) != list or len(icon["versions"]["svg"]) == 0:
|
||||
err_msgs.append("Icon name must be a string")
|
||||
|
||||
if type(icon["color"]) != str or "#" not in icon["color"]:
|
||||
err_msgs.append("'color' must be a string in the format '#abcdef'")
|
||||
|
||||
if type(icon["aliases"]) != list:
|
||||
err_msgs.append("'aliases' must be an array of dicts")
|
||||
|
||||
if len(err_msgs) > 0:
|
||||
raise Exception("Error found in devicon.json: \n" + "\n".join(err_msgs))
|
13
.github/scripts/build_assets/arg_getters.py
vendored
@ -67,4 +67,15 @@ def get_check_svgs_monthly_args():
|
||||
parser.add_argument("icons_folder_path",
|
||||
help="The path to the icons folder",
|
||||
action=PathResolverAction)
|
||||
return parser.parse_args()
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def get_release_message_args():
|
||||
"""
|
||||
Get the commandline arguments for get_release_message.py.
|
||||
"""
|
||||
parser = ArgumentParser(description="Create a text containing the icons and features added since last release.")
|
||||
parser.add_argument("token",
|
||||
help="The GitHub token to access the GitHub REST API.",
|
||||
type=str)
|
||||
return parser.parse_args()
|
||||
|
75
.github/scripts/get_release_message.py
vendored
Normal file
@ -0,0 +1,75 @@
|
||||
import requests
|
||||
from build_assets import arg_getters
|
||||
import re
|
||||
|
||||
def main():
|
||||
print("Please wait a few seconds...")
|
||||
args = arg_getters.get_release_message_args()
|
||||
queryPath = "https://api.github.com/repos/devicons/devicon/pulls?accept=application/vnd.github.v3+json&state=closed&per_page=100"
|
||||
stopPattern = r"^(r|R)elease v"
|
||||
headers = {
|
||||
"Authorization": f"token {args.token}"
|
||||
}
|
||||
|
||||
response = requests.get(queryPath, headers=headers)
|
||||
if not response:
|
||||
print(f"Can't query the GitHub API. Status code is {response.status_code}. Message is {response.text}")
|
||||
return
|
||||
|
||||
data = response.json()
|
||||
newIcons = []
|
||||
features = []
|
||||
|
||||
for pullData in data:
|
||||
if re.search(stopPattern, pullData["title"]):
|
||||
break
|
||||
|
||||
authors = findAllAuthors(pullData, headers)
|
||||
markdown = f"- [{pullData['title']}]({pullData['html_url']}) by {authors}."
|
||||
|
||||
if isFeatureIcon(pullData):
|
||||
newIcons.append(markdown)
|
||||
else:
|
||||
features.append(markdown)
|
||||
|
||||
thankYou = "A huge thanks to all our maintainers and contributors for making this release possible!"
|
||||
iconTitle = "**{} New Icons**\n".format(len(newIcons))
|
||||
featureTitle = "**{} New Features**\n".format(len(features))
|
||||
finalString = "{0}\n\n {1}{2}\n\n {3}{4}".format(thankYou,
|
||||
iconTitle, "\n".join(newIcons), featureTitle, "\n".join(features))
|
||||
|
||||
print("--------------Here is the build message--------------\n", finalString)
|
||||
|
||||
|
||||
"""
|
||||
Check whether the pullData is a feature:icon PR.
|
||||
:param pullData
|
||||
:return true if the pullData has a label named "feature:icon"
|
||||
"""
|
||||
def isFeatureIcon(pullData):
|
||||
for label in pullData["labels"]:
|
||||
if label["name"] == "feature:icon":
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
"""
|
||||
Find all the authors of a PR based on its commits.
|
||||
:param pullData - the data of a pull request.
|
||||
"""
|
||||
def findAllAuthors(pullData, authHeader):
|
||||
response = requests.get(pullData["commits_url"], headers=authHeader)
|
||||
if not response:
|
||||
print(f"Can't query the GitHub API. Status code is {response.status_code}")
|
||||
print("Response is: ", response.text)
|
||||
return
|
||||
|
||||
commits = response.json()
|
||||
authors = set() # want unique authors only
|
||||
for commit in commits:
|
||||
authors.add("@" + commit["author"]["login"])
|
||||
return ", ".join(list(authors))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
105
.github/scripts/icomoon_peek.py
vendored
@ -2,7 +2,6 @@ from typing import List
|
||||
import re
|
||||
import sys
|
||||
from selenium.common.exceptions import TimeoutException
|
||||
import xml.etree.ElementTree as et
|
||||
|
||||
# pycharm complains that build_assets is an unresolved ref
|
||||
# don't worry about it, the script still runs
|
||||
@ -12,36 +11,28 @@ from build_assets import util
|
||||
|
||||
|
||||
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:
|
||||
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_icons, args.icons_folder_path, True)
|
||||
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.")
|
||||
except TimeoutException as e:
|
||||
util.exit_with_err("Selenium Time Out Error: \n" + str(e))
|
||||
|
||||
# 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()
|
||||
@ -52,19 +43,77 @@ def find_object_added_in_this_pr(icons: List[dict], pr_title: str):
|
||||
Find the icon name from the PR title.
|
||||
:param icons, a list of the font objects found in the devicon.json.
|
||||
:pr_title, the title of the PR that this workflow was called on.
|
||||
:return a list containing the dictionary with the "name"
|
||||
:return a dictionary with the "name"
|
||||
entry's value matching the name in the pr_title.
|
||||
If none can be found, return an empty list.
|
||||
:raise If no object can be found, raise an Exception.
|
||||
"""
|
||||
try:
|
||||
pattern = re.compile(r"(?<=^new icon: )\w+ (?=\(.+\))", re.I)
|
||||
icon_name = pattern.findall(pr_title)[0].lower().strip() # should only have one match
|
||||
return [icon for icon in icons if icon["name"] == icon_name]
|
||||
icon = [icon for icon in icons if icon["name"] == icon_name][0]
|
||||
check_devicon_object(icon, icon_name)
|
||||
return icon
|
||||
except IndexError: # there are no match in the findall()
|
||||
return []
|
||||
raise Exception("Couldn't find an icon matching the name in the PR title.")
|
||||
except ValueError as e:
|
||||
raise Exception(str(e))
|
||||
|
||||
|
||||
def check_devicon_object(icon: dict, icon_name: str):
|
||||
"""
|
||||
Check that the devicon object added is up to standard.
|
||||
:return a string containing the error messages if any.
|
||||
"""
|
||||
err_msgs = []
|
||||
try:
|
||||
if icon["name"] != icon_name:
|
||||
err_msgs.append("- 'name' value is not: " + icon_name)
|
||||
except KeyError:
|
||||
err_msgs.append("- missing key: 'name'.")
|
||||
|
||||
try:
|
||||
for tag in icon["tags"]:
|
||||
if type(tag) != str:
|
||||
raise TypeError()
|
||||
except TypeError:
|
||||
err_msgs.append("- 'tags' must be an array of strings, not: " + str(icon["tags"]))
|
||||
except KeyError:
|
||||
err_msgs.append("- missing key: 'tags'.")
|
||||
|
||||
try:
|
||||
if type(icon["versions"]) != dict:
|
||||
err_msgs.append("- 'versions' must be an object.")
|
||||
except KeyError:
|
||||
err_msgs.append("- missing key: 'versions'.")
|
||||
|
||||
try:
|
||||
if type(icon["versions"]["svg"]) != list or len(icon["versions"]["svg"]) == 0:
|
||||
err_msgs.append("- must contain at least 1 svg version in a list.")
|
||||
except KeyError:
|
||||
err_msgs.append("- missing key: 'svg' in 'versions'.")
|
||||
|
||||
try:
|
||||
if type(icon["versions"]["font"]) != list or len(icon["versions"]["svg"]) == 0:
|
||||
err_msgs.append("- must contain at least 1 font version in a list.")
|
||||
except KeyError:
|
||||
err_msgs.append("- missing key: 'font' in 'versions'.")
|
||||
|
||||
try:
|
||||
if type(icon["color"]) != str or "#" not in icon["color"]:
|
||||
err_msgs.append("- 'color' must be a string in the format '#abcdef'")
|
||||
except KeyError:
|
||||
err_msgs.append("- missing key: 'color'.")
|
||||
|
||||
try:
|
||||
if type(icon["aliases"]) != list:
|
||||
err_msgs.append("- 'aliases' must be an array.")
|
||||
except KeyError:
|
||||
err_msgs.append("- missing key: 'aliases'.")
|
||||
|
||||
if len(err_msgs) > 0:
|
||||
message = "Error found in 'devicon.json' for '{}' entry: \n{}".format(icon_name, "\n".join(err_msgs))
|
||||
raise ValueError(message)
|
||||
return ""
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
3
.github/scripts/requirements.txt
vendored
@ -1 +1,2 @@
|
||||
selenium==3.141.0
|
||||
selenium==3.141.0
|
||||
requests==2.25.1
|
23
.github/workflows/get_release_message.yml
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
name: Get Release Message
|
||||
on: workflow_dispatch
|
||||
jobs:
|
||||
build:
|
||||
name: Get Fonts From Icomoon
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Setup Python v3.8
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.8
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r ./.github/scripts/requirements.txt
|
||||
|
||||
- name: Run the get_release_message.py
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: python ./.github/scripts/get_release_message.py $GITHUB_TOKEN
|
7
.github/workflows/peek_icons.yml
vendored
@ -44,6 +44,13 @@ jobs:
|
||||
./.github/scripts/build_assets/geckodriver-v0.27.0-win64/geckodriver.exe ./icomoon.json
|
||||
./devicon.json ./icons ./ --headless --pr_title "%PR_TITLE%"
|
||||
|
||||
- name: Upload the err messages (created by icomoon_peek.py)
|
||||
uses: actions/upload-artifact@v2
|
||||
if: always()
|
||||
with:
|
||||
name: err_messages
|
||||
path: ./err_messages.txt
|
||||
|
||||
- name: Upload screenshots for comments
|
||||
uses: actions/upload-artifact@v2
|
||||
if: success()
|
||||
|
20
.github/workflows/post_peek_screenshot.yml
vendored
@ -32,6 +32,14 @@ jobs:
|
||||
with:
|
||||
path: ./pr_num/pr_num.txt
|
||||
|
||||
- name: Read the err message file
|
||||
if: success()
|
||||
id: err_message_reader
|
||||
uses: juliangruber/read-file-action@v1.0.0
|
||||
with:
|
||||
path: ./err_messages/err_messages.txt
|
||||
|
||||
|
||||
- name: Upload screenshot of the newly made icons gotten from the artifacts
|
||||
id: icons_overview_img_step
|
||||
if: env.PEEK_STATUS == 'success' && success()
|
||||
@ -87,15 +95,19 @@ jobs:
|
||||
MESSAGE: |
|
||||
Hi there,
|
||||
|
||||
I'm Devicons' Peek Bot and it seems we've ran into a problem (sorry!).
|
||||
I'm Devicons' Peek Bot and it seems we've ran into a problem.
|
||||
|
||||
Please double check and fix the possible issues below:
|
||||
```
|
||||
{0}
|
||||
```
|
||||
|
||||
Make sure that:
|
||||
|
||||
- Your svgs are named and added correctly to the /icons folder as seen [here](https://github.com/devicons/devicon/blob/master/CONTRIBUTING.md#orgGuidelines).
|
||||
- Your icon information has been added to the `devicon.json` as seen [here](https://github.com/devicons/devicon/blob/master/CONTRIBUTING.md#updateDevicon)
|
||||
- Your PR title follows the format seen [here](https://github.com/devicons/devicon/blob/master/CONTRIBUTING.md#overview)
|
||||
|
||||
I will retry once everything is fixed. If I still fail (sorry!) or there are other erros, the maintainers will investigate.
|
||||
I will retry once everything is fixed. If I still fail or there are other error, the maintainers will investigate.
|
||||
|
||||
Best of luck,
|
||||
Peek Bot :relaxed:
|
||||
@ -103,4 +115,4 @@ jobs:
|
||||
type: create
|
||||
issue_number: ${{ steps.pr_num_reader.outputs.content }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
body: ${{ env.MESSAGE }}
|
||||
body: ${{ format(env.MESSAGE, steps.err_message_reader.outputs.content) }}
|
||||
|
104
CONTRIBUTING.md
@ -14,7 +14,7 @@ First of all, thanks for taking the time to contribute! This project can only gr
|
||||
<li><a href="#example">Example</a></li>
|
||||
<li><a href="#requestingIcon">Requesting An Icon</a></li>
|
||||
<li><a href="#teams">Maintainer/Reviewer/Teams</a></li>
|
||||
<li><a href="#buildScript">Regarding the Build Script</a></li>
|
||||
<li><a href="#buildScript">The Build Script: how it works and its quirks</a></li>
|
||||
<li><a href="#discordServer">Discord server</a></li>
|
||||
<li><a href="#release">Release strategy, conventions, preparation and execution</a></li>
|
||||
</ul>
|
||||
@ -40,6 +40,7 @@ First of all, thanks for taking the time to contribute! This project can only gr
|
||||
<li>Include the name of the Icon in the pull request title in this format: <code>new icon: <i>Icon name</i> (<i>versions</i>)</code> </li>
|
||||
<li><i>Optional</i>: Add images of the new svg(s) to the description of the pull request. This would help speed up the review process </li>
|
||||
<li><i>Optional</i>: Reference the issues regarding the new icon. </li>
|
||||
<li>A bot will check your SVGs. If there are any errors, please fix them as instructed.</li>
|
||||
<li>Wait for a maintainer to review your changes. They will run a script to check your icons.</li>
|
||||
<li>If there are no issues, they will accept your pull request and merge it using <a href="https://github.com/devicons/devicon/discussions/470">squash merging</a>. If there are any problems, they will let you know and give you a chance to fix it.</li>
|
||||
</ol>
|
||||
@ -91,7 +92,6 @@ First of all, thanks for taking the time to contribute! This project can only gr
|
||||
<li>Each <code>.svg</code> file contains one version of an icon in a <code>0 0 128 128</code> viewbox. You can use a service like <a href="https://www.iloveimg.com/resize-image/resize-svg">resize-image</a> for scaling the svg.</li>
|
||||
<li>The <code>svg</code> element does not need the <code>height</code> and <code>width</code> attributes. However, if you do use it, ensure their values are either <code>"128"</code> or <code>"128px"</code>. Ex: <code>height="128"</code></li>
|
||||
<li>Each <code>.svg</code> must use the <code>fill</code> attribute instead of using <code>classes</code> for colors. See <a href="https://github.com/devicons/devicon/issues/407">here</a> for more details.</li>
|
||||
<li>The naming convention for the svg file is the following: <code>(Technology name)-(original|plain|line)(-wordmark?).</code></li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
@ -115,14 +115,29 @@ First of all, thanks for taking the time to contribute! This project can only gr
|
||||
<pre>
|
||||
<code>
|
||||
{
|
||||
"name": string, // the official name of the technology. Must be lower case, no space and don't have the dash '-' character.
|
||||
"tags": string[], // list of tags relating to the technology for search purpose
|
||||
// the official name of the technology. Must be lower case, no space and don't have the dash '-' character.
|
||||
"name": string,
|
||||
|
||||
// list of tags relating to the technology for search purpose
|
||||
"tags": string[],
|
||||
|
||||
// keep tracks of the different versions that you have.
|
||||
"versions": {
|
||||
"svg": VersionString[], // list the svgs that you have
|
||||
"font": VersionString[] // list the fonts acceptable versions that you have
|
||||
// list the svgs that you have
|
||||
"svg": VersionString[],
|
||||
|
||||
// list the fonts acceptable versions that you have
|
||||
"font": VersionString[]
|
||||
},
|
||||
"color": string, // the main color of the logo. Only track 1 color
|
||||
"aliases": AliasObj[] // keeps track of the aliases for the font versions ONLY
|
||||
|
||||
// the main color of the logo. Only track 1 color
|
||||
"color": string,
|
||||
|
||||
// keeps track of the aliases for the font versions ONLY
|
||||
// see the <a href="#example">Example</a> section for more details
|
||||
// NOTE: this attribute is not required from now on (see <a href='https://github.com/devicons/devicon/discussions/465'>this</a>)
|
||||
// it is only being kept for backward compatibility
|
||||
"aliases": AliasObj[]
|
||||
}
|
||||
</code>
|
||||
</pre>
|
||||
@ -294,21 +309,58 @@ As an example, let's assume you have created the svgs for Redhat and Amazon Web
|
||||
</p>
|
||||
|
||||
<hr>
|
||||
<h2 id='buildScript'>Regarding The Build Script</h2>
|
||||
<p>To make adding icons easier for repo maintainers, we rely on GitHub Actions, Python, Selenium, and Gulp to automate our tasks.</p>
|
||||
<h2 id='buildScript'>The Build Script: how it works and its quirks</h2>
|
||||
<p>We rely on GitHub Actions, Python, Selenium, Imgur, and Gulp to automate our tasks. Please feel free to take a look at the workflow files. The codes should be clear enough to follow along.</p>
|
||||
<p>So far, the tasks in the build script are:</p>
|
||||
<ul>
|
||||
<li>Upload svgs to <a href="https://icomoon.io/app/#/select">icomoon.io</a> and get the icons back. For details, see <a href="https://github.com/devicons/devicon/issues/252"> the original disscussion</a>, <a href="https://github.com/devicons/devicon/pull/268">this PR that introduce the feature</a> and <a href="https://github.com/devicons/devicon/issues/300">the final changes to it.</a></li>
|
||||
<li>Build, combine, and minify CSS files. For details, see <a href="https://github.com/devicons/devicon/pull/290">this</a></li>
|
||||
</ul>
|
||||
<p>There are also other tasks that we are automating, such as:</p>
|
||||
<ul>
|
||||
<li>Upload svgs to <a href="https://icomoon.io/app/#/select">icomoon.io</a> and get the icons back. For details, see <a href="https://github.com/devicons/devicon/issues/252"> the original disscussion</a>, <a href="https://github.com/devicons/devicon/pull/268">this PR that introduce the feature</a> and <a href="https://github.com/devicons/devicon/issues/300">the final changes to it.</a> Used by <b>peek-bot</b> and <b>build-bot</b>.</li>
|
||||
<li>Preview what an svg would look like as an icon using the upload svgs script (see <a href="https://github.com/devicons/devicon/pull/412">this</a>). Used by <b>peek-bot</b>.</li>
|
||||
<li>Build, combine, and minify CSS files. For details, see <a href="https://github.com/devicons/devicon/pull/290">this</a>. Used by <b>build-bot</b>.</li>
|
||||
<li>Send screenshots to Imgur and upload it to a PR. See <a href="https://github.com/devicons/devicon/pull/398">the PR for the Imgur action</a> and <a href="https://github.com/devicons/devicon/pull/481"> the PR for uploading the pictures to a PR. Used by <b>peek-bot</b> and <b>build-bot</b>.</a>
|
||||
<li>Ensure code quality is up to standard</li>
|
||||
<li>Upload svgs to <a href="https://icomoon.io/app/#/select">icomoon.io</a> and take a screenshot to check that it looks good.
|
||||
<li>Comment on the PR so maintainers don't have to manually upload icon result.</li>
|
||||
<li>Comment on the PR so maintainers don't have to manually upload icon result. Used by <b>peek-bot</b> and <b>build-bot</b>.</li>
|
||||
<li>Publishing a new release to <a href="https://www.npmjs.com/package/devicon">npm</a>; See <a href="https://github.com/devicons/devicon/issues/288">#288</a></li>
|
||||
<li>Creating a list of features that was added since last release. See <a href="https://github.com/devicons/devicon/discussions/574">this discussion</a> for inception and limitations. </li>
|
||||
</ul>
|
||||
|
||||
<p>There are some bugs that the build scripts might run into. Listed below are the common ones and their solutions</p>
|
||||
<ol>
|
||||
<li><b>No connection could be made because the target machine actively refused it. (os error 10061)</b>
|
||||
<ul>
|
||||
<li>See <a href="https://github.com/devicons/devicon/runs/2292634069?check_suite_focus=true">this action</a> for an example.</li>
|
||||
<li>Caused by Selenium being unable to connect to the Icomoon website. It is unknown why this happens but the hypothesis is Icomoon blocks Selenium's multiple connection request and treats them as bots. See <a href="https://github.com/devicons/devicon/pull/544#issuecomment-812147713">this</a>.</li>
|
||||
<li>Solution: wait for a few minutes and rerun the script. Repeat until it works.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>SHA Integrity</b>
|
||||
<ul>
|
||||
<li>See <a href="https://github.com/devicons/devicon/runs/2310036084?check_suite_focus=true">this action</a> for an example.</li>
|
||||
<li>Caused by the <code>package-lock.json</code>. Most likely the result of a dependabot update but not 100% sure.</li>
|
||||
<li>Solution: Remove the <code>package-lock.json</code> and run `npm install` to generate a new file. Commit and push.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Wrong PR Title</b>
|
||||
<ul>
|
||||
<li>The <code>bot-peek</code> script relies on the PR title to find the icon that was added in the PR. If the format doesn't match what is specified in <a href="#overview">Overview on Submitting Icon</a>, the bot will fail.</li>
|
||||
<li>Solution: Ensure the name of the PR follows the convention.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Peek bot fails when an icon is updated</b>
|
||||
<ul>
|
||||
<li>See <a href="https://github.com/devicons/devicon/pull/554">this PR</a> for an example.</li>
|
||||
<li>The <code>bot-peek</code> script compares the <code>devicon.json</code> and <code>icomoon.json</code> to limit the icon uploading process. An update in the repo won't change anything in the <code>devicon.json</code> and <code>icomoon.json</code> so the script would report that nothing is found.</li>
|
||||
<li>Solution: Follow the steps laid out <a href="https://github.com/devicons/devicon/pull/554#issuecomment-816860577">here</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Icon created by Icomoon contains strange lines that aren't in the SVG</b>
|
||||
<ul>
|
||||
<li>See <a href="https://github.com/devicons/devicon/pull/532">this PR</a>'s peek result.</li>
|
||||
<li>This is caused by a bug in Icomoon's parser (see <a href="https://github.com/devicons/devicon/pull/532#issuecomment-827180766">this</a>).</li>
|
||||
<li>Solution: Luckily this is an extremely rare case. Try remake the svg in a different way (using different paths/shapes) and test using Icomoon.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="discordServer">Discord server</h2>
|
||||
<p>
|
||||
We are running a Discord server. You can go here to talk, discuss, and more with the maintainers and other people, too. Here's the invitation: https://discord.gg/hScy8KWACQ. If you don't have a GitHub account but want to suggest ideas or new icons, you can do that here in our Discord channel.
|
||||
@ -335,10 +387,22 @@ We are running a Discord server. You can go here to talk, discuss, and more with
|
||||
<li>Push the branch <code>draft-release</code></li>
|
||||
<li>Manually trigger the workflow <code><a href="https://github.com/devicons/devicon/actions/workflows/build_icons.yml">build_icons.yml</a></code> (which has a <code>workflow_dispatch</code> event trigger) and select the branch <code>draft-release</code> as target branch. This will build a font version of all icons using icomoon and automatically creates a pull request to merge the build result back into <code>draft-release</code></li>
|
||||
<li>Review and approve the auto-create pull request created by the action of the step above</li>
|
||||
<li>Create a pull request towards <code>development</code>. Mention the release number in the pull request title and add information about all new icons, fixes, features and enhancements in the description of the pull request. Take the commits as a guideline. It's also a good idea to mention and thank all contributions who participated in the release (take description of <code><a href="https://github.com/devicons/devicon/pull/504">#504</a></code> as an example).</li>
|
||||
<li>Wait for review and approval of the pull request (<b>DON'T</b> perform a squash-merge)</li>
|
||||
<li>Create a pull request towards <code>development</code>. Mention the release number in the pull request title (like "Build preparation for release v<i>MAJOR</i>.<i>MINOR</i>.<i>PATCH</i>).
|
||||
<ul>
|
||||
<li>
|
||||
Add information about all new icons, fixes, features and enhancements in the description of the pull request.
|
||||
</li>
|
||||
<li>
|
||||
Take the PRs/commits as a guideline. It's also a good idea to mention and thank all contributions who participated in the release (take description of <code><a href="https://github.com/devicons/devicon/pull/504">#504</a></code> as an example).
|
||||
</li>
|
||||
<li>
|
||||
Rather than doing it manually, you can instead run <code>python ./.github/scripts/get_release_message.py $GITHUB_TOKEN</code> locally. Pass in your GitHub Personal Access Token for <code>$GITHUB_TOKEN</code> and you should see the messages. You can also use the `workflow_dispatch` trigger in the GitHub Actions tab.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Wait for review and approval of the pull request (you can perform a squash-merge)</li>
|
||||
<li>Once merged create a pull request with BASE <code>master</code> and HEAD <code>development</code>. Copy the description of the earlier pull request.</li>
|
||||
<li>Since it was already approved in the 'development' stage a maintainer is allowed to merge it (<b>DON'T</b> perform a squash-merge).</li>
|
||||
<li>Create a <a href="https://github.com/devicons/devicon/releases/new">new release</a> using v<i>MAJOR</i>.<i>MINOR</i>.<i>PATCH</i> as tag and release title. Use the earlier created description as description of the release.</li>
|
||||
<li>Publishing the release will trigger the <a href="/.github/workflows/npm_publish.yml">npm_publish.yml</a> workflow which will execute a <code>npm publish</code> leading to a updated <a href="https://www.npmjs.com/package/devicon">npm package</a> (v<i>MAJOR</i>.<i>MINOR</i>.<i>PATCH</i>).</li>
|
||||
</ol>
|
||||
</ol>
|
||||
|
@ -68,8 +68,11 @@
|
||||
<sub>
|
||||
All product names, logos, and brands are property of their respective owners. All company, product and service
|
||||
names used in this website are for identification purposes only. Use of these names, logos, and brands does not
|
||||
imply endorsement.
|
||||
imply endorsement. Usage of these logos should be done according to the company/brand/service's brand policy.
|
||||
</sub>
|
||||
<p>
|
||||
Thank you to our contributors and the <a href="https://icomoon.io/#home">IcoMoon app</a>. Devicon would not be possible without you.
|
||||
</p>
|
||||
|
||||
|
||||
<h2 id="getting-started">Getting started</h2>
|
||||
|
65
devicon.json
@ -178,7 +178,11 @@
|
||||
},
|
||||
{
|
||||
"name": "appwrite",
|
||||
"tags": ["cloud", "platform", "server"],
|
||||
"tags": [
|
||||
"cloud",
|
||||
"platform",
|
||||
"server"
|
||||
],
|
||||
"versions": {
|
||||
"svg": [
|
||||
"original",
|
||||
@ -203,6 +207,27 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arduino",
|
||||
"tags": [
|
||||
"microcontroller",
|
||||
"hardware"
|
||||
],
|
||||
"versions": {
|
||||
"svg": [
|
||||
"original",
|
||||
"original-wordmark",
|
||||
"plain",
|
||||
"plain-wordmark"
|
||||
],
|
||||
"font": [
|
||||
"plain",
|
||||
"plain-wordmark"
|
||||
]
|
||||
},
|
||||
"color": "#00979d",
|
||||
"aliases": []
|
||||
},
|
||||
{
|
||||
"name": "atom",
|
||||
"tags": [
|
||||
@ -2345,6 +2370,26 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "nixos",
|
||||
"tags": [
|
||||
"os"
|
||||
],
|
||||
"versions": {
|
||||
"svg": [
|
||||
"original",
|
||||
"original-wordmark",
|
||||
"plain",
|
||||
"plain-wordmark"
|
||||
],
|
||||
"font": [
|
||||
"plain",
|
||||
"plain-wordmark"
|
||||
]
|
||||
},
|
||||
"color": "#5277C3",
|
||||
"aliases": []
|
||||
},
|
||||
{
|
||||
"name": "nodejs",
|
||||
"tags": [
|
||||
@ -2464,6 +2509,24 @@
|
||||
"color": "#F18803",
|
||||
"aliases": []
|
||||
},
|
||||
{
|
||||
"name": "perl",
|
||||
"tags": [
|
||||
"programming",
|
||||
"language"
|
||||
],
|
||||
"versions": {
|
||||
"svg": [
|
||||
"original",
|
||||
"plain"
|
||||
],
|
||||
"font": [
|
||||
"plain"
|
||||
]
|
||||
},
|
||||
"color": "#212177",
|
||||
"aliases": []
|
||||
},
|
||||
{
|
||||
"name": "photoshop",
|
||||
"tags": [
|
||||
|
@ -24,7 +24,7 @@ devicon.controller('IconListCtrl', function($scope, $http, $compile) {
|
||||
});
|
||||
|
||||
|
||||
var baseUrl = 'https://raw.githubusercontent.com/' + gitHubPath + '/master/'
|
||||
var baseUrl = `https://cdn.jsdelivr.net/gh/${gitHubPath}/`
|
||||
|
||||
// Get devicon.json
|
||||
$http.get(baseUrl + '/devicon.json').success(function(data) {
|
||||
|
@ -33,7 +33,7 @@
|
||||
<meta name="msapplication-TileImage" content="./logos/mstile-144x144.png">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
<link rel="stylesheet" href="https://raw.githubusercontent.com/devicons/devicon/master/devicon.min.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/devicons/devicon/devicon.min.css">
|
||||
<link rel="stylesheet" href="./assets/css/style.css">
|
||||
</head>
|
||||
|
||||
@ -77,7 +77,7 @@
|
||||
<h4>SVG versions</h4>
|
||||
<ul class="icons-list">
|
||||
<li ng-repeat="svgVersion in selectedIcon.svg" ng-click="selectSvg(svgVersion, $index)" ng-class="{'selected-version' : $index == selectedSvgIndex}">
|
||||
<img ng-src="https://raw.githubusercontent.com/devicons/devicon/master/icons/{{selectedIcon.name}}/{{selectedIcon.name}}-{{svgVersion}}.svg">
|
||||
<img ng-src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/{{selectedIcon.name}}/{{selectedIcon.name}}-{{svgVersion}}.svg">
|
||||
</li>
|
||||
</ul>
|
||||
<div class="cde">
|
||||
|
@ -10,6 +10,7 @@ const aliasSCSSName = "devicon-alias.scss";
|
||||
const colorsCSSName = "devicon-colors.css";
|
||||
const finalMinSCSSName = "devicon.min.scss";
|
||||
|
||||
//////// CSS Tasks ////////
|
||||
|
||||
/**
|
||||
* Create the devicon.min.css by creating needed
|
||||
|
1
icons/arduino/arduino-original-wordmark.svg
Normal file
After Width: | Height: | Size: 7.5 KiB |
1
icons/arduino/arduino-original.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128"><g fill="#00979c"><path style="fill-rule:evenodd;stroke:none;fill-opacity:1" d="M.3 66.5v-9.6c.2-.1.2-.3.2-.5 3-13.1 11.2-21 24.2-24.1 1.1-.3 2.3-.2 3.4-.6h6.4c.1.2.4.1.6.1 6.4.7 12.2 3 17.3 7 4.4 3.3 7.8 7.5 10.9 12 .4.6.6.6 1 0 1.8-2.6 3.7-5.1 5.9-7.4 5.3-5.7 11.7-9.7 19.5-11.1 1.1-.3 2.4-.2 3.5-.6h6.2c.1.2.3.1.5.1 1.9.2 3.7.6 5.5 1.1 13.4 3.9 22.9 16.2 22.1 30.1-.6 11.7-6.5 20.1-16.8 25.4-5.1 2.8-10.7 3.5-16.5 3.4-7.6-.1-14.2-2.7-19.9-7.7-4-3.5-7.1-7.7-10-12.1-.4-.6-.6-.5-1 .1-1.8 2.7-3.7 5.4-5.9 8-3.9 4.4-8.4 8-14 9.9-6.9 2.4-13.9 2.5-20.9.6-10.1-2.9-17-9.3-20.8-19.1-.6-1.6-.9-3.4-1.4-5zm31.8 14.7c5.7.2 10.6-1.7 14.8-5.6 4.3-4 7.4-9 10.5-13.9.1-.3.1-.5-.1-.8-2.6-4.1-5.3-8.2-8.9-11.6-6.9-6.6-15-8.8-24.1-5.9-7.5 2.5-12.3 7.8-13.4 15.8-1.1 7.5 1.8 13.5 7.8 18 4 2.9 8.5 4.1 13.4 4zm63.4 0c2.2 0 4.4-.1 6.5-.7 7.9-2.4 13.1-7.3 14.6-15.5 1.5-8.1-1.6-14.6-8.4-19.2-7.5-5.2-18.4-4.7-26 1-5.1 3.8-8.5 8.9-11.9 14.2-.2.3-.1.5 0 .8 2.7 4.3 5.4 8.6 8.9 12.3 4.4 4.7 9.7 7.4 16.3 7.1zm0 0"/><path style="fill-rule:evenodd;stroke:none;fill-opacity:1" d="M32 58.5c3.2 0 6.5.1 9.7 0 .8 0 .9.2.9 1-.1.9-.1 1.8 0 2.7.1.8-.1 1-1 1H28.8c-2.2 0-4.4-.1-6.6 0-.7 0-.9-.2-.9-1 .1-.9.1-1.8 0-2.8 0-.7.2-.9.9-.9 3.2.1 6.5 0 9.8 0zm63-6.4c.8 0 1.6.1 2.3 0 .5 0 .7.2.7.7-.1 1.4 0 2.8-.1 4.2 0 .7.2.9.9.9 1.3-.1 2.7 0 4.1-.1.6 0 .8.1.8.8v4.6c0 .5-.2.7-.7.7-1.4-.1-2.8 0-4.3-.1-.6 0-.8.2-.8.8.1 1.4 0 2.8.1 4.2 0 .6-.2.9-.8.9-1.5-.1-3-.1-4.5 0-.6 0-.8-.2-.8-.8.1-1.5 0-2.9.1-4.4 0-.5-.2-.7-.7-.7-1.4.1-2.8 0-4.2.1-.8 0-.9-.3-.9-.9 0-1.4.1-2.8 0-4.2-.1-.8.3-1 1-1 1.4.1 2.7 0 4.1.1.5 0 .7-.2.7-.7-.1-1.4 0-2.9-.1-4.3 0-.6.2-.8.8-.8.8.1 1.5 0 2.3 0zm0 0"/><path style="stroke:none;fill-rule:evenodd;fill-opacity:1" d="M124.852 24.477c-.133.199-.18.265-.223.332-.242.363-.055 1.097-.664 1.086-.54-.012-.403-.684-.594-1.051-.05-.098-.11-.188-.277-.461 0 .504.008.789 0 1.078-.008.195.035.441-.274.457-.312.016-.293-.234-.297-.43-.007-.68-.007-1.355-.003-2.031 0-.23-.036-.496.324-.504.27-.004.504-.015.617.336.144.43.195.91.527 1.324.317-.402.371-.867.492-1.293.102-.347.317-.37.598-.37.356.003.34.253.344.488.004.68.004 1.355-.004 2.035-.004.191.023.445-.281.449-.305 0-.282-.242-.285-.442-.008-.289 0-.574 0-1.003zm-3.712-1.532c.087 0 .18-.015.262 0 .325.063.828-.187.934.2.144.543-.426.27-.668.386-.242.117-.195.332-.2.528-.011.468-.007.937-.007 1.406 0 .258-.05.473-.383.46-.305-.01-.293-.234-.293-.437a36.975 36.975 0 0 1-.004-1.316c.012-.375.016-.727-.523-.676-.188.016-.352-.039-.352-.277 0-.328.254-.262.442-.27.265-.012.527-.004.793-.004zm0 0"/></g></svg>
|
After Width: | Height: | Size: 2.6 KiB |
1
icons/arduino/arduino-plain-wordmark.svg
Normal file
After Width: | Height: | Size: 8.5 KiB |
1
icons/arduino/arduino-plain.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128"><path style="fill-rule:evenodd;stroke:none;fill-opacity:1" d="M.3 66.5v-9.6c.2-.1.2-.3.2-.5 3-13.1 11.2-21 24.2-24.1 1.1-.3 2.3-.2 3.4-.6h6.4c.1.2.4.1.6.1 6.4.7 12.2 3 17.3 7 4.4 3.3 7.8 7.5 10.9 12 .4.6.6.6 1 0 1.8-2.6 3.7-5.1 5.9-7.4 5.3-5.7 11.7-9.7 19.5-11.1 1.1-.3 2.4-.2 3.5-.6h6.2c.1.2.3.1.5.1 1.9.2 3.7.6 5.5 1.1 13.4 3.9 22.9 16.2 22.1 30.1-.6 11.7-6.5 20.1-16.8 25.4-5.1 2.8-10.7 3.5-16.5 3.4-7.6-.1-14.2-2.7-19.9-7.7-4-3.5-7.1-7.7-10-12.1-.4-.6-.6-.5-1 .1-1.8 2.7-3.7 5.4-5.9 8-3.9 4.4-8.4 8-14 9.9-6.9 2.4-13.9 2.5-20.9.6-10.1-2.9-17-9.3-20.8-19.1-.6-1.6-.9-3.4-1.4-5zm31.8 14.7c5.7.2 10.6-1.7 14.8-5.6 4.3-4 7.4-9 10.5-13.9.1-.3.1-.5-.1-.8-2.6-4.1-5.3-8.2-8.9-11.6-6.9-6.6-15-8.8-24.1-5.9-7.5 2.5-12.3 7.8-13.4 15.8-1.1 7.5 1.8 13.5 7.8 18 4 2.9 8.5 4.1 13.4 4zm63.4 0c2.2 0 4.4-.1 6.5-.7 7.9-2.4 13.1-7.3 14.6-15.5 1.5-8.1-1.6-14.6-8.4-19.2-7.5-5.2-18.4-4.7-26 1-5.1 3.8-8.5 8.9-11.9 14.2-.2.3-.1.5 0 .8 2.7 4.3 5.4 8.6 8.9 12.3 4.4 4.7 9.7 7.4 16.3 7.1zm0 0"/><path style="fill-rule:evenodd;stroke:none;fill-opacity:1" d="M32 58.5c3.2 0 6.5.1 9.7 0 .8 0 .9.2.9 1-.1.9-.1 1.8 0 2.7.1.8-.1 1-1 1H28.8c-2.2 0-4.4-.1-6.6 0-.7 0-.9-.2-.9-1 .1-.9.1-1.8 0-2.8 0-.7.2-.9.9-.9 3.2.1 6.5 0 9.8 0zm63-6.4c.8 0 1.6.1 2.3 0 .5 0 .7.2.7.7-.1 1.4 0 2.8-.1 4.2 0 .7.2.9.9.9 1.3-.1 2.7 0 4.1-.1.6 0 .8.1.8.8v4.6c0 .5-.2.7-.7.7-1.4-.1-2.8 0-4.3-.1-.6 0-.8.2-.8.8.1 1.4 0 2.8.1 4.2 0 .6-.2.9-.8.9-1.5-.1-3-.1-4.5 0-.6 0-.8-.2-.8-.8.1-1.5 0-2.9.1-4.4 0-.5-.2-.7-.7-.7-1.4.1-2.8 0-4.2.1-.8 0-.9-.3-.9-.9 0-1.4.1-2.8 0-4.2-.1-.8.3-1 1-1 1.4.1 2.7 0 4.1.1.5 0 .7-.2.7-.7-.1-1.4 0-2.9-.1-4.3 0-.6.2-.8.8-.8.8.1 1.5 0 2.3 0zm0 0"/><path style="stroke:none;fill-rule:evenodd;fill-opacity:1" d="M124.852 24.477c-.133.199-.18.265-.223.332-.242.363-.055 1.097-.664 1.086-.54-.012-.403-.684-.594-1.051-.05-.098-.11-.188-.277-.461 0 .504.008.789 0 1.078-.008.195.035.441-.274.457-.312.016-.293-.234-.297-.43-.007-.68-.007-1.355-.003-2.031 0-.23-.036-.496.324-.504.27-.004.504-.015.617.336.144.43.195.91.527 1.324.317-.402.371-.867.492-1.293.102-.347.317-.37.598-.37.356.003.34.253.344.488.004.68.004 1.355-.004 2.035-.004.191.023.445-.281.449-.305 0-.282-.242-.285-.442-.008-.289 0-.574 0-1.003zm-3.712-1.532c.087 0 .18-.015.262 0 .325.063.828-.187.934.2.144.543-.426.27-.668.386-.242.117-.195.332-.2.528-.011.468-.007.937-.007 1.406 0 .258-.05.473-.383.46-.305-.01-.293-.234-.293-.437a36.975 36.975 0 0 1-.004-1.316c.012-.375.016-.727-.523-.676-.188.016-.352-.039-.352-.277 0-.328.254-.262.442-.27.265-.012.527-.004.793-.004zm0 0"/></svg>
|
After Width: | Height: | Size: 2.5 KiB |
1
icons/nixos/nixos-original-wordmark.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path fill="#7EBAE4" d="M18.096 57.082 8.12 74.362l-2.33-3.95 2.69-4.627-5.34-.014L2 63.798l1.162-2.019 7.602.024 2.731-4.71 4.601-.011zm.766 13.813h19.953l-2.255 3.993-5.352-.015 2.658 4.632-1.14 1.972-2.329.002-3.78-6.594-5.444-.012-2.311-3.978zm11.613-7.572L20.5 46.043 25.084 46l2.663 4.643 2.683-4.618h2.277l1.167 2.016-3.822 6.571 2.713 4.72-2.29 3.991z" clip-rule="evenodd" fill-rule="evenodd"></path><path fill="#5277C3" d="m14.496 64.2 9.975 17.28-4.584.043-2.663-4.642-2.683 4.618-2.277-.001-1.167-2.016 3.821-6.57-2.712-4.722 2.29-3.99zm11.587-7.615-19.954-.001 2.255-3.992 5.353.015-2.658-4.632 1.14-1.972L14.546 46l3.78 6.595 5.445.011 2.31 3.979zm.778 13.853 9.977-17.28 2.33 3.95-2.69 4.627 5.341.014 1.138 1.973-1.162 2.018-7.601-.024-2.732 4.71-4.601.012z" clip-rule="evenodd" fill-rule="evenodd"></path><path d="M68.355 53.027H65.84v11.418c0 1.612.065 4.16.162 6.999h-.097c-1.258-2.355-2.677-4.612-3.677-6.16l-7.902-12.257h-3.452v21.868h2.516V63.477c0-1.613-.064-4.645-.161-7.45h.097c1.87 3.257 2.967 5.063 4 6.611l7.902 12.257h3.128V53.027zm4.79 21.868h2.71V59.284h-2.71v15.611zM74.5 56.994c.935 0 1.677-.742 1.677-1.677 0-.936-.742-1.678-1.677-1.678-.936 0-1.677.742-1.677 1.678 0 .935.741 1.677 1.677 1.677zm18.234 2.29h-3.096l-3.806 5.741h-.097l-3.677-5.741h-3.355l5.58 7.612v.097l-5.773 7.902h3.096l4.064-6.193h.097l4.064 6.193h3.355l-5.903-8.031v-.097l5.451-7.483zm10.48-5.868c-5.134 0-9.355 4.134-9.355 11.014 0 6.879 4.221 11.013 9.355 11.013s9.355-4.134 9.355-11.013c0-6.88-4.221-11.014-9.355-11.014zm0 2.146c3.822 0 6.731 3.156 6.731 8.868 0 5.711-2.909 8.867-6.731 8.867s-6.731-3.156-6.731-8.867c0-5.712 2.91-8.868 6.731-8.868zm10.417 3.443c0 3.03 1.578 4.67 5.239 6.154 2.809 1.136 3.945 2.145 3.945 4.228 0 2.525-2.052 3.787-4.766 3.787-1.42 0-3.029-.22-4.796-.82l-.284 2.177c1.546.568 3.25.789 4.954.789 4.229 0 7.763-2.146 7.763-6.47 0-2.997-1.83-4.449-5.522-5.932-2.462-.978-3.661-2.02-3.661-4.197 0-2.114 1.83-3.282 4.134-3.282 1.357 0 2.84.347 3.882.758l.284-2.146c-1.199-.505-2.683-.758-4.324-.758-3.881 0-6.848 2.24-6.848 5.712z"></path></svg>
|
After Width: | Height: | Size: 2.1 KiB |
1
icons/nixos/nixos-original.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path fill="#7EBAE4" d="M50.732 43.771 20.525 96.428l-7.052-12.033 8.14-14.103-16.167-.042L2 64.237l3.519-6.15 23.013.073 8.27-14.352 13.93-.037zm2.318 42.094 60.409.003-6.827 12.164-16.205-.045 8.047 14.115-3.45 6.01-7.05.008-11.445-20.097-16.483-.034-6.996-12.124zm35.16-23.074-30.202-52.66L71.888 10l8.063 14.148 8.12-14.072 6.897.002 3.532 6.143-11.57 20.024 8.213 14.386-6.933 12.16z" clip-rule="evenodd" fill-rule="evenodd"></path><path fill="#5277C3" d="m39.831 65.463 30.202 52.66-13.88.131-8.063-14.148-8.12 14.072-6.897-.002-3.532-6.143 11.57-20.024-8.213-14.386 6.933-12.16zm35.08-23.207-60.409-.003L21.33 30.09l16.204.045-8.047-14.115 3.45-6.01 7.051-.01 11.444 20.097 16.484.034 6.996 12.124zm2.357 42.216 30.207-52.658 7.052 12.034-8.141 14.102 16.168.043L126 64.006l-3.519 6.15-23.013-.073-8.27 14.352-13.93.037z" clip-rule="evenodd" fill-rule="evenodd"></path></svg>
|
After Width: | Height: | Size: 945 B |
1
icons/nixos/nixos-plain-wordmark.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path fill="#5277C3" d="M18.096 57.082 8.12 74.362l-2.33-3.95 2.69-4.627-5.34-.014L2 63.798l1.162-2.019 7.602.024 2.731-4.71 4.601-.011zm.766 13.813h19.953l-2.255 3.993-5.352-.015 2.658 4.632-1.14 1.972-2.329.002-3.78-6.594-5.444-.012-2.311-3.978zm11.613-7.572L20.5 46.043 25.084 46l2.663 4.643 2.683-4.618h2.277l1.167 2.016-3.822 6.571 2.713 4.72-2.29 3.991zm-15.979.877 9.975 17.28-4.584.043-2.663-4.642-2.683 4.618-2.277-.001-1.167-2.016 3.821-6.57-2.712-4.722 2.29-3.99zm11.587-7.615-19.954-.001 2.255-3.992 5.353.015-2.658-4.632 1.14-1.972L14.546 46l3.78 6.595 5.445.011 2.31 3.979zm.778 13.853 9.977-17.28 2.33 3.95-2.69 4.627 5.341.014 1.138 1.973-1.162 2.018-7.601-.024-2.732 4.71-4.601.012z" clip-rule="evenodd" fill-rule="evenodd"></path><path fill="#5277C3" d="M68.355 53.027H65.84v11.418c0 1.612.065 4.16.162 6.999h-.097c-1.258-2.355-2.677-4.612-3.677-6.16l-7.902-12.257h-3.452v21.868h2.516V63.477c0-1.613-.064-4.645-.161-7.45h.097c1.87 3.257 2.967 5.063 4 6.611l7.902 12.257h3.128V53.027zm4.79 21.868h2.71V59.284h-2.71v15.611zM74.5 56.994c.935 0 1.677-.742 1.677-1.677 0-.936-.742-1.678-1.677-1.678-.936 0-1.677.742-1.677 1.678 0 .935.741 1.677 1.677 1.677zm18.234 2.29h-3.096l-3.806 5.741h-.097l-3.677-5.741h-3.355l5.58 7.612v.097l-5.773 7.902h3.096l4.064-6.193h.097l4.064 6.193h3.355l-5.903-8.031v-.097l5.451-7.483zm10.48-5.868c-5.134 0-9.355 4.134-9.355 11.014 0 6.879 4.221 11.013 9.355 11.013s9.355-4.134 9.355-11.013c0-6.88-4.221-11.014-9.355-11.014zm0 2.146c3.822 0 6.731 3.156 6.731 8.868 0 5.711-2.909 8.867-6.731 8.867s-6.731-3.156-6.731-8.867c0-5.712 2.91-8.868 6.731-8.868zm10.418 3.443c0 3.03 1.577 4.67 5.238 6.154 2.809 1.136 3.945 2.145 3.945 4.228 0 2.525-2.052 3.787-4.766 3.787-1.42 0-3.029-.22-4.796-.82l-.284 2.177c1.546.568 3.25.789 4.954.789 4.229 0 7.763-2.146 7.763-6.47 0-2.997-1.83-4.449-5.522-5.932-2.462-.978-3.661-2.02-3.661-4.197 0-2.114 1.83-3.282 4.134-3.282 1.357 0 2.84.347 3.882.758l.284-2.146c-1.199-.505-2.683-.758-4.324-.758-3.881 0-6.847 2.24-6.847 5.712z"></path></svg>
|
After Width: | Height: | Size: 2.0 KiB |
1
icons/nixos/nixos-plain.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path fill="#5277C3" d="m39.831 65.463 30.202 52.66-13.88.131-8.063-14.148-8.12 14.072-6.897-.002-3.532-6.143 11.57-20.024-8.213-14.386 6.933-12.16zm10.901-21.692L20.525 96.43l-7.052-12.034 8.14-14.103-16.167-.042L2 64.237l3.519-6.15 23.013.073 8.27-14.352 13.93-.037zm2.318 42.094 60.409.003-6.827 12.164-16.205-.045 8.047 14.115-3.45 6.01-7.05.008-11.445-20.097-16.483-.034-6.996-12.124zm35.16-23.074-30.202-52.66L71.888 10l8.063 14.148 8.12-14.072 6.897.002 3.532 6.143-11.57 20.024 8.213 14.386-6.933 12.16z" clip-rule="evenodd" fill-rule="evenodd"></path><path fill="#5277C3" d="m39.831 65.463 30.202 52.66-13.88.131-8.063-14.148-8.12 14.072-6.897-.002-3.532-6.143 11.57-20.024-8.213-14.386 6.933-12.16zm35.08-23.207-60.409-.003L21.33 30.09l16.204.045-8.047-14.115 3.45-6.01 7.051-.01 11.444 20.097 16.484.034 6.996 12.124zm2.357 42.216 30.207-52.658 7.052 12.034-8.141 14.102 16.168.043L126 64.006l-3.519 6.15-23.013-.073-8.27 14.352-13.93.037z" clip-rule="evenodd" fill-rule="evenodd"></path></svg>
|
After Width: | Height: | Size: 1.0 KiB |
1
icons/perl/perl-original.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" width="128" height="128" viewBox="0 0 128 128"><path d="M121.172 62.878c0-34.048-26.473-61.648-59.135-61.648C29.379 1.23 2.9 28.83 2.9 62.878s26.478 61.651 59.136 61.651c32.662 0 59.135-27.603 59.135-61.651z" fill="#fff"/><path d="M53.34 127.516c-13.91-2.461-25.842-8.812-35.703-19.006C9.25 99.842 3.477 88.928.853 76.763c-1.137-5.256-1.137-20.287 0-25.54C2.629 43 6.075 34.835 10.776 27.714 13.89 23 23.004 13.888 27.716 10.773c7.123-4.7 15.293-8.15 23.514-9.921 5.253-1.137 20.286-1.137 25.543 0C89.58 3.617 100.225 9.4 109.41 18.585c9.187 9.186 14.97 19.828 17.739 32.639 1.133 5.252 1.133 20.283 0 25.54-2.769 12.806-8.552 23.448-17.739 32.634-9.038 9.041-19.55 14.812-32.147 17.65-4.467 1.009-19.238 1.297-23.923.468zm11.567-12.772c0-4.194-.062-4.497-.907-4.497-.838 0-.904.288-.869 3.897.043 4.264.343 5.572 1.211 5.284.401-.132.565-1.491.565-4.684zm-6.757 1.445c1.192-1.196 1.542-1.92 1.542-3.209 0-1.316-.16-1.635-.763-1.519-.417.078-.919.76-1.114 1.507-.194.748-1 1.904-1.783 2.57-1.418 1.196-1.472 2.192-.125 2.192.386 0 1.394-.697 2.243-1.541zm14.943 1.047c.167-.269-.339-1.036-1.122-1.698-.786-.666-1.589-1.822-1.783-2.57-.199-.747-.701-1.429-1.118-1.507-.6-.116-.76.203-.76 1.519 0 2.609 3.743 5.942 4.783 4.256zm-20.66-8.146c0-.261-.634-.822-1.41-1.246-5.054-2.769-10.985-7.176-14.28-10.61-6.433-6.71-9.33-13.388-9.4-21.678-.048-5.54.665-8.43 3.364-13.605 2.609-5.004 5.631-8.78 13.95-17.421 9.287-9.653 11.425-12.2 13.038-15.533 1.148-2.367 1.3-3.231 1.46-8.235.199-6.215-.18-10.506-.927-10.506-.339 0-.401 1.612-.21 5.234.623 11.592-1.53 15.19-14.892 24.881-9.202 6.674-13.424 10.3-16.613 14.264-4.518 5.61-6.52 10.466-7.018 17.05-1.207 15.868 8.848 29.629 26.59 36.385 3.914 1.487 6.348 1.881 6.348 1.02zm30.7-1.285c6.098-2.543 10.736-5.615 15.11-10.007 6.667-6.701 9.439-12.967 9.856-22.242.362-8.134-1.402-13.515-6.437-19.61-3.45-4.173-7.162-7.16-17.174-13.81-13.47-8.953-16.633-12.516-16.633-18.746 0-1.658.3-4.006.662-5.217.623-2.068.608-3.493-.02-1.862-.591 1.546-1.947.837-2.675-1.41l-.7-2.152.264 2.04c.942 7.242 1.06 10.276.642 16.615-.564 8.57-1.616 14.427-4.51 25.076-2.87 10.572-3.387 14.404-3.029 22.476.3 6.825 1.254 11.93 3.474 18.593 2.06 6.183 2.445 6.654 6.235 7.624 2.083.533 4.058 1.433 5.627 2.566 1.476 1.067 2.952 1.76 3.781 1.775.748.012 3.237-.755 5.526-1.709zm-1.371-3.076c-.565-.565-.3-1.048 1.912-3.493 6.97-7.694 10.094-15.641 10.183-25.906.063-6.993-1.483-11.627-6.2-18.593-2.13-3.15-9.634-11.008-13.263-13.893-2.66-2.114-5.398-5.72-5.885-7.76-.494-2.068.892-1.523 2.496.98.787 1.227 2.493 3.03 3.79 4.004 1.296.977 5.132 3.835 8.524 6.355 11.664 8.671 16.859 16.066 18.023 25.672.678 5.556-.397 11.3-3.107 16.634-2.812 5.525-7.937 11.545-12.326 14.477-2.703 1.803-3.556 2.115-4.147 1.523zm-22.837.584c.133-.343-1.036-2.535-2.593-4.875-4.128-6.191-5.924-9.606-7.598-14.454-1.414-4.085-1.492-4.641-1.504-10.883-.015-9.431 1.005-12.422 8.49-24.85 7.057-11.718 8.015-16.258 7.22-34.286-.288-6.46-.611-11.838-.72-11.95-.744-.744-.904 1.172-.627 7.67.545 12.94-.292 20.147-3.018 26.062-1.858 4.026-3.938 7.075-9.53 14.002-7.788 9.637-9.985 14.75-9.946 23.126.031 5.743.806 9.275 3.127 14.185 2.512 5.32 7.135 10.689 12.93 15.011 2.667 1.994 3.391 2.231 3.77 1.242z" fill="#212178"/></svg>
|
After Width: | Height: | Size: 3.2 KiB |
1
icons/perl/perl-plain.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" height="128" width="128" viewBox="0 0 128 128"><path d="M53.343 127.515c-13.912-2.458-25.845-8.812-35.707-19.004C9.252 99.845 3.48 88.926.851 76.764-.284 71.51-.284 56.477.85 51.222c1.776-8.219 5.228-16.388 9.927-23.509 3.112-4.71 12.227-13.825 16.938-16.937 7.121-4.698 15.292-8.15 23.511-9.925 5.256-1.135 20.29-1.135 25.546 0 12.809 2.769 23.454 8.553 32.638 17.736 9.188 9.187 14.969 19.827 17.738 32.635 1.135 5.255 1.135 20.287 0 25.542-2.769 12.808-8.55 23.452-17.738 32.635-9.043 9.042-19.55 14.81-32.146 17.652-4.469 1.005-19.24 1.295-23.922.464zm11.565-12.772c0-4.194-.06-4.496-.908-4.496-.84 0-.904.29-.868 3.899.04 4.262.34 5.574 1.207 5.284.404-.134.57-1.494.57-4.687zm-6.758 1.445c1.196-1.194 1.543-1.917 1.543-3.209 0-1.315-.162-1.634-.763-1.517-.416.08-.92.759-1.114 1.505-.198.751-1.002 1.906-1.785 2.572-1.417 1.194-1.47 2.191-.121 2.191.384 0 1.393-.694 2.24-1.542zm14.945 1.05c.166-.271-.339-1.037-1.126-1.699-.783-.666-1.587-1.821-1.784-2.572-.194-.746-.699-1.425-1.115-1.505-.601-.117-.763.202-.763 1.517 0 2.608 3.747 5.942 4.788 4.259zm-20.66-8.146c0-.262-.635-.823-1.41-1.247-5.058-2.769-10.984-7.177-14.282-10.612-6.435-6.704-9.33-13.385-9.402-21.676-.044-5.542.67-8.432 3.367-13.607 2.608-5 5.631-8.779 13.947-17.42 9.29-9.648 11.429-12.195 13.043-15.53 1.147-2.369 1.296-3.232 1.458-8.238.197-6.216-.182-10.506-.929-10.506-.339 0-.403 1.614-.21 5.235.622 11.593-1.53 15.19-14.892 24.88-9.2 6.677-13.422 10.302-16.612 14.261-4.517 5.615-6.52 10.471-7.02 17.054-1.207 15.868 8.85 29.628 26.591 36.385 3.916 1.49 6.35 1.881 6.35 1.021zm30.696-1.287c6.1-2.539 10.738-5.611 15.11-10.007 6.665-6.7 9.442-12.965 9.858-22.24.363-8.134-1.405-13.515-6.439-19.61-3.447-4.173-7.161-7.16-17.173-13.812-13.47-8.95-16.632-12.513-16.632-18.746 0-1.659.299-4.004.662-5.219.622-2.066.606-3.491-.02-1.857-.593 1.546-1.946.836-2.676-1.408l-.703-2.156.267 2.043c.94 7.241 1.061 10.272.641 16.614-.56 8.565-1.614 14.426-4.505 25.074-2.87 10.572-3.387 14.402-3.031 22.475.298 6.826 1.255 11.932 3.475 18.592 2.06 6.188 2.443 6.656 6.23 7.625 2.086.533 4.06 1.433 5.63 2.567 1.474 1.066 2.952 1.76 3.78 1.776.75.012 3.237-.759 5.526-1.711zm-1.369-3.076c-.565-.565-.302-1.046 1.91-3.492 6.972-7.697 10.096-15.645 10.185-25.906.06-6.995-1.482-11.625-6.197-18.592-2.135-3.152-9.636-11.011-13.265-13.893-2.664-2.115-5.397-5.72-5.886-7.762-.496-2.067.888-1.522 2.495.985.787 1.227 2.495 3.027 3.79 4 1.297.977 5.132 3.834 8.523 6.357 11.666 8.67 16.858 16.065 18.024 25.668.679 5.558-.395 11.302-3.108 16.634-2.81 5.526-7.937 11.545-12.325 14.479-2.7 1.8-3.552 2.115-4.146 1.522zm-22.836.585c.133-.343-1.034-2.535-2.592-4.872-4.13-6.192-5.926-9.61-7.602-14.454-1.413-4.09-1.49-4.646-1.501-10.887-.016-9.433 1.005-12.424 8.49-24.848 7.056-11.722 8.013-16.259 7.217-34.286-.286-6.462-.61-11.839-.718-11.948-.747-.746-.904 1.167-.63 7.665.549 12.941-.287 20.15-3.016 26.064-1.857 4.024-3.936 7.076-9.53 14.002-7.788 9.64-9.984 14.75-9.944 23.125.029 5.744.808 9.276 3.129 14.188 2.51 5.316 7.133 10.685 12.926 15.012 2.669 1.99 3.391 2.228 3.77 1.239z" fill="#000"/></svg>
|
After Width: | Height: | Size: 3.0 KiB |
6
package-lock.json
generated
@ -1963,9 +1963,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
||||
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
|
||||
"version": "1.3.8",
|
||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
||||
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
|
||||
"dev": true
|
||||
},
|
||||
"interpret": {
|
||||
|
@ -6,7 +6,7 @@
|
||||
"scripts": {
|
||||
"build-css": "gulp updateCss && gulp clean",
|
||||
"peek-test": "python ./.github/scripts/icomoon_peek.py ./.github/scripts/build_assets/geckodriver-v0.27.0-win64/geckodriver.exe ./icomoon.json ./devicon.json ./icons ./ --pr_title \"%PR_TITLE%\"",
|
||||
"build-test": "python ./.github/scripts/icomoon_build.py ./.github/scripts/build_assets/geckodriver-v0.27.0-win64/geckodriver.exe ./icomoon.json ./devicon.json ./icons ./"
|
||||
"build-test": "python ./.github/scripts/icomoon_build.py ./.github/scripts/build_assets/geckodriver-v0.27.0-win64/geckodriver.exe ./icomoon.json ./devicon.json ./icons ./",
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -28,5 +28,6 @@
|
||||
"gulp": "^4.0.0",
|
||||
"gulp-sass": "^4.1.0",
|
||||
"sass": "^1.26.10"
|
||||
}
|
||||
},
|
||||
"dependencies": {}
|
||||
}
|
||||
|