diff --git a/.github/workflows/pr-issue-validator.yaml b/.github/workflows/pr-issue-validator.yaml index 140c116578..fa0088290f 100644 --- a/.github/workflows/pr-issue-validator.yaml +++ b/.github/workflows/pr-issue-validator.yaml @@ -1,4 +1,3 @@ - name: Validate Pull Request on: @@ -13,131 +12,10 @@ on: - 'release-**' - 'develop' - 'hotfix-**' - + 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:|release:|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]+)" - ) - - # 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 \ No newline at end of file + pr-validation: + uses: devtron-labs/utilities/.github/workflows/pr-validator.yaml@feat/central-pr-validator + secrets: inherit + with: + validate_sql: false # Enable/disable SQL validation \ No newline at end of file