diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4efc27ec7..45c17487a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,506 +1,7 @@ -
-First of all, thanks for taking the time to contribute! This project can only grow and live by your countless contributions. To keep this project maintainable, we have developed some guidelines for our contributors. -
+Thanks for taking the time to contribute! This project can only grow and live by your contributions. -devicon.jsonHere are some terms that we will use in this repo:
-SVG" refers to the svg versions of the Icons.Devicon only accepts Icons of development languages and tools.
-Development refers to programming or programming-related jobs.
-Tools can be software, OS, services, etc. that helps with development. It must be specifically related to development (so software like Microsoft Word or Google Calendar won't be accepted since it's too general).
- -Special Cases (see this discussion for more details) -To request an icon, please create an issue in the repository, and follow these guidelines:
-Here is what you have to do to submit your icons to the repo.
-/iconsdevicon.json to include the new Icon develop branch for each Icon.new icon: Icon name (versions) peek-bot to check your icons.Note: Due to our recent bot upgrades, icon contributors don't have to optimize/minify their SVGs anymore!
- -For the technology name, make the file and folder name lowercase and concatenate them. For example:
-angularjs or just angularamazonwebservicesmicrosoftsqlserverEach icon/SVG can come in different versions:
-|
- original: the original logo. Can contain multiple colors. -devicon-original.svg- |
-
- plain: a one-color version of the original logo. Note that the icon version will be stripped of all colors so you don't have to strip beforehand. -devicon-plain.svg- |
-
- line: a one-color, line version of the original logo. Note that the icon version will be stripped of all colors so you don't have to strip beforehand. -devicon-line.svg- |
-
|
- original-wordmark: similar to the above but must contain the name of the technology. -devicon-original-wordmark.svg- |
-
- plain-wordmark: similar to the above but must contain the name of the technology. Note that the icon version will be stripped of all colors so you don't have to strip beforehand. -devicon-plain-wordmark.svg- |
-
- line-wordmark: similar to the above but must contain the name of the technology. Note that the icon version will be stripped of all colors so you don't have to strip beforehand. -devicon-line-wordmark.svg- |
-
Notes:
-
originalBefore you submit your logos/SVGs, please ensure that they meet the following standard:
-viewBox.(Technology name)-(original|plain|line)(-wordmark?)..svg can have any color.
- .svg file contains one version of an icon in a 0 0 128 128 viewbox. You can use a service like resize-image for scaling the SVG..svg must use the fill attribute instead of using classes for colors. This is to prevent class name clashing when using inline SVG. See here for more details.icons folder. .svg files for the Icon must go in the same folder. .eps file. The .eps file should contains all available versions of an icon. Each version is contained in a 128px by 128px artboarddevicon.json
- Before you open a PR into Devicon, you must update the devicon.json. This is essential for our build script to work and to document your work.
-
- Here is the object that each of your Icon must have: -
- -
-
- {
- // 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": {
- // list the SVGs that you have
- "SVG": VersionString[],
-
- // list the fonts acceptable versions that you have
- "font": VersionString[]
- },
-
- // the main color of the logo. Only track 1 color
- "color": string,
-
- // keeps track of the aliases for the font versions ONLY
- // see the Example section for more details
- // NOTE: this attribute is not required from now on (see this)
- // it is only being kept for backward compatibility
- "aliases": AliasObj[]
- }
-
-
-
-- Here is what VersionString means: -
-SVG file's name- Here is the AliasObj interface: -
-
-
- {
- "base": VersionString, // the base version
- "alias": VersionString // the alias version that's similar to the base version
- }
-
-
--As an example, let's assume you have created the SVGs for Redhat and Amazon Web Services logos. -
-For the Redhat SVG, you have the "original", "original-wordmark", "plain", and "plain-wordmark" versions.
-For the Amazon Web Services SVGs, you have the "original", "original-wordmark", "plain-wordmark" versions. The "original" version is simple enough to be a "plain" version as well. Note that we are not using the acronym AWS.
-/icons
- amazonwebservices and one for redhatdevicon.json
- redhat, you would do this
-
-
- {
- "name": "redhat",
- "tags": [
- "server",
- "linux"
- ],
- "versions": {
- "SVG": [ // here are the versions that are available in svgs
- "original",
- "original-wordmark",
- "plain",
- "plain-wordmark"
- ],
- "font": [ // here are the versions that will be used to create icons
- "plain",
- "plain-wordmark"
- ]
- },
- "color": "#e93442", // note the '#' character
- "aliases": [] // no aliases in this case
- },
-
-
- amazonwebservices, you would do this
-
-
- {
- "name": "amazonwebservices",
- "tags": [
- "cloud",
- "hosting",
- "server"
- ],
- "versions": {
- "SVG": [ // here are the versions that are available in svgs
- "original",
- "original-wordmark",
- "plain-wordmark"
- ],
- "font": [ // here are the versions that will be used to create icons
- "original", // "original" is simple enough to be used as the plain icon so we'll add "plain" to the aliases below
- "plain-wordmark",
- // note that the alias "plain" is not listed here. It must be listed in the `aliases` attribute
- ]
- },
- "color": "#F7A80D", // note the '#' character
- "aliases": [
- {
- "base": "original", // here is the base version that we will upload to Icomoon
- "alias": "plain" // this is its alias. Our script will create a reference so users can search using "original" or "plain" for this icon
- // note that you don't provide aliases for the SVG version. If "original" can't be made into a font, there's no need to provide it with a plain alias
- // note that this is now optional. You do not need to create aliases from now on. The attribute needs to stay though.
- }
- ]
- }
-
-
- - Sometimes, a company will update their logo or someone spotted an error in the SVG/icon that needs to be fixed. This means the current icon in our repository might need an update. The steps to do this is simple: -
-update icon: icon-name (versions). Basically, follow the Overview on Submitting Icon but replace the new with update in name of request with the above.
- - Devicon is living by it's contributors and maintainers. Everyone can and is asked to contribute to this project. - You don't have to be in a team to contribute! -
-
- The branches master and develop are protected branches and only members
- with corresponding permissions (see teams below) are able to push changes to them.
- Additional branches must follow the pattern username/feature/description.
- The /feature/ indicates that a change is made to existing code (regardless
- if it's a fix, refactor or actual feature). The naming convention is based on the gitflow-workflow.
-
For organisational purposes we introduced teams with permissions and responsibilities:
-Write access to the repository (allowing them to create own branches)
- and are allowed to push changes to the develop branch (pull request and status checks required).
- Maintainer permission
- to the repository.
- Members of this team are allowed to publish a new release (push master branch after pull
- request and status checks).
-
- Wanna join the team? Please open a public discussion where
- you introduce yourself.
- New member requests have to be approved by all active members of the team Maintainer. Every member
- of this team has a veto permission to reject a new member.
-
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.
- -Here are the main bots/script that we use:
-peek-bot: Upload the icons to Icomoon and see what it looks like. Doesn't download any icons at this time.build-bot: Build the icons by uploading them to Icomoon and download the resulting icon files. Also update the css fileoptimize-bot: Optimize the SVGs by minifying them and prefixing their IDs with the file names. This is done so using inline SVGs from this repository will not cause ID clash.check-SVG-bot: Check the SVGs uploaded and ensure they have the correct view box, fills, etc..npm-release-bot: Update the NPM package.release-message-bot: Create the release message for the PR.Here are the modular tasks in the build script:
-There are some bugs that the build scripts might run into. Listed below are the common ones and their solutions
-package-lock.json. Most likely the result of a dependabot update but not 100% sure.package-lock.json and run `npm install` to generate a new file. Commit and push.bot-peek 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 Overview on Submitting Icon, the bot will fail.-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. -The Discord server is unofficial, and Devicons is still being maintained via GitHub. -
- -Devicon does not follow a strict release plan. A new release is depended on current amount of contributions, required bugfixes/patches and will be discussed by the team of maintainers.
-Generally speaking: A new release will be published when new icons are added or a bug was fixed. When it's predictable that multiple icons are added in a foreseeable amount of time they are usually wrapped together.
-The version naming follows the rules of Semantic Versioning. Given a version number MAJOR.MINOR.PATCH, increment the:
-development as draft-release branchnpm version vMAJOR.MINOR.PATCH -m "bump npm version to vMAJOR.MINOR.PATCH" (see #487)draft-releasebuild_icons.yml (which has a workflow_dispatch event trigger) and select the branch draft-release 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 draft-releasedevelopment. Mention the release number in the pull request title (like "Build preparation for release vMAJOR.MINOR.PATCH).
- #504 as an example).
- master and HEAD development. Copy the description of the earlier pull request.npm publish leading to a updated npm package (vMAJOR.MINOR.PATCH).