Skip to content

Adding initial test suite #15

Adding initial test suite

Adding initial test suite #15

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
})