RDKEMW-16976 : Integrate entservices-resourcemanager into middleware builds #5055
This file contains hidden or 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 Title Validation | |
| on: | |
| pull_request: | |
| branches: [develop] | |
| types: [opened, edited, synchronize] | |
| jobs: | |
| validate-pr-title: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Validate PR Title | |
| env: | |
| PR_TITLE: ${{ github.event.pull_request.title }} | |
| PR_BODY: ${{ github.event.pull_request.body }} | |
| run: | | |
| # Define valid ticket IDs | |
| VALID_TICKET_IDS=("RDKEMW" "RDKEVD" "IMMUI" "RDK" "RDKMVE" "RDKDEV") | |
| # Function to validate ticket format and ID(s) | |
| validate_ticket() { | |
| local text="$1" | |
| local field_name="$2" | |
| echo "Validating $field_name: $text" | |
| # Check if text matches the pattern <TICKETID>-<ticketno.>[, <TICKETID>-<ticketno.>] : <desc> | |
| if [[ ! "$text" =~ ^([A-Z0-9]+-[0-9]+)([[:space:]]*,[[:space:]]*[A-Z0-9]+-[0-9]+)*[[:space:]]*:[[:space:]]*.+ ]]; then | |
| echo "ERROR: $field_name format is invalid." | |
| echo "Expected format: <TICKETID>-<ticketno.>[, <TICKETID>-<ticketno.>] : <description>" | |
| echo "Example (single): RDKEMW-123 : Fix playbook issue" | |
| echo "Example (multiple): RDKEMW-123, RDKDEV-45 : Fix playbook issue" | |
| echo "" | |
| echo "Valid ticket IDs are:" | |
| printf "%s\n" "${VALID_TICKET_IDS[@]}" | |
| return 1 | |
| fi | |
| # Extract only the ticket list (before ':') | |
| local ticket_list="${text%%:*}" | |
| # Extract all ticket IDs from the ticket list | |
| mapfile -t tickets < <(echo "$ticket_list" | grep -oE '[A-Z0-9]+-[0-9]+') | |
| if [ "${#tickets[@]}" -eq 0 ]; then | |
| echo "ERROR: Could not extract ticket ID(s) from $field_name." | |
| echo "Expected format: <TICKETID>-<ticketno.>[, <TICKETID>-<ticketno.>] : <description>" | |
| echo "Example (single): RDKEMW-123 : Fix playbook issue" | |
| echo "Example (multiple): RDKEMW-123, RDKDEV-45 : Fix playbook issue" | |
| echo "" | |
| echo "Valid ticket IDs are:" | |
| printf "%s\n" "${VALID_TICKET_IDS[@]}" | |
| return 1 | |
| fi | |
| # Check for duplicate ticket IDs | |
| declare -A ticket_count=() | |
| local duplicates=() | |
| for ticket in "${tickets[@]}"; do | |
| if [ -n "${ticket_count[$ticket]}" ]; then | |
| duplicates+=("$ticket") | |
| fi | |
| ticket_count["$ticket"]=1 | |
| done | |
| if [ "${#duplicates[@]}" -ne 0 ]; then | |
| echo "ERROR: Duplicate ticket ID(s) found in $field_name: ${duplicates[*]}" | |
| echo "Each ticket ID should appear only once." | |
| echo "Example (single): RDKEMW-123 : Fix playbook issue" | |
| echo "Example (multiple): RDKEMW-123, RDKDEV-45 : Fix playbook issue" | |
| return 1 | |
| fi | |
| # Check if extracted ticket IDs are in the valid list | |
| declare -A invalid_prefix_set=() | |
| declare -A invalid_token_set=() | |
| for ticket in "${tickets[@]}"; do | |
| local ticket_prefix="${ticket%%-*}" | |
| local valid=false | |
| for valid_id in "${VALID_TICKET_IDS[@]}"; do | |
| if [ "$ticket_prefix" = "$valid_id" ]; then | |
| valid=true | |
| break | |
| fi | |
| done | |
| if [ "$valid" = false ]; then | |
| invalid_prefix_set["$ticket_prefix"]=1 | |
| invalid_token_set["$ticket"]=1 | |
| fi | |
| done | |
| if [ "${#invalid_prefix_set[@]}" -ne 0 ]; then | |
| local invalid_prefixes=("${!invalid_prefix_set[@]}") | |
| local invalid_tokens=("${!invalid_token_set[@]}") | |
| echo "ERROR: Invalid ticket ID(s) in $field_name: ${invalid_prefixes[*]}" | |
| echo "Invalid ticket token(s): ${invalid_tokens[*]}" | |
| echo "" | |
| echo "Valid ticket IDs are:" | |
| printf "%s\n" "${VALID_TICKET_IDS[@]}" | |
| echo "" | |
| echo "Your $field_name should start with one of the above ticket IDs followed by a number." | |
| echo "Example (single): RDKEMW-123 : Fix playbook issue" | |
| echo "Example (multiple): RDKEMW-123, RDKDEV-45 : Fix playbook issue" | |
| return 1 | |
| fi | |
| echo "$field_name validation passed! Ticket ID(s): ${tickets[*]}" | |
| return 0 | |
| } | |
| # Validate PR Title (always required) | |
| echo "=== Validating PR Title ===" | |
| if ! validate_ticket "$PR_TITLE" "PR title"; then | |
| echo "" | |
| echo "VALIDATION FAILED: PR title must contain a valid ticket ID from the approved list: ${VALID_TICKET_IDS[@]}" | |
| exit 1 | |
| fi | |
| echo "" | |
| echo "=== PR Title Validation PASSED ===" | |
| echo "Ticket ID found in PR title." | |
| echo "" | |
| echo "ALL VALIDATIONS PASSED! PR title contains a valid ticket ID." |