Skip to content

Commit fadf069

Browse files
authored
feat(ci): git identity for issue-auto-implement implement step (#244)
* feat(ci): add issue auto-implement action and workflow - Add workflow issue-auto-implement.yml (label, comment, PR review triggers) - Add composite action: team check, labels, assess script, implement placeholder, verify loop, create PR - Add assess script (TypeScript/tsx, Claude, fixtures) with vitest tests - Add workflow issue-auto-implement-test.yml to run assess tests on PR - Add README (usage, inputs, testing) and AGENTS.md (flows, verification, next steps) - Use AUTO_IMPLEMENT_* prefix for secrets/vars; require github_allowed_trigger_team Made-with: Cursor * feat(ci): pass context_files into assess and include in Claude prompt - Add CONTEXT_FILES and GITHUB_WORKSPACE to assess step env - Load repo files (AGENTS.md, REFERENCE.md, etc.) and append to assessment prompt - Skip missing files; REPO_ROOT from GITHUB_WORKSPACE or cwd for local runs Made-with: Cursor * feat(ci): fetch all issue comments for assessment - For issues and issue_comment events, call GitHub API for issue comments - Include all comments in Claude prompt (author, date, body) - Fall back to payload comment/comments when API not used Made-with: Cursor * fix(ci): stabilize issue-auto-implement assess tests workflow - Set GITHUB_WORKSPACE in job env so assess script has repo root in CI - Use working-directory instead of cd for install/test step - Add npm cache keyed by assess package-lock.json Made-with: Cursor * fix(ci): do not run main() when assess script is loaded by Vitest In CI the runner sets GITHUB_EVENT_PATH, so the script was invoking main() on import; loadPayload() then threw and process.exit(1) caused Vitest to fail with an unhandled error. Only run main() when GITHUB_EVENT_PATH is set and VITEST is not (i.e. when invoked as script, not by tests). Made-with: Cursor * feat(ci): wire Claude implement step and commit-and-push - Add assess/implement.ts: fetch issue, call Claude for edits JSON, apply files, write commit message - Action: run implement script with env; commit and push using generated commit message - Add .gitignore for .commit_msg; document implement script in AGENTS.md Made-with: Cursor * feat(ci): true implement-verify loop with PREVIOUS_VERIFY_OUTPUT - Implement script accepts PREVIOUS_VERIFY_OUTPUT and adds it to Claude prompt on retry - Single step loops: implement → commit/push → verify; on verify failure retry with output - Create PR uses implement_verify_loop.outcome; document loop in AGENTS.md Made-with: Cursor * refactor(issue-auto-implement): move assess into src/ and test/ - Main code: assess/src/ (index.ts, implement.ts, normalize.ts) - Tests: assess/test/ (index.test.ts, normalize.test.ts) - Fixtures stay at assess/fixtures/ - Update package.json scripts and action.yml to use src/ - Add .env.example, setup-local-env.sh, .gitignore .env; update README/AGENTS paths Made-with: Cursor * refactor(issue-auto-implement): consolidate tests under test/ (unit, integration, fixtures) - test/unit/ — unit tests (npm test), no API - test/integration/ — Claude API tests (npm run test:integration), not in CI - test/fixtures/ — shared event JSONs for both and assess:fixture script - Remove top-level fixtures/ and test-integration/; update vitest configs and paths Made-with: Cursor * chore: ignore auto-implement worktrees Made-with: Cursor * fix(issue-auto-implement): use Claude Code CLI only, single API key - Implement runs only Claude Code CLI (no API path); pass AUTO_IMPLEMENT_ANTHROPIC_API_KEY to CLI - Assess uses only AUTO_IMPLEMENT_ANTHROPIC_API_KEY - Action installs Claude Code CLI in CI when assess outcome is implement - README: add CI/CD checklist; docs for implement and env - AGENTS.md: implement flow and backlog updated Made-with: Cursor * fix(issue-auto-implement): create new PR when previous closed; TS push-and-open-pr - push-and-open-pr.ts: check gh pr view --json state; only skip create when OPEN - run-local-assess.ts: worktree flow, calls pushAndOpenPr, default context - load-dotenv.ts: used by run-local-assess - scripts/push-and-open-pr.sh: optional standalone script Made-with: Cursor * docs(issue-auto-implement): quick start, remove TEST_PLAN refs, add assess:local - README: add How to use (workflow, secrets, trigger label, trigger) - Remove TEST_PLAN.md references from README and AGENTS.md - package.json: add assess:local script Made-with: Cursor * feat(issue-auto-implement): add setup workflow to create labels - Add issue-auto-implement-setup.yml (workflow_dispatch) to create automation/auto-implement, automation/needs-info, automation/pr-created - README: quick start step 3 mentions running setup workflow - REMOTE_TEST_PLAN: prerequisites reference setup workflow Made-with: Cursor * chore: remove REMOTE_TEST_PLAN.md from source control Made-with: Cursor * feat(issue-auto-implement): add permission-based trigger gate (works with default token) - Add optional github_allowed_trigger_min_permission input (triage, push, maintain, admin). When set via repo variable AUTO_IMPLEMENT_ALLOWED_TRIGGER_MIN_PERMISSION, the action checks repo collaborator permission via API; works with default GITHUB_TOKEN (no read:org). - Keep team check (AUTO_IMPLEMENT_ALLOWED_TRIGGER_TEAM) as alternative; token needs read:org. - Exactly one gate required per run; if both variables set, permission check is used. - Update README and AGENTS.md with both options. Made-with: Cursor * feat(ci): dotenv in deps for issue-auto-implement CI, upgrade to actions/checkout@v6 - Move dotenv to dependencies so npm ci --omit=dev installs it (fixes ERR_MODULE_NOT_FOUND in CI) - Upgrade actions/checkout@v4 to @v6 (Node 24, removes deprecation warning) - issue-auto-implement-test: checkout@v6, Node 22 for assess tests Made-with: Cursor * feat(ci): set git user identity before implement step (fix exit 128) Runner has no default git user; set user.name and user.email in Checkout branch step so git merge and git commit in implement loop succeed. Made-with: Cursor
1 parent 85a78c8 commit fadf069

1 file changed

Lines changed: 3 additions & 0 deletions

File tree

.github/actions/issue-auto-implement/action.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,10 @@ runs:
177177
shell: bash
178178
env:
179179
ISSUE_NUMBER: ${{ steps.assess.outputs.issue_number }}
180+
GITHUB_ACTOR: ${{ github.actor }}
180181
run: |
182+
git config user.name "$GITHUB_ACTOR"
183+
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
181184
BRANCH="auto-implement-issue-${ISSUE_NUMBER}"
182185
git fetch origin main
183186
if git show-ref --verify --quiet refs/remotes/origin/"$BRANCH"; then

0 commit comments

Comments
 (0)