Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/actions/claude-review-toolkit/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ Caller repos must ship a `.claude/skills/coding-standards/rules/` directory with
| `addPrReaction.sh` | `<PR_NUMBER> <REACTION>` | Adds a reaction (`+1`, `-1`, `laugh`, `confused`, `heart`, `hooray`, `rocket`, `eyes`) to the PR. |
| `removePrReaction.sh` | `<PR_NUMBER> <REACTION> <USER>` | Removes the matching reaction authored by `<USER>` (typically `github-actions[bot]`). Idempotent. |
| `createInlineComment.sh` | `<PR_NUMBER> <path> <body> <line>` | Posts an inline review comment. Requires `GITHUB_REPOSITORY`, `GH_TOKEN`, and `ALLOWED_RULES_FILE` in env. The body must reference a rule tag matching `[A-Z]+(-[A-Z]+)*-[0-9]+` (e.g. `PERF-1`) that is present in the allowlist; otherwise the comment is rejected. |
| `postCodeReviewResults.sh` | `<PR_NUMBER>` | Posts the result of a Claude code review. With no violations, adds a `+1` reaction to the PR; with violations, posts one inline comment per violation. Reads the JSON output from env `STRUCTURED_OUTPUT`. Requires `GH_TOKEN`, `GITHUB_REPOSITORY`, and `ALLOWED_RULES_FILE` in env. Individual comment failures are swallowed so one rejected comment does not kill the loop. |
| `extractAllowedRules.sh` | `<rules-dir> <output-file>` | Walks `<rules-dir>` for `.md` rule files and writes their `ruleId:` tags to `<output-file>`. Invoked automatically by the action; rarely called directly. |

## Schema extension
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/bin/bash

# Post the result of a Claude code review.
# With no violations: adds a "+1" reaction to the PR.
# With violations: posts one inline comment per violation parsed from $STRUCTURED_OUTPUT.
# Usage: postCodeReviewResults.sh <PR_NUMBER>
# Env: STRUCTURED_OUTPUT (JSON from claude-code-action), GH_TOKEN, GITHUB_REPOSITORY, ALLOWED_RULES_FILE
set -eu

if [[ $# -lt 1 ]]; then
echo "Usage: $0 <PR_NUMBER>" >&2
exit 1
fi

if ! [[ "$1" =~ ^[0-9]+$ ]]; then
echo "Error: PR_NUMBER must be a positive integer" >&2
exit 1
fi

if [[ -z "${STRUCTURED_OUTPUT:-}" ]]; then
echo "::error::Claude Code Action returned empty structured output" >&2
exit 1
fi

readonly PR_NUMBER="$1"

COUNT=$(echo "$STRUCTURED_OUTPUT" | jq '.violations | length')
readonly COUNT

if [[ "$COUNT" -eq 0 ]]; then
addPrReaction.sh "$PR_NUMBER" "+1"
else
echo "$STRUCTURED_OUTPUT" | jq -c '.violations[]' | while IFS= read -r violation; do
PATH_ARG=$(echo "$violation" | jq -r '.path')
BODY_ARG=$(echo "$violation" | jq -r '.body')
LINE_ARG=$(echo "$violation" | jq -r '.line')
createInlineComment.sh "$PR_NUMBER" "$PATH_ARG" "$BODY_ARG" "$LINE_ARG" || true
done
fi
Loading