From c697fc991d7e7b3faf7a78d83d4317ea15798fe3 Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Wed, 13 Nov 2024 00:19:05 +0530 Subject: [PATCH 1/6] build: do not close tracking issues --- .../scripts/generate_pr_commit_message | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/scripts/generate_pr_commit_message b/.github/workflows/scripts/generate_pr_commit_message index d8b06680adaf..ebf902e0d919 100755 --- a/.github/workflows/scripts/generate_pr_commit_message +++ b/.github/workflows/scripts/generate_pr_commit_message @@ -227,12 +227,18 @@ main() { keywords_pattern=$(IFS='|'; echo "${closing_keywords[*]}") for issue in $issue_numbers; do - if echo "$pr_body" | grep -Eiq "(${keywords_pattern})([[:space:]]+|:)[[:space:]]*#${issue}\b"; then - closes_issues+="Closes: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" - else - ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" - fi - done + issue_details=$(github_api "GET" "/repos/$REPO_OWNER/$REPO_NAME/issues/$issue") + issue_title=$(echo "$issue_details" | jq -r '.title') + issue_labels=$(echo "$issue_details" | jq -r '.labels[].name') + + if echo "$issue_title" | grep -q "(tracking issue)" || echo "$issue_labels" | grep -q "Tracking Issue"; then + ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" + elif echo "$pr_body" | grep -Eiq "(${keywords_pattern})([[:space:]]+|:)[[:space:]]*#${issue}\b"; then + closes_issues+="Closes: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" + else + ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" + fi + done closes_issues=$(echo -e "$closes_issues" | sed '$ s/\n$//') ref_issues=$(echo -e "$ref_issues" | sed '$ s/\n$//') From 02c4234160a973419a052f51e53b578d9a7a1d2a Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Wed, 13 Nov 2024 00:22:34 +0530 Subject: [PATCH 2/6] style: fix indentation --- .../scripts/generate_pr_commit_message | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/scripts/generate_pr_commit_message b/.github/workflows/scripts/generate_pr_commit_message index ebf902e0d919..269d5c135ec8 100755 --- a/.github/workflows/scripts/generate_pr_commit_message +++ b/.github/workflows/scripts/generate_pr_commit_message @@ -227,18 +227,18 @@ main() { keywords_pattern=$(IFS='|'; echo "${closing_keywords[*]}") for issue in $issue_numbers; do - issue_details=$(github_api "GET" "/repos/$REPO_OWNER/$REPO_NAME/issues/$issue") - issue_title=$(echo "$issue_details" | jq -r '.title') - issue_labels=$(echo "$issue_details" | jq -r '.labels[].name') - - if echo "$issue_title" | grep -q "(tracking issue)" || echo "$issue_labels" | grep -q "Tracking Issue"; then - ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" - elif echo "$pr_body" | grep -Eiq "(${keywords_pattern})([[:space:]]+|:)[[:space:]]*#${issue}\b"; then - closes_issues+="Closes: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" - else - ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" - fi - done + issue_details=$(github_api "GET" "/repos/$REPO_OWNER/$REPO_NAME/issues/$issue") + issue_title=$(echo "$issue_details" | jq -r '.title') + issue_labels=$(echo "$issue_details" | jq -r '.labels[].name') + + if echo "$issue_title" | grep -q "(tracking issue)" || echo "$issue_labels" | grep -q "Tracking Issue"; then + ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" + elif echo "$pr_body" | grep -Eiq "(${keywords_pattern})([[:space:]]+|:)[[:space:]]*#${issue}\b"; then + closes_issues+="Closes: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" + else + ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" + fi + done closes_issues=$(echo -e "$closes_issues" | sed '$ s/\n$//') ref_issues=$(echo -e "$ref_issues" | sed '$ s/\n$//') From 2089a5cfa8e185b247ff81588f5eca6825530c1f Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Wed, 13 Nov 2024 00:27:59 +0530 Subject: [PATCH 3/6] docs: add comments --- .github/workflows/scripts/generate_pr_commit_message | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/scripts/generate_pr_commit_message b/.github/workflows/scripts/generate_pr_commit_message index 269d5c135ec8..06689deadf48 100755 --- a/.github/workflows/scripts/generate_pr_commit_message +++ b/.github/workflows/scripts/generate_pr_commit_message @@ -227,10 +227,12 @@ main() { keywords_pattern=$(IFS='|'; echo "${closing_keywords[*]}") for issue in $issue_numbers; do + # Fetch issue details: issue_details=$(github_api "GET" "/repos/$REPO_OWNER/$REPO_NAME/issues/$issue") issue_title=$(echo "$issue_details" | jq -r '.title') issue_labels=$(echo "$issue_details" | jq -r '.labels[].name') + # Check if the issue is a tracking issue: if echo "$issue_title" | grep -q "(tracking issue)" || echo "$issue_labels" | grep -q "Tracking Issue"; then ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" elif echo "$pr_body" | grep -Eiq "(${keywords_pattern})([[:space:]]+|:)[[:space:]]*#${issue}\b"; then From c6706545d1ca8b5304f85f502646a7e9a0e29798 Mon Sep 17 00:00:00 2001 From: GUNJ JOSHI Date: Wed, 13 Nov 2024 09:55:44 +0530 Subject: [PATCH 4/6] build: use only label, add a comment for reviewer --- .../scripts/generate_pr_commit_message | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/.github/workflows/scripts/generate_pr_commit_message b/.github/workflows/scripts/generate_pr_commit_message index 06689deadf48..d9e756ec7131 100755 --- a/.github/workflows/scripts/generate_pr_commit_message +++ b/.github/workflows/scripts/generate_pr_commit_message @@ -226,17 +226,19 @@ main() { # Create a regex pattern from the keywords: keywords_pattern=$(IFS='|'; echo "${closing_keywords[*]}") + tracking_issue_comment="" for issue in $issue_numbers; do - # Fetch issue details: + # Fetch issue details to check for tracking issue label issue_details=$(github_api "GET" "/repos/$REPO_OWNER/$REPO_NAME/issues/$issue") - issue_title=$(echo "$issue_details" | jq -r '.title') - issue_labels=$(echo "$issue_details" | jq -r '.labels[].name') + is_tracking=$(echo "$issue_details" | jq -r '.labels[].name' | grep -q "Tracking Issue" && echo "true" || echo "false") - # Check if the issue is a tracking issue: - if echo "$issue_title" | grep -q "(tracking issue)" || echo "$issue_labels" | grep -q "Tracking Issue"; then - ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" - elif echo "$pr_body" | grep -Eiq "(${keywords_pattern})([[:space:]]+|:)[[:space:]]*#${issue}\b"; then + if echo "$pr_body" | grep -Eiq "(${keywords_pattern})([[:space:]]+|:)[[:space:]]*#${issue}\b"; then closes_issues+="Closes: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" + + # Add comment if it's a tracking issue + if [ "$is_tracking" = "true" ]; then + tracking_issue_comment+="This is a tracking issue. Please Modify the OP, if required." + fi else ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" fi @@ -254,7 +256,6 @@ main() { if [ -n "$ref_issues" ]; then commit_body+="\n$ref_issues" fi - commit_body+="\n" if [ -n "$all_co_authors" ]; then commit_body+="\n$all_co_authors" fi @@ -268,6 +269,10 @@ main() { commit_body+="\n$signed_off_bys" fi + if [ -n "$tracking_issue_comment" ]; then + commit_body+="\n$tracking_issue_comment" + fi + # Combine subject and body: commit_message="$commit_subject\n\n$commit_body" From 8a368b71678af61fe6877c95e1a499d684d7b91f Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Wed, 27 Nov 2024 22:09:45 -0500 Subject: [PATCH 5/6] build: refactor such that note is not added to commit message but GitHub comment --- .../workflows/generate_pr_commit_message.yml | 13 +++++++ .../scripts/generate_pr_commit_message | 34 +++++++++++-------- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/.github/workflows/generate_pr_commit_message.yml b/.github/workflows/generate_pr_commit_message.yml index 51a6b53c9708..c77c5b285c17 100644 --- a/.github/workflows/generate_pr_commit_message.yml +++ b/.github/workflows/generate_pr_commit_message.yml @@ -70,10 +70,21 @@ jobs: id: commit_message run: | COMMIT_MESSAGE=$($GITHUB_WORKSPACE/.github/workflows/scripts/generate_pr_commit_message $PR_NUMBER) + EXIT_CODE=$? + echo "commit_message<> $GITHUB_OUTPUT echo "$COMMIT_MESSAGE" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT + if [ $EXIT_CODE -eq 200 ]; then + echo "has_tracking_issue=true" >> $GITHUB_OUTPUT + else + echo "has_tracking_issue=false" >> $GITHUB_OUTPUT + fi + + # Ensure the script itself doesn't fail the workflow: + exit 0 + # Post commit message as PR comment: - name: 'Post commit message as PR comment' uses: peter-evans/create-or-update-comment@v4 @@ -88,3 +99,5 @@ jobs: ``` *Please review the above commit message and make any necessary adjustments.* + + ${{ steps.commit_message.outputs.has_tracking_issue == 'true' && '⚠️ **Action Required**: This PR contains tracking issues. Please update the PR description to replace any "Closes", "Fixes", or "Resolves" keywords with "Ref" when referencing these issues.' || '' }} diff --git a/.github/workflows/scripts/generate_pr_commit_message b/.github/workflows/scripts/generate_pr_commit_message index d9e756ec7131..8afb954f8000 100755 --- a/.github/workflows/scripts/generate_pr_commit_message +++ b/.github/workflows/scripts/generate_pr_commit_message @@ -45,6 +45,11 @@ GITHUB_API_URL="https://api.github.com" REPO_OWNER="stdlib-js" REPO_NAME="stdlib" +# Exit codes +SUCCESS=0 +ERROR=1 +TRACKING_ISSUE_FOUND=200 + # FUNCTIONS # @@ -126,12 +131,12 @@ github_api() { else # Handle cases where POST data is required but not provided: echo "POST request requires data." - on_error 1 + on_error $ERROR fi ;; *) echo "Invalid HTTP method: $method" - on_error 1 + on_error $ERROR ;; esac } @@ -226,19 +231,18 @@ main() { # Create a regex pattern from the keywords: keywords_pattern=$(IFS='|'; echo "${closing_keywords[*]}") - tracking_issue_comment="" + FOUND_TRACKING_ISSUE=$SUCCESS for issue in $issue_numbers; do - # Fetch issue details to check for tracking issue label + # Fetch issue labels: issue_details=$(github_api "GET" "/repos/$REPO_OWNER/$REPO_NAME/issues/$issue") - is_tracking=$(echo "$issue_details" | jq -r '.labels[].name' | grep -q "Tracking Issue" && echo "true" || echo "false") + issue_labels=$(echo "$issue_details" | jq -r '.labels[].name') - if echo "$pr_body" | grep -Eiq "(${keywords_pattern})([[:space:]]+|:)[[:space:]]*#${issue}\b"; then + # Check if the issue is a tracking issue: + if echo "$issue_labels" | grep -q "Tracking Issue"; then + FOUND_TRACKING_ISSUE=$TRACKING_ISSUE_FOUND + ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" + elif echo "$pr_body" | grep -Eiq "(${keywords_pattern})([[:space:]]+|:)[[:space:]]*#${issue}\b"; then closes_issues+="Closes: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" - - # Add comment if it's a tracking issue - if [ "$is_tracking" = "true" ]; then - tracking_issue_comment+="This is a tracking issue. Please Modify the OP, if required." - fi else ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" fi @@ -256,6 +260,7 @@ main() { if [ -n "$ref_issues" ]; then commit_body+="\n$ref_issues" fi + commit_body+="\n" if [ -n "$all_co_authors" ]; then commit_body+="\n$all_co_authors" fi @@ -269,15 +274,14 @@ main() { commit_body+="\n$signed_off_bys" fi - if [ -n "$tracking_issue_comment" ]; then - commit_body+="\n$tracking_issue_comment" - fi - # Combine subject and body: commit_message="$commit_subject\n\n$commit_body" # Output the commit message: echo -e "$commit_message" + + # Return exit code based on tracking issue presence: + return $FOUND_TRACKING_ISSUE } # Call main with all command-line arguments: From 8768d3d32d9803a0f5f842469838baee1a600c74 Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Wed, 27 Nov 2024 22:15:32 -0500 Subject: [PATCH 6/6] chore: rename variable and tweak note --- .github/workflows/generate_pr_commit_message.yml | 2 +- .github/workflows/scripts/generate_pr_commit_message | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/generate_pr_commit_message.yml b/.github/workflows/generate_pr_commit_message.yml index c77c5b285c17..c639ddc15699 100644 --- a/.github/workflows/generate_pr_commit_message.yml +++ b/.github/workflows/generate_pr_commit_message.yml @@ -100,4 +100,4 @@ jobs: *Please review the above commit message and make any necessary adjustments.* - ${{ steps.commit_message.outputs.has_tracking_issue == 'true' && '⚠️ **Action Required**: This PR contains tracking issues. Please update the PR description to replace any "Closes", "Fixes", or "Resolves" keywords with "Ref" when referencing these issues.' || '' }} + ${{ steps.commit_message.outputs.has_tracking_issue == 'true' && '⚠️ **Action Required**: This PR references tracking issues. Please update the PR description to replace any "Closes", "Fixes", or "Resolves" keywords with "Ref" when referencing these issues.' || '' }} diff --git a/.github/workflows/scripts/generate_pr_commit_message b/.github/workflows/scripts/generate_pr_commit_message index 8afb954f8000..3c60608d1275 100755 --- a/.github/workflows/scripts/generate_pr_commit_message +++ b/.github/workflows/scripts/generate_pr_commit_message @@ -231,7 +231,7 @@ main() { # Create a regex pattern from the keywords: keywords_pattern=$(IFS='|'; echo "${closing_keywords[*]}") - FOUND_TRACKING_ISSUE=$SUCCESS + EXIT_CODE=$SUCCESS for issue in $issue_numbers; do # Fetch issue labels: issue_details=$(github_api "GET" "/repos/$REPO_OWNER/$REPO_NAME/issues/$issue") @@ -239,7 +239,7 @@ main() { # Check if the issue is a tracking issue: if echo "$issue_labels" | grep -q "Tracking Issue"; then - FOUND_TRACKING_ISSUE=$TRACKING_ISSUE_FOUND + EXIT_CODE=$TRACKING_ISSUE_FOUND ref_issues+="Ref: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" elif echo "$pr_body" | grep -Eiq "(${keywords_pattern})([[:space:]]+|:)[[:space:]]*#${issue}\b"; then closes_issues+="Closes: https://github.com/$REPO_OWNER/$REPO_NAME/issues/$issue\n" @@ -280,8 +280,8 @@ main() { # Output the commit message: echo -e "$commit_message" - # Return exit code based on tracking issue presence: - return $FOUND_TRACKING_ISSUE + # Return successful exit code (200 if a tracking issue was found, 0 otherwise): + return $EXIT_CODE } # Call main with all command-line arguments: