-
Notifications
You must be signed in to change notification settings - Fork 7
๐ชต 1. Storybook PR Preview ๋ฐ ๋ฐฐํฌํ๊ธฐ
UI ์ปดํฌ๋ํธ์ ํ์ด์ง๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๋น๋ํ๊ธฐ ์ํ ํ๋ก ํธ์๋ ์์ ํ๊ฒฝ์ ๋๋ค. ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ์ง ์๊ณ ๋ ์ ๊ทผํ๊ธฐ ์ด๋ ค์ด ์ํ๋ ์์ธ์ ์ธ ์ผ์ด์ค๋ฅผ ๊ฐ๋ฐํ๊ณ ๊ณต์ ํ ์ ์๋๋ก ๋์์ค๋๋ค.
์ด์ ํ๋ก์ ํธ์์ UI ์์ ์ ๋๋ ์ ์งํํ์ ๋ ์ปดํฌ๋ํธ์ ๋ํ ๋ฌธ์ํ๋ฅผ ํ์ง ์๊ฑฐ๋, ํ๋๋ผ๋ ๋ ธ์ ์ ๋ฌธ์ํ๋ฅผ ํด๋์์ต๋๋ค. ๊ทธ๋ฌ๋ค๋ณด๋ ์ด๋ฏธ ๋ง๋ค์ด์ง ์ปดํฌ๋ํธ๊ฐ ์์์๋ ํ์ธํ์ง ๋ชปํ๊ณ ๋๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ฒ ๋๋ ํ์์ด ๋ฐ์ํ๊ฑฐ๋, ์ปดํฌ๋ํธ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋ฌธ์๋ ์๋์ผ๋ก ๋ณ๊ฒฝํด์ค์ผํ๋ ๋นํจ์จ์ด ๋ฐ์ํ์์ต๋๋ค. ์ด๋ฌํ ์ํฉ์์ ์ด๋ป๊ฒ ์ปดํฌ๋ํธ๋ค์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ๋ฌธ์ํํ ๊ฒ์ธ์ง ๊ณ ๋ฏผํ ๊ฒฐ๊ณผ storybook์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์์ต๋๋ค.
๋ฐฐํฌ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์๋๋ฐ chromatic์ผ๋ก ๋ฐฐํฌํ๋ ๊ฒ์ด ๊ฐ์ฅ ๊ฐ๋จํด๋ณด์๊ณ ๋ณดํธ์ ์ด์์ผ๋ ๋ค๋ถ์บ organization ๊ถํ ๋ฌธ์ ๋ก ๋ฐฐํฌ ๋ถ๊ฐํ์ต๋๋ค.
chromatic์ ๋ฐฐํฌํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํด GitHub Pages์ ์ง์ ๋ฐฐํฌํ๊ธฐ๋ก ๊ฒฐ์ ํ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ main์ด๋ develop ๋ธ๋์น์ ๋ํ ๋ฐฐํฌ๋ฟ๋ง ์๋๋ผ vercel์ฒ๋ผ PR์ด ์์ฑ๋์ ๋ storybook preview๋ฅผ ํ์ธํ ์ ์์ผ๋ฉด ์ข๊ฒ ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ฆฌ๋ทฐ์ด๋ค์ด PR์ ์ฐธ๊ณ ํ ๋ ๋จ์ํ ์ฌ์ง์ด๋ ์์์ ์ฒจ๋ถํ๋ ๊ฒ๋ณด๋ค ์ปดํฌ๋ํธ์ ๋ํด์ ํฐ ์ ๋ณด๋ฅผ ์ป์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
main/develop Storybook ๋ฐฐํฌ ์ฝ๋ ์ ๋ฌธ
name: Deploy Storybook Production
on:
push:
branches:
- main
- develop
paths:
- client/**
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
working-directory: ./client
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v3
with:
version: 9
run_install: false
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
cache-dependency-path: "./client/pnpm-lock.yaml"
- name: Install dependencies
run: pnpm install
- name: Build storybook
run: pnpm run build-storybook
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./client/storybook-static
destination_dir: ${{ github.ref == 'refs/heads/main' && 'storybook' || 'storybook-develop' }}
keep_files: true
commit_message: "docs: deploy storybook"
Storybook Preview ๋ฐฐํฌ ์ฝ๋ ์ ๋ฌธ
name: Deploy Storybook Preview
on:
pull_request:
types:
- opened
- synchronize
- reopened
- closed
branches:
- main
- develop
paths:
- client/**
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event.number }}
cancel-in-progress: true
defaults:
run:
working-directory: ./client
jobs:
deploy-preview:
if: github.event.action != 'closed'
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v3
with:
version: 9
run_install: false
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
cache-dependency-path: "./client/pnpm-lock.yaml"
- name: Install dependencies
run: pnpm install
- name: Build storybook
run: pnpm run build-storybook
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./client/storybook-static
destination_dir: storybook/preview-${{ github.event.number }}
keep_files: true
commit_message: "docs: deploy storybook-preview"
- name: Comment Preview URL
uses: actions/github-script@v6
with:
script: |
const previewUrl = `https://${context.repo.owner}.github.io/${context.repo.repo}/storybook/preview-${context.issue.number}`
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `๐ Storybook preview deployed to: [Visit Storybook Preview](${previewUrl})`
})
cleanup-preview:
if: github.event.action == 'closed'
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
defaults:
run:
working-directory: .
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: gh-pages
- name: Delete preview directory
run: |
if [ -d "storybook/preview-${{ github.event.number }}" ]; then
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git rm -rf "storybook/preview-${{ github.event.number }}"
git commit -m "docs: remove storybook preview for PR #${{ github.event.number }}"
git push origin gh-pages
fi
- name: Comment Cleanup Notification
uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `๐งน Storybook preview for PR #${context.issue.number} has been removed.`
})
main ๋ธ๋์น, develop ๋ธ๋์น์ push๋ ๋ storybook์ ๋ฐฐํฌํฉ๋๋ค.
- main ๋ธ๋์น โ ${GITHUB_PAGES_URL}/
storybook
๊ฒฝ๋ก์ ๋ฐฐํฌ - develop ๋ธ๋์น โ ${GITHUB_PAGES_URL}/
storybook-develop
๊ฒฝ๋ก์ ๋ฐฐํฌ
on:
push:
branches:
- main
- develop
paths:
- client/**
- main ๋๋ develop ๋ธ๋์น์ push๊ฐ ์์ ๋ ์คํํฉ๋๋ค.
- client ๋๋ ํ ๋ฆฌ ๋ด์ ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๋๋ง ์คํํฉ๋๋ค.
defaults:
run:
working-directory: ./client
-
working-directory: ./client
- ์คํ ๋ฆฌ๋ถ์ client ์ฝ๋์ ๋ง ๊ด๋ จ์ด ์์ผ๋ฏ๋ก ๋ชจ๋ ๋ช ๋ น์ด๋ ./client ๋๋ ํ ๋ฆฌ์์ ์คํํ๋๋ก ํจ
deploy:
runs-on: ubuntu-latest
permissions:
contents: write
-
deploy
- deploy๋ผ๋ ์ด๋ฆ์ ์์ ์ ์ ์
-
runs-on: ubuntu-latest
- Ubuntu ์ต์ ๋ฒ์ ์ ๊ฐ์ ํ๊ฒฝ์์ ์คํ
-
permissions
- contents: write ๋ฐฐํฌ๋ฅผ ์ํด ์ ์ฅ์์ ์ฐ๊ธฐ ๊ถํ์ ๋ถ์ฌ
์ฒดํฌ์์
- name: Checkout
uses: actions/checkout@v4
-
uses: actions/checkout@v4
- actions/checkout@v4 ์ก์ ์ ํตํด ์ ์ฅ์์ ์ฝ๋๋ฅผ workflow ์คํ ํ๊ฒฝ(๊ฐ์ ํ๊ฒฝ)์ผ๋ก ๋ณต์ฌ
PNPM ์ค์
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 9
run_install: false
-
uses: pnpm/action-setup@v2
- pnpm/action-setup@v2 ์ก์ ์ ํตํด pnpm์ ์ค์น
-
run_install: false
- ์๋ ์์กด์ฑ ์ค์น ๋นํ์ฑํ
- pnpm install ๋ช ๋ น์ด๋ฅผ ๋ณ๋ ์คํ ์ผ๋ก ์คํํ๊ธฐ ์ํจ
- ์์กด์ฑ ์ค์น ๊ณผ์ ์ ์ธ๋ฐํ ์ ์ด ๊ฐ๋ฅ(ํจํค์ง ์บ์ ๋ฑ)
Node ์ค์
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
cache-dependency-path: "./client/pnpm-lock.yaml"
-
uses: actions/setup-node@v4
- actions/setup-node@v4 ์ก์ ์ ํตํด Node.js๋ฅผ ์ค์น
-
cache: "pnpm"
- pnpm ํจํค์ง๋ค์ ์บ์ ๊ธฐ๋ฅ์ ์ฌ์ฉ
-
cache-dependency-path: "./client/pnpm-lock.yaml"
- โ./client/pnpm-lock.yamlโ ํ์ผ์ ํ์ธํด์
- ์บ์๊ฐ ์์ผ๋ฉด ์บ์๋ ํจํค์ง ์์กด์ฑ์ ์ฌ์ฉ
- ์บ์๊ฐ ์์ผ๋ฉด ์๋ก์ด ์บ์๋ฅผ ์์ฑ
- โ./client/pnpm-lock.yamlโ ํ์ผ์ ํ์ธํด์
์์กด์ฑ ์ค์น
- name: Install dependencies
run: pnpm install
-
run: pnpm install
- package.json์ ๋ช ์๋ ๋ชจ๋ ์์กด์ฑ ํจํค์ง๋ค์ ์ค์น
Storybook ๋น๋
- name: Build storybook
run: pnpm run build-storybook
-
run: pnpm run build-storybook
- Storybook์ ์ ์ ํ์ผ๋ก ๋น๋
- client/storybook-static ๋๋ ํ ๋ฆฌ์ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋จ
๋ฐฐํฌ
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./client/storybook-static
destination_dir: ${{ github.ref == 'refs/heads/main' && 'storybook' || 'storybook-develop' }}
keep_files: true
commit_message: "docs: deploy storybook"
-
uses: peaceiris/actions-gh-pages@v3
- ์ ์ ์น์ฌ์ดํธ๋ฅผ Github Pages๋ก ์๋ ๋ฐฐํฌํ๋ ์ก์
-
github_token: ${{ secrets.GITHUB_TOKEN }}
- GitHub์์ ์๋์ผ๋ก ์ ๊ณตํ๋ ์ธ์ฆ ํ ํฐ
- ์ ์ฅ์์ ๋ํ ์ ๊ทผ ๊ถํ์ ์ป๋๋ฐ ์ฌ์ฉ
-
publish_dir: ./client/storybook-static
- ์คํ ๋ฆฌ๋ถ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ด ์ ์ฅ๋ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก
- ์ด ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ์ด GitHub Pages์ ๋ฐฐํฌ๋จ
-
destination_dir: ${{ github.ref == 'refs/heads/main' && 'storybook' || 'storybook-develop' }}
- GitHub Pages์ ๋ฐฐํฌ๋ ๊ฒฝ๋ก
- main ๋ธ๋์น๋ฉด /storybook ์ ๋ฐฐํฌ
- develop ๋ธ๋์น๋ฉด /storybook-develop ์ ๋ฐฐํฌ
-
keep_files: true
- ๊ธฐ์กด์ ๋ฐฐํฌ๋ ํ์ผ์ ์ ์งํ๊ณ ์ ํ์ผ๋ง ์ ๋ฐ์ดํธ
- false๋ฉด ๊ธฐ์กด ํ์ผ์ ๋ชจ๋ ์ญ์ ํ๊ณ ์๋ก ๋ฐฐํฌ
-
commit_message: "docs: deploy storybookโ
- gh-pages ๋ธ๋์น์ ์์ฑ๋๋ ์ปค๋ฐ ๋ฉ์์ง
- GitHub Actions ๋ด์ ์ด๋ฆ์ผ๋ก ์ปค๋ฐ๋จ
concurrency ์ค์
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
- ๊ฐ์ ๋ธ๋์น์ ์ฌ๋ฌ ๋ฒ ๋น ๋ฅด๊ฒ pushํ ๋ ๋ถํ์ํ ์ค๋ณต ์คํ์ ๋ฐฉ์งํฉ๋๋ค.
- ์ด์ ์คํ์ค์ธ workflow๋ฅผ ์๋์ผ๋ก ์ทจ์ํ๊ณ ์ต์ push์ ๋ํด์๋ง ์คํํฉ๋๋ค.
~~Storybook ๋น๋ ์บ์ฑ~~
- name: Cache Storybook build
uses: actions/cache@v3
with:
path: ./client/storybook-static
key: storybook-build-${{ hashFiles('client/**/*.{js,jsx,ts,tsx,mdx,css}') }}
- ์ถ๊ฐํด๋ดค๋ค๊ฐ ์บ์ ์์ฑํ๋ ๊ฑฐ์๋ง 2๋ถ์ด ๋๊ฒ ๊ฑธ๋ ค์ ๋ค์ ๋๋ฃจ๋ฌตํ์ต๋๋ค.
- ํ์ผ ํ๋๋ง ๋ณ๊ฒฝํด๋ ์บ์ ๋ฏธ์ค์ด๊ธฐ ๋๋ฌธ์ ๋ฌด์๋ฏธํ ์บ์ฑ์ด์ด์ ์ฌ์ฉํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
main ๋ธ๋์น๋ develop ๋ธ๋์น์ PR์ ์์ฑ, ์์ ํ๋ ๊ฒฝ์ฐ preview๋ฅผ ์์ฑํฉ๋๋ค.
- gh-pages ๋ธ๋์น์ /storybook/preview-${PR} ํด๋ ์์ฑ
pr์ด ๋ซํ๋ฉด(merged ๋๋ closed) preview๋ ์ญ์ ๋ฉ๋๋ค.
- gh-pages ๋ธ๋์น์ /storybook/preview-${PR} ํด๋๋ฅผ ์ญ์
on:
pull_request:
types:
- opened
- synchronize
- reopened
- closed
branches:
- main
- develop
paths:
- client/**
- PR์ด ์ฒ์ ์์ฑ๋์ ๋, PR์ ์๋ก์ด commit์ด push๋ ๋, ๋ซํ๋ PR์ด ๋ค์ ์ด๋ฆด ๋, PR์ด merge ๋๊ฑฐ๋ ๋ซํ ๋ ์คํํฉ๋๋ค.
- main/develop ๋ธ๋์น๋ก ๊ฐ๋ PR์ ๋ํด์๋ง ์คํํฉ๋๋ค.
- client ๋๋ ํ ๋ฆฌ ๋ด์ ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๋๋ง ์คํํฉ๋๋ค.
defaults:
run:
working-directory: ./client
-
working-directory: ./client
- ์คํ ๋ฆฌ๋ถ์ client ์ฝ๋์๋ง ๊ด๋ จ์ด ์์ผ๋ฏ๋ก ๋ชจ๋ ๋ช ๋ น์ด๋ ./client ๋๋ ํ ๋ฆฌ์์ ์คํํ๋๋ก ํจ
deploy-preview:
if: github.event.action != 'closed'
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
-
if: github.event.action != 'closed'
- PR์ด ์์ฑ๋์ ๋, ์๋ก์ด commit์ด push ๋์ ๋, ๋ค์ ์ด๋ฆด๋๋ง ์คํ.(PR์ด merge ๋๊ฑฐ๋ ๋ซํ ๋๋ฅผ ์ ์ธ)
-
runs-on: ubuntu-latest
- Ubuntu ์ต์ ๋ฒ์ ์ ๊ฐ์ ํ๊ฒฝ์์ ์คํ
-
contents: write
- gh-pages ๋ฐฐํฌ๋ฅผ ์ํด ์ ์ฅ์์ ์ฐ๊ธฐ ๊ถํ์ ๋ถ์ฌ
-
pull-requests:write:
- PR์ preview URL ์ฝ๋ฉํธ์ ๋ฐฐํฌ ์ํ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฐ๊ธฐ ๊ถํ์ ๋ถ์ฌ
1~5**. 1.์ฒดํฌ์์ ~ 5.Storybook ๋น๋๊น์ง ์์ ๋์ผํ๋ค.
**
๋ฐฐํฌ
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./client/storybook-static
destination_dir: storybook/preview-${{ github.event.number }}
keep_files: true
commit_message: "docs: deploy storybook-preview
-
uses: peaceiris/actions-gh-pages@v3
- ์ ์ ์น์ฌ์ดํธ๋ฅผ Github Pages๋ก ์๋ ๋ฐฐํฌํ๋ ์ก์
-
github_token: ${{ secrets.GITHUB_TOKEN }}
- GitHub์์ ์๋์ผ๋ก ์ ๊ณตํ๋ ์ธ์ฆ ํ ํฐ
- ์ ์ฅ์์ ๋ํ ์ ๊ทผ ๊ถํ์ ์ป๋๋ฐ ์ฌ์ฉ
-
publish_dir: ./client/storybook-static
- ์คํ ๋ฆฌ๋ถ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ด ์ ์ฅ๋ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก
- ์ด ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ์ด GitHub Pages์ ๋ฐฐํฌ๋จ
-
destination_dir: storybook/preview-${{ github.event.number }}
- GitHub Pages์ ๋ฐฐํฌ๋ ๊ฒฝ๋ก
- PR ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ PR๋ณ ๊ณ ์ ํ preview ๊ฒฝ๋ก ์์ฑ
- ์: PR #123 โ
/storybook/preview-123
-
keep_files: true
- ๊ธฐ์กด์ ๋ฐฐํฌ๋ ํ์ผ์ ์ ์งํ๊ณ ์ ํ์ผ๋ง ์ ๋ฐ์ดํธ
- false๋ฉด ๊ธฐ์กด ํ์ผ์ ๋ชจ๋ ์ญ์ ํ๊ณ ์๋ก ๋ฐฐํฌ
-
commit_message: "docs: deploy storybookโ
- gh-pages ๋ธ๋์น์ ์์ฑ๋๋ ์ปค๋ฐ ๋ฉ์์ง
- GitHub Actions ๋ด์ ์ด๋ฆ์ผ๋ก ์ปค๋ฐ๋จ
Preview URL ์ฝ๋ฉํธ
- name: Comment Preview URL
uses: actions/github-script@v6
with:
script: |
const previewUrl = `https://${context.repo.owner}.github.io/${context.repo.repo}/storybook/preview-${context.issue.number}`
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `๐ Storybook preview deployed to: [Visit Storybook Preview](${previewUrl})`
})
-
uses: actions/github-script@v6
- GitHub API๋ฅผ JavaScript๋ก ์ง์ ํธ์ถํ ์ ์๊ฒ ํด์ฃผ๋ ์ก์
- PR์ ์ฝ๋ฉํธ๋ฅผ ๋ฌ๊ธฐ ์ํด ์ฌ์ฉ
-
github.rest.issues.createComment()
- PR์ ์ฝ๋ฉํธ๋ฅผ ์์ฑํ๋ GitHub API ํธ์ถ
- ํ๋ผ๋ฏธํฐ
- issue_number: PR ๋ฒํธ
- owner: GitHub ๊ณ์ /์กฐ์ง ์ด๋ฆ
- repo: ์ ์ฅ์ ์ด๋ฆ
- body: ๋งํฌ๋ค์ด ํ์์ ์ฝ๋ฉํธ ๋ด์ฉ
cleanup-preview:
if: github.event.action == 'closed'
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
defaults:
run:
working-directory: .
-
cleanup-preview
- PR์ด ๋ซํ์ ๋ preview๋ฅผ ์ ๋ฆฌํ๋ job
-
if: github.event.action == 'closed'
- PR์ด ๋ซํ์ ๋๋ง(closed or merged) ์คํ
-
runs-on: ubuntu-latest
- ์ต์ Ubuntu ํ๊ฒฝ์์ ์คํ
- GitHub Actions ์คํ ํ๊ฒฝ ์ง์
-
permissions
- contents:write ์ ์ฅ์ ๋ด์ฉ ์์ ๊ถํ
- pull-requests:write: PR ์ฝ๋ฉํธ ์์ฑ ๊ถํ
-
working-directory: .
- ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ํ๋ก์ ํธ ๋ฃจํธ(.)๋ก ์ค์
์ฒดํฌ์์
- name: Checkout
uses: actions/checkout@v4
with:
ref: gh-pages
-
uses: actions/checkout@v4
- GitHub ์ ์ฅ์์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ณธ ์ก์
-
ref: gh-pages
- checkoutํ ๋ธ๋์น๋ฅผ ์ง์
- ๊ธฐ๋ณธ ๋ธ๋์น๊ฐ ์๋ gh-pages ๋ธ๋์น๋ฅผ ๊ฐ์ ธ์ด
- GitHub Pages ๋ฐฐํฌ์ ์ฌ์ฉ๋๋ ํน์ ๋ธ๋์น
preview ๋๋ ํฐ๋ฆฌ ์ญ์
- name: Delete preview directory
run: |
if [ -d "storybook/preview-${{ github.event.number }}" ]; then
git config --global [user.name](http://user.name/) 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git rm -rf "storybook/preview-${{ github.event.number }}"
git commit -m "docs: remove storybook preview for PR #${{ github.event.number }}"
git push origin gh-pages
fi
-
if [ -d "storybook/preview-${{ github.event.number }}" ]
- -d: ๋๋ ํ ๋ฆฌ ์กด์ฌ ์ฌ๋ถ ํ์ธ
- PR ๋ฒํธ๋ก ๋ preview ํด๋๊ฐ ์๋์ง ์ฒดํฌ
-
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
- Git ์ฌ์ฉ์ ์ค์
- GitHub Action ๋ด์ผ๋ก ์ปค๋ฐํ๊ธฐ ์ํ ์ค์
-
git rm -rf "storybook/preview-${{ github.event.number }}โ
- git rm: Git์์ ํ์ผ/๋๋ ํ ๋ฆฌ ์ญ์
- -rf: ์ฌ๊ท์ ์ผ๋ก ๊ฐ์ ์ญ์
- PR ๋ฒํธ์ ํด๋นํ๋ preview ํด๋ ์ญ์
-
git commit -m "docs: remove storybook preview for PR #${{ github.event.number }}"
- ์ญ์ ์์ ์ ์ปค๋ฐ์ผ๋ก ๊ธฐ๋ก
- ์ปค๋ฐ ๋ฉ์์ง์ PR ๋ฒํธ ํฌํจ
-
git push origin gh-pages
- gh-pages ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ push
- preview ์ญ์ ์๋ฃ
preview URL cleanup ์ฝ๋ฉํธ
-name: Comment Cleanup Notification
uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `๐งน Storybook preview for PR #${context.issue.number} has been removed.`
})
-
uses: actions/github-script@v6
- GitHub API๋ฅผ JavaScript๋ก ์ง์ ํธ์ถํ ์ ์๊ฒ ํด์ฃผ๋ ์ก์
- PR์ ์ฝ๋ฉํธ๋ฅผ ๋ฌ๊ธฐ ์ํด ์ฌ์ฉ
-
github.rest.issues.createComment()
- PR์ ์ฝ๋ฉํธ๋ฅผ ์์ฑํ๋ GitHub API ํธ์ถ
- ํ๋ผ๋ฏธํฐ
- issue_number: PR ๋ฒํธ
- owner: GitHub ๊ณ์ /์กฐ์ง ์ด๋ฆ
- repo: ์ ์ฅ์ ์ด๋ฆ
- body: ๋งํฌ๋ค์ด ํ์์ ์ฝ๋ฉํธ ๋ด์ฉ
concurrency ์ถ๊ฐ
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event.number }}
cancel-in-progress: true
- ๊ฐ์ PR์ ๋ํด ์ฌ๋ฌ ๋ฒ ๋น ๋ฅด๊ฒ ์์ฑ, ์ฌ์คํ, ์์ , ์ญ์ ๋ ๋ ๋ถํ์ํ workflow ์ค๋ณต ์คํ์ ๋ฐฉ์งํฉ๋๋ค.
- ์ด์ ์คํ์ค์ธ workflow๋ฅผ ์๋์ผ๋ก ์ทจ์ํ๊ณ ์ต์ PR ์์ฑ, ์ฌ์คํ, ์์ , ์ญ์ ์ ๋ํ workflow๋ฅผ ์คํํฉ๋๋ค.
- ์์ง main ๋ธ๋์น์ pushํ์ง ์์์ ์์ฑ๋์ง ์์์ต๋๋ค. ๐
- PR์ด merge๋๋ฉด ๋ฐฐํฌ๋ ํด๋๊ฐ ์ฌ๋ผ์ ธ 404๊ฐ ๋จ๊ฒ ๋๋ฏ๋ก ๋งํฌ๋ ์ฒจ๋ถํ์ง ์์์ต๋๋ค.
- ์๋ ์ฌ์ง์ฒ๋ผ PR์ ์์ฑํ๋ฉด preview๊ฐ ๋ฐฐํฌ๋๊ณ , PR์ด merge๋๋ฉด ๋ฐฐํฌ๋ preview๊ฐ ์ญ์ ๋ฉ๋๋ค.
https://yogjin.tistory.com/106
์์ ๋์ typedoc-ci-cd.yml
- 1. ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ ๋ฐ ํ๋ก์ ํธ ๋ฌธ์ํ
- 2. ์ค์๊ฐ ํต์
- 3. ์ธํ๋ผ ๋ฐ CI/CD
- 4. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด Canvas ๊ตฌํํ๊ธฐ
- 5. ์บ๋ฒ์ค ๋๊ธฐํ๋ฅผ ์ํ ์์ CRDT ๊ตฌํ๊ธฐ
-
6. ์ปดํฌ๋ํธ ํจํด๋ถํฐ ์น์์ผ๊น์ง, ํจ์จ์ ์ธ FE ์ค๊ณ
- ์ข์ ์ปดํฌ๋ํธ๋ ๋ฌด์์ธ๊ฐ? + Headless Pattern
- ํจ์จ์ ์ธ UI ์ปดํฌ๋ํธ ์คํ์ผ๋ง: Tailwind CSS + cn.ts
- Tailwind CSS๋ก ๋์์ธ ์์คํ ๋ฐ UI ์ปดํฌ๋ํธ ์ธํ
- ์น์์ผ ํด๋ผ์ด์ธํธ ๊ตฌํ๊ธฐ: React ํ๊ฒฝ์์ ํจ์จ์ ์ธ ์น์์ผ ์ํคํ ์ฒ
- ์น์์ผ ํด๋ผ์ด์ธํธ ์ฝ๋ ๋ถ์ ๋ฐ ๊ณต์
- 7. ํธ๋ฌ๋ธ ์ํ ๋ฐ ์ฑ๋ฅ/UX ๊ฐ์
- 1์ฃผ์ฐจ ๊ธฐ์ ๊ณต์
- 2์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 3์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 4์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 5์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- WEEK 06 ์ฃผ๊ฐ ๊ณํ
- WEEK 06 ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- WEEK 06 ์ฃผ๊ฐ ํ๊ณ