feat: improve content ai safety logging and responses #21
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI PR Summary Pipeline | |
# Trigger the workflow when a pull request is opened or updated on the 'master' branch, | |
# or manually triggered using the workflow_dispatch event. | |
on: | |
pull_request: | |
branches: | |
- main | |
workflow_dispatch: | |
jobs: | |
review: | |
runs-on: ubuntu-latest | |
env: | |
# Set environment variables | |
X_API_KEY: ${{ secrets.AEP_API_KEY }} | |
X_API_CONSUMER: ${{ secrets.AEP_CONSUMER_UUID }} | |
API_HOST: "https://api.aep.clouddev.works/" | |
WORKING_DIRECTORY: ${{ github.workspace }}/ | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Create a diff file | |
run: | | |
# Generate a diff file between the current branch and 'origin/master' | |
git diff origin/main...remotes/origin/${{ github.head_ref }} > ${{ env.working_directory }}diff.txt && cat ${{ env.working_directory }}diff.txt | |
- name: Generate a response | |
run: | | |
# Set variables | |
API_HOST=$(printenv API_HOST) | |
WORKING_DIRECTORY=$(printenv WORKING_DIRECTORY) | |
X_API_CONSUMER=$(printenv X_API_CONSUMER) | |
X_API_KEY=$(printenv X_API_KEY) | |
DIFF_FILE="diff.txt" | |
RESPONSE_MD_FILE="response.md" | |
# Check if the diff file exists | |
if [ ! -f "${WORKING_DIRECTORY}${DIFF_FILE}" ]; then | |
echo "File ${WORKING_DIRECTORY}${DIFF_FILE} not found." | |
exit 1 | |
fi | |
# Read the contents of the diff file | |
file_contents=$(cat "${WORKING_DIRECTORY}${DIFF_FILE}") | |
# Create a JSON body for the API request | |
json_body=$(jq -n --arg pt "pullrequest-summary-perfile" --arg p "$file_contents" '{prompt_type: $pt, prompt: $p}') | |
# Send a POST request to the API | |
response=$(curl -s -i -X POST "${API_HOST}/predefined" \ | |
-H "Content-Type: application/json" \ | |
-H "X-API-CONSUMER: ${X_API_CONSUMER}" \ | |
-H "X-API-KEY: ${X_API_KEY}" \ | |
-d "$json_body") | |
echo "Response: $response" | |
# Extract the response code from the HTTP response | |
response_code=$(echo "$response" | awk -F' ' '/HTTP\/1.1/{print $2}' | head -n 1) | |
if [ "$response_code" -eq 200 ]; then | |
echo "File contents sent successfully." | |
# Remove headers from the response | |
response_body=$(echo "$response" | tail -n +2) | |
response_body=$(echo "$response_body" | sed '/^date: /Id' | sed '/^server: /Id' | sed '/^content-length: /Id' | sed '/^content-type: /Id') | |
response_body=$(echo "$response_body" | sed 's/^"\(.*\)"$/\1/') # Remove trailing and leading quotes | |
response_body=$(echo "$response_body" | sed 's/```markdown//') # Remove the initial markdown code block identifier if it exists | |
response_body=$(echo "$response_body" | sed 's/```//') # Remove the last code block identifier | |
# Write the response body to a file | |
echo -e "$response_body" > "${WORKING_DIRECTORY}${RESPONSE_MD_FILE}" | |
else | |
echo "Error sending file contents: $response_code" | |
echo -e "Request to AEP failed to process" > "${WORKING_DIRECTORY}${RESPONSE_MD_FILE}" | |
fi | |
if [ $? -eq 0 ]; then | |
echo "Response saved as response.md" | |
else | |
echo "Error writing to file in ${WORKING_DIRECTORY}." | |
exit 1 | |
fi | |
- name: Get the response as a variable | |
id: get_response | |
run: | | |
# Set the 'response' environment variable with the contents of the response.md file | |
{ | |
echo 'response<<EOF' | |
cat ${WORKING_DIRECTORY}response.md | |
echo EOF | |
} >> "$GITHUB_ENV" | |
# Update the PR body with the AEP API response | |
- uses: actions/github-script@v7 | |
with: | |
script: | | |
const prBody = context.payload.pull_request.body || ''; | |
const updatedBody = prBody.includes('## 🤖AEP PR SUMMARY🤖') | |
? prBody.replace(/## 🤖AEP PR SUMMARY🤖[\s\S]*/, '') + '\n\n## 🤖AEP PR SUMMARY🤖\n\n' + process.env.response | |
: prBody + '\n\n## 🤖AEP PR SUMMARY🤖\n\n' + process.env.response; | |
github.rest.pulls.update({ | |
pull_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: updatedBody | |
}) |