From d647ef06a6878ff284f1b0e99b9fa865a20441ba Mon Sep 17 00:00:00 2001 From: manNomi Date: Tue, 6 Jan 2026 01:49:11 +0900 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=EC=A3=BC=EA=B0=84=20PR=20=EC=9A=94?= =?UTF-8?q?=EC=95=BD=20=EB=B4=87=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 최근 7일간 머지된 PR 자동 수집 및 Discord 전송 - 트리거: PR 생성 시(테스트), 매주 금요일 22시 KST - PRD 기반 구현: PR 번호, 제목, 작성자, 라벨, 링크 포함 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- .github/workflows/weekly-pr-summary.yml | 106 ++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 .github/workflows/weekly-pr-summary.yml diff --git a/.github/workflows/weekly-pr-summary.yml b/.github/workflows/weekly-pr-summary.yml new file mode 100644 index 00000000..42aa7614 --- /dev/null +++ b/.github/workflows/weekly-pr-summary.yml @@ -0,0 +1,106 @@ +name: Weekly PR Summary + +on: + pull_request: + types: [opened] + schedule: + # 매주 금요일 13:00 UTC (22:00 KST) + - cron: '0 13 * * 5' + workflow_dispatch: + +jobs: + summary: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Collect merged PRs from last 7 days + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO: ${{ github.repository }} + run: | + # 7일 전 날짜 계산 + SINCE_DATE=$(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ) + + echo "Fetching PRs merged since: $SINCE_DATE" + + # 최근 7일간 머지된 PR 목록 가져오기 + gh pr list \ + --repo "$REPO" \ + --state merged \ + --limit 100 \ + --json number,title,author,labels,mergedAt,url \ + --jq --arg since "$SINCE_DATE" ' + map(select(.mergedAt >= $since)) | + sort_by(.mergedAt) | + reverse + ' > prs.json + + # PR 개수 확인 + PR_COUNT=$(jq 'length' prs.json) + echo "Found $PR_COUNT merged PRs" + + # 결과 저장 + echo "PR_COUNT=$PR_COUNT" >> $GITHUB_ENV + + - name: Generate summary message + run: | + # 날짜 계산 + END_DATE=$(date -u +%Y-%m-%d) + START_DATE=$(date -u -d '7 days ago' +%Y-%m-%d) + + # PR 목록 생성 + PR_LIST=$(jq -r ' + map( + "- " + .title + + " (#" + (.number | tostring) + ") — " + .author.login + + ( + if (.labels | length) > 0 then + "\n 🏷 " + ([.labels[].name] | join(", ")) + else + "" + end + ) + + "\n 🔗 " + .url + ) | join("\n\n") + ' prs.json) + + # 메시지가 비어있을 경우 처리 + if [ "$PR_COUNT" -eq 0 ]; then + PR_LIST="이번 주에 머지된 PR이 없습니다." + fi + + # 메시지 생성 + cat > message.txt <