mirror of
https://github.com/simple-icons/simple-icons.git
synced 2024-12-16 01:10:30 +02:00
Add CI step for ensuring alphabetical order of icons (#2334)
* Add a script for the linting that cannot be accomplished by our other linters
Currently this only contains linting for whether our icons are alphabetically sorted
* Add our own linting to Travis
* Fix Let's Encrypt being incorrectly sorted
* Intentionally break sorting to test CI
* Revert "Intentionally break sorting to test CI"
This reverts commit 55e4070b3c
.
* Explain in CONTRIBUTION.md how to sort metadata
This commit is contained in:
parent
21b01b56d7
commit
7b69d16efb
@ -8,6 +8,7 @@ jobs:
|
||||
- npm run jsonlint
|
||||
- npm run svglint
|
||||
- npm run wslint
|
||||
- npm run our-lint
|
||||
- name: "Build website"
|
||||
language: ruby
|
||||
rvm: 2.4.1
|
||||
|
@ -145,6 +145,8 @@ Here is the object for The Movie Database as an example:
|
||||
}
|
||||
```
|
||||
|
||||
Make sure the icon is added in alphabetical order. If you're in doubt, you can always run `npm run our-lint` - this will tell you if any of the JSON data is in the wrong order.
|
||||
|
||||
### 7. Create a pull request
|
||||
|
||||
Once you've completed the previous steps, create a pull request to merge your edits into the *develop* branch.
|
||||
|
@ -2495,16 +2495,16 @@
|
||||
"hex": "E2231A",
|
||||
"source": "https://www.lenovopartnernetwork.com/us/branding/"
|
||||
},
|
||||
{
|
||||
"title": "Letterboxd",
|
||||
"hex": "00D735",
|
||||
"source": "https://letterboxd.com/about/logos/"
|
||||
},
|
||||
{
|
||||
"title": "Let’s Encrypt",
|
||||
"hex": "003A70",
|
||||
"source": "https://letsencrypt.org/trademarks/"
|
||||
},
|
||||
{
|
||||
"title": "Letterboxd",
|
||||
"hex": "00D735",
|
||||
"source": "https://letterboxd.com/about/logos/"
|
||||
},
|
||||
{
|
||||
"title": "LGTM",
|
||||
"hex": "FFFFFF",
|
||||
|
@ -28,6 +28,7 @@
|
||||
"scripts": {
|
||||
"build": "node scripts/build-package.js",
|
||||
"clean": "rm icons/*.js index.js",
|
||||
"our-lint": "node scripts/lint.js",
|
||||
"jsonlint": "jsonlint _data/simple-icons.json -q -V .jsonlintschema",
|
||||
"svglint": "svglint icons/* --ci",
|
||||
"wslint": "editorconfig-checker -exclude *.svg",
|
||||
|
43
scripts/lint.js
Normal file
43
scripts/lint.js
Normal file
@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* @fileoverview Lints for the package that can't be implemented in the existing linters (e.g. jsonlint/svglint)
|
||||
*/
|
||||
|
||||
const { icons } = require("../_data/simple-icons.json");
|
||||
|
||||
/**
|
||||
* Contains our tests so they can be isolated from eachother; I don't think each test is worth its own file
|
||||
* @type {{[k:string]: () => (string|undefined)}}
|
||||
*/
|
||||
const TESTS = {
|
||||
/** Tests whether our icons are in alphabetical order */
|
||||
alphabetical: function() {
|
||||
const collector = (invalidEntries, icon, index, array) => {
|
||||
if (index > 0) {
|
||||
const prev = array[index - 1];
|
||||
if (icon.title.localeCompare(prev.title) < 0) {
|
||||
invalidEntries.push(icon);
|
||||
}
|
||||
}
|
||||
return invalidEntries;
|
||||
};
|
||||
|
||||
const invalids = icons.reduce(collector, []);
|
||||
if (invalids.length) {
|
||||
return `Some icons aren't in alphabetical order:
|
||||
${invalids.map(icon => icon.title).join(", ")}`;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// execute all tests and log potential errors
|
||||
const errors = Object.keys(TESTS)
|
||||
.map(k => TESTS[k]())
|
||||
.filter(Boolean);
|
||||
|
||||
if (errors.length) {
|
||||
errors.forEach(error => {
|
||||
console.error(`\u001b[31m${error}\u001b[0m`);
|
||||
});
|
||||
process.exit(1);
|
||||
}
|
Loading…
Reference in New Issue
Block a user