Skip to content

datepop/create-pr-with-ai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Create PR with AI

Gemini API를 사용하여 AI가 생성한 내용으로 Pull Request를 자동 생성하는 GitHub Action입니다.

기능

  • 🤖 AI 기반 PR 생성: Gemini API를 사용하여 PR 제목과 설명 자동 생성
  • 🏷️ 자동 라벨링: 브랜치 이름에서 이슈 번호 추출하여 라벨 자동 할당
  • 📊 토큰 최적화: 스마트 필터링으로 대규모 diff 효율적 처리
  • 🔄 중복 방지: PR 생성 전 이미 존재하는지 확인

사용법

GitHub Action 워크플로우 설정

name: Auto PR with AI

on:
  push:
    tags:
      - "pr-*"

jobs:
  create-pr:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Fetch all branches
        run: |
          git fetch origin develop
          git fetch origin +refs/heads/*:refs/remotes/origin/*

      - name: Create PR with AI
        uses: datepop/create-pr-with-ai@v1.0.0
        with:
          gemini_api_key: ${{ secrets.GEMINI_API_KEY }}
          base_branch: develop

입력 파라미터

입력 파라미터 설명 필수 기본값
gemini_api_key Gemini API 키 -
base_branch PR의 기본 브랜치 develop
tag_prefix 태그 접두사 패턴 pr-
excluded_branches 제외할 브랜치 목록 (공백으로 구분) develop main master
node_version Node.js 버전 20
max_total_lines 전체 diff 최대 라인 수 10000
max_file_lines 파일당 diff 최대 라인 수 500
prompt_template_path 프롬프트 템플릿 파일 경로 scripts/pr-prompt.md
gemini_model Gemini 모델 이름 gemini-2.5-flash
gemini_temperature Gemini temperature 0.3
gemini_top_k Gemini topK 20
gemini_top_p Gemini topP 0.8
gemini_max_output_tokens 최대 출력 토큰 수 500000
schema_title_description 제목에 대한 JSON 스키마 설명 (기본값 참고)
schema_body_description 본문에 대한 JSON 스키마 설명 (기본값 참고)
pr_assignees PR 담당자 목록 (공백으로 구분, 빈 값 = 태그 푸시한 사용자) ''

설정 방법

1. Gemini API 키 발급

  1. Google AI Studio에 접속
  2. "Create API Key" 클릭하여 API 키 생성
  3. API 키 복사

2. GitHub Secrets 설정

  1. 저장소 설정 페이지로 이동
  2. SettingsSecrets and variablesActions 클릭
  3. New repository secret 클릭
  4. 다음 정보 입력:
    • Name: GEMINI_API_KEY
    • Secret: Gemini API 키
  5. Add secret 클릭

3. 워크플로우 권한 설정

  1. SettingsActionsGeneral 클릭
  2. "Workflow permissions" 섹션에서:
    • Read and write permissions 선택
    • Allow GitHub Actions to create and approve pull requests 체크
  3. Save 클릭

4. 라벨 생성 (선택사항)

자동 라벨링을 사용하려면 이슈 번호 패턴에 맞는 라벨을 생성하세요:

  1. IssuesLabels 클릭
  2. DPN-316, DPN-317 등의 라벨 생성
    • 또는 타입별 라벨: feature, bugfix, hotfix

동작 원리

  1. 태그 감지: pr-* 패턴의 태그가 push되면 워크플로우 실행
  2. 브랜치 추출: 태그가 속한 브랜치 자동 감지
  3. 중복 확인: 해당 브랜치의 PR이 이미 존재하는지 확인
  4. Diff 추출: 기본 브랜치와 기능 브랜치 간 변경 사항 추출 및 필터링
  5. 커밋 수집: 모든 커밋 메시지 수집
  6. AI 생성: Gemini API로 PR 제목과 설명 생성
  7. 라벨 추출: 브랜치 이름에서 라벨 추출
  8. PR 생성: 기본 브랜치로 Pull Request 생성 및 라벨 할당

태그 이름 규칙

태그 이름은 지정한 prefix로 시작해야 합니다:

설정한 prefix가 pr-일 때:

  • pr-feature/DPN-316
  • pr-DPN-316
  • pr-bugfix/login-issue
  • DPN-316 (pr- 접두사 없음)
  • feature/DPN-316 (pr- 접두사 없음)

브랜치 이름 규칙 (자동 라벨링)

브랜치 이름에서 자동으로 라벨이 추출됩니다:

브랜치 이름 추출되는 라벨
feature/DPN-316 DPN-316
bugfix/DPN-123 DPN-123
hotfix/DPN-999 DPN-999
feature/new-feature feature
bugfix/fix-bug bugfix

토큰 최적화 전략

액션은 토큰 사용을 최적화하기 위해 파일을 필터링합니다:

포함되는 파일

  • src/** - 소스 코드
  • public/** - 정적 파일
  • 설정 파일 (package.json, tsconfig.json 등)

제외되는 파일

  • node_modules/ - 의존성
  • build/, dist/ - 빌드 결과물
  • *.lock - Lock 파일
  • *.log - 로그 파일

크기 제한

  • 파일당 diff: 최대 500 라인
  • 전체 diff: 최대 10,000 라인
  • 제한 초과 시: 파일 목록과 통계만 표시

우선순위

높은 우선순위 (전체 diff 포함):

  • *.ts, *.tsx - TypeScript
  • *.js, *.jsx - JavaScript

낮은 우선순위 (요약만):

  • *.scss, *.css - 스타일
  • *.test.ts, *.spec.ts - 테스트
  • *.json - 설정 파일

문제 해결

PR이 생성되지 않음

확인 사항:

  1. ✅ 태그 이름이 pr-로 시작하는지 확인
  2. GEMINI_API_KEY Secret이 올바르게 설정되었는지 확인
  3. ✅ 워크플로우 권한이 "Read and write permissions"로 설정되었는지 확인
  4. ✅ Actions 탭에서 워크플로우 로그 확인

AI 생성 실패

가능한 원인:

  • 잘못되었거나 만료된 Gemini API 키
  • API 할당량 초과
  • Diff가 너무 커서 토큰 한도 초과

해결 방법:

  1. API 키 재발급 및 Secret 업데이트
  2. Google AI Studio에서 할당량 확인
  3. PR은 폴백 내용으로 생성되므로 수동으로 업데이트 가능

라벨이 추가되지 않음

원인:

  • 저장소에 해당 라벨이 존재하지 않음

해결 방법:

  1. IssuesLabels에서 라벨 생성
  2. PR은 정상적으로 생성됨 (라벨만 생략)

예시

전체 워크플로우 예시

name: Auto PR with AI

on:
  push:
    tags:
      - "pr-*"

jobs:
  create-pr:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Fetch all branches
        run: |
          git fetch origin develop
          git fetch origin +refs/heads/*:refs/remotes/origin/*

      - name: Create PR with AI
        uses: datepop/create-pr-with-ai
        with:
          gemini_api_key: ${{ secrets.GEMINI_API_KEY }}
          base_branch: develop
          tag_prefix: pr-
          excluded_branches: develop main master
          pr_assignees: "user1 user2"

커스텀 모델 설정

- name: Create PR with AI
  uses: datepop/create-pr-with-ai@v1.0.0
  with:
    gemini_api_key: ${{ secrets.GEMINI_API_KEY }}
    gemini_model: gemini-2.5-flash
    gemini_temperature: 0.5
    gemini_max_output_tokens: 1000000

액션 실행 방법

다음과 같은 명령을 수행하여 액션을 trigger할 수 있습니다.

# 1. 브랜치를 원격에 push
git push -u origin feature/my-key

# 2. 태그 생성 및 push
git tag pr-feature/my-key
git push origin pr-feature/my-key

# 3. 로컬 태그 삭제 (선택사항)
git tag -d pr-feature/my-key

위의 과정은 헬퍼 스크립트(push-and-pr.sh)를 사용하여 한 줄의 명령으로 축약할 수 있습니다.

빠른 시작: 헬퍼 스크립트 사용

PR 생성을 위한 태그 푸시 과정을 간편하게 만들어주는 push-and-pr.sh 스크립트를 제공합니다.

스크립트 다운로드

  • push-and-pr.sh를 다운로드합니다.
  • 터미널에서 실행권한을 부여합니다.
chmod +x {파일경로}/push-and-pr.sh

기본 사용법

push-and-pr.sh 파일을 작업환경의 root에 다운로드했다면, 아래와 같이 실행할 수 있습니다.

# 현재 브랜치에서 PR 생성
./push-and-pr.sh

# 특정 브랜치를 지정하여 PR 생성
./push-and-pr.sh feature/DPN-316

# 커스텀 태그 접두사 사용
./push-and-pr.sh -p release- feature/new-feature

# 옵션과 브랜치를 함께 사용
./push-and-pr.sh -p deploy- my-branch

스크립트 옵션

옵션 설명 기본값
-p PREFIX 태그 접두사 설정 pr-
-h 도움말 출력 -
BRANCH 대상 브랜치 (위치 인자) 현재 브랜치

스크립트 동작

  1. 브랜치 Push: 지정된 브랜치를 원격 저장소에 push
  2. 태그 생성: {prefix}{branch-name} 형식으로 로컬 태그 생성
  3. 태그 Push: 태그를 원격 저장소에 push (GitHub Action 트리거)
  4. 태그 정리: 로컬 태그 자동 삭제
  5. 브랜치 복귀: 원래 브랜치로 자동 복귀 (다른 브랜치를 지정한 경우)

참고: 이 스크립트는 선택사항입니다. 수동으로 태그를 생성하고 push해도 동일하게 작동합니다.

Windows 사용자를 위한 가이드

스크립트는 Bash 환경에서 실행됩니다. Windows에서는 다음 방법 중 하나를 선택하세요:

옵션 1: Git Bash 사용 (권장)

Git for Windows를 설치하면 Git Bash가 함께 설치됩니다.

# Git Bash에서 실행
./push-and-pr.sh
./push-and-pr.sh -p release- feature/DPN-316

옵션 2: WSL (Windows Subsystem for Linux) 사용

WSL이 설치되어 있다면 Linux 환경에서 실행할 수 있습니다.

# WSL 터미널에서 실행
./push-and-pr.sh

옵션 3: 수동으로 태그 생성 (모든 환경)

혹은 수동으로 태그를 생성할 수 있습니다.

라이선스

MIT

About

Gemini AI Pull Request 자동 생성 GitHub Action

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •