Added Min Stack program #491
Workflow file for this run
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: PR Validation | |
# Trigger on PR opened or edited events | |
on: | |
pull_request: | |
types: [opened, edited] | |
jobs: | |
validate-pr: | |
runs-on: ubuntu-latest | |
steps: | |
# Checkout the repository code | |
- name: Check out code | |
uses: actions/checkout@v3 | |
# Set up Node.js environment (Node.js version 14) | |
- name: Set up Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '14' | |
# Validate PR description and issue reference | |
- name: Validate PR Description | |
id: pr-check | |
run: | | |
# Fetch PR information from the event payload | |
PR_DESCRIPTION=$(jq -r .pull_request.body < "$GITHUB_EVENT_PATH") | |
PR_TITLE=$(jq -r .pull_request.title < "$GITHUB_EVENT_PATH") | |
# Temporary files to store validation messages | |
PR_VALID_FILE=$(mktemp) | |
ERROR_MESSAGE_FILE=$(mktemp) | |
SUCCESS_MESSAGE_FILE=$(mktemp) | |
# Initialize PR validation result as valid | |
PR_VALID="true" | |
# Check if the PR description is empty or null | |
if [ -z "$PR_DESCRIPTION" ] || [ "$PR_DESCRIPTION" == "null" ]; then | |
echo "Empty PR description" | |
PR_VALID="false" | |
echo '❌ Error: PR description is empty!' > "$ERROR_MESSAGE_FILE" | |
fi | |
# Define issue reference pattern to check in the description | |
ISSUE_PATTERN="(Fixes|Close|Closes|Closed|Fix|Fixed|Resolve|Resolves) #[0-9]+" | |
if [[ ! "$PR_DESCRIPTION" =~ $ISSUE_PATTERN ]]; then | |
echo "Invalid or missing issue reference" | |
PR_VALID="false" | |
echo '❌ Error: PR must reference an issue using Fixes, Closes, Resolves #Issue_Number' > "$ERROR_MESSAGE_FILE" | |
fi | |
# If all checks pass, generate success message | |
if [ "$PR_VALID" == "true" ]; then | |
echo '✅ Success: PR is valid!' > "$SUCCESS_MESSAGE_FILE" | |
fi | |
# Save validation results to environment variables | |
echo "PR_VALID=$PR_VALID" >> $GITHUB_ENV | |
echo "ERROR_MESSAGE=$(cat $ERROR_MESSAGE_FILE)" >> $GITHUB_ENV | |
echo "SUCCESS_MESSAGE=$(cat $SUCCESS_MESSAGE_FILE)" >> $GITHUB_ENV | |
# Post a comment on the PR with validation results | |
- name: Post comment on PR | |
uses: actions/github-script@v6 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const prValid = process.env.PR_VALID; | |
const errorMessage = process.env.ERROR_MESSAGE; | |
const successMessage = process.env.SUCCESS_MESSAGE; | |
const prNumber = context.payload.pull_request.number; | |
if (prValid === 'false') { | |
// Post error message as a comment | |
github.rest.issues.createComment({ | |
issue_number: prNumber, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: errorMessage | |
}); | |
// Mark the action as failed | |
core.setFailed(errorMessage); | |
} else { | |
// Post success message as a comment | |
github.rest.issues.createComment({ | |
issue_number: prNumber, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: successMessage | |
}); | |
} | |
# Fail the job if PR is invalid | |
- name: Fail if validation failed | |
if: env.PR_VALID == 'false' | |
run: exit 1 | |