Skip to content

Step 6b

Step 6b #11

name: Step 6b # Copilot on GitHub
on:
# Trigger if Copilot adds a review comment
pull_request_review:
permissions:
contents: write
actions: write
issues: write
pull-requests: read
repository-projects: read
jobs:
find_exercise:
name: Find Exercise Issue
uses: skills/exercise-toolkit/.github/workflows/[email protected]
check_step_work:
name: Check step work
runs-on: ubuntu-latest
needs: [find_exercise]
env:
ISSUE_URL: ${{ needs.find_exercise.outputs.issue-url }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get response templates
uses: actions/checkout@v4
with:
repository: skills/response-templates
path: skills-response-templates
# START: Check practical exercise
- name: Check for pr description and copilot review
id: check-user-work
run: |
# Checks to perform
checks='{
"pr_description": {
"name": "PR Description",
"passed": true,
"message": ""
},
"copilot_review": {
"name": "Copilot Review",
"passed": true,
"message": ""
}
}'
# Check if PR has a description and minimum length
min_length=15
body_length=$(echo "$PR_Body" | wc -c)
echo "PR description length: $body_length"
if [ "$body_length" -lt $min_length ]; then
checks=$(echo $checks | jq '.pr_description.passed = false')
checks=$(echo $checks | jq '.pr_description.message = "Please use Copilot to generate a pull request description."')
fi
# Check for a PR Review from Copilot
reviews=$(gh pr view --repo $REPO $PR_NUMBER --json reviews)
authors=$(echo "$reviews" | jq '.reviews[].author.login')
if echo "$authors" | grep -q "copilot-pull-request-reviewer"; then
echo "Copilot has reviewed this PR."
else
echo "Copilot has NOT reviewed this PR."
checks=$(echo $checks | jq '.copilot_review.passed = false')
checks=$(echo $checks | jq '.copilot_review.message = "Please request a review from Copilot."')
fi
# Verify all checks passed
passed=$(echo $checks | jq '. | all(.passed?)')
# Flatten to an array for returning. Allows iteration during rendering.
results=$(echo $checks | jq 'to_entries | map({name: .key} + .value)')
# Save pass status to output
echo "passed=$passed" >> $GITHUB_OUTPUT
# Save results to output
echo 'results<<EOF' >> $GITHUB_OUTPUT
echo $results >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_Body: ${{ github.event.pull_request.body }}
REPO: ${{ github.repository }}
PR_NUMBER: ${{ github.event.pull_request.number }}
- name: Build message - step results
id: build-message-step-results
uses: skills/action-text-variables@v1
with:
template-file: skills-response-templates/step-feedback/step-results.md
template-vars: '{
"step_number": 6,
"passed": ${{ steps.check-user-work.outputs.passed }},
"results_table": ${{ steps.check-user-work.outputs.results }},
"tips": [
"Copilot review will also suggest changes for common mistakes and typos.",
"You can use repository rulesets to automatically require a review from Copilot."
]
}'
- name: Create comment - step results
run: |
gh issue comment "$ISSUE_URL" \
--body "$COMMENT_BODY"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMENT_BODY: ${{ steps.build-message-step-results.outputs.updated-text }}
- name: Fail job if not all checks passed
if: steps.check-user-work.outputs.passed == 'false'
run: exit 1
# END: Check practical exercise