Skip to content

Code Generation

Code Generation #34

name: Code Generation
on:
issues:
types: [labeled]
workflow_dispatch:
inputs:
issue_number:
description: 'Issue number to process'
required: true
type: number
permissions:
contents: write
pull-requests: write
issues: write
jobs:
load-labels:
runs-on: ubuntu-latest
outputs:
ready_for_dev: ${{ steps.cfg.outputs.ready_for_dev }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- id: cfg
run: |
LABEL=$(node --input-type=module <<'EOF'
import { readFileSync } from 'fs';
import { parseNestedYaml } from './scripts/lib/yaml.mjs';
process.stdout.write(parseNestedYaml(readFileSync('config/labels.yaml', 'utf8')).issue.valid.name);
EOF
)
echo "ready_for_dev=$LABEL" >> "$GITHUB_OUTPUT"
generate-pr:
needs: load-labels
if: >
github.event_name == 'workflow_dispatch' ||
github.event.label.name == needs.load-labels.outputs.ready_for_dev
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Resolve issue data
id: issue
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
NUMBER="${{ inputs.issue_number }}"
else
NUMBER="${{ github.event.issue.number }}"
fi
TITLE=$(gh issue view "$NUMBER" --repo "${{ github.repository }}" --json title -q '.title')
{
echo 'body<<__DELIM__'
gh issue view "$NUMBER" --repo "${{ github.repository }}" --json body -q '.body'
echo '__DELIM__'
} >> "$GITHUB_OUTPUT"
echo "number=$NUMBER" >> "$GITHUB_OUTPUT"
echo "title=$TITLE" >> "$GITHUB_OUTPUT"
- name: Generate AI change
id: generate
env:
ISSUE_NUMBER: ${{ steps.issue.outputs.number }}
ISSUE_TITLE: ${{ steps.issue.outputs.title }}
ISSUE_BODY: ${{ steps.issue.outputs.body }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ANTHROPIC_MODEL: ${{ vars.ANTHROPIC_MODEL }}
AI_PROVIDER: ${{ vars.AI_PROVIDER }}
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
GROQ_MODEL: ${{ vars.GROQ_MODEL }}
GROQ_API_URL: ${{ vars.GROQ_API_URL }}
run: node scripts/generate_issue_change.mjs
- name: Create pull request
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.AI_PR_TOKEN || secrets.GITHUB_TOKEN }}
branch: ai/issue-${{ steps.issue.outputs.number }}
base: ${{ github.event.repository.default_branch }}
commit-message: "chore(ai): generate draft for issue #${{ steps.issue.outputs.number }}"
title: "[AI] Issue #${{ steps.issue.outputs.number }}: ${{ steps.issue.outputs.title }}"
body: |
## AI Generated Change
${{ steps.generate.outputs.summary }}
Closes #${{ steps.issue.outputs.number }}
add-paths: |
${{ steps.generate.outputs.generated_paths }}