Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat/#96 TextField 컴포넌트 구현 #113

Open
wants to merge 47 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 35 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
b637d29
chore/#25 husky, lint-staged 세팅 (#44)
gs0428 Aug 17, 2024
691dfaf
feat/#54 패키지 매니저 버전 강제하도록 설정 (#57)
ghdtjgus76 Aug 17, 2024
7306422
chore/#37 jest 설정 (#43)
minai621 Aug 20, 2024
b70cd26
feat/#12 Primitive UI codegen 세팅 (#42)
ghdtjgus76 Aug 20, 2024
74cab14
chore/#38 playwright 테스트 설정 (#61)
minai621 Aug 26, 2024
11aea23
feat/#51 공통 prettier 설정 불러오도록 설정 변경 (#56)
ghdtjgus76 Aug 30, 2024
375c51e
chore/#46 D-day Labeler workflow 추가 (#66)
minai621 Aug 30, 2024
2dbdc44
fix/#47 빌드 버그 해결 (#64)
ShinYoung-Kim Sep 1, 2024
c669a48
chore/#65 jest.setup.ts 설정 (#72)
minai621 Sep 1, 2024
30ff7e8
chore: local github action test용 secret 파일 gitignore에 추가 (#68)
ShinYoung-Kim Sep 2, 2024
798ea46
feat/#48 Divider 컴포넌트 개발 (#73)
gs0428 Sep 4, 2024
11051d0
fix/#74 템플릿 수정 (#79)
gs0428 Sep 4, 2024
5af121c
docs/#75 컴포넌트 pr 템플릿 생성 (#80)
gs0428 Sep 4, 2024
a5f9e1d
feat/#50 github action 워크플로우 최적화 (#90)
ghdtjgus76 Sep 12, 2024
8311f48
feat/#85 codegen에 e2e 테스트 코드 템플릿 생성 및 적용 (#92)
ghdtjgus76 Sep 13, 2024
b96c727
test/#84 Divider vrt 테스트 추가 (#91)
gs0428 Sep 15, 2024
ef18c76
chore/#93 husky 오류 해결 (#112)
ShinYoung-Kim Sep 25, 2024
2449140
feat: TextField 컴포넌트 기본 파일 생성
ghdtjgus76 Sep 28, 2024
4b228e5
chore: 불필요한 gitkeep 파일 삭제
ghdtjgus76 Sep 28, 2024
e5df833
feat: useSafeContext 훅 구현
ghdtjgus76 Sep 28, 2024
e42c722
feat: TextField 컴포넌트 및 useControlledValue 훅 구현
ghdtjgus76 Sep 28, 2024
4df09c6
chore: TextField 컴포넌트 자잘한 코드 스타일 수정
ghdtjgus76 Sep 29, 2024
98bb1f1
docs: 스토리북 예시 TextField 스토리 추가
ghdtjgus76 Sep 29, 2024
c77e9ab
feat: 웹 접근성 관련 속성 추가
ghdtjgus76 Sep 29, 2024
19d7e1b
refactor: useControlledValue 훅에서 useEffect 사용하지 않도록 리팩토링
ghdtjgus76 Oct 5, 2024
3a3d355
chore: turbo component test code template 렌더링 관련 테스트 케이스 변경
ghdtjgus76 Oct 5, 2024
baf3cba
chore: turbo component test code template ref 전달 관련 테스트 케이스 변경
ghdtjgus76 Oct 5, 2024
f41eb4b
chore: turbo component test code template ref 전달 관련 테스트 설명 변경
ghdtjgus76 Oct 5, 2024
3c35ae2
feat: primitive 패키지에 @types/jest 설치
ghdtjgus76 Oct 5, 2024
c03a6c8
test: TextField 컴포넌트 유닛 테스트 작성
ghdtjgus76 Oct 5, 2024
44667a1
refactor: handleChange 함수 관심사 분리
ghdtjgus76 Oct 6, 2024
9490a7a
test: TextField 컴포넌트 e2e 테스트 추가
ghdtjgus76 Oct 6, 2024
af4f4cd
chore: e2e 테스트 코드 turbo gen 템플릿 수정
ghdtjgus76 Oct 6, 2024
bd98a6d
chore: 스토리북 스토리 예시 잘못된 부분 수정
ghdtjgus76 Oct 6, 2024
99f3b3c
chore: TextField 컴포넌트 aria-invalid input 태그에 넘겨주도록 수정
ghdtjgus76 Oct 6, 2024
f99a16f
chore/#25 husky, lint-staged 세팅 (#44)
gs0428 Aug 17, 2024
ddc3481
chore/#37 jest 설정 (#43)
minai621 Aug 20, 2024
98fc7c1
feat/#12 Primitive UI codegen 세팅 (#42)
ghdtjgus76 Aug 20, 2024
bc46fd9
chore/#38 playwright 테스트 설정 (#61)
minai621 Aug 26, 2024
53875e6
chore/#65 jest.setup.ts 설정 (#72)
minai621 Sep 1, 2024
220e6de
fix/#74 템플릿 수정 (#79)
gs0428 Sep 4, 2024
5e6bd1f
feat/#85 codegen에 e2e 테스트 코드 템플릿 생성 및 적용 (#92)
ghdtjgus76 Sep 13, 2024
7ff4b30
test/#84 Divider vrt 테스트 추가 (#91)
gs0428 Sep 15, 2024
4882271
chore/#93 husky 오류 해결 (#112)
ShinYoung-Kim Sep 25, 2024
66b4403
feat/#101 Divider 태그에 따른 style 초기화 (#107)
gs0428 Sep 30, 2024
c1fdd6b
docs: update README.md (#121)
gs0428 Oct 8, 2024
f827fe7
feat/#39 changeset 세팅 및 npm 배포 CI/CD 설정 (#67)
ShinYoung-Kim Oct 9, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/ISSUE_TEMPLATE/component-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
name: Component Template
about: Describe this issue template's purpose here.
title: "컴포넌트 이슈 작성 템플릿"
labels: "🎯 기능 구현"
assignees: ""
---

### **용도 (Usage)**

<!-- 컴포넌트의 사용 용도에 대해 명시합니다.
피그마에 작성해둔 내용을 위주로 사용하고, 덧붙일 내용이 있다면 붙이면 됩니다.

> 콘텐츠 섹션을 시각적으로 구분할 때 사용합니다. 레이아웃의 구조를 명확히 하며, 사용자의 정보 탐색을 돕습니다.

-->

### **기능 (Props)**

<!-- 컴포넌트의 props 별 기능에 대해 명시합니다.

> - orientation: horizontal, vertical -> Divider의 방향을 작성합니다. 이에 따라 aria 태그 및 HTML 태그가 변경됩니다.

-->

### **참고 (Reference)**

<!-- 컴포넌트 개발 시 참고한 자료들을 적습니다.

- [NextUI](https://nextui.org/docs/components/divider)

-->

### **마일스톤 (Milestones)**

<!-- 프로젝트를 제 시간에 맞추기 위해 테크 스펙의 내용을 바탕으로 추정한 마일스톤을 공유합니다. 실험 계획, 배포 날짜를 포함해 최대한 자세히 적습니다.

> ~ 9/25: BPL 컴포넌트 개발
9/28 ~ 9/29: 실험 변수 추가, 로컬 변수 추가
9/30 ~ 10/4: 추석 연휴!
10/5: 하단 탭 확장 가능한 구조로 리팩토링
10/6 ~ 10/8: 비즈니스 로직 구현
10/12 ~ 10/20: 사용자 이벤트 부착 및 미진한 내용 보충
10/20: 2.45.0 코드 프리즈 (이때까지 내부 기능 테스트, 이벤트 로깅 테스트)
10/21 ~ 10/23: 2.45.0 릴리즈 QA
11/4: 2.45.0 Rollout -->
26 changes: 26 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/component_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<!-- PR 제목 한 번 확인해주세요!
브랜치 이름 + 주된 작업 요약
ex. feat/#1 프로젝트 세팅 -->

### 예상 동작 (Expected Behavior)

<!-- 컴포넌트를 사용했을 때의 예상 동작에 대해 작성합니다.

> 콘텐츠 섹션이 시각적으로 구분이 됩니다.
> 레이아웃의 구조를 명확히 하며, 사용자의 정보 탐색을 돕습니다.

-->

### 고민했던 내용 (Considerations)

<!-- 컴포넌트를 개발하며 어떤 것을 고민했는지, 작성한 로직 이외에 다른 대안이나 방법이 있었는지를 기술합니다.

> [radix ui의 Separator](https://github.com/radix-ui/primitives/blob/660060a765634e9cc7bf4513f41e8dabc9824d74/packages/react/separator/src/Separator.tsx#L10)의 경우 ORIENTATIONS 변수를 생성 후 Orientaion이라는 type을 만들었습니다.

warrr-ui에서는 Orientation의 type은 2개만 사용될 예정이고, `type Orientation = "horizontal" | "vertical";`로 작성하는 것이 가독성면에서 더 좋다고 판단하여 이와같이 작성하였습니다.

-->

### 관련 이슈

- resolved #(issue_num)
2 changes: 2 additions & 0 deletions .github/environments/versions.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
PNPM_VERSION=8.15.6
NODE_VERSION=20
44 changes: 35 additions & 9 deletions .github/workflows/chromatic_auto_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,53 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: 레포지토리 체크아웃
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Node.js 설정
- name: 환경 변수 설정
id: set-env
run: |
chmod +x ./scripts/set-env.sh
./scripts/set-env.sh

- name: node.js 설정
uses: actions/setup-node@v4
with:
node-version: 20

- name: Corepack 활성화
run: corepack enable
node-version: ${{ env.NODE_VERSION }}

- name: pnpm 설치
run: corepack prepare pnpm@latest --activate
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: pnpm 의존성 캐시
id: cache-pnpm
uses: actions/cache@v4
with:
path: |
~/.pnpm-store
node_modules
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-

- name: 의존성 설치
run: pnpm install --no-frozen-lockfile
run: |
chmod +x ./scripts/install-dependencies.sh
./scripts/install-dependencies.sh

- name: 토큰 존재 여부 체크
run: |
if [ -n "${{ secrets.PRIMITIVE_UI_CHROMATIC_TOKEN }}" ]; then
echo "PRIMITIVE_UI_CHROMATIC_TOKEN is set"
else
echo "PRIMITIVE_UI_CHROMATIC_TOKEN is not set"
fi

- name: chromatic에 배포
id: publish_chromatic
uses: chromaui/action@v1
uses: chromaui/action@latest
with:
projectToken: ${{ secrets.PRIMITIVE_UI_CHROMATIC_TOKEN }}
token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
107 changes: 107 additions & 0 deletions .github/workflows/label-vrt-update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
name: VRT 스냅샷 업데이트
on:
pull_request:
types: [labeled]

jobs:
update-snapshots:
if: github.event.label.name == 'VRT'
runs-on: ubuntu-latest
steps:
- name: 레포지토리 체크아웃
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: 환경 변수 설정
id: set-env
run: |
chmod +x ./scripts/set-env.sh
./scripts/set-env.sh
Comment on lines +16 to +20
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

스크립트 실행 보안 개선 필요

현재 스크립트 실행 방식에 보안 취약점이 있을 수 있습니다. chmod +x 명령어를 사용하여 스크립트를 실행 가능하게 만든 후 직접 실행하는 대신, 더 안전한 방법을 사용하는 것이 좋습니다.

다음과 같이 개선할 것을 제안합니다:

- chmod +x ./scripts/set-env.sh
- ./scripts/set-env.sh
+ sh ./scripts/set-env.sh

- chmod +x ./scripts/install-dependencies.sh
- ./scripts/install-dependencies.sh
+ sh ./scripts/install-dependencies.sh

- chmod +x ./scripts/install-playwright.sh
- ./scripts/install-playwright.sh
+ sh ./scripts/install-playwright.sh

이렇게 하면 스크립트에 실행 권한을 부여하지 않고도 안전하게 실행할 수 있습니다.

Also applies to: 51-59


- name: node.js 설정
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

- name: pnpm 설치
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: pnpm 의존성 캐시
id: cache-pnpm
uses: actions/cache@v4
with:
path: |
~/.pnpm-store
node_modules
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-

- name: playwright 브라우저 캐시
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: ${{ runner.os }}-playwright-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-playwright-

- name: 의존성 설치
run: |
chmod +x ./scripts/install-dependencies.sh
./scripts/install-dependencies.sh

- name: playwright 설치
run: |
chmod +x ./scripts/install-playwright.sh
./scripts/install-playwright.sh

- name: 스토리북 빌드
run: pnpm run build-storybook

working-directory: packages/primitive
- name: 스토리북 실행
run: |
npx serve -l 6006 packages/primitive/storybook-static &
echo $! > .storybook-pid

Comment on lines +61 to +69
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Storybook 빌드 및 실행 프로세스 개선 제안

현재 구현은 기본적으로 잘 작동하지만, 오류 처리와 프로세스 관리 측면에서 개선의 여지가 있습니다.

다음과 같은 개선을 제안합니다:

  1. Storybook 빌드 실패 시 워크플로우를 중단하도록 설정:
- name: 스토리북 빌드
  run: pnpm run build-storybook
  working-directory: packages/primitive
  if: success()
  1. 백그라운드 프로세스 관리 개선:
- name: 스토리북 실행
  run: |
    npx serve -l 6006 packages/primitive/storybook-static &
    echo $! > .storybook-pid
    sleep 5  # 서버가 완전히 시작될 때까지 대기
    if ! curl -s http://localhost:6006 > /dev/null; then
      echo "스토리북 서버 시작 실패"
      exit 1
    fi

이러한 변경으로 프로세스의 안정성과 오류 처리 능력이 향상될 것입니다.

- name: 스냅샷 업데이트
run: pnpm run e2e:update

Comment on lines +70 to +72
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

스냅샷 업데이트 프로세스 개선 필요

현재 스냅샷 업데이트 과정이 간단하게 구현되어 있지만, 오류 처리와 결과 보고 메커니즘이 부족합니다.

다음과 같은 개선을 제안합니다:

- name: 스냅샷 업데이트
  run: |
    if ! pnpm run e2e:update; then
      echo "스냅샷 업데이트 실패"
      exit 1
    fi
    if [[ -n $(git status --porcelain .playwright) ]]; then
      echo "스냅샷이 업데이트되었습니다."
    else
      echo "업데이트된 스냅샷이 없습니다."
    fi

이렇게 하면 스냅샷 업데이트 실패 시 워크플로우가 중단되고, 업데이트 여부를 명확히 알 수 있습니다.

- name: 스토리북 프로세스 종료
if: always()
run: kill $(cat .storybook-pid)

- name: 변경된 스냅샷 커밋 및 푸시
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
git add .playwright
git diff --staged --quiet || git commit -m "Update VRT snapshots in .playwright folder"
git push origin HEAD:${{ github.head_ref }}

- name: PR 코멘트 작성
uses: actions/github-script@v6
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '## VRT 스냅샷 업데이트 완료\n\n스냅샷이 성공적으로 업데이트되었습니다. 변경된 스냅샷이 이 PR에 포함되었습니다. 리뷰해주세요.'
})

- name: VRT 레이블 제거
uses: actions/github-script@v6
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
github.rest.issues.removeLabel({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
name: 'VRT'
})
22 changes: 22 additions & 0 deletions .github/workflows/pr-dday-labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: PR D-day Labeler

on:
schedule:
- cron: "0 15 * * *"
pull_request:
types: [opened, reopened]
workflow_dispatch:

permissions:
contents: read
pull-requests: write

jobs:
label-prs:
runs-on: ubuntu-latest
steps:
- name: PR D-day Labeler
uses: team-warrr/[email protected]
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
118 changes: 118 additions & 0 deletions .github/workflows/pr-vrt.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
name: PR VRT 테스트
on:
pull_request:
branches: [develop]

permissions:
contents: read
pull-requests: write

jobs:
vrt-test:
runs-on: ubuntu-latest
steps:
- name: 레포지토리 체크아웃
uses: actions/checkout@v4

- name: 환경 변수 설정
id: set-env
run: |
chmod +x ./scripts/set-env.sh
./scripts/set-env.sh

- name: node.js 설정
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

- name: pnpm 설치
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: pnpm 의존성 캐시
id: cache-pnpm
uses: actions/cache@v4
with:
path: |
~/.pnpm-store
node_modules
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-

- name: playwright 브라우저 캐시
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: ${{ runner.os }}-playwright-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-playwright-

- name: 의존성 설치
run: |
chmod +x ./scripts/install-dependencies.sh
./scripts/install-dependencies.sh

- name: playwright 설치
run: |
chmod +x ./scripts/install-playwright.sh
./scripts/install-playwright.sh

- name: 스토리북 빌드
run: pnpm run build-storybook
working-directory: packages/primitive

- name: 스토리북 실행
run: |
npx serve -l 6006 packages/primitive/storybook-static &
echo $! > .storybook-pid

- name: VRT 테스트 실행
id: vrt-test
run: |
if pnpm run e2e; then
echo "결과=성공" >> $GITHUB_OUTPUT
else
echo "결과=실패" >> $GITHUB_OUTPUT
fi

- name: 스토리북 프로세스 종료
if: always()
run: kill $(cat .storybook-pid)

- name: 테스트 결과 및 diff 이미지 업로드
uses: actions/upload-artifact@v4
if: failure()
with:
name: vrt-results
path: |
playwright-report/
.playwright/
retention-days: 7

- name: PR 코멘트 작성 (성공)
uses: actions/github-script@v6
if: success()
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '## VRT 테스트 성공\n\nVRT 테스트가 성공적으로 완료되었습니다.'
})

- name: PR 코멘트 작성 (실패)
uses: actions/github-script@v6
if: failure()
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '## VRT 테스트 실패\n\nVRT 테스트가 실패했습니다. 자세한 내용은 첨부된 테스트 결과와 diff 이미지를 확인해주세요.\n\n[테스트 결과 확인](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}})\n\n스냅샷 업데이트가 필요한 경우, PR에 "VRT" 레이블을 추가해주세요.'
})
Loading
Loading