fix: improve git hook JSON escaping
Fixed post-commit hook to properly escape JSON payloads using python. Previous implementation was vulnerable to breaking on commit messages with special characters (quotes, newlines, etc.). CHANGES: - Use python json.dumps() for proper JSON escaping - Prevents 422 validation errors from coordination API - Handles multi-line commit messages correctly Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -38,15 +38,29 @@ if [[ -n "$SPEC_FILES" ]]; then
|
|||||||
# Send dev-alerts message
|
# Send dev-alerts message
|
||||||
SESSION_ID=$(hostname)/claude-main
|
SESSION_ID=$(hostname)/claude-main
|
||||||
|
|
||||||
|
# Build JSON payload with proper escaping
|
||||||
|
JSON_PAYLOAD=$(python3 -c "import json; print(json.dumps({
|
||||||
|
'from_session': '$SESSION_ID',
|
||||||
|
'to_session': 'dev-alerts',
|
||||||
|
'project_key': '$PROJECT',
|
||||||
|
'subject': '$PROJECT_NAME Feature Spec: $SPEC_NUM $SPEC_NAME',
|
||||||
|
'body': '''New $PROJECT_NAME feature specification created.
|
||||||
|
|
||||||
|
$SPEC_NUM: $SPEC_NAME
|
||||||
|
Priority: $PRIORITY | Effort: $EFFORT
|
||||||
|
|
||||||
|
OVERVIEW:
|
||||||
|
$OVERVIEW
|
||||||
|
|
||||||
|
Commit: $COMMIT_HASH on $BRANCH
|
||||||
|
Author: $AUTHOR
|
||||||
|
|
||||||
|
🤖 Auto-generated via post-commit hook'''
|
||||||
|
}))")
|
||||||
|
|
||||||
curl -s -X POST http://172.16.3.30:8001/api/coord/messages \
|
curl -s -X POST http://172.16.3.30:8001/api/coord/messages \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "{
|
-d "$JSON_PAYLOAD" > /dev/null 2>&1
|
||||||
\"from_session\": \"$SESSION_ID\",
|
|
||||||
\"to_session\": \"dev-alerts\",
|
|
||||||
\"project_key\": \"$PROJECT\",
|
|
||||||
\"subject\": \"$PROJECT_NAME Feature Spec: $SPEC_NUM $SPEC_NAME\",
|
|
||||||
\"body\": \"New $PROJECT_NAME feature specification created.\\n\\n$SPEC_NUM: $SPEC_NAME\\nPriority: $PRIORITY | Effort: $EFFORT\\n\\nOVERVIEW:\\n$OVERVIEW\\n\\nCommit: $COMMIT_HASH on $BRANCH\\nAuthor: $AUTHOR\\n\\n🤖 Auto-generated via post-commit hook\"
|
|
||||||
}" > /dev/null 2>&1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Detect build/push events (commit message contains 'spec:', 'feat:', 'fix:', etc.)
|
# Detect build/push events (commit message contains 'spec:', 'feat:', 'fix:', etc.)
|
||||||
@@ -59,15 +73,29 @@ if echo "$COMMIT_MSG" | grep -qE '^(spec|feat|fix|chore|docs|build):'; then
|
|||||||
|
|
||||||
SESSION_ID=$(hostname)/claude-main
|
SESSION_ID=$(hostname)/claude-main
|
||||||
|
|
||||||
|
# Build JSON payload with proper escaping
|
||||||
|
JSON_PAYLOAD=$(python3 -c "import json; print(json.dumps({
|
||||||
|
'from_session': '$SESSION_ID',
|
||||||
|
'to_session': 'dev-alerts',
|
||||||
|
'project_key': '$PROJECT',
|
||||||
|
'subject': '$PROJECT_NAME Build: $COMMIT_TYPE on main',
|
||||||
|
'body': '''$PROJECT_NAME main branch updated.
|
||||||
|
|
||||||
|
COMMIT: $COMMIT_HASH
|
||||||
|
TYPE: $COMMIT_TYPE
|
||||||
|
FILES CHANGED: $FILES_CHANGED
|
||||||
|
BRANCH: $BRANCH
|
||||||
|
AUTHOR: $AUTHOR
|
||||||
|
|
||||||
|
MESSAGE:
|
||||||
|
$COMMIT_MSG
|
||||||
|
|
||||||
|
🔨 Auto-generated via post-commit hook'''
|
||||||
|
}))")
|
||||||
|
|
||||||
curl -s -X POST http://172.16.3.30:8001/api/coord/messages \
|
curl -s -X POST http://172.16.3.30:8001/api/coord/messages \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "{
|
-d "$JSON_PAYLOAD" > /dev/null 2>&1
|
||||||
\"from_session\": \"$SESSION_ID\",
|
|
||||||
\"to_session\": \"dev-alerts\",
|
|
||||||
\"project_key\": \"$PROJECT\",
|
|
||||||
\"subject\": \"$PROJECT_NAME Build: $COMMIT_TYPE on main\",
|
|
||||||
\"body\": \"$PROJECT_NAME main branch updated.\\n\\nCOMMIT: $COMMIT_HASH\\nTYPE: $COMMIT_TYPE\\nFILES CHANGED: $FILES_CHANGED\\nBRANCH: $BRANCH\\nAUTHOR: $AUTHOR\\n\\nMESSAGE:\\n$COMMIT_MSG\\n\\n🔨 Auto-generated via post-commit hook\"
|
|
||||||
}" > /dev/null 2>&1
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user