๐ ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ
- React: 18.2.0 (vite 5.0.8.)
- Storybook: 8.0.2.
๐ ์ฐธ๊ณ
Storybook Chromatic ์ผ๋ก ๋ฐฐํฌํ๊ธฐ
์คํ ๋ฆฌ๋ถ ๋ฐฐํฌํ๊ธฐ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.๊ณต์๋ฌธ์์ ์์ธํ๊ฒ ์ ์ฐจ๊ฐ ๋์ ์์ง๋ง ์กฐ๊ธ ๋ ์์ธํ๊ฒ ์์๋ณธ๋ค.์ฐ์ Next ๋๋ React ํ๋ก์ ํธ๋ฅผ ํ๋ ์์ฑํ๋ค.๊ทธ๋ฆฌ๊ณ npx storybook@latest init ๋ช ๋ น์ด
velog.io
https://min-kyung.tistory.com/160
Chromatic์ผ๋ก Storybook ์ง์์ ๋ฐฐํฌํ๊ธฐ (Github Actions)
TL;DR 1. ์คํ ๋ฆฌ๋ถ์ ๋์ ํ๊ฒ ๋ ๊ณ๊ธฐ 2. chromatic์ผ๋ก ์คํ ๋ฆฌ๋ถ ๋ฐฐํฌํ๊ธฐ 3. Github Actions๋ฅผ ์ด์ฉํด Pull Reqeust์์ ๋ฐ๋ก ์ปดํฌ๋ํธ ํ์ธํ๊ธฐ ์คํ ๋ฆฌ๋ถ์ ๋์ ํ๊ฒ ๋ ๊ณ๊ธฐ ํ์ ์ ์งํํ๋ฉด์ ์ฌ๋ฌ ์ฌ๋
min-kyung.tistory.com
https://velog.io/@qmflf556/storybook-%EC%9E%90%EB%8F%99-%EB%B0%B0%ED%8F%AC
storybook ์๋ ๋ฐฐํฌ
์ด๋ฏธ origin ์ ๊ธฐ์กด ํ๋ก์ ํธ์์ ์ฌ์ฉ์ค์ด๋ผ ๋ค๋ฅธ ์ด๋ฆ์ธ storybook ์ผ๋ก remote ๋ฅผ ์ถ๊ฐํด์ฃผ๊ณ ์๋ก ์์ฑํ ๋ ํฌ์ ํธ์ํด์ฃผ์๋ค.์๊ฐ์ด ์ข ๊ฑธ๋ฆฐ๋ค.https://www.chromatic.com/start?utm_source=storybook_w
velog.io
https://www.chromatic.com/docs/storybook/setup/
Introduction • Chromatic docs
Chromatic is a cloud based toolchain built around Storybook to help teams develop robust UI components faster, together.
www.chromatic.com
โ๏ธ ์งํ๊ณผ์
1. chromatic (ํฌ๋ก๋งํฑ ์ค์น)
npm install --save-dev chromatic
npx chromatic --project-token='๋ณธ์ธ ํ ํฐ'
ํฌ๋ก๋งํฑ ๊ฐ์ (๊นํ๋ธ ์์ด๋๋ก ๊ฐ์ ํ๋๊ฒ ํธํจ) > ํฌ๋ก๋งํฑ ์ค์น > ์คํ ๋ฆฌ๋ถ ๋ฐฐํฌ
์ ๊ณผ์ ๋ง ์งํํด๋ ์คํ ๋ฆฌ๋ถ ๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ค.
ํ์ง๋ง ๋งค๋ฒ ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๊ธฐ์ ๋ถํธํจ์ด ์๊ธฐ์ ๊นํ๋ธ ์ก์ ์ ์ฌ์ฉํด์
๋ฐฐํฌ ์๋ํ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค.
2. github-actions
name: 'Chromatic-Storybook Deployment'
run-name: deploy storybook by ${{ github.actor }}
on:
pull_request:
branches:
- deploy
paths:
- '**.stories.ts'
- '**.stories.tsx'
- '**.mdx'
jobs:
chromatic-storybook-deploy:
runs-on: ubuntu-latest
outputs:
status: ${{ job.status }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache npm
id: npm-cache
uses: actions/cache@v4
with:
path: '**/node_modules'
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
- if: steps.npm-cache.outputs.cache-hit != 'true'
run: npm ci
- name: Run Chromatic
id: chromatic
uses: chromaui/action@latest
with:
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
token: ${{ secrets.GITHUB_TOKEN }}
exitZeroOnChanges: true
- name: Publish Summary
run: echo -e "| Results | |\n| --- | --- |\n| Build Results | ${{ steps.chromatic.outputs.buildUrl }} |\n| Storybook Preview | ${{ steps.chromatic.outputs.storybookUrl }} |\n| Component Count | ${{ steps.chromatic.outputs.componentCount }} |" >> $GITHUB_STEP_SUMMARY
- name: Discord Webhook
uses: tsickert/discord-webhook@v5.3.0
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK }}
content: 'storybook link -> ${{ steps.chromatic.outputs.storybookUrl }}'
๊นํ๋ธ ์ก์ ์ ์ฒ์ ์ฌ์ฉํด๋ณด๋ ๊ฒ์ด๋ผ ์ ๋ธ๋ก๊ทธ๋ค์ ๋ง์ด ์ฐธ๊ณ ํ๋ค.
deploy ๋ธ๋์น์ ์คํ ๋ฆฌ ํ์ผ๋ค์ด PR์ด ๋๋ฉด ์๋์ผ๋ก ๋ฐฐํฌ๊ฐ ๋๋๋ก ์ค์ ํ์๊ณ ,
๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ฉด ํฌ๋ก๋งํฑ ๋น๋ ๊ฒฐ๊ณผ ํ์ด์ง, ์คํ ๋ฆฌ๋ถ ๋ฐฐํฌ๋งํฌ, ์ปดํฌ๋ํธ ๊ฐ์ ๊ฐ์ด ํ๋ก ๋ณด์ด๋๋ก ํ์๋ค.
(์ด ๋ถ๋ถ์ ๊นํ๋ธ ์ด์ ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์๋ค.)
์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ์ ๋ค๋ฅธ์ ์ ๋์ค์ฝ๋ ์น ํ ์ ์ถ๊ฐํ์๋ค๋ ์ ์ด๋ค.
์ ์ด๋ฏธ์ง์ฒ๋ผ ์๋ ๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ฉด PR ํ์ด์ง์ ์ฝ๋ฉํธ๋ฅผ ๋ณด๋ด๋๋ก ์ค์ ํด์
๋ฐฐํฌ๋ ์คํ ๋ฆฌ๋ถ ๋งํฌ๋ฅผ ๋์ค์ฝ๋๋ก ์๋ฆผ์ ๋ฐ๊ณ ์์๋ค.
๋์ค์ฝ๋ ๊ฐ์ธ ์๋ฒ์์๋ง ๋ชจ๋ ์๋ฆผ์ด ์ค๋๋ก ํด๋์๋๋ฐ,
์คํ ๋ฆฌ๋ถ ๋ฐฐํฌ ๋งํฌ ๊ฐ์ ๊ฒฝ์ฐ์๋ ํ์ ๋ชจ๋ ํ์ธํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์
์คํฐ๋ ํ ๋์ค์ฝ๋ ์ฑ๋์๋ ์คํ ๋ฆฌ๋ถ ๋ฐฐํฌ ๋งํฌ๋ง ์๋ฆผ์ด ์ค๊ฒ ํ๊ณ ์ถ์๋ค.
๊ทธ๋์ ๋์ค์ฝ๋ ์นํ ์ ์ค์ ํด์ PR ์ฝ๋ฉํธ๋ง ๋ฐ๋๋ก ํ๋๋ฐ,
๊ณ์ ๋ฉ์ธ์ง๊ฐ ์์๋ค... ๋ญ๊ฐ ๋ค๋ฅธ๊ฑธ ํด์ค์ผํ๋ ๊ฑด์ง ๋ชจ๋ฅด๊ฒ ์ผ๋ ์คํจํด์
์ ์ฝ๋์ ๋์ค์ฝ๋ ์นํ ๋ด์ฉ์ ์ถ๊ฐํด์ฃผ์๋๋ ์ฑ๊ณตํ๋ค.
์ฝ๋๋ฅผ ๋ณด๋ฉด secrets.~~์ด ์ ํ ๋ถ๋ถ์ด ์๋๋ฐ
๊ทธ ๋ถ๋ถ์ ๊นํ๋ธ์ Security > Secrets and variables > Actions์ ๋ฑ๋ก์ ํด์ฃผ์ด์ผ ํ๋ค.
์ฝ๋์ ์์ฑํ ์ด๋ฆ ๊ทธ๋๋ก ํค์บ์ ์ค์ ํด์ค์ผ ํ๋ค.
ํฌ๋ก๋งํฑ ํ ํฐ์ ์ฒ์์ ํฌ๋ก๋งํฑ ๋ฐฐํฌํ ๋ ๋ฐ์๋ ๊ฐ์ ๋ฑ๋กํด์ฃผ๋ฉด ๋๊ณ ,
๋์ค์ฝ๋ ์นํํฌ๋ ๋์ค์ฝ๋์ webhooks ๋งํฌ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๋์ค์ฝ๋ ์นํํฌ ๋งํฌ๋ฅผ ๋ฑ๋กํ ๋ ์ฃผ์์ ์ ๊นํ๋ธ ํ์ด์ง์ ์นํ ๋งํฌ๋ฅผ ๋ฑ๋กํ ๋์ฒ๋ผ
์นํํฌ URL ๋ง์ง๋ง์ '/github'๋ฅผ ๋ฃ์ด์ค์ผํ๋ ์ค ์์๋๋ฐ ์๋์๋ค.
๊ทธ๋ฅ ์นํํฌ URL์ ๊ทธ๋๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๊ทธ๊ฑธ ๋ชฐ๋ผ์ ๋ช ๋ฒ ์ค๋ฅ๋ฅผ ๋ดค์๋ค... ๊ทธ๋๋ ํด๊ฒฐํด์ ๋คํ๐ฅน