Skip to content

Commit

Permalink
feat: include code snippet in preview comment (#1973)
Browse files Browse the repository at this point in the history
* feat: include code snippet in preview comment

* feat: collapse code snippet in preview comment when it has more than 20 lines

* Update scripts/generateChangedIconsCommentMarkup.mjs

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
  • Loading branch information
jguddas and ericfennis committed Apr 2, 2024
1 parent 4aa36db commit 4c65876
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
4 changes: 4 additions & 0 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ jobs:
comment-author: 'github-actions[bot]'
body-includes: Added or changed icons

- uses: actions/setup-node@v4
- name: Install svgson for code preview (safer and faster than installing all deps)
run: npm install svgson

- name: Generate comment markup
run: node ./scripts/generateChangedIconsCommentMarkup.mjs >> comment-markup.md
id: comment-markup
Expand Down
35 changes: 34 additions & 1 deletion scripts/generateChangedIconsCommentMarkup.mjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
import fs from 'fs';
import path from 'path';
import { shuffle, readSvgDirectory, getCurrentDirPath, minifySvg } from './helpers.mjs';
import { parseSync } from 'svgson';
import {
shuffle,
readSvgDirectory,
getCurrentDirPath,
minifySvg,
toPascalCase,
} from './helpers.mjs';

const currentDir = getCurrentDirPath(import.meta.url);
const ICONS_DIR = path.resolve(currentDir, '../icons');
Expand Down Expand Up @@ -70,6 +77,18 @@ const changeFilesXRayImageTags = getImageTagsByFiles(
400,
).join(' ');

const readyToUseCode = changedFiles
.map((changedFile) => {
const svgContent = fs.readFileSync(path.join(process.cwd(), changedFile), 'utf-8');
const name = path.basename(changedFile, '.svg');
return `const ${toPascalCase(name)}Icon = createLucideIcon('${toPascalCase(name)}', [
${parseSync(svgContent)
.children.map(({ name, attributes }) => JSON.stringify([name, attributes]))
.join(',\n ')}
])`;
})
.join('\n\n');

const commentMarkup = `\
### Added or changed icons
${changeFiles2pxStrokeImageTags}
Expand All @@ -93,6 +112,20 @@ ${changeFilesLowDPIImageTags}<br/>
<summary>Icon X-rays</summary>
${changeFilesXRayImageTags}
</details>
${
// collapse code block if it's too long
readyToUseCode.split('/n').length < 20
? '### Icons as code'
: `<details>
<summary><h3>Icons as code</h3></summary>
`
}
Only working for:
`lucide-react`, `lucide-react-native`, `lucide-preact`, `lucide-vue-next`
\`\`\`ts
${readyToUseCode}
\`\`\`${readyToUseCode.split('/n').length < 20 ? '' : '\n\n</details>'}
`;

console.log(commentMarkup);

0 comments on commit 4c65876

Please sign in to comment.