From 40c0a0d506a398ede5d09ea52ffc5d0f6e6cb830 Mon Sep 17 00:00:00 2001 From: BcKmini Date: Wed, 5 Aug 2026 23:24:07 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20PR=20CI=20=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=ED=94=8C=EB=A1=9C=EC=9A=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pull_request 트리거로 lint/test/build 자동 검증. deploy.yml과는 별도 관심사로 분리 유지. Closes #265 --- .github/workflows/ci.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..41ad5b2 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,21 @@ +name: ci + +on: + pull_request: + branches: [main] + +jobs: + verify: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - run: npm ci + - run: npm run lint + - run: npm run test + - run: npm run build From e2b7c4af9a87eec8d1a8183040ac1950702ae45f Mon Sep 17 00:00:00 2001 From: BcKmini Date: Wed, 5 Aug 2026 23:26:42 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20LinkRequestPage=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=9D=98=20flaky=20race=20condition=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI에서 처음으로 잡힘 — 클릭 핸들러의 비동기 체인(fetch→navigate)이 끝나기 전에 getByText로 동기 단언해서 타이밍에 따라 실패하던 문제. findByText로 교체. --- src/pages/LinkRequestPage/LinkRequestPage.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/LinkRequestPage/LinkRequestPage.test.tsx b/src/pages/LinkRequestPage/LinkRequestPage.test.tsx index 8d9ed3f..f66a7f8 100644 --- a/src/pages/LinkRequestPage/LinkRequestPage.test.tsx +++ b/src/pages/LinkRequestPage/LinkRequestPage.test.tsx @@ -49,7 +49,7 @@ describe('LinkRequestPage', () => { await user.click(await screen.findByRole('button', { name: '안내를 확인했습니다' })) - expect(screen.getByText('upload screen')).toBeInTheDocument() + expect(await screen.findByText('upload screen')).toBeInTheDocument() const responseCall = vi .mocked(fetch) .mock.calls.find(([url]) => String(url).endsWith('/responses'))