PR 리뷰 + CI 자동 수정
Composio CLI를 사용하여 셸에서 GitHub/GitLab PR 리뷰 및 CI 문제 해결을 수행합니다. 브라우저, 터미널, 채팅 간 전환이 필요 없습니다.
사용 시기
- PR에 인라인 코멘트가 포함된 구조화된 리뷰(정확성, 스타일, 위험)가 필요한 경우.
- CI가 실패 상태이며, 에이전트가 로그를 읽고 코드를 패치한 후 다시 확인하도록 하려는 경우.
- diff 가져오기 → 비평 → 수정 → 푸시 → 재실행 주기를 단일 명령으로 처리하고 싶은 경우.
사전 요구 사항
curl -fsSL https://composio.dev/install | bash
composio login
composio link github # 또는: composio link gitlab
비대화형 실행을 위한 선택적 환경 변수: COMPOSIO_API_KEY.
핵심 툴킷
슬러그를 검색하여 찾은 후 재사용을 위해 고정합니다:
composio search "list pull request files" --toolkits github
composio search "download workflow logs" --toolkits github
composio search "create pr comment" --toolkits gitlab
자주 재사용하는 일반적인 슬러그:
GITHUB_GET_A_PULL_REQUESTGITHUB_LIST_PULL_REQUESTS_FILESGITHUB_CREATE_A_REVIEW_FOR_A_PULL_REQUESTGITHUB_LIST_WORKFLOW_RUNS_FOR_A_REPOSITORYGITHUB_DOWNLOAD_WORKFLOW_RUN_LOGSGITLAB_GET_SINGLE_MERGE_REQUESTGITLAB_LIST_MERGE_REQUEST_DISCUSSIONSGITLAB_CREATE_NEW_MERGE_REQUEST_NOTE
처음 사용하기 전에 항상 composio execute <SLUG> --get-schema로 확인하세요.
리뷰 워크플로
- PR 메타데이터 + diff 가져오기:
composio execute GITHUB_GET_A_PULL_REQUEST \ -d '{"owner":"acme","repo":"app","pull_number":482}' composio execute GITHUB_LIST_PULL_REQUESTS_FILES \ -d '{"owner":"acme","repo":"app","pull_number":482}' - 위험 영역 요약 (인증, 마이그레이션, 공개 API, 테스트)하여 리뷰 본문 작성.
- 인라인 코멘트와 함께 리뷰 게시:
composio execute GITHUB_CREATE_A_REVIEW_FOR_A_PULL_REQUEST -d '{ "owner":"acme","repo":"app","pull_number":482, "event":"COMMENT", "body":"전반적으로 LGTM이며 2개의 차단 사항이 있습니다.", "comments":[ {"path":"src/auth.ts","line":42,"body":"세션에 null 체크 누락"}, {"path":"src/auth.ts","line":88,"body":"토큰 TTL이 하드코딩되어 있습니다. 설정으로 이동하세요."} ] }'
CI 자동 수정 루프
- 실패한 실행 찾기:
composio execute GITHUB_LIST_WORKFLOW_RUNS_FOR_A_REPOSITORY \ -d '{"owner":"acme","repo":"app","branch":"feat/billing","status":"failure"}' - 로그 가져오기:
composio execute GITHUB_DOWNLOAD_WORKFLOW_RUN_LOGS \ -d '{"owner":"acme","repo":"app","run_id":123456}' - 실패 분석 → 로컬 패치 (에이전트가 작업 트리에 수정 사항을 작성).
- 로컬
git을 통해 커밋 + 푸시한 후,conclusion=success가 될 때까지 1단계를 다시 폴링. - PR 코멘트 게시하여 각 수정 커밋을 설명, 사람 리뷰어가 변경 사항을 확인할 수 있도록 함.
원샷 워크플로우 파일
scripts/review-and-fix.ts로 저장하고 composio run --file ./scripts/review-and-fix.ts -- --pr 482로 실행:
const pr = process.argv.includes("--pr")
? Number(process.argv[process.argv.indexOf("--pr") + 1])
: null;
const meta = await execute("GITHUB_GET_A_PULL_REQUEST", {
owner: "acme", repo: "app", pull_number: pr
});
const files = await execute("GITHUB_LIST_PULL_REQUESTS_FILES", {
owner: "acme", repo: "app", pull_number: pr
});
console.log(JSON.stringify({ meta, files }, null, 2));
GitLab 변형
슬러그와 파라미터 이름을 교체:
composio execute GITLAB_GET_SINGLE_MERGE_REQUEST \
-d '{"id":"acme/app","merge_request_iid":482}'
composio execute GITLAB_CREATE_NEW_MERGE_REQUEST_NOTE \
-d '{"id":"acme/app","merge_request_iid":482,"body":"CI 수정 사항을 deadbeef 커밋으로 푸시했습니다."}'
문제 해결
Connection required for github→composio link github- 알 수 없는 입력 형태 →
composio execute <SLUG> --get-schema - 로그 다운로드가 너무 큼 →
composio proxy를 통해 원시 API에 스트리밍하고 로컬에서grep - 속도 제한 → 호출을 직렬화하거나 폴링 빈도를 낮춤. 동일 저장소에 대해
--parallel사용 피하기
전체 CLI 참조: docs.composio.dev/docs/cli