Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
26 changes: 26 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# CodeRabbit 설정 — https://docs.coderabbit.ai/guides/configure-coderabbit
# public 저장소에서는 별도 설치/활성화 없이 자동으로 PR 리뷰가 동작합니다.
language: ko-KR

reviews:
profile: chill
request_changes_workflow: false
high_level_summary: true
poem: false
review_status: true
auto_review:
enabled: true # PR 최초 생성 시 자동 리뷰
auto_incremental_review: false # 이후 push에는 자동 재리뷰 안 함 (수동 `@coderabbitai review`)
drafts: false
base_branches:
- main
path_filters:
- '!dist/**'
- '!**/*.lock'
- '!package-lock.json'
tools:
eslint:
enabled: true

chat:
auto_reply: true
13 changes: 13 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# 모든 텍스트 파일은 저장소에 LF로 저장하고 LF로 체크아웃한다.
# (Prettier 기본값과 일치 → 환경에 상관없이 `prettier --check` 일관성 보장)
* text=auto eol=lf

# 바이너리 자산은 변환하지 않는다.
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.webp binary
*.ico binary
*.woff binary
*.woff2 binary
74 changes: 74 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: 🐛 버그 리포트
description: 동작하지 않거나 예상과 다르게 동작하는 문제를 알려주세요.
title: '[Bug] '
labels: ['🐛 bug']
body:
- type: markdown
attributes:
value: |
버그 리포트를 작성해주셔서 감사합니다! 🙏
작성 전 **이미 같은 이슈가 있는지 [검색](https://github.com/hs-shell/dotbugi/issues?q=is%3Aissue)** 부탁드립니다.

- type: checkboxes
id: preflight
attributes:
label: 확인 사항
options:
- label: 동일하거나 유사한 이슈가 없는지 검색했습니다.
required: true
- label: 최신 버전에서 재현되는 문제입니다.
required: true

- type: textarea
id: what-happened
attributes:
label: 무슨 일이 일어났나요?
description: 어떤 문제가 발생했는지 명확하게 설명해주세요.
placeholder: VOD 목록이 비어있게 표시됩니다...
validations:
required: true

- type: textarea
id: reproduce
attributes:
label: 재현 방법
description: 문제를 재현하는 단계를 순서대로 적어주세요.
placeholder: |
1. LMS 강의 페이지 접속
2. 돋부기 대시보드 열기
3. ...
validations:
required: true

- type: textarea
id: expected
attributes:
label: 기대한 동작
description: 원래 어떻게 동작해야 한다고 생각하셨나요?
validations:
required: true

- type: input
id: version
attributes:
label: 확장 프로그램 버전
description: chrome://extensions 에서 확인할 수 있습니다.
placeholder: 'v5.0.5'
validations:
required: true

- type: input
id: browser
attributes:
label: 브라우저 / OS
placeholder: 'Chrome 130 / macOS 15'
validations:
required: false

- type: textarea
id: screenshots
attributes:
label: 스크린샷 / 콘솔 로그
description: 가능하다면 스크린샷이나 개발자 도구 콘솔 로그를 첨부해주세요.
validations:
required: false
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: 💬 질문 / 사용 문의
url: https://github.com/hs-shell/dotbugi/discussions
about: 버그·기능 제안이 아닌 일반 질문이나 사용법 문의는 Discussions에 남겨주세요.
- name: 🔎 중복 이슈 먼저 검색하기
url: https://github.com/hs-shell/dotbugi/issues?q=is%3Aissue
about: 이슈를 올리기 전에 같은 내용이 이미 등록되어 있는지 꼭 검색해주세요.
43 changes: 43 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: ✨ 기능 제안
description: 새로운 기능이나 개선 아이디어를 제안해주세요.
title: '[Feat] '
labels: ['✨ feat']
body:
- type: markdown
attributes:
value: |
기능 제안 감사합니다! 💡
작성 전 **이미 같은 제안이 있는지 [검색](https://github.com/hs-shell/dotbugi/issues?q=is%3Aissue)** 부탁드립니다.

- type: checkboxes
id: preflight
attributes:
label: 확인 사항
options:
- label: 동일하거나 유사한 제안이 없는지 검색했습니다.
required: true

- type: textarea
id: problem
attributes:
label: 어떤 문제를 해결하나요?
description: 이 기능이 필요하게 된 배경이나 불편한 점을 설명해주세요.
placeholder: 과제 마감이 임박했을 때 알기 어렵습니다...
validations:
required: true

- type: textarea
id: solution
attributes:
label: 제안하는 해결책
description: 어떤 기능/동작을 원하시는지 구체적으로 적어주세요.
validations:
required: true

- type: textarea
id: alternatives
attributes:
label: 고려한 대안
description: 생각해본 다른 방법이 있다면 적어주세요.
validations:
required: false
40 changes: 40 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<!--
PR 제목은 Conventional Commits 형식을 권장합니다. 예) feat: 과제 마감 알림 추가
-->

## 관련 이슈

<!--
⚠️ 모든 PR은 먼저 이슈가 등록되어 있어야 합니다.
아래에 연결할 이슈 번호를 반드시 적어주세요. (`Closes #123` 형식이면 머지 시 자동으로 닫힙니다)
-->

Closes #

## 변경 내용

<!-- 무엇을, 왜 바꿨는지 간단히 설명해주세요. -->

-

## 변경 유형

<!-- 해당하는 항목에 [x] 표시 -->

- [ ] 🐛 버그 수정 (`fix`)
- [ ] ✨ 기능 추가 (`feat`)
- [ ] 📝 문서 (`docs`)
- [ ] ♻️ 리팩터링 (`refactor`)
- [ ] 🎨 스타일/포맷 (`style`)
- [ ] ⚙️ 빌드/CI (`chore`, `ci`)

## 체크리스트

- [ ] 이 PR과 연결된 이슈가 존재합니다.
- [ ] 로컬에서 `npm run lint` 와 `npm run build` 가 통과합니다.
- [ ] 변경 사항을 직접 테스트했습니다.
- [ ] CodeRabbit / 리뷰어 피드백을 반영할 준비가 되어 있습니다.

## 스크린샷 (선택)

<!-- UI 변경이 있다면 before/after 스크린샷을 첨부해주세요. -->
10 changes: 5 additions & 5 deletions .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,22 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20
cache: npm
- name: Setup Pages
uses: actions/configure-pages@v4
uses: actions/configure-pages@1f0c5cde4bc74cd7e1254d0cb4de8d49e9068c7d # v4
- name: Install dependencies
run: npm ci
- name: Build with VitePress
run: npm run docs:build
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
with:
path: docs/.vitepress/dist

Expand All @@ -46,5 +46,5 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
environment: docs
75 changes: 75 additions & 0 deletions .github/workflows/discord-notify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Discord 알림

# 릴리즈 알림은 release.yaml 안에서 직접 보낸다.
# 이 워크플로는 이슈/PR/CI 실패 이벤트를 담당한다.
on:
issues:
types: [opened]
pull_request:
types: [opened, closed]
workflow_run:
workflows: ['PR 검사']
types: [completed]

permissions:
contents: read

jobs:
notify:
runs-on: ubuntu-latest
if: ${{ vars.DISCORD_ENABLED != 'false' }}
steps:
- name: Discord 전송
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with:
script: |
const webhook = process.env.DISCORD_WEBHOOK_URL;
if (!webhook) {
core.info('DISCORD_WEBHOOK_URL 미설정 — 건너뜀');
return;
}

const event = context.eventName;
let embed;

if (event === 'issues') {
const i = context.payload.issue;
embed = {
title: `🐛 새 이슈 #${i.number}: ${i.title}`,
url: i.html_url,
description: `작성자: ${i.user.login}`,
color: 0x5865f2, // 파랑
};
} else if (event === 'pull_request') {
const pr = context.payload.pull_request;
const merged = pr.merged === true;
const action = context.payload.action;
if (action === 'closed' && !merged) return; // 머지 없이 닫힌 PR은 무시
embed = {
title: merged
? `🟣 PR 머지됨 #${pr.number}: ${pr.title}`
: `🟢 PR 열림 #${pr.number}: ${pr.title}`,
url: pr.html_url,
description: `작성자: ${pr.user.login}`,
color: merged ? 0x8957e5 : 0x57f287, // 보라/초록
};
} else if (event === 'workflow_run') {
const run = context.payload.workflow_run;
if (run.conclusion !== 'failure') return; // 실패만 알림
embed = {
title: `❌ CI 실패: ${run.name}`,
url: run.html_url,
description: `브랜치: ${run.head_branch}`,
color: 0xed4245, // 빨강
};
}

if (!embed) return;
const res = await fetch(webhook, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ embeds: [embed] }),
});
if (!res.ok) core.warning(`Discord 알림 실패: ${res.status}`);
Loading
Loading