misc: stage variable values gets override by value given in first stage #82
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: Validate Pull Request | |
on: | |
pull_request: | |
types: | |
- opened | |
- synchronize | |
- edited | |
- reopened | |
branches: | |
- 'main' | |
- 'release-**' | |
- 'develop' | |
- 'hotfix-v0**' | |
jobs: | |
validate-PR-issue: | |
runs-on: ubuntu-latest | |
permissions: | |
issues: write | |
contents: read | |
pull-requests: write | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Validate Issue Reference | |
env: | |
GH_TOKEN: ${{ github.token }} | |
PR_BODY: ${{ github.event.pull_request.body }} | |
PRNUM: ${{ github.event.pull_request.number }} | |
TITLE: ${{ github.event.pull_request.title }} | |
run: | | |
set -x | |
# Skip validation for documentation or chore PRs | |
if [[ "$TITLE" =~ ^(doc:|docs:|chore:|misc:|sync:) ]]; then | |
echo "Skipping validation for docs/chore PR." | |
echo "PR NUMBER-: $PRNUM " | |
gh pr edit $PRNUM --remove-label "PR:Issue-verification-failed" | |
gh pr edit $PRNUM --add-label "PR:Ready-to-Review" | |
exit 0 | |
fi | |
# Define all issue matching patterns | |
patterns=( | |
"((Fixes|Resolves) #[0-9]+)" | |
"((Fixes|Resolves) https://github.com/devtron-labs/devtron/issues/[0-9]+)" | |
"((Fixes|Resolves) devtron-labs/devtron#[0-9]+)" | |
"(Fixes|Resolves):?\\s+\\[#([0-9]+)\\]" | |
"((Fixes|Resolves):? #devtron-labs/devops-sprint/issues/[0-9]+)" | |
"((Fixes|Resolves):? #devtron-labs/sprint-tasks/issues/[0-9]+)" | |
"((Fixes|Resolves) https://github.com/devtron-labs/devops-sprint/issues/[0-9]+)" | |
"((Fixes|Resolves) https://github.com/devtron-labs/sprint-tasks/issues/[0-9]+)" | |
"((Fixes|Resolves):? #devtron-labs/sprint-tasks#[0-9]+)" | |
) | |
# Extract issue number and repo from PR body | |
extract_issue_number() { | |
local pattern="$1" # Get the pattern as the first argument to the function | |
# Check if PR_BODY matches the provided pattern using Bash's =~ regex operator | |
if [[ "$PR_BODY" =~ $pattern ]]; then | |
echo "matched for this pattern $pattern" | |
issue_num=$(echo "$PR_BODY" | grep -oE "$pattern" | grep -oE "[0-9]+") | |
# Extract the repository name (e.g., devtron-labs/devtron) from PR_BODY using grep | |
repo=$(echo "$PR_BODY" | grep -oE "devtron-labs/[a-zA-Z0-9_-]+") | |
echo "Extracted issue number: $issue_num from repo: $repo" | |
return 0 # Return success | |
else | |
echo "No match for the pattern $pattern" | |
fi | |
return 1 # Return failure if no match | |
} | |
issue_num="" | |
repo="devtron-labs/devtron" # Default repo | |
for pattern in "${patterns[@]}"; do | |
echo "Now checking for $pattern" | |
extract_issue_number "$pattern" && break | |
done | |
if [[ -z "$issue_num" ]]; then | |
echo "No valid issue number found." | |
gh pr edit $PRNUM --add-label "PR:Issue-verification-failed" | |
gh pr edit $PRNUM --remove-label "PR:Ready-to-Review" | |
exit 1 | |
fi | |
# Form the issue API URL dynamically | |
issue_api_url="https://api.github.com/repos/$repo/issues/$issue_num" | |
echo "API URL: $issue_api_url" | |
# Check if the issue exists in the private repo | |
response_code=$(curl -s -o /dev/null -w "%{http_code}" \ | |
--header "authorization: Bearer ${{ secrets.GH_PR_VALIDATOR_TOKEN }}" \ | |
"$issue_api_url") | |
if [[ "$response_code" -eq 200 ]]; then | |
echo "Issue #$issue_num is valid and exists in $repo." | |
# Fetch the current state of the issue (open/closed) from the private repository. | |
issue_status=$(curl -s \ | |
--header "authorization: Bearer ${{ secrets.GH_PR_VALIDATOR_TOKEN }}" \ | |
"$issue_api_url" | jq '.state'|tr -d \") | |
# Check if the issue is still open. | |
# if [[ "$issue_status" == open ]]; then | |
# echo "Issue #$issue_num is opened." | |
if [[ $forked == true ]]; then | |
echo "PR:Ready-to-Review, exiting gracefully" | |
exit 0 | |
fi | |
# Remove the 'Issue-verification-failed' label (if present) and add 'Ready-to-Review'. | |
gh pr edit $PRNUM --remove-label "PR:Issue-verification-failed" | |
gh pr edit $PRNUM --add-label "PR:Ready-to-Review" | |
echo "PR:Ready-to-Review, exiting gracefully" | |
exit 0 | |
# else | |
# echo "Issue #$issue_num is closed. Please link an open issue to proceed." | |
# if [[ $forked == true ]]; then | |
# echo "PR:Ready-to-Review, exiting gracefully" | |
# exit 0 | |
# fi | |
# Add a comment to the PR indicating the issue is not linked correctly. | |
# gh pr comment $PRNUM --body "PR is linked to a closed issue. Please link an open issue to proceed." | |
# Add the 'Issue-verification-failed' label and remove 'Ready-to-Review'. | |
# gh pr edit $PRNUM --add-label "PR:Issue-verification-failed" | |
# gh pr edit $PRNUM --remove-label "PR:Ready-to-Review" | |
# exit 1 | |
#fi | |
else | |
echo "Issue not found. Invalid URL or issue number." | |
# Add a comment to the PR indicating the issue is not linked correctly. | |
gh pr comment $PRNUM --body "PR is not linked to a valid issue. Please update the issue link." | |
# Apply 'Issue-verification-failed' label and remove 'Ready-to-Review' label. | |
gh pr edit $PRNUM --add-label "PR:Issue-verification-failed" | |
gh pr edit $PRNUM --remove-label "PR:Ready-to-Review" | |
exit 1 | |
fi |