From bc9cb0339d9e7500231e0f467e81ca5c277e6ca7 Mon Sep 17 00:00:00 2001 From: andrew Date: Sun, 15 Oct 2023 12:19:58 +0900 Subject: [PATCH] feat(bezier-icons): add changeset generating job to workflow --- .github/workflows/generate-icon-files.yml | 11 +++- .../scripts/generate-changeset.js | 12 ++++ .../scripts/utils/getChangeLog.js | 60 +++++++++++++++++++ 3 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 packages/bezier-icons/scripts/generate-changeset.js create mode 100644 packages/bezier-icons/scripts/utils/getChangeLog.js diff --git a/.github/workflows/generate-icon-files.yml b/.github/workflows/generate-icon-files.yml index 224feb45b4..6e125e52b5 100644 --- a/.github/workflows/generate-icon-files.yml +++ b/.github/workflows/generate-icon-files.yml @@ -38,12 +38,19 @@ jobs: run: echo "pull_request_number=$(gh pr view --json number -q .number || echo "")" >> $GITHUB_OUTPUT env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - + - name: Add pr description if: ${{ steps.generate-svg-files.outputs.icon_not_changed == 0}} run: | node packages/bezier-icons/scripts/add-pr-description.js ${{ secrets.GITHUB_TOKEN }} ${{ steps.pr.outputs.pull_request_number }} - + + - name: Add changeset + if: ${{ steps.generate-svg-files.outputs.icon_not_changed == 0}} + run: | + node packages/bezier-icons/scripts/generate-changeset.js + git add . + git commit -m "chore(bezier-icons): add changeset" + - name: Delete icons.json files run: | git rm packages/bezier-icons/icons.json diff --git a/packages/bezier-icons/scripts/generate-changeset.js b/packages/bezier-icons/scripts/generate-changeset.js new file mode 100644 index 0000000000..ff0e2ffc50 --- /dev/null +++ b/packages/bezier-icons/scripts/generate-changeset.js @@ -0,0 +1,12 @@ +const { exec } = require('child_process') +const fs = require('fs') +const path = require('path') + +const { getChangeLog } = require('./utils/getChangeLog') + +const changesetPath = path.resolve(__dirname, `../../../.changeset/icon-update-${new Date().valueOf()}.md`) + +exec('git log -1 --name-status --pretty="format:"', async (_undefined, stdout) => { + fs.writeFileSync(changesetPath, getChangeLog(stdout), 'utf-8') +}) + diff --git a/packages/bezier-icons/scripts/utils/getChangeLog.js b/packages/bezier-icons/scripts/utils/getChangeLog.js new file mode 100644 index 0000000000..a487e45312 --- /dev/null +++ b/packages/bezier-icons/scripts/utils/getChangeLog.js @@ -0,0 +1,60 @@ +const statusByKey = { + M: '**CHANGE**', + A: '**ADD**', + D: '**DELETE**', +} + +const getIconName = (path) => path.split('/').at(-1) + +const getIconChangeLog = (iconsByStatus) => { + let res = '' + + for (const [key, icons] of Object.entries(iconsByStatus)) { + res += statusByKey[key] + res += '\n\n' + res += icons.map(icon => `- ${icon}`).join('\n') + res += '\n\n' + } + + return res +} + +const getIconNamesByStatus = (gitLog) => gitLog + .trim() + .split('\n') + .map(line => line.split('\t')) + .filter(line => line[1].endsWith('.svg')) + .reduce((acc, cur) => { + const [key, file] = cur + const icon = getIconName(file) + + if (!icon) { return acc } + + if (!acc[key]) { + acc[key] = [icon] + } else { + acc[key].push(icon) + } + return acc + }, {}) + +const getChangeLog = (gitLog) => { + const iconsByStatus = getIconNamesByStatus(gitLog) + + let description = +`--- +"@channel.io/bezier-icons": minor +--- + +Update icons + +` + + description += getIconChangeLog(iconsByStatus) + + return description.trim() +} + +module.exports = { + getChangeLog, +}