-
Notifications
You must be signed in to change notification settings - Fork 2
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
base: develop
Are you sure you want to change the base?
Changes from 35 commits
b637d29
691dfaf
7306422
b70cd26
74cab14
11aea23
375c51e
2dbdc44
c669a48
30ff7e8
798ea46
11051d0
5af121c
a5f9e1d
8311f48
b96c727
ef18c76
2449140
4b228e5
e5df833
e42c722
4df09c6
98bb1f1
c77e9ab
19d7e1b
3a3d355
baf3cba
f41eb4b
3c35ae2
c03a6c8
44667a1
9490a7a
af4f4cd
bd98a6d
99f3b3c
f99a16f
ddc3481
98fc7c1
bc46fd9
53875e6
220e6de
5e6bd1f
7ff4b30
4882271
66b4403
c1fdd6b
f827fe7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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 --> |
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) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
PNPM_VERSION=8.15.6 | ||
NODE_VERSION=20 |
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 | ||
|
||
- 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
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Storybook 빌드 및 실행 프로세스 개선 제안 현재 구현은 기본적으로 잘 작동하지만, 오류 처리와 프로세스 관리 측면에서 개선의 여지가 있습니다. 다음과 같은 개선을 제안합니다:
- name: 스토리북 빌드
run: pnpm run build-storybook
working-directory: packages/primitive
if: success()
- 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
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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' | ||
}) |
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 }} |
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" 레이블을 추가해주세요.' | ||
}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
스크립트 실행 보안 개선 필요
현재 스크립트 실행 방식에 보안 취약점이 있을 수 있습니다.
chmod +x
명령어를 사용하여 스크립트를 실행 가능하게 만든 후 직접 실행하는 대신, 더 안전한 방법을 사용하는 것이 좋습니다.다음과 같이 개선할 것을 제안합니다:
이렇게 하면 스크립트에 실행 권한을 부여하지 않고도 안전하게 실행할 수 있습니다.
Also applies to: 51-59