์ด๋ฒ ํ์
ํ๋ก์ ํธ์์ Storybook
์ ์ฌ์ฉํ๊ฒ ๋์๋๋ฐ, ๋ฉํ ๋๊ป์ ์ฌ์ฉํ๋ ๊ฒ์ ๋์ด์ Chromatic
์ผ๋ก ๋ฐฐํฌํ๋ฉด ํ์
๊ฐ์ ํจ์จ์ฑ์ ํฅ์ํ ์ ์๊ณ , ๋์์ธ ์์คํ
์ ๊ด๋ฆฌํ๋ ๋ถ๋ถ์์ ์ ์ฉํ๋ค๊ณ ํ์
์ ๋ฐฐํฌ๋ฅผ ๊ณ ๋ฏผํ๊ฒ ๋์๋ค.
๊ทธ๋ฆฌ๊ณ PR ์ ์๋์ผ๋ก Chromatic
๋ ๋ฐฐํฌํ๋๋ก ์ค์ ํด๋ณด์๋ค. Git Action์ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ ์ฃผ์๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ํ์๋ค.
Chromatic ์ด๋?
์คํ ๋ฆฌ๋ถ ๊ด๋ฆฌ์๊ฐ ๋ง๋ ๋ฌด๋ฃ ๋ฐฐํฌ ์๋น์ค์ด๋ค. ์คํ ๋ฆฌ๋ถ์ ํด๋ผ์ฐ๋์ ์์ ํ๊ฒ ๋ฐฐํฌํ๊ณ ํธ์คํ ํ ์ ์๋ค.
Chromatic์ ๊ฐ์ ํ, ๋ฐฐํฌํ ํ๋ก์ ํธ๋ฅผ ์ ํํ๋ค. ํด๋น ํ๋ก์ ํธ์์ ๋ช ๋ น์ด๋ฅผ ํตํด ์ค์น๊ฐ ๊ฐ๋ฅํ๋ค. ํ์ฌ pnpm์ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก, pnpm์ผ๋ก ์ค์น๋ฅผ ์งํํ์๋ค.
pnpm install --save-dev chromatic
๊ทธ๋ฆฌ๊ณ , ๋ค์ ํฐ๋ฏธ๋์์ chromatic์ ๋ฐฐํฌํ๋ฉด ๋๋ค.
npx chromatic --project-token=chpt_ ---
๊ต์ฅํ ์ฝ๊ฒ ๋ฐฐํฌ๊ฐ ๋๋ฌ๋ค! ํ์ฌ ํ๋ก์ ํธ์ ์๋ storybook์ด ์ ์์ ์ผ๋ก ๋ณด์ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์์ chpt_ ---
์ ํ ํฐ์ ๊นํ๋ธ์ ๋ฑ๋กํ ์ ์๋ค.
ํด๋น ๋ ํฌ์งํ ๋ฆฌ์ Secrets and variables์ Actions์์ ํ ํฐ์ ๋ฑ๋กํ ์ ์๋ค.
๋ฑ๋ก ํ, .github/workflows
ํด๋ ์์ yml ํ์ผ์ ์์ฑํ๋ค. ๊ณต์ ๋ฌธ์์์๋ chromatic.yml
ํ์ผ๋ก ์์ฑํ๋ผ๊ณ ํ์์ง๋ง, ์ด๋ฆ์ ํฌ๊ฒ ๋ฌธ์ ๊ฐ ๋์ง ์๊ธฐ์ ๋๋ storybook.yml
์ผ๋ก ์์ฑํ์๋ค.
์ฝ๋์ ๊ฒฝ์ฐ ์งฑ์ผ์ด์ FE ๊ฐ๋ฐ ๊ณต๋ถ ์ ์ฅ์
๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์๋ค. ํด๋น ๋ธ๋ก๊ทธ์ ํ๋ก์ ํธ๋ yarn์ ์ฌ์ฉํ๊ณ ์์ด์ yml์ด yarn ๊ธฐ์ค์ผ๋ก ๋์ด์๋๋ฐ, ๋ด๊ฐ ์งํํ๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ pnpm์ ์ฌ์ฉํ๋ฏ๋ก Corepack์ ํ์ฑํํ๊ณ , pnpm ๋ช
๋ น์ด๋ก ๋ณ๊ฒฝํ์ฌ ์งํํ์๋ค.
name: Preview
on:
pull_request:
branches: ['main', 'develop']
permissions:
contents: write
pages: write
deployments: write
id-token: write
issues: write
pull-requests: write
jobs:
storybook-preview:
runs-on: ubuntu-20.04
steps:
- name: ์ ์ฅ์ ์ฒดํฌ์์
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Corepack ํ์ฑํ
run: corepack enable
- name: pnpm ์ค์น
run: corepack prepare pnpm@latest --activate
- name: ์บ์ ์ข
์์ฑ
id: cache
uses: actions/cache@v3
with:
path: '**/node_modules'
key: ${{ runner.os }}-node-${{ hashFiles('**/pnpm-lock.yaml') }}-storybook
- name: ์ข
์์ฑ ์ค์น
if: steps.cache.outputs.cache-hit != 'true'
run: pnpm install
- name: Chromatic์ ๊ฒ์
id: chromatic
uses: chromaui/action@v1
with:
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
token: ${{ secrets.GITHUB_TOKEN }}
onlyChanged: true
autoAcceptChanges: true
- name: ํ์ฌ ์๊ฐ ๊ฐ์ ธ์ค๊ธฐ
uses: josStorer/get-current-time@v2
id: current-time
with:
format: 'YYYY๋
MM์ DD์ผ HH์ mm๋ถ ss์ด'
utcOffset: '+09:00'
outputs:
storybook_url: ${{ steps.chromatic.outputs.storybookUrl }}
current_time: ${{ steps.current-time.outputs.formattedTime }}
github-bot-storybook:
runs-on: ubuntu-latest
needs: [storybook-preview]
steps:
- name: PR ์ฝ๋ฉํธ ๋จ๊ธฐ๊ธฐ
uses: thollander/actions-comment-pull-request@v2
with:
comment_tag: ${{ github.event.number }}-storybook
message: |
๐ Storybook: ${{ needs.storybook-preview.outputs.storybook_url }}
๐ Update: ${{ needs.storybook-preview.outputs.current_time }}
PR ์ ๋ฐฐํฌ๊ฐ ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ ๋ชจ์ต์ ํ์ธํ ์ ์๋ค!
์งฑ์ผ์ด์ FE ๊ฐ๋ฐ ๊ณต๋ถ ์ ์ฅ์ - [GitHub Action / Chromatic] ์คํ ๋ฆฌ๋ถ PR ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐฐํฌ (feat. yarn)
์คํ ๋ฆฌ๋ถ(Storybook) ๋ฐฐํฌํ๊ธฐ ๊ณต์๋ฌธ์
Storybook Chromatic ์ผ๋ก ๋ฐฐํฌํ๊ธฐ