지난 한 주간의 GitHub 커밋 로그를 모아 Confluence 주간 회의록 페이지를 자동으로 생성/갱신하는 봇. 프론트엔드 팀 회의록, 백엔드 팀 회의록, 두 팀 내용을 모은 통합 개발 미팅 회의록까지 3종류를 다룸.
기존엔 회의 전에 사람이 직접 지난주 커밋 내역을 돌아보며 "작업 공유" 섹션을 채워야 했음. 이 봇은 그 부분을 자동화해서, 회의 시작 전에 이미 기본 골격(날짜/참여자/작업 공유)이 채워진 상태로 만들어두는 게 목적. "이후 작업 공유"·"이슈"·"전체 공유 사안"처럼 커밋 로그로 알 수 없는 항목은 빈 템플릿으로 남겨두고 회의 중 직접 채우도록 함.
프론트/백엔드가 각자 회의록을 따로 쓰다 보니, 상대 팀이 알아야 할 내용만 확인하려고 팀 회의록 전체를 읽는 비효율이 생김. 그래서 각 팀 회의록에 상대 팀 공유용 섹션을 두고, 그 내용만 모아 통합 개발 미팅 회의록으로 자동으로 옮겨줌.
- Python 3.12 +
requests,python-dotenv(의존성 최소화, 별도 SDK 없이 REST API 직접 호출) - GitHub REST API — 저장소별 커밋 로그 조회 (경로 기준으로 카테고리 분류)
- OpenAI Responses API (
finditem/QnA-Bot와 동일한 방식) — 커밋 메시지를 한 줄 요약 - Confluence REST API v1 — 페이지/폴더 조회·생성·갱신 (storage format으로 본문 작성)
- GitHub Actions (
cron) — 리포트별로 다른 시간에 매주 월요일 자동 실행 (아래 동작 흐름 참고)
세 리포트는 실행 시간이 서로 다르고, 통합 리포트가 프론트/백엔드 리포트 결과를 재료로 쓰기 때문에 백엔드 → 프론트 → 통합 순서로 크론을 배치함.
- GitHub Actions가 크론 스케줄에 트리거됨 (프론트 매주 월요일 11:30 KST, 백엔드 07:47 KST —
workflow_dispatch로 수동 실행도 가능) - 커밋 수집: 대상 인원별로 지난 7일간의 커밋을 GitHub API로 조회 (프론트는
REPO_RULES에 정의된 저장소·경로 규칙에 따라 모니터링/일정관리/운영으로 카테고리 분류, 백엔드는 대상 저장소 전체를 하나로 취급) - 요약: 사람별(프론트는 카테고리별까지) 커밋 메시지 목록을 OpenAI에 보내 한 줄 요약으로 압축
- 렌더링: 회의록 템플릿 구조(날짜, 참여자 멘션, 작업 공유, 이후 작업 공유, 공유·이슈·질문 공유, 상대 팀 공유 섹션)에 맞춰 Confluence storage format(XHTML) 생성
- 월별 폴더 확인/생성: 정해진 폴더 아래 이번 달 폴더(예:
통합 26년 7월)가 있는지 확인, 없으면 새로 생성 (페이지·폴더 타입 구분 없이 정확한 제목으로 검색해서 중복 생성 방지) - 업서트: 그 폴더 아래에
M월 DD일 미팅제목으로 페이지가 이미 있으면 갱신, 없으면 새로 생성
GitHub 커밋 로그 → 사람(×카테고리)별 수집 → OpenAI 요약 → Confluence storage format 렌더링
→ 이번 달 폴더 확인/생성 → 페이지 upsert (있으면 갱신, 없으면 생성)
커밋을 직접 수집하지 않고, 그 주에 이미 생성된 프론트/백엔드 회의록에서 상대 팀 공유 섹션만 가져와 합침.
- GitHub Actions가 매주 월요일 15:17 KST에 트리거됨 (프론트/백엔드 리포트가 먼저 끝난 뒤 실행되도록 배치)
- 그 주 프론트 회의록에서 "백엔드 미팅 공유 사안" 섹션, 백엔드 회의록에서 "프론트 미팅 공유 사항" 섹션을 각각 파싱
- 통합 회의록 템플릿(날짜, 팀별 참가자, 프론트 공유 사안, 백엔드 공유 사안, 최종 공유 사안, 전체 회의 공유 사안, 공유/이슈/질문 공유)에 맞춰 렌더링
- 월별 폴더 확인/생성 →
MM월 DD일 개발 미팅제목으로 페이지 upsert
프론트 회의록 "백엔드 미팅 공유 사안" + 백엔드 회의록 "프론트 미팅 공유 사항" 파싱
→ 통합 회의록 템플릿 렌더링 → 이번 달 폴더 확인/생성 → 페이지 upsert
| 파일 | 역할 |
|---|---|
frontend/weekly_report.py |
프론트엔드 회의록 메인 스크립트 (전체 플로우) |
frontend/test_weekly_report.py |
렌더링/파싱 로직 self-check (네트워크 호출 없음) |
backend/weekly_report.py |
백엔드 회의록 메인 스크립트 — 설정 완료, 실행 검증 전 |
backend/test_weekly_report.py |
렌더링/파싱 로직 self-check (네트워크 호출 없음) |
combined/weekly_report.py |
통합 회의록 스크립트 — 프론트/백엔드 양쪽 파싱 완료, docs/combined-report-plan.md 참고 |
combined/test_weekly_report.py |
렌더링/파싱 로직 self-check (네트워크 호출 없음) |
common/confluence_client.py |
Confluence REST API 공용 헬퍼 (여러 회의록 스크립트가 공유) |
common/lookup_account_id.py |
참여자 @멘션용 Confluence accountId 조회 헬퍼 |
.github/workflows/frontend-weekly-report.yml |
프론트엔드 회의록 스케줄 실행 워크플로 |
.github/workflows/backend-weekly-report.yml |
백엔드 회의록 스케줄 실행 워크플로 |
.github/workflows/combined-weekly-report.yml |
통합 회의록 스케줄 실행 워크플로 |
- 커밋 조회는 기본 브랜치(main)에 머지된 커밋만 대상으로 함. 아직 머지 안 된 PR의 작업은 포함되지 않음 (의도적 — "작업 공유"는 완료된 작업 기준)