This is a first cut at a GitHub Action that lets you define prompt
templates in `.md` files under `.github/codex/labels` that will run
Codex with the associated prompt when the label is added to a GitHub
pull request.
For example, this PR includes these files:
```
.github/codex/labels/codex-attempt.md
.github/codex/labels/codex-code-review.md
.github/codex/labels/codex-investigate-issue.md
```
And the new `.github/workflows/codex.yml` workflow declares the
following triggers:
```yaml
on:
issues:
types: [opened, labeled]
pull_request:
branches: [main]
types: [labeled]
```
as well as the following expression to gate the action:
```
jobs:
codex:
if: |
(github.event_name == 'issues' && (
(github.event.action == 'labeled' && (github.event.label.name == 'codex-attempt' || github.event.label.name == 'codex-investigate-issue'))
)) ||
(github.event_name == 'pull_request' && github.event.action == 'labeled' && github.event.label.name == 'codex-code-review')
```
Note the "actor" who added the label must have write access to the repo
for the action to take effect.
After adding a label, the action will "ack" the request by replacing the
original label (e.g., `codex-review`) with an `-in-progress` suffix
(e.g., `codex-review-in-progress`). When it is finished, it will swap
the `-in-progress` label with a `-completed` one (e.g.,
`codex-review-completed`).
Users of the action are responsible for providing an `OPENAI_API_KEY`
and making it available as a secret to the action.
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import type { Config } from "./config";
|
|
|
|
export function getDefaultConfig(): Config {
|
|
return {
|
|
labels: {
|
|
"codex-investigate-issue": {
|
|
getPromptTemplate: () =>
|
|
`
|
|
Troubleshoot whether the reported issue is valid.
|
|
|
|
Provide a concise and respectful comment summarizing the findings.
|
|
|
|
### {CODEX_ACTION_ISSUE_TITLE}
|
|
|
|
{CODEX_ACTION_ISSUE_BODY}
|
|
`.trim(),
|
|
},
|
|
"codex-code-review": {
|
|
getPromptTemplate: () =>
|
|
`
|
|
Review this PR and respond with a very concise final message, formatted in Markdown.
|
|
|
|
There should be a summary of the changes (1-2 sentences) and a few bullet points if necessary.
|
|
|
|
Then provide the **review** (1-2 sentences plus bullet points, friendly tone).
|
|
|
|
{CODEX_ACTION_GITHUB_EVENT_PATH} contains the JSON that triggered this GitHub workflow. It contains the \`base\` and \`head\` refs that define this PR. Both refs are available locally.
|
|
`.trim(),
|
|
},
|
|
"codex-attempt-fix": {
|
|
getPromptTemplate: () =>
|
|
`
|
|
Attempt to solve the reported issue.
|
|
|
|
If a code change is required, create a new branch, commit the fix, and open a pull-request that resolves the problem.
|
|
|
|
### {CODEX_ACTION_ISSUE_TITLE}
|
|
|
|
{CODEX_ACTION_ISSUE_BODY}
|
|
`.trim(),
|
|
},
|
|
},
|
|
};
|
|
}
|