name: Add Changed Icons comment on: pull_request_target: paths: - 'icons/*.svg' branches: - main jobs: lint-contributors: if: github.repository == 'lucide-icons/lucide' runs-on: ubuntu-latest permissions: contents: read 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 - name: Generate annotations run: node ./scripts/updateContributors.mjs env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} FETCH_DEPTH: ${{ github.event.pull_request.commits }} CHANGED_FILES: ${{ 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 generate-changed-icons-comment-data: if: github.repository == 'lucide-icons/lucide' runs-on: ubuntu-latest permissions: contents: read outputs: generate-1px-stroke-width: ${{ steps.generate-1px-stroke-width.outputs.body }} generate-2px-stroke-width: ${{ steps.generate-2px-stroke-width.outputs.body }} generate-3px-stroke-width: ${{ steps.generate-3px-stroke-width.outputs.body }} generate-24px-dpi-preview: ${{ steps.generate-24px-dpi-preview.outputs.body }} generate-cohesion-check-random: ${{ steps.generate-cohesion-check-random.outputs.body }} generate-cohesion-check-squares: ${{ steps.generate-cohesion-check-squares.outputs.body }} generate-x-rays: ${{ steps.generate-x-rays.outputs.body }} 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 env: CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | delimiter="$(openssl rand -hex 8)" echo "body<<$delimiter" >> $GITHUB_OUTPUT while IFS= read -r file; do cat "$file" | # get file content tr '\n' ' ' | # remove line breaks sed -e 's/]*>//g' | # remove attributes from svg element base64 -w 0 | # encode svg sed "s|.*|\"$file\" |" done <<< "$CHANGED_FILES" | tr '\n' ' ' >> $GITHUB_OUTPUT echo >> $GITHUB_OUTPUT echo "$delimiter" >> $GITHUB_OUTPUT - name: Generate cohesion check random id: generate-cohesion-check-random env: CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} 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/]*>//g' | # remove attributes from svg element base64 -w 0 | # encode svg sed "s|.*|\"$file\" |" done <<< "$CHANGED_FILES" | tr '\n' ' ' >> $GITHUB_OUTPUT echo >> $GITHUB_OUTPUT echo "$delimiter" >> $GITHUB_OUTPUT - name: Generate cohesion check squares id: generate-cohesion-check-squares env: CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} 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/]*>//g' | # remove attributes from svg element base64 -w 0 | # encode svg sed "s|.*|\"$file\" |" done <<< "$CHANGED_FILES" | tr '\n' ' ' >> $GITHUB_OUTPUT echo >> $GITHUB_OUTPUT echo "$delimiter" >> $GITHUB_OUTPUT - name: Generate 1px stroke-width id: generate-1px-stroke-width env: CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | delimiter="$(openssl rand -hex 8)" echo "body<<$delimiter" >> $GITHUB_OUTPUT while IFS= read -r file; do cat "$file" | # get file content tr '\n' ' ' | # remove line breaks sed -e 's/]*>//g' | # remove attributes from svg element base64 -w 0 | # encode svg sed "s|.*|\"$file\" |" done <<< "$CHANGED_FILES" | tr '\n' ' ' >> $GITHUB_OUTPUT echo >> $GITHUB_OUTPUT echo "$delimiter" >> $GITHUB_OUTPUT - name: Generate 2px stroke-width id: generate-2px-stroke-width env: CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | delimiter="$(openssl rand -hex 8)" echo "body<<$delimiter" >> $GITHUB_OUTPUT while IFS= read -r file; do cat "$file" | # get file content tr '\n' ' ' | # remove line breaks sed -e 's/]*>//g' | # remove attributes from svg element base64 -w 0 | # encode svg sed "s|.*|\"$file\" |" done <<< "$CHANGED_FILES" | 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 while IFS= read -r file; do cat "$file" | # get file content tr '\n' ' ' | # remove line breaks sed -e 's/]*>//g' | # remove attributes from svg element base64 -w 0 | # encode svg sed "s|.*|\"$file\" |" done <<< "$CHANGED_FILES" | tr '\n' ' ' >> $GITHUB_OUTPUT echo >> $GITHUB_OUTPUT echo "$delimiter" >> $GITHUB_OUTPUT - name: Generate X-rays id: generate-x-rays env: CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | delimiter="$(openssl rand -hex 8)" echo "body<<$delimiter" >> $GITHUB_OUTPUT while IFS= read -r file; do cat "$file" | # get file content tr '\n' ' ' | # remove line breaks sed -e 's/]*>//g' | # remove attributes from svg element base64 -w 0 | # encode svg sed "s|.*|\"$file\" |" done <<< "$CHANGED_FILES" | tr '\n' ' ' >> $GITHUB_OUTPUT echo >> $GITHUB_OUTPUT echo "$delimiter" >> $GITHUB_OUTPUT add-changed-icons-comment: if: github.repository == 'lucide-icons/lucide' runs-on: ubuntu-latest permissions: pull-requests: write needs: [generate-changed-icons-comment-data] steps: - 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 ${{ needs.generate-changed-icons-comment-data.outputs.generate-2px-stroke-width }}
Preview cohesion ${{ needs.generate-changed-icons-comment-data.outputs.generate-cohesion-check-squares }}
${{ needs.generate-changed-icons-comment-data.outputs.generate-2px-stroke-width }}
${{ needs.generate-changed-icons-comment-data.outputs.generate-cohesion-check-random }}
Preview stroke widths ${{ needs.generate-changed-icons-comment-data.outputs.generate-1px-stroke-width }}
${{ needs.generate-changed-icons-comment-data.outputs.generate-2px-stroke-width }}
${{ needs.generate-changed-icons-comment-data.outputs.generate-3px-stroke-width }}
DPI Preview (24px) ${{ needs.generate-changed-icons-comment-data.outputs.generate-24px-dpi-preview }}
Icon X-rays ${{ needs.generate-changed-icons-comment-data.outputs.generate-x-rays }}
edit-mode: replace