chore: add aep actions #3
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 Reviewer Pipeline | |
# Trigger the workflow when a pull request is opened or synchronized with 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 for the job | |
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 containing the changes between the current branch and the master branch | |
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 for API request | |
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 and create a JSON body for the API request | |
file_contents=$(cat "${WORKING_DIRECTORY}${DIFF_FILE}") | |
json_body=$(jq -n --arg pt "pullrequest-review" --arg p "$file_contents" '{prompt_type: $pt, prompt: $p}') | |
# Send the API request and store the response | |
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 headers | |
response_code=$(echo "$response" | awk -F' ' '/HTTP\/1.1/{print $2}' | head -n 1) | |
# Process the response based on the response code | |
if [ "$response_code" -eq 200 ]; then | |
echo "File contents sent successfully." | |
# Remove unnecessary 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') | |
# Remove trailing and leading quotes | |
response_body=$(echo "$response_body" | sed 's/^"\(.*\)"$/\1/') | |
# Remove the initial markdown code block identifier if it exists | |
response_body=$(echo "$response_body" | sed 's/```markdown//') | |
# Remove the last code block identifier | |
response_body=$(echo "$response_body" | sed 's/```//') | |
# 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 | |
# Check if the response was written to the file successfully | |
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: | | |
# Read the response from the file and set it as an environment variable | |
{ | |
echo 'response<<EOF' | |
cat ${WORKING_DIRECTORY}response.md | |
echo EOF | |
} >> "$GITHUB_ENV" | |
# Uses the response to create a comment on the pull request | |
- uses: actions/github-script@v7 | |
with: | |
script: | | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: process.env.response | |
}) |