mirror of
https://github.com/lucide-icons/lucide.git
synced 2026-11-12 13:38:32 +00:00
* eslint rules for SVGS * apply options * Add typescript eslinter * Make eslint work with the codebase * Format icons * Test svg * Add workflow * Fix lint command * Revert duplicated aliases * Update .eslintrc.js Co-authored-by: Jakob Guddas <github@jguddas.de> * Update .eslintrc.js Co-authored-by: Jakob Guddas <github@jguddas.de> * Move linter to separate workflow * Add pnpm install * Revert icon changes * Test eslint workflow * turn of fail lint-contributors * Revert theater * process feedback --------- Co-authored-by: Jakob Guddas <github@jguddas.de>
194 lines
9.2 KiB
YAML
194 lines
9.2 KiB
YAML
name: Add Changed Icons comment
|
|
|
|
on:
|
|
pull_request_target:
|
|
paths:
|
|
- 'icons/*.svg'
|
|
|
|
jobs:
|
|
lint-contributors:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0
|
|
ref: refs/pull/${{ github.event.pull_request.number }}/merge
|
|
- name: Get changed files
|
|
id: changed-files
|
|
uses: tj-actions/changed-files@v35
|
|
with:
|
|
files: icons/*
|
|
- uses: actions/setup-node@v3.8.1
|
|
- name: Install simple-git (safer and faster than installing all deps)
|
|
run: npm install simple-git
|
|
- env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
FETCH_DEPTH: ${{ github.event.pull_request.commits }}
|
|
run: node ./scripts/updateContributors.mjs ${{ steps.changed-files.outputs.all_changed_files }}
|
|
- name: Generate annotations
|
|
env:
|
|
ANNOTATION_SEVERITY: notice
|
|
ANNOTATION_TITLE: Contributors have changed!
|
|
ANNOTATION_DESCRIPTION: Don't add people who have only performed automatic optimizations.
|
|
run: |
|
|
git diff --unified=0 -- icons/*.json | # diff icon metadata (unified=0 gives the correct chunk line number)
|
|
perl -ne '/^(\+|- |@)/ && print' | # get chunks (lines that start with "+++", "@@", "+ ", "- ")
|
|
perl -pe 's/\n/%0A/' | # url encode line breaks (\n -> %0A)
|
|
perl -pe 's/%0A(\+\+\+ b\/)/\n\1/g' | # split chunks(one chunk per line)
|
|
perl -pe "s/\+\+\+ b\/([^@]*)%0A@@ -(\d+)[^\s]* \+(\d+)[^@]*@@(.*)/::$ANNOTATION_SEVERITY file=\1,line=\2,endLine=\3,title=$ANNOTATION_TITLE::$ANNOTATION_DESCRIPTION%0A\4/"
|
|
# Example for the previous substitution
|
|
# input: +++ b/icons/accessibility.json%0A@@ -2,0 +3 @@%0A+ "contributors": ["hi"],%0A@@ -13 +14 @@%0A+}%0A
|
|
# output: ::$ANNOTATION_SEVERITY file=icons/accessibility.json,line=2,endLine=3,title=$ANNOTATION_TITLE::$ANNOTATION_DESCRIPTION%0A%0A+ "contributors": ["hi"],%0A@@ -13 +14 @@%0A+}%0A
|
|
# - name: Fail if contributors have changed
|
|
# run: git diff --exit-code -- icons/*.json
|
|
|
|
add-changed-icons-comment:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
pull-requests: write
|
|
contents: write
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
ref: refs/pull/${{ github.event.pull_request.number }}/merge
|
|
- name: Get changed files
|
|
id: changed-files
|
|
uses: tj-actions/changed-files@v35
|
|
with:
|
|
files: icons/*.svg
|
|
- name: Generate 24px dpi preview
|
|
id: generate-24px-dpi-preview
|
|
run: |
|
|
delimiter="$(openssl rand -hex 8)"
|
|
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
|
cat "$file" | # get file content
|
|
tr '\n' ' ' | # remove line breaks
|
|
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
base64 -w 0 | # encode svg
|
|
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/dpi/24/&.svg\"/> |"
|
|
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
echo >> $GITHUB_OUTPUT
|
|
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
- name: Generate cohesion check random
|
|
id: generate-cohesion-check-random
|
|
run: |
|
|
delimiter="$(openssl rand -hex 8)"
|
|
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
for file in $(printf "%s\\n" icons/*.svg | shuf | head -n$(awk -F' ' '{print NF}' <<< '${{ steps.changed-files.outputs.all_changed_files }}')); do
|
|
cat "$file" | # get file content
|
|
tr '\n' ' ' | # remove line breaks
|
|
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
base64 -w 0 | # encode svg
|
|
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/stroke-width/2/&.svg\"/> |"
|
|
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
echo >> $GITHUB_OUTPUT
|
|
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
- name: Generate cohesion check squares
|
|
id: generate-cohesion-check-squares
|
|
run: |
|
|
delimiter="$(openssl rand -hex 8)"
|
|
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
for file in $(printf "%s\\n" icons/*square*.svg | shuf | head -n$(awk -F' ' '{print NF}' <<< '${{ steps.changed-files.outputs.all_changed_files }}')); do
|
|
cat "$file" | # get file content
|
|
tr '\n' ' ' | # remove line breaks
|
|
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
base64 -w 0 | # encode svg
|
|
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/stroke-width/2/&.svg\"/> |"
|
|
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
echo >> $GITHUB_OUTPUT
|
|
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
- name: Generate 1px stroke-width
|
|
id: generate-1px-stroke-width
|
|
run: |
|
|
delimiter="$(openssl rand -hex 8)"
|
|
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
|
cat "$file" | # get file content
|
|
tr '\n' ' ' | # remove line breaks
|
|
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
base64 -w 0 | # encode svg
|
|
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/stroke-width/1/&.svg\"/> |"
|
|
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
echo >> $GITHUB_OUTPUT
|
|
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
- name: Generate 2px stroke-width
|
|
id: generate-2px-stroke-width
|
|
run: |
|
|
delimiter="$(openssl rand -hex 8)"
|
|
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
|
cat "$file" | # get file content
|
|
tr '\n' ' ' | # remove line breaks
|
|
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
base64 -w 0 | # encode svg
|
|
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/stroke-width/2/&.svg\"/> |"
|
|
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
echo >> $GITHUB_OUTPUT
|
|
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
- name: Generate 3px stroke-width
|
|
id: generate-3px-stroke-width
|
|
run: |
|
|
delimiter="$(openssl rand -hex 8)"
|
|
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
|
cat "$file" | # get file content
|
|
tr '\n' ' ' | # remove line breaks
|
|
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
base64 -w 0 | # encode svg
|
|
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/stroke-width/3/&.svg\"/> |"
|
|
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
echo >> $GITHUB_OUTPUT
|
|
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
- name: Generate X-rays
|
|
id: generate-x-rays
|
|
run: |
|
|
delimiter="$(openssl rand -hex 8)"
|
|
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
|
cat "$file" | # get file content
|
|
tr '\n' ' ' | # remove line breaks
|
|
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
base64 -w 0 | # encode svg
|
|
sed "s|.*|<img width=\"400\" title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/$(basename ${file//\.svg/})/&.svg\"/> |"
|
|
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
echo >> $GITHUB_OUTPUT
|
|
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
- name: Find Comment
|
|
uses: peter-evans/find-comment@v2
|
|
id: fc
|
|
with:
|
|
issue-number: ${{ github.event.pull_request.number }}
|
|
comment-author: 'github-actions[bot]'
|
|
body-includes: Added or changed icons
|
|
- name: Create or update comment
|
|
uses: peter-evans/create-or-update-comment@v2
|
|
with:
|
|
comment-id: ${{ steps.fc.outputs.comment-id }}
|
|
issue-number: ${{ github.event.pull_request.number }}
|
|
body: |
|
|
### Added or changed icons
|
|
${{ steps.generate-2px-stroke-width.outputs.body }}<br/>
|
|
<details>
|
|
<summary>Preview cohesion</summary>
|
|
${{ steps.generate-cohesion-check-squares.outputs.body }}<br/>
|
|
${{ steps.generate-2px-stroke-width.outputs.body }}<br/>
|
|
${{ steps.generate-cohesion-check-random.outputs.body }}<br/>
|
|
</details>
|
|
<details>
|
|
<summary>Preview stroke widths</summary>
|
|
${{ steps.generate-1px-stroke-width.outputs.body }}<br/>
|
|
${{ steps.generate-2px-stroke-width.outputs.body }}<br/>
|
|
${{ steps.generate-3px-stroke-width.outputs.body }}<br/>
|
|
</details>
|
|
<details>
|
|
<summary>DPI Preview (24px)</summary>
|
|
${{ steps.generate-24px-dpi-preview.outputs.body }}<br/>
|
|
</details>
|
|
<details>
|
|
<summary>Icon X-rays</summary>
|
|
${{ steps.generate-x-rays.outputs.body }}
|
|
</details>
|
|
edit-mode: replace
|