name: 🤖 AI PR Description Commenter (100% Safe with jq) on: pull_request: types: [opened, edited] jobs: generate-description: runs-on: ubuntu-latest steps: - name: Checkout Repo uses: actions/checkout@v4 - name: Install GitHub CLI and jq run: | sudo apt-get update sudo apt-get install gh jq -y - name: Fetch PR Commits id: fetch_commits run: | COMMITS=$(gh pr view ${{ github.event.pull_request.number }} --json commits --jq '.commits[].message' | sed 's/^/- /') echo "commits<> $GITHUB_ENV echo "$COMMITS" >> $GITHUB_ENV echo "EOF" >> $GITHUB_ENV env: GH_TOKEN: ${{ secrets.GH_PERSONAL_TOKEN }} - name: Generate PR Description with OpenAI (Safe JSON with jq) run: | REQUEST_BODY=$(jq -n \ --arg model "gpt-4o" \ --arg content "Given the following commit messages:\n\n${commits}\n\nGenerate a clear and professional pull request description." \ '{ model: $model, messages: [{ role: "user", content: $content }] }' ) RESPONSE=$(curl -s https://api.openai.com/v1/chat/completions \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d "$REQUEST_BODY") DESCRIPTION=$(echo "$RESPONSE" | jq -r '.choices[0].message.content') echo "---------- OpenAI Raw Response ----------" echo "$RESPONSE" echo "---------- Extracted Description ----------" echo "$DESCRIPTION" echo "description<> $GITHUB_ENV echo "$DESCRIPTION" >> $GITHUB_ENV echo "EOF" >> $GITHUB_ENV env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} commits: ${{ env.commits }} - name: Post AI Generated Description as Comment run: | gh pr comment ${{ github.event.pull_request.number }} --body "${{ env.description }}" env: GH_TOKEN: ${{ secrets.GH_PERSONAL_TOKEN }}