docs(ci): add CI verification note to trigger Actions (#2)
CI / test (push) Successful in 47s
CI / test (push) Successful in 47s
Reviewed-on: #2 Co-authored-by: Jaybe <master@jaybe.dev> Co-committed-by: Jaybe <master@jaybe.dev>
This commit was merged in pull request #2.
This commit is contained in:
@@ -0,0 +1,44 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main, master ]
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: [macos, host]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '20'
|
||||||
|
cache: 'npm'
|
||||||
|
|
||||||
|
- name: Install deps
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Unit/Component tests (Vitest)
|
||||||
|
run: npm test
|
||||||
|
env:
|
||||||
|
CI: true
|
||||||
|
|
||||||
|
- name: Install Playwright browsers
|
||||||
|
run: npx playwright install --with-deps
|
||||||
|
|
||||||
|
- name: E2E tests (Playwright)
|
||||||
|
run: npm run test:e2e -- --reporter=line
|
||||||
|
env:
|
||||||
|
CI: true
|
||||||
|
|
||||||
|
- name: Upload Playwright report
|
||||||
|
if: always()
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: playwright-report
|
||||||
|
path: playwright-report
|
||||||
|
if-no-files-found: ignore
|
||||||
|
retention-days: 3
|
||||||
@@ -7,7 +7,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: [macos, host]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|||||||
@@ -121,6 +121,8 @@
|
|||||||
- 새로 추가된 테스트(헤딩 레벨 전수, 색/폰트 스모크) CI 통합 확인
|
- 새로 추가된 테스트(헤딩 레벨 전수, 색/폰트 스모크) CI 통합 확인
|
||||||
- 작업 브랜치 푸시 완료: `chore/ci-verify-a11y-headings` (원격: origin)
|
- 작업 브랜치 푸시 완료: `chore/ci-verify-a11y-headings` (원격: origin)
|
||||||
- PR 생성 및 Actions 결과 기록 예정(base: main)
|
- PR 생성 및 Actions 결과 기록 예정(base: main)
|
||||||
|
- CI verification note: 러너 온라인 이후, 사소 변경으로 CI 트리거 검증 예정
|
||||||
|
- CI rerun: 워크플로 재실행용 ping 커밋
|
||||||
|
|
||||||
### 다음 스프린트 후보 과제
|
### 다음 스프린트 후보 과제
|
||||||
- Exporter 회귀 스냅샷 보강(폼 토큰/검증 토큰 범위 확대)
|
- Exporter 회귀 스냅샷 보강(폼 토큰/검증 토큰 범위 확대)
|
||||||
|
|||||||
+37
-25
@@ -1,27 +1,39 @@
|
|||||||
{
|
{
|
||||||
"app.title": "Landing Page Builder",
|
"app": {
|
||||||
"builder.title": "Landing Page Builder",
|
"title": "Landing Page Builder"
|
||||||
"builder.preview": "Preview (static)",
|
},
|
||||||
"builder.field.title": "Title",
|
"builder": {
|
||||||
"builder.field.locale": "Locale",
|
"title": "Landing Page Builder",
|
||||||
"builder.field.primaryColor": "Primary Color",
|
"preview": "Preview (static)",
|
||||||
"builder.field.fontFamily": "Font Family",
|
"field": {
|
||||||
"builder.upload.hero": "Hero Image Upload",
|
"title": "Title",
|
||||||
"builder.action.addHero": "Add Hero",
|
"locale": "Locale",
|
||||||
"builder.action.addFAQ": "Add FAQ",
|
"primaryColor": "Primary Color",
|
||||||
"builder.action.addCTA": "Add CTA",
|
"fontFamily": "Font Family"
|
||||||
"builder.action.export": "Export ZIP",
|
},
|
||||||
"builder.action.addText": "Add Text",
|
"upload": {
|
||||||
"builder.action.addEmail": "Add Email",
|
"hero": "Hero Image Upload"
|
||||||
"builder.action.addTel": "Add Tel",
|
},
|
||||||
"builder.action.addDate": "Add Date",
|
"action": {
|
||||||
"builder.action.addTextarea": "Add Textarea",
|
"addHero": "Add Hero",
|
||||||
"builder.action.addCheckbox": "Add Checkbox",
|
"addFAQ": "Add FAQ",
|
||||||
"builder.action.addSelect": "Add Select",
|
"addCTA": "Add CTA",
|
||||||
"builder.action.addRadio": "Add Radio",
|
"export": "Export ZIP",
|
||||||
"builder.sections": "Sections",
|
"addText": "Add Text",
|
||||||
"builder.form.fields": "Form Fields",
|
"addEmail": "Add Email",
|
||||||
"builder.form.actionUrl": "Action URL",
|
"addTel": "Add Tel",
|
||||||
"builder.form.honeypot": "Honeypot Field",
|
"addDate": "Add Date",
|
||||||
"builder.form.minSeconds": "Min Submit Seconds"
|
"addTextarea": "Add Textarea",
|
||||||
|
"addCheckbox": "Add Checkbox",
|
||||||
|
"addSelect": "Add Select",
|
||||||
|
"addRadio": "Add Radio"
|
||||||
|
},
|
||||||
|
"sections": "Sections",
|
||||||
|
"form": {
|
||||||
|
"fields": "Form Fields",
|
||||||
|
"actionUrl": "Action URL",
|
||||||
|
"honeypot": "Honeypot Field",
|
||||||
|
"minSeconds": "Min Submit Seconds"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+37
-14
@@ -1,16 +1,39 @@
|
|||||||
{
|
{
|
||||||
"app.title": "랜딩 페이지 빌더",
|
"app": {
|
||||||
"builder.title": "랜딩 페이지 빌더",
|
"title": "랜딩 페이지 빌더"
|
||||||
"builder.preview": "미리보기(정적)",
|
},
|
||||||
"builder.field.title": "제목",
|
"builder": {
|
||||||
"builder.field.locale": "로케일",
|
"title": "랜딩 페이지 빌더",
|
||||||
"builder.field.primaryColor": "대표 색상",
|
"preview": "미리보기(정적)",
|
||||||
"builder.field.fontFamily": "폰트",
|
"field": {
|
||||||
"builder.upload.hero": "히어로 이미지 업로드",
|
"title": "제목",
|
||||||
"builder.action.addHero": "히어로 추가",
|
"locale": "로케일",
|
||||||
"builder.action.addFAQ": "FAQ 추가",
|
"primaryColor": "대표 색상",
|
||||||
"builder.action.addCTA": "CTA 추가",
|
"fontFamily": "폰트"
|
||||||
"builder.action.export": "ZIP 내보내기",
|
},
|
||||||
"builder.sections": "섹션",
|
"upload": {
|
||||||
"builder.form.fields": "폼 필드"
|
"hero": "히어로 이미지 업로드"
|
||||||
|
},
|
||||||
|
"action": {
|
||||||
|
"addHero": "히어로 추가",
|
||||||
|
"addFAQ": "FAQ 추가",
|
||||||
|
"addCTA": "CTA 추가",
|
||||||
|
"export": "ZIP 내보내기",
|
||||||
|
"addText": "텍스트 필드 추가",
|
||||||
|
"addEmail": "이메일 필드 추가",
|
||||||
|
"addTel": "전화번호 필드 추가",
|
||||||
|
"addDate": "날짜 필드 추가",
|
||||||
|
"addTextarea": "텍스트영역 추가",
|
||||||
|
"addCheckbox": "체크박스 추가",
|
||||||
|
"addSelect": "셀렉트 추가",
|
||||||
|
"addRadio": "라디오 추가"
|
||||||
|
},
|
||||||
|
"sections": "섹션",
|
||||||
|
"form": {
|
||||||
|
"fields": "폼 필드",
|
||||||
|
"actionUrl": "액션 URL",
|
||||||
|
"honeypot": "허니팟 필드",
|
||||||
|
"minSeconds": "최소 제출 대기(초)"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,14 @@ const builderUrl = '/en/builder'
|
|||||||
|
|
||||||
test('Preview viewport toggle via keyboard (Tab + Enter/Space)', async ({ page }) => {
|
test('Preview viewport toggle via keyboard (Tab + Enter/Space)', async ({ page }) => {
|
||||||
await page.goto(builderUrl)
|
await page.goto(builderUrl)
|
||||||
|
await page.waitForLoadState('domcontentloaded')
|
||||||
|
// Ensure the page has focus before sending keyboard events
|
||||||
|
await page.locator('body').click({ position: { x: 1, y: 1 } })
|
||||||
|
|
||||||
// Tab to first button (Desktop)
|
// Focus the Desktop button explicitly to avoid flakiness from skip-link/initial focus
|
||||||
await page.keyboard.press('Tab')
|
const desktopBtn = page.getByRole('button', { name: 'Desktop' })
|
||||||
await expect(page.getByRole('button', { name: 'Desktop' })).toBeFocused()
|
await desktopBtn.focus()
|
||||||
|
await expect(desktopBtn).toBeFocused()
|
||||||
|
|
||||||
// Press Space to toggle Mobile (first ensure Desktop is selected, then move to Mobile with Tab)
|
// Press Space to toggle Mobile (first ensure Desktop is selected, then move to Mobile with Tab)
|
||||||
await page.keyboard.press('Tab')
|
await page.keyboard.press('Tab')
|
||||||
|
|||||||
Reference in New Issue
Block a user