Skip to content

Setting(project): GitHub Actions CI (lint/build) 설정#13

Merged
constantly-dev merged 13 commits intodevelopfrom
setting/#12/ci-setting
Aug 20, 2025
Merged

Setting(project): GitHub Actions CI (lint/build) 설정#13
constantly-dev merged 13 commits intodevelopfrom
setting/#12/ci-setting

Conversation

@constantly-dev
Copy link
Member

@constantly-dev constantly-dev commented Aug 20, 2025

📌 Related Issues

관련된 Issue를 태그해주세요. (e.g. - close #25)

✅ 체크 리스트

  • PR 제목의 형식을 잘 작성했나요? e.g. Feat(client): PR 템플릿 작성
  • 빌드가 성공했나요? (pnpm build)

📄 Tasks

  • GitHub Actions CI (lint/build) 설정
    +자잘한 의존성 정리 및 스타일 설정 추가!

⭐ PR Point (To Reviewer)

actions를 활용해서 lint/build 관련 CI workflow를 작성했어요.

언제 실행되는가?

on:
  push:
    branches:
      - main
      - develop  
  pull_request:
    branches:
      - main
      - develop 
  1. branches: main/develop 브랜치에 새로운 코드가 푸시(push)될 때 실행
  2. pull_request: 어떤 브랜치에서든 main/develop 브랜치로 풀 리퀘스트(Pull Request)가 생성되거나 업데이트될 때 실행

어떤 작업을 하는가?

jobs:
  lint:
    ...
  build:
    ...
  1. lint: pnpm run lint 명령어를 실행. 이 명령어는 package.json 파일의 scripts 안에 있는 lint 명령(예: "lint": "eslint .")을 찾아 실행하여 코드 스타일을 검사
  2. build: lint 작업과 유사하게 build 명령어 실행

📷 Screenshot

image

이렇게 잘 작동합니다~~~ lint와 build 잘 check 되면 머지가 가능하니 확인 필수!!

Summary by CodeRabbit

  • Chores
    • CI 파이프라인 추가: 메인/개발 브랜치 푸시·PR 시 린트·빌드 자동 실행 및 PNPM 기반 일관된 의존성 설치/빌드 보장.
    • 린트·개발툴 업데이트: ESLint 구성 및 플러그인 추가, React·빌드 도구 업그레이드.
    • 디자인 시스템 빌드 준비: 모듈 타입 지정 및 라이브러리 빌드 설정 추가.
  • Style
    • 여러 앱/확장에 디자인 시스템 전역 스타일 도입 및 일부 CSS 정리/정렬.

@coderabbitai
Copy link

coderabbitai bot commented Aug 20, 2025

Warning

Rate limit exceeded

@constantly-dev has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 9 minutes and 29 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 369b43d and 7e93f78.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (1)
  • apps/extension/package.json (1 hunks)

Walkthrough

GitHub Actions CI 워크플로우 추가, 앱들에 디자인 시스템 CSS 임포트 추가, extension 앱에 ESLint 구성 및 패키지 변경, design-system에 ESM 타입·devDependencies 및 Vite 라이브러리 빌드 설정이 추가되었다.

Changes

Cohort / File(s) Summary
CI 워크플로우 추가
.github/workflows/ci.yml
새로운 "ci" 워크플로우 추가: push/pull_request(main, develop) 트리거, jobs: lint & build. 각 job이 checkout → package.json.engines.node 를 jq로 추출해 step output으로 노출 → actions/setup-node(해당 버전) → pnpm/action-setup → 의존성 설치 후 lint 또는 build 실행.
앱 전역 CSS에 디자인 시스템 추가
apps/client/src/App.css, apps/landing/src/App.css, apps/extension/src/App.css
기존 Tailwind 공유 스타일(import)에 @pinback/design-system/styles 추가(앱/extension에 새 App.css 생성 포함).
확장 앱 ESLint·패키지 변경
apps/extension/eslint.config.js, apps/extension/package.json, apps/extension/src/index.css, apps/extension/src/App.tsx
extension에 React-refresh 기반 ESLint 구성 추가, 의존성(React 19 등) 및 ESLint 관련 패키지 추가/업그레이드, src/index.css 내용 삭제(빈 파일), App.tsx의 CSS import 경로 변경 및 클래스명 순서 정리.
design-system: package.json·ESM 타입 변경
packages/design-system/package.json, packages/design-system/eslint.config.mjs
type: "module" 추가 및 여러 devDependencies 추가; eslint.config.mjs에서 named import → default import로 변경.
design-system: Vite 라이브러리 빌드 설정 추가
packages/design-system/vite.config.ts
새 Vite 설정 추가: React + Tailwind 플러그인, 경로 alias(@, @utils), 라이브러리 모드(entry: src/components/index.ts, name: DesignSystem), rollup 외부화(react, react-dom) 및 globals 매핑.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    actor Dev as 개발자
    participant GH as GitHub Actions
    participant L as Job: lint
    participant B as Job: build

    Dev->>GH: Push / Pull Request (main, develop)
    GH->>L: Start lint job
    GH->>B: Start build job

    par Lint job
        L->>L: actions/checkout
        L->>L: jq로 package.json.engines.node 추출 (outputs.version)
        L->>L: actions/setup-node (outputs.version)
        L->>L: pnpm/action-setup → pnpm install --frozen-lockfile
        L->>L: pnpm run lint
    and Build job
        B->>B: actions/checkout
        B->>B: jq로 package.json.engines.node 추출 (outputs.version)
        B->>B: actions/setup-node (outputs.version)
        B->>B: pnpm/action-setup → pnpm install --frozen-lockfile
        B->>B: pnpm run build
    end
Loading
sequenceDiagram
    autonumber
    participant Dev as 개발자
    participant Vite as Vite (design-system)
    participant Rollup as Rollup
    participant Env as 소비자

    Dev->>Vite: 빌드 요청 (library mode, entry: src/components/index.ts)
    Vite->>Vite: 플러그인 적용 (React, Tailwind)
    Vite->>Rollup: 번들링 (external: react, react-dom)
    Rollup-->>Env: 출력 (design-system.{format}.js)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

⚙️ Setting, config, 재림

Suggested reviewers

  • jllee000
  • jjangminii
  • karnelll

Poem

"나는 토끼, 깡총깡총 CI 길을 달려요 🥕
package.json에서 노드를 찾아요,
pnpm은 춤추고 린트는 콕콕,
빌드가 반짝이면 초록불 반짝,
깡총—새로운 스타일이 번져요!"

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch setting/#12/ci-setting

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added the setting 세팅하라 세팅 label Aug 20, 2025
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (7)
.github/workflows/ci.yml (7)

23-26: setup-node 캐시 활성화로 설치 속도 개선

pnpm 사용 시 setup-node의 캐시 기능을 켜면 의존성 설치가 크게 빨라집니다.

다음 옵션을 추가해 주세요.

       - uses: actions/setup-node@v4
         with:
-          node-version: ${{ steps.get_node_version.outputs.version }}
+          node-version: ${{ steps.get_node_version.outputs.version }}
+          cache: pnpm
+          cache-dependency-path: pnpm-lock.yaml

27-31: pnpm 버전 고정 권장(재현성 향상)

현재 pnpm/action-setup로 최신 버전이 설치될 수 있습니다. package.json의 packageManager(pnpm@x.y.z)에 맞추거나 Corepack을 써서 버전을 고정하는 것이 안전합니다.

아래 두 가지 중 하나를 선택해 적용해 주세요.

옵션 A: Corepack 사용(권장, Node 16.13+)

-      - name: Setup Pnpm
-        uses: pnpm/action-setup@v4
+      - name: Enable Corepack (use pnpm version from package.json "packageManager")
+        run: corepack enable

옵션 B: pnpm/action-setup로 버전 고정

       - name: Setup Pnpm
-        uses: pnpm/action-setup@v4
+        uses: pnpm/action-setup@v4
+        with:
+          version: 9 # repo에서 사용하는 메이저/정확한 버전으로 고정

둘 중 무엇을 선택할지 명확하지 않다면 package.json에 "packageManager": "pnpm@<버전>"을 먼저 확인 바랍니다.


44-46: build 잡에도 pnpm 캐시 적용

lint와 마찬가지로 빌드에서도 캐시를 켜 주세요.

       - uses: actions/setup-node@v4
         with:
-          node-version: ${{ steps.get_node_version.outputs.version }}
+          node-version: ${{ steps.get_node_version.outputs.version }}
+          cache: pnpm
+          cache-dependency-path: pnpm-lock.yaml

48-52: 의존성 설치는 한 번이면 충분합니다

현 상태에서도 문제는 없지만, pnpm/action-setup에 run_install 옵션을 써 자동 설치하거나, Corepack 사용 시 별도 설정 없이 설치를 한 번만 실행해도 됩니다. 중복 설치는 없으나 빌드 시간 최적화 포인트입니다.

예: Corepack을 사용하고 단일 설치만 유지

-      - run: pnpm install --frozen-lockfile
-      - run: pnpm run build
+      - run: pnpm install --frozen-lockfile
+      - run: pnpm run build

또는 pnpm/action-setup 사용 시:

-      - name: Setup Pnpm
-        uses: pnpm/action-setup@v4
+      - name: Setup Pnpm
+        uses: pnpm/action-setup@v4
+        with:
+          version: 9
+          run_install: true
-      - run: pnpm install --frozen-lockfile

3-11: 트리거 범위 검토(옵션): 피처 브랜치 push에도 CI를 돌릴지 결정

현재 push 트리거는 main/develop에 한정되어 있어 피처 브랜치에서는 PR 생성 전까지 CI가 동작하지 않습니다. 조기 피드백이 필요하다면 push에 모든 브랜치를 포함하고, pull_request는 지금처럼 보호 브랜치로 제한하는 구성도 고려할 수 있습니다.

예시:

 on:
   push:
     branches:
-      - main
-      - develop
+      - '**'
   pull_request:
     branches:
       - main
       - develop

팀 정책에 따라 유지해도 무방합니다.


1-13: 토큰 권한 최소화와 중복 실행 방지(옵션)

보안과 비용 최적화를 위해 permissions 최소화와 concurrency를 추가하는 것을 권장합니다.

 name: ci
+
+permissions:
+  contents: read
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: true

13-35: 전반적인 구성은 명확하고 충분히 작동 가능해 보입니다

체크아웃 → Node/pnpm 설정 → 설치 → lint 순서가 명확하고, 빌드 잡도 동일한 패턴으로 구성되어 있습니다. 위 보완사항만 반영되면 안정성과 속도가 더욱 개선될 것입니다.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled
  • Linear integration is disabled

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 67bb61c and 85aa785.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#2
File: pnpm-workspace.yaml:3-3
Timestamp: 2025-08-18T13:48:59.021Z
Learning: constantly-dev는 docs 디렉터리를 컨벤션 문서 추가용으로 사용할 예정이라고 명시했습니다.

Comment on lines +19 to +26
- name: Extract Node.js version from package.json
id: get_node_version
run: echo "version=$(jq -r '.engines.node' package.json)" >> $GITHUB_OUTPUT

- uses: actions/setup-node@v4
with:
node-version: ${{ steps.get_node_version.outputs.version }}

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

⚠️ Potential issue

엔진 필드(engines.node)가 범위(>=, ^, ~ 등)일 때 setup-node가 실패할 수 있습니다

package.json의 engines.node가 범위 표현이면 actions/setup-node가 버전을 해석하지 못해 잡이 바로 실패합니다. .nvmrc가 있으면 우선 사용하고, 없거나 범위면 lts/*로 폴백하도록 보강하는 편이 안전합니다.

다음과 같이 step 스크립트를 보강해 주세요.

-      - name: Extract Node.js version from package.json
-        id: get_node_version
-        run: echo "version=$(jq -r '.engines.node' package.json)" >> $GITHUB_OUTPUT
+      - name: Extract Node.js version (prefer .nvmrc, fallback to engines.node or lts/*)
+        id: get_node_version
+        run: |
+          version=""
+          if [ -f .nvmrc ]; then
+            version="$(cat .nvmrc)"
+          else
+            version="$(jq -r '.engines.node // empty' package.json)"
+          fi
+          if [ -z "$version" ] || [[ "$version" =~ [><=\^~] ]]; then
+            version="lts/*"
+          fi
+          echo "version=$version" >> "$GITHUB_OUTPUT"

추가로 setup-node가 같은 값을 사용합니다(아래 캐시 제안과 함께 반영 권장).

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Extract Node.js version from package.json
id: get_node_version
run: echo "version=$(jq -r '.engines.node' package.json)" >> $GITHUB_OUTPUT
- uses: actions/setup-node@v4
with:
node-version: ${{ steps.get_node_version.outputs.version }}
- name: Extract Node.js version (prefer .nvmrc, fallback to engines.node or lts/*)
id: get_node_version
run: |
version=""
if [ -f .nvmrc ]; then
version="$(cat .nvmrc)"
else
version="$(jq -r '.engines.node // empty' package.json)"
fi
if [ -z "$version" ] || [[ "$version" =~ [><=\^~] ]]; then
version="lts/*"
fi
echo "version=$version" >> "$GITHUB_OUTPUT"
🤖 Prompt for AI Agents
.github/workflows/ci.yml lines 19-26: the workflow extracts engines.node
directly which can be a semver range and break actions/setup-node; modify the
step to first prefer .nvmrc if present, otherwise read package.json.engines.node
and if that value contains range characters (^ ~ > = * x or a range) fall back
to "lts/*", then echo that chosen resolved version into GITHUB_OUTPUT (version)
and ensure the subsequent actions/setup-node step uses that same output value;
implement the range-detection and fallback logic in the run script so setup-node
receives a concrete usable version.

Comment on lines +40 to +47
- name: Extract Node.js version from package.json
id: get_node_version
run: echo "version=$(jq -r '.engines.node' package.json)" >> $GITHUB_OUTPUT

- uses: actions/setup-node@v4
with:
node-version: ${{ steps.get_node_version.outputs.version }}

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

⚠️ Potential issue

build 잡도 Node 버전 추출 로직 동일 이슈

lint 잡과 동일하게 build 잡에서도 engines.node가 범위면 실패할 수 있습니다. 동일한 폴백 로직을 적용해 주세요.

-      - name: Extract Node.js version from package.json
-        id: get_node_version
-        run: echo "version=$(jq -r '.engines.node' package.json)" >> $GITHUB_OUTPUT
+      - name: Extract Node.js version (prefer .nvmrc, fallback to engines.node or lts/*)
+        id: get_node_version
+        run: |
+          version=""
+          if [ -f .nvmrc ]; then
+            version="$(cat .nvmrc)"
+          else
+            version="$(jq -r '.engines.node // empty' package.json)"
+          fi
+          if [ -z "$version" ] || [[ "$version" =~ [><=\^~] ]]; then
+            version="lts/*"
+          fi
+          echo "version=$version" >> "$GITHUB_OUTPUT"

그리고 setup-node에도 캐시 옵션을 함께 추가하는 것을 권장합니다(아래 diff).

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Extract Node.js version from package.json
id: get_node_version
run: echo "version=$(jq -r '.engines.node' package.json)" >> $GITHUB_OUTPUT
- uses: actions/setup-node@v4
with:
node-version: ${{ steps.get_node_version.outputs.version }}
- name: Extract Node.js version (prefer .nvmrc, fallback to engines.node or lts/*)
id: get_node_version
run: |
version=""
if [ -f .nvmrc ]; then
version="$(cat .nvmrc)"
else
version="$(jq -r '.engines.node // empty' package.json)"
fi
if [ -z "$version" ] || [[ "$version" =~ [><=\^~] ]]; then
version="lts/*"
fi
echo "version=$version" >> "$GITHUB_OUTPUT"
- uses: actions/setup-node@v4
with:
node-version: ${{ steps.get_node_version.outputs.version }}
🤖 Prompt for AI Agents
.github/workflows/ci.yml lines 40-47: the build job extracts engines.node
directly which can be a semver range and fail like the lint job; update the
extraction step to use the same fallback logic as lint (parse engines.node to a
concrete major/minor/patch when possible and if it’s a range or missing, fall
back to a defined default such as 'lts/*' or a repo-default version), and then
pass that resolved value to actions/setup-node; also add the setup-node cache
option (e.g., cache: 'npm' or 'yarn' depending on the project) to enable
dependency caching.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (4)
packages/design-system/package.json (1)

30-32: TS/TS-ESLint 버전 정합성 정리 권장

현재 워크스페이스 내 TypeScript(여기 5.9.2) 및 typescript-eslint(여기 ^8.39.1) 버전이 앱별로 상이합니다. ESLint v9 조합에서 버전 드리프트는 플러그인 peer-deps 경고 및 규칙 동작 차이를 유발할 수 있습니다. 루트에서 overrides로 통일하거나 workspace:*로 정렬을 고려해 주세요.

워크스페이스 전체 통일 예시는 다음과 같습니다(루트 package.json에 추가):

{
  "pnpm": {
    "overrides": {
      "typescript": "5.9.2",
      "typescript-eslint": "^8.39.1",
      "eslint": "^9.33.0"
    }
  }
}

또한, 디자인 시스템은 라이브러리 성격이므로 React/ReactDOM를 peerDependencies로 노출하고 devDependencies에만 자체 개발용으로 두는 구성이 일반적입니다. 이렇게 해야 소비자 앱과 리액트 인스턴스가 중복되지 않습니다. 예시:

{
  "peerDependencies": {
    "react": "^18 || ^19",
    "react-dom": "^18 || ^19"
  },
  "devDependencies": {
    "react": "^19.1.0",
    "react-dom": "^19.1.0"
  },
  "dependencies": {
    // 여기에서는 react, react-dom 제거
  }
}
apps/extension/package.json (1)

20-25: @pinback/design-system는 런타임 의존성 — devDependencies 대신 dependencies에 두는 것을 권장

애플리케이션이 디자인 시스템 컴포넌트를 런타임에 사용한다면 일반적으로 dependencies에 선언합니다. devDependencies에 두어도 번들에는 포함되지만 의도 표현과 배포 환경 일관성 측면에서 dependencies가 더 명확합니다. 또한 @vitejs/plugin-react@vitejs/plugin-react-swc가 동시에 설치되어 있는데, 실제 Vite 설정에서 둘 중 하나만 사용한다면 중복 의존성은 정리하는 편이 좋습니다.

가능한 정리 예시(요지):

  • Vite 설정에서 사용하는 플러그인만 남기기
  • 디자인 시스템을 dependencies로 이동
{
  "dependencies": {
    "@pinback/design-system": "workspace:*"
  },
  "devDependencies": {
    // "@pinback/design-system": 항목 제거
    // "@vitejs/plugin-react" 또는 "@vitejs/plugin-react-swc" 중 실제로 쓰는 것만 유지
  }
}
packages/design-system/vite.config.ts (2)

1-3: 선택: node:path 네임스페이스 사용으로 의도 명확화

Node 내장 모듈은 node: 프리픽스를 사용하는 것이 권장됩니다. 또한 default import 대신 네임스페이스 import가 더 일반적입니다.

예시:

-import path from 'path';
+import * as path from 'node:path';

15-29: 선택: 라이브러리 배포 시 타입/포맷 보강 제안

디자인 시스템 배포가 목적이라면 타입 선언 배출과 빌드 포맷 명시를 고려해 주세요. 예를 들어 vite-plugin-dts로 d.ts를 생성하고 formats: ['es', 'cjs']를 지정하면 소비자 환경 호환성이 좋아집니다.

원하시면 vite-plugin-dts 포함한 설정 패치와 package.json의 exports 정리(PR 보강용)까지 제안 드리겠습니다.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled
  • Linear integration is disabled

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 85aa785 and b3d18d5.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (5)
  • apps/extension/eslint.config.js (1 hunks)
  • apps/extension/package.json (2 hunks)
  • packages/design-system/eslint.config.mjs (1 hunks)
  • packages/design-system/package.json (2 hunks)
  • packages/design-system/vite.config.ts (1 hunks)
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#2
File: pnpm-workspace.yaml:3-3
Timestamp: 2025-08-18T13:48:59.021Z
Learning: constantly-dev는 docs 디렉터리를 컨벤션 문서 추가용으로 사용할 예정이라고 명시했습니다.
📚 Learning: 2025-07-04T10:12:01.690Z
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#10
File: apps/landing/src/index.css:1-1
Timestamp: 2025-07-04T10:12:01.690Z
Learning: In TailwindCSS v4, the import "tailwindcss"; syntax is the new recommended approach that replaces the three separate tailwind directives (tailwind base;, tailwind components;, tailwind utilities;). This is used with the tailwindcss/vite plugin.

Applied to files:

  • packages/design-system/vite.config.ts
  • packages/design-system/package.json
📚 Learning: 2025-07-04T10:12:01.690Z
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#10
File: apps/landing/src/index.css:1-1
Timestamp: 2025-07-04T10:12:01.690Z
Learning: In TailwindCSS v4, the import "tailwindcss"; syntax is the new recommended approach that replaces the three separate tailwind directives (tailwind base;, tailwind components;, tailwind utilities;). This single import pulls in all of Tailwind's preflight, components, and utilities in one step and is used with the tailwindcss/vite plugin.

Applied to files:

  • packages/design-system/vite.config.ts
  • packages/design-system/package.json
🔇 Additional comments (3)
packages/design-system/eslint.config.mjs (1)

1-4: LGTM — default import 전환 및 ESM 일관성 좋습니다

내부 공유 ESLint 설정을 default import로 통일한 점과 JSDoc 타입 주석 모두 적절합니다. CI의 lint 단계에서 문제 없이 동작할 것으로 보입니다.

apps/extension/eslint.config.js (1)

1-5: 불필요한 교체 제안: reactRefresh.configs.vite 사용 가능
eslint-plugin-react-refresh 0.4.x 릴리스군에서 Flat Config용 configs.vite 프리셋이 공식으로 제공되므로, 기존 코드(...config, reactRefresh.configs.vite)를 그대로 유지해도 안전합니다.

packages/design-system/package.json (1)

4-4: ESM 전환(type: "module") 적용 확인

패키지의 ESM 전환은 모노레포 최신 툴링과 맞습니다. 다만 ESM 환경에서는 __dirname이 기본 제공되지 않으므로, 동일 PR에서 추가된 Vite 설정 파일에서 이를 보완해야 합니다(아래 vite.config.ts 코멘트 참조).

Comment on lines +10 to +11
'@': path.resolve(__dirname, 'src'),
'@utils': path.resolve(__dirname, './src/utils'),
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

ESM에서 __dirname은 정의되지 않음 — Vite 실행 시 ReferenceError

현재 파일은 ESM(패키지 type: module)인데 __dirname을 직접 사용하고 있습니다. Node ESM에서는 __dirname이 제공되지 않아 설정 평가 시 즉시 실패합니다. 아래처럼 fileURLToPath로 대체해 주세요.

적용 제안:

 import tailwindcss from '@tailwindcss/vite';
 import react from '@vitejs/plugin-react';
 import path from 'path';
+import { fileURLToPath } from 'node:url';
 import { defineConfig } from 'vite';

+const __dirname = path.dirname(fileURLToPath(import.meta.url));
 
 export default defineConfig({
   plugins: [react(), tailwindcss()],
   resolve: {
     alias: {
       '@': path.resolve(__dirname, 'src'),
       '@utils': path.resolve(__dirname, './src/utils'),
     },
   },
🤖 Prompt for AI Agents
In packages/design-system/vite.config.ts around lines 10 to 11, the config is
using the Node CommonJS global __dirname which is undefined in ESM and causes a
ReferenceError when Vite evaluates the file; replace direct __dirname usage by
importing fileURLToPath and dirname from 'url' and 'path' respectively (or use
only fileURLToPath + path.dirname) to compute a localDir variable from
import.meta.url, then use that localDir in path.resolve calls for '@' and
'@utils' so the aliases are built from a proper filesystem path in ESM.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/design-system/package.json (1)

34-41: React/ReactDOM는 peerDependencies로 이동 권장 — 중복 React 인스턴스 위험 방지

라이브러리 성격의 패키지에서 react, react-dom를 dependencies에 두면 소비자 앱과 중복 설치/번들이 발생해 Hook 에러 등 치명적 문제가 유발될 수 있습니다. peerDependencies로 선언하고 devDependencies에 개발용으로만 추가하는 패턴을 권장합니다.

아래와 같이 변경을 제안드립니다:

   "dependencies": {
     "@radix-ui/react-slot": "^1.2.3",
     "class-variance-authority": "^0.7.1",
     "clsx": "^2.1.1",
-    "lucide-react": "^0.540.0",
-    "react": "^19.1.0",
-    "react-dom": "^19.1.0",
+    "lucide-react": "^0.540.0",
     "tailwind-merge": "^3.3.1",
     "tw-animate-css": "^1.3.7"
   },
+  "peerDependencies": {
+    "react": "^19",
+    "react-dom": "^19"
+  },
+  "devDependencies": {
+    // ... 기존 devDependencies 유지
+    "react": "^19.1.0",
+    "react-dom": "^19.1.0"
+  }

원하시면 워크스페이스 전반에서 react/react-dom를 peer로 일관화되어 있는지 점검하는 스크립트도 제공하겠습니다.

🧹 Nitpick comments (5)
apps/extension/package.json (1)

20-25: ESLint 도구 체인 업데이트 확인 완료

  • eslint-plugin-react-hooks(v^5.2.0)는 @pinback/eslint-config/react-internal에서 이미 활성화되어 있어, apps/extension/package.json에도 중복 선언되어 있습니다. 문제는 없으나 불필요할 수 있습니다.
  • eslint-plugin-react-refresh(v^0.4.20)는 eslint.config.js에서 reactRefresh.configs.vite로 명확히 사용 중입니다.
  • 워크스페이스 내 모든 package.json에서 eslint-plugin-react-hookseslint-plugin-react-refresh의 메이저 버전이 일관되게 v5.x/ v0.x로 유지되고 있습니다.
  • 루트 pnpm.overrides에는 vite: "7.1.2"만 정의되어 있으며, ESLint 관련 오버라이드는 없습니다.
apps/extension/eslint.config.js (1)

1-5: Flat Config 구성 적절 — Vite용 react-refresh 룰 합치기 OK

base config 뒤에 reactRefresh.configs.vite를 붙이는 구조가 맞고, ESM(import/export)도 package.json의 type: module과 호환됩니다. 운영에 문제 없어 보입니다.

옵션: 워크스페이스 전반의 일관성을 위해 이 파일도 .mjs 확장자로 통일하는 방안을 고려해 볼 수 있습니다(현 상태도 정상 동작).

packages/design-system/package.json (1)

6-11: exports가 TS 소스 경로를 가리키고 있습니다 — 장기적으로는 dist 산출물로 노출 고려 권장

현재 "./ui", "./icons", "./utils"가 src/*.ts를 직접 가리킵니다. 모노레포 내부 Vite 앱에서는 동작하지만, 패키지를 외부에서 재사용하거나 타입 배포/빌드 시간을 최적화하려면 dist 산출물(JS, d.ts)을 노출하도록 재구성하는 것이 좋습니다. 즉 main/module/types(또는 exports 조건부)로 dist 경로를 지정하는 구조로 확장하는 방향을 검토해 주세요.

packages/design-system/vite.config.ts (2)

14-19: 형식(formats) 최소화와 소스맵 옵션은 선택적으로 고려

내부 소비 목적이라면 ES 포맷 단일 산출물이 단순합니다. 디버깅 편의를 위해 sourcemap도 켜는 것을 권장합니다.

 build: {
   lib: {
     entry: 'src/components/index.ts',
     name: 'DesignSystem',
     fileName: (format) => `design-system.${format}.js`,
   },
+  sourcemap: true,
+  formats: ['es'],
   rollupOptions: {

9-12: 별칭 명명 혼동 가능성(@utils vs ./src/lib export)

package.json의 exports에는 "./utils"가 ./src/lib/index.ts를 가리키는 반면, Vite 별칭 '@utils'는 ./src/utils를 가리킵니다. 개발자 혼란을 줄이려면 명칭을 일치시키거나 '@lib' 등으로 변경하는 것을 권장합니다.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled
  • Linear integration is disabled

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 85aa785 and f165f2f.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (9)
  • apps/client/src/App.css (1 hunks)
  • apps/extension/eslint.config.js (1 hunks)
  • apps/extension/package.json (2 hunks)
  • apps/extension/src/App.css (1 hunks)
  • apps/extension/src/index.css (0 hunks)
  • apps/landing/src/App.css (1 hunks)
  • packages/design-system/eslint.config.mjs (1 hunks)
  • packages/design-system/package.json (2 hunks)
  • packages/design-system/vite.config.ts (1 hunks)
💤 Files with no reviewable changes (1)
  • apps/extension/src/index.css
✅ Files skipped from review due to trivial changes (1)
  • apps/extension/src/App.css
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#2
File: pnpm-workspace.yaml:3-3
Timestamp: 2025-08-18T13:48:59.021Z
Learning: constantly-dev는 docs 디렉터리를 컨벤션 문서 추가용으로 사용할 예정이라고 명시했습니다.
📚 Learning: 2025-07-04T10:12:01.690Z
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#10
File: apps/landing/src/index.css:1-1
Timestamp: 2025-07-04T10:12:01.690Z
Learning: In TailwindCSS v4, the import "tailwindcss"; syntax is the new recommended approach that replaces the three separate tailwind directives (tailwind base;, tailwind components;, tailwind utilities;). This is used with the tailwindcss/vite plugin.

Applied to files:

  • packages/design-system/vite.config.ts
  • apps/landing/src/App.css
  • packages/design-system/package.json
  • apps/client/src/App.css
📚 Learning: 2025-07-04T10:12:01.690Z
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#10
File: apps/landing/src/index.css:1-1
Timestamp: 2025-07-04T10:12:01.690Z
Learning: In TailwindCSS v4, the import "tailwindcss"; syntax is the new recommended approach that replaces the three separate tailwind directives (tailwind base;, tailwind components;, tailwind utilities;). This single import pulls in all of Tailwind's preflight, components, and utilities in one step and is used with the tailwindcss/vite plugin.

Applied to files:

  • packages/design-system/vite.config.ts
  • apps/landing/src/App.css
  • packages/design-system/package.json
  • apps/client/src/App.css
📚 Learning: 2025-08-19T17:18:57.657Z
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#5
File: apps/extension/src/index.css:1-1
Timestamp: 2025-08-19T17:18:57.657Z
Learning: constantly-dev는 디자인 시스템 설정 PR 머지 후 `import 'pinback/tailwind-config/shared-styles.css';`를 `app.css`나 `index.css`에서 사용하여 공유 스타일을 관리할 계획입니다.

Applied to files:

  • apps/landing/src/App.css
  • apps/client/src/App.css
🔇 Additional comments (4)
apps/landing/src/App.css (1)

2-2: Landing에도 동일한 임포트 적용 LGTM

앱 간 스타일 소스 일관성 확보 측면에서 좋습니다. 위 client 코멘트의 경합/중복 체크만 함께 확인해 주세요.

packages/design-system/eslint.config.mjs (1)

1-1: default import 적용 적합 확인

패키지 @pinback/eslint-config/react-internalconfig 변수를 default export 하고 있으며, 이 config는 배열로 정의되어 있습니다. 또한 apps/extension, apps/client, apps/landing, packages/design-system 등 모든 소비처에서 이미 default import를 일관되게 사용 중이므로, 이번 변경으로 인한 문제는 없습니다.

packages/design-system/package.json (2)

4-4: ESM 전환(type: "module") 자체는 OK, 다만 vite.config.ts의 __dirname 사용과 충돌합니다

패키지를 ESM으로 전환하면 Node ESM 스코프에서는 __dirname이 정의되지 않습니다. 현재 vite.config.ts에서 __dirname을 사용하고 있어 런타임 에러가 발생할 수 있습니다. vite 설정에서 fileURLToPath(new URL(..., import.meta.url)) 방식으로 교체가 필요합니다. 해당 파일 코멘트에 수정 제안을 남겼습니다.


9-9: styles 엔트리 파일 존재 확인 완료

  • packages/design-system/styles.css 파일이 실제로 존재합니다.
  • apps/extension, apps/landing, apps/client 3개 앱에서 각각
    @pinback/design-system/styles.css 를 정상적으로 import 하고 있는 것이 확인되었습니다.

따라서 exports"./styles": "./styles.css" 설정은 의도한 대로 동작하며, 추가 조치가 필요 없습니다.

@@ -1 +1,2 @@
@import '@pinback/tailwind-config/shared-styles.css';
@import '@pinback/design-system/styles.css';
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

디자인 시스템 CSS 임포트 추가 LGTM — 경합/중복만 확인해 주세요

공유 스타일 다음에 design-system 스타일을 가져오는 순서 선택은 합리적입니다. 다만 아래 2가지만 확인 부탁드립니다:

  • @pinback/design-system 패키지가 styles.css를 exports에 노출하고 있는지(번들러/CI에서 경로 해석 실패 방지).
  • shared-styles.css가 Tailwind 프리플라이트/토큰을 이미 포함한다면 design-system/styles.css에 동일 내용이 중복되지 않는지(중복 reset/규칙으로 인한 스타일 뒤엉킴 방지).

다음 스크립트로 노출 및 사용 현황을 빠르게 점검할 수 있습니다:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "1) 각 앱에서 design-system/styles.css 임포트 확인"
rg -nP --type=css -C0 "@import\\s+['\"]@pinback/design-system/styles\\.css['\"]"

echo
echo "2) design-system 패키지에서 styles.css export/파일 존재 확인"
if [ -f packages/design-system/package.json ]; then
  echo "- exports['./styles.css'] 존재 여부"
  jq -r '.exports?["./styles.css"] // "MISSING"' packages/design-system/package.json

  echo "- files 배열에 styles.css 포함 여부(있다면 출력)"
  jq -r '.files? // [] | map(select(test("styles\\.css"))) | .[]?' packages/design-system/package.json

  echo "- 실제 파일 존재 위치 탐색"
  fd -a -t f 'styles.css' packages/design-system || true
else
  echo "packages/design-system/package.json 파일을 찾을 수 없습니다."
fi

Length of output: 1079


design-system/styles.css 패키지 노출 및 중복 확인 필요

다음 사항을 처리해주세요:

  • package.json exports 누락

    • packages/design-system/styles.css 파일은 실제로 존재하나, package.json의 exports["./styles.css"]에 미등록(MISSING)되어 있어 번들러/CI에서 경로 해석 실패 또는 npm publish 시 미포함될 수 있습니다.
    • package.json에 아래와 같이 exports 또는 files 항목에 styles.css를 추가해주세요.
      // 예시: package.json
      {
        "exports": {
          "./styles.css": "./styles.css",
          
        },
        "files": [
          "styles.css",
          
        ]
      }
  • shared-styles.css 중복 여부

    • Tailwind 프리플라이트/토큰이 shared-styles.css에 이미 포함되어 있다면, @pinback/design-system/styles.css에 동일 reset/규칙이 중복되지 않는지 확인해주세요.
    • 중복된 스타일 정의가 있을 경우 둘 중 한 쪽에서만 관리하도록 조정하여 스타일 충돌을 예방해야 합니다.
🤖 Prompt for AI Agents
In apps/client/src/App.css around line 2, the import of
@pinback/design-system/styles.css will fail if the design-system package doesn't
export styles.css and may also cause duplicate resets with shared-styles.css;
update the design-system package.json to include an exports entry for
"./styles.css" (or add styles.css to the "files" array) so the file is
resolvable and published, then inspect shared-styles.css and styles.css for
overlapping Tailwind preflight/token/reset rules and remove or consolidate
duplicated rules so only one module provides the global resets.

Comment on lines 22 to 33
"@tailwindcss/vite": "^4.1.11",
"@vitejs/plugin-react": "^4.5.2",
"@turbo/gen": "^2.5.0",
"@types/node": "^22.15.3",
"@types/react": "19.1.0",
"@types/react-dom": "19.1.1",
"eslint": "^9.33.0",
"tailwindcss": "^4.1.12",
"typescript": "5.9.2"
"typescript": "5.9.2",
"typescript-eslint": "^8.39.1",
"vite": "^7.1.2"
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Vite/Tailwind/ESLint 도구 체인 추가는 방향성 좋습니다

@tailwindcss/vite, @vitejs/plugin-react, typescript-eslint, vite 추가로 빌드/린트 파이프라인 구성에 필요한 준비가 잘 되어 있습니다. 워크스페이스 전체에서 vite/플러그인 버전이 일관적인지만 한 번 확인 부탁드립니다.

다음 스크립트로 워크스페이스 내 Vite/플러그인 버전 불일치 여부를 빠르게 훑어볼 수 있습니다:


🏁 Script executed:

#!/bin/bash
echo "== Vite versions =="
fd -a package.json | xargs -I{} jq -r '[input_filename, (.devDependencies.vite // .dependencies.vite // empty)] | @tsv' {} | awk 'NF>1'
echo
echo "== @vitejs/plugin-react versions =="
fd -a package.json | xargs -I{} jq -r '[input_filename, (.devDependencies["@vitejs/plugin-react"] // empty)] | @tsv' {} | awk 'NF>1'
echo
echo "== @tailwindcss/vite versions =="
fd -a package.json | xargs -I{} jq -r '[input_filename, (.devDependencies["@tailwindcss/vite"] // .dependencies["@tailwindcss/vite"] // empty)] | @tsv' {} | awk 'NF>1'

Length of output: 1271


워크스페이스 플러그인 버전 일관성 확인 결과

– vite
• packages/design-system/package.json: ^7.1.2
• apps/client, apps/extension, apps/landing: ^7.1.2
• 루트 package.json: 7.1.2 (필요 시 ^7.1.2로 통일 고려)

– @vitejs/plugin-react
• packages/design-system/package.json: ^4.5.2
• apps/extension/package.json: ^4.3.1
→ 동일한 버전으로 맞춰주세요.

– @tailwindcss/vite
• packages/design-system/package.json: ^4.1.11
• apps/client, apps/extension, apps/landing: ^4.1.12
→ design-system 쪽을 ^4.1.12로 올려주세요.

위치
• packages/design-system/package.json (plugin-react, tailwindcss)
• apps/extension/package.json (@vitejs/plugin-react)

전체 워크스페이스의 버전 스펙(캐럿 사용 여부 포함)도 한 번 더 검토하시면 좋겠습니다.

🤖 Prompt for AI Agents
packages/design-system/package.json lines 22-33: update plugin versions to match
the workspace — change "@tailwindcss/vite" to "^4.1.12" and
"@vitejs/plugin-react" to "^4.3.1" (to match apps/extension), then re-run
install; also review and normalize caret usage for "vite" and other plugins
across root and apps (e.g., use "^7.1.2" consistently) so workspace versions are
consistent.

Comment on lines +10 to +12
'@': path.resolve(__dirname, 'src'),
'@utils': path.resolve(__dirname, './src/utils'),
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

ESM 환경에서 __dirname 미정의로 인한 런타임 에러 발생 — fileURLToPath로 교체 필요

package.json에 "type": "module"이 설정되어 있어 이 설정 파일은 ESM으로 해석됩니다. ESM 스코프에서는 __dirname이 정의되지 않으므로 현재 alias 설정에서 런타임 에러가 발생합니다.

아래와 같이 수정해 주세요:

-import path from 'path';
+import { fileURLToPath, URL } from 'node:url';

 export default defineConfig({
   plugins: [react(), tailwindcss()],
   resolve: {
     alias: {
-      '@': path.resolve(__dirname, 'src'),
-      '@utils': path.resolve(__dirname, './src/utils'),
+      '@': fileURLToPath(new URL('./src', import.meta.url)),
+      '@utils': fileURLToPath(new URL('./src/utils', import.meta.url)),
     },
   },

검증 스크립트:

#!/bin/bash
# __dirname 사용 여부 점검
rg -n "__dirname\b" packages/design-system/vite.config.ts || echo "OK: __dirname not used"
🤖 Prompt for AI Agents
packages/design-system/vite.config.ts around lines 10 to 12: the config
currently uses __dirname which is undefined in ESM and causes runtime errors;
replace __dirname usage with a dirname computed from
fileURLToPath(import.meta.url) (import { fileURLToPath } from 'url' and use
path.dirname) and update the alias targets to use that dirname (e.g., const
__filename = fileURLToPath(import.meta.url); const __dirname =
path.dirname(__filename); then use path.resolve(__dirname, 'src') etc.) so the
aliases work in ESM.

Comment on lines +20 to +27
rollupOptions: {
external: ['react', 'react-dom'],
output: {
globals: {
react: 'React',
'react-dom': 'ReactDOM',
},
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

react/jsx-runtime도 external로 지정 권장

ESM/라이브러리 빌드에서 JSX 런타임이 번들에 끌려 들어오는 것을 방지하려면 'react/jsx-runtime'를 함께 external 처리하는 것이 안전합니다.

   rollupOptions: {
-    external: ['react', 'react-dom'],
+    external: ['react', 'react-dom', 'react/jsx-runtime'],
     output: {
       globals: {
         react: 'React',
         'react-dom': 'ReactDOM',
       },
     },
   },
🤖 Prompt for AI Agents
In packages/design-system/vite.config.ts around lines 20 to 27, the
rollupOptions.external list is missing 'react/jsx-runtime', which can cause the
JSX runtime to be bundled into library builds; add 'react/jsx-runtime' to the
external array and also add a corresponding entry to output.globals (e.g.,
'react/jsx-runtime': 'jsxRuntime' or an appropriate global name) so the runtime
stays external in ESM/UMD builds and avoids being inlined into the bundle.

Copy link
Collaborator

@jjangminii jjangminii left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다-!! CI 설정하면서 다른 파일들 추가 설정한거같은데 제가 맞게 생각했는지 확인해주세요 ㅎㅎ

"@pinback/eslint-config": "workspace:*",
"@pinback/typescript-config": "workspace:*",
"@pinback/tailwind-config": "workspace:*",
"@pinback/design-system": "workspace:*",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분은 다른 apps내의 파일들과 같은 세팅같은데 지금 추가된게 맞을까요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

맞아요! extension에서도 공통 config 의존이 필요해서 workspace:* 추가해줬어요.

@@ -25,10 +30,11 @@
"@vitejs/plugin-react": "^4.3.1",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저희 이거 없어도되지않나요?? 더이상 babel 사용하지 않는걸로 알고있어서 밑의 플러그인과 중복되는거 같아요

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그렇네요! 지우겠습니다 감사합니다 👍

Copy link
Collaborator

@jllee000 jllee000 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다! 코드 보다가 개념(?)적인 개인 질문이 있었습니당 확인 부탁드려요 :)

Comment on lines +15 to +21
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Extract Node.js version from package.json
id: get_node_version
run: echo "version=$(jq -r '.engines.node' package.json)" >> $GITHUB_OUTPUT
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just 질문 사항인디! 이거 Node.js 키워드가 있는데, 혹시 이거는 어떤 것 때문에 쓰는 걸까요!

Copy link
Member Author

@constantly-dev constantly-dev Aug 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

패키지 매니저: npm, yarn, pnpm
린터(Linter): ESLint
번들러/빌드 도구: Vite, Webpack, TypeScript 컴파일러(tsc)

해당 도구들이 모두 Node.js 환경에서 실행되는 프로그램이기 때문입니다!

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아핫..!!?

Comment on lines +30 to +32
"typescript": "5.9.2",
"typescript-eslint": "^8.39.1",
"vite": "^7.1.2"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이것도 질문인데

  1. 제일 루트 쪽 package.json에 vite등등 버전 세팅이 있는데 이게 자동 연동되는 게 아니라, 디자인 시스템 package.json에서도 직접 세팅 또 해줘야하는건가요?

  2. 그리고 이 코드가 이제 추가가 되게된 이슈가 있었나용? 뭐 빌드에러가 있었던가의 이슈?

Copy link
Member Author

@constantly-dev constantly-dev Aug 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 맞아요! 사실 의존성은 필요한 곳에서 다 추가를 해줘야 해요. 패키지에서 필요한 의존을 다 따로 추가해줬어요. 저도 이 부분이 비효율적이라고 생각합니다! 그래서 이럴 경우에 peerDependencies를 사용하면 될 것 같아요.
    peerDependencies에 대해서 간단하게 설명하면 특정 패키지가 다른 패키지를 필요로 하지만, 그 패키지를 직접 포함하지 않고, 상위 프로젝트(패키지를 설치하는 프로젝트)에서 해당 의존성을 설치하도록 요구하는 방식이에요.

자세한 내용은 아티클 첨부할게요!
https://jaddong.tistory.com/entry/%EB%94%94%EC%9E%90%EC%9D%B8-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%84-%EA%B0%9C%EB%B0%9C%ED%95%98%EB%A9%B4%EC%84%9C-%EC%95%8C%EA%B2%8C-%EB%90%9C-peerDependencies%EC%9D%98-%EC%97%AD%ED%95%A0

그래서 해당 문제를 해결하려면 peerDependencies를 사용하면 될 것 같은데, 아직 조금 더 공부해보고 의존성 그래프 확인해보고 정리하고 싶어서 이후에 따로 이슈 파서 작업해볼게요! 같이 고민해봐요.

  1. 각각 필요한 의존이라 문제가 있을 것이라 생각했는데 직접 확인은 못해봤네요..!

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아티클 읽어보겠습니다! 레퍼런스 감사합니다

Comment on lines +20 to +24
"@eslint/js": "^9.33.0",
"@pinback/eslint-config": "workspace:*",
"@pinback/typescript-config": "workspace:*",
"@pinback/tailwind-config": "workspace:*",
"@pinback/design-system": "workspace:*",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확실히 터보 쓰니까 workspace:* 이 키워드 덕분에 의존성 관리 그냥 바로 깔끔해지네용! 굿

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
apps/extension/src/App.css (2)

2-2: CSS 엔트리 확정 필요: 파일 확장자(.css) 명시 고려

번들러/패키지 exports 설정에 따라 @pinback/design-system/styles가 인식되지 않을 수 있습니다. 스타일 파일이 styles.css로 노출된다면 확장자를 명시해 호환성을 높이는 것을 권장합니다.

적용 예시:

-@import '@pinback/design-system/styles';
+@import '@pinback/design-system/styles.css';

확인 요청:

  • design-system 패키지의 package.json exports 혹은 style 엔트리가 styles 경로를 확장자 없이 노출하도록 설정되어 있는지
  • Vite/CSS 파이프라인에서 위 경로 해석이 정상 동작하는지 (CI 빌드 성공 외 로컬 HMR 포함)

1-2: Tailwind v4 프리플라이트 주입 확인

shared-styles.css 내부에 Tailwind v4 권장 구문인 @import "tailwindcss";가 포함되어 있지 않다면, 최상단에 추가해야 합니다. 누락 시 프리플라이트/유틸리티가 적용되지 않을 수 있습니다.

필요 시 아래처럼 구성해 주세요(순서: tailwind → shared → design-system):

+@import "tailwindcss";
 @import '@pinback/tailwind-config/shared-styles.css';
-@import '@pinback/design-system/styles';
+@import '@pinback/design-system/styles.css';

검증 포인트:

  • 현재 shared-styles.css가 이미 Tailwind를 import한다면 중복 import가 되지 않도록 한 곳에서만 유지
  • 브라우저 확장(Extension) 앱의 엔트리(App.tsx 등)에서 이 App.css만을 import하도록 정리되어 있는지 (index.css 중복 import 제거)
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled
  • Linear integration is disabled

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between f165f2f and 8770489.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (5)
  • apps/client/src/App.css (1 hunks)
  • apps/extension/package.json (2 hunks)
  • apps/extension/src/App.css (1 hunks)
  • apps/extension/src/App.tsx (1 hunks)
  • apps/landing/src/App.css (1 hunks)
✅ Files skipped from review due to trivial changes (2)
  • apps/landing/src/App.css
  • apps/extension/src/App.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • apps/extension/package.json
  • apps/client/src/App.css
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#2
File: pnpm-workspace.yaml:3-3
Timestamp: 2025-08-18T13:48:59.021Z
Learning: constantly-dev는 docs 디렉터리를 컨벤션 문서 추가용으로 사용할 예정이라고 명시했습니다.
📚 Learning: 2025-08-19T17:18:57.657Z
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#5
File: apps/extension/src/index.css:1-1
Timestamp: 2025-08-19T17:18:57.657Z
Learning: constantly-dev는 디자인 시스템 설정 PR 머지 후 `import 'pinback/tailwind-config/shared-styles.css';`를 `app.css`나 `index.css`에서 사용하여 공유 스타일을 관리할 계획입니다.

Applied to files:

  • apps/extension/src/App.css
📚 Learning: 2025-07-04T10:12:01.690Z
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#10
File: apps/landing/src/index.css:1-1
Timestamp: 2025-07-04T10:12:01.690Z
Learning: In TailwindCSS v4, the import "tailwindcss"; syntax is the new recommended approach that replaces the three separate tailwind directives (tailwind base;, tailwind components;, tailwind utilities;). This single import pulls in all of Tailwind's preflight, components, and utilities in one step and is used with the tailwindcss/vite plugin.

Applied to files:

  • apps/extension/src/App.css
📚 Learning: 2025-07-04T10:12:01.690Z
Learnt from: constantly-dev
PR: Pinback-Team/pinback-client#10
File: apps/landing/src/index.css:1-1
Timestamp: 2025-07-04T10:12:01.690Z
Learning: In TailwindCSS v4, the import "tailwindcss"; syntax is the new recommended approach that replaces the three separate tailwind directives (tailwind base;, tailwind components;, tailwind utilities;). This is used with the tailwindcss/vite plugin.

Applied to files:

  • apps/extension/src/App.css
🔇 Additional comments (1)
apps/extension/src/App.css (1)

1-2: 공유 Tailwind 스타일 → 디자인 시스템 스타일 순서 적절합니다

의도한 전역 스타일 주입 패턴과 일치하고, 다른 앱들과의 정렬도 좋아 보입니다.

@constantly-dev constantly-dev merged commit 5dc8aeb into develop Aug 20, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

setting 세팅하라 세팅

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Setting] GitHub Actions CI (lint/build) 설정

3 participants