diff --git a/.github/workflows/close-discussion.yml b/.github/workflows/close-discussion.yml index 252b7823..ac8086c5 100644 --- a/.github/workflows/close-discussion.yml +++ b/.github/workflows/close-discussion.yml @@ -8,31 +8,36 @@ jobs: closeDiscussion: runs-on: ubuntu-latest steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Check if PR was merged if: github.event.pull_request.merged == true run: echo "PR was merged" - - - name: Extract Discussion Number & Close If any Where Found + + - name: Extract Discussion Number & Close If any Were Found env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} if: github.event.pull_request.merged == true id: extract-discussion run: | - echo '${{ github.event.pull_request.body }}' > pr_body.txt + pr_body="${{ github.event.pull_request.body }}" + discussion_ids=$(echo "$pr_body" | jq -r 'scan("(?i)(resolve|fix|close)[s|d]? #[0-9]+")' | grep -o '#[0-9]*' | tr -d '#') + + if [ -z "$discussion_ids" ]; then + echo "No discussion IDs found." + exit 0 + fi - discussion_ids_arr=() - cat pr_body.txt | grep -i -Po '^\s*(-|\d+\.)?\s*(Resolve(s|d)?)\s*#\d+\s*$|^\s*(-|\d+\.)?\s*(Fix(es|ed)?)\s*#\d+\s*$|^\s*(-|\d+\.)?\s*(Close(s|d)?)\s*#\d+\s*$' | awk -F '#' '{print $2}' > discussion_ids_list.txt - while read -r line; do - discussion_ids_arr+=("$line") - done < discussion_ids_list.txt - - number_of_ids=${#discussion_ids_arr[@]} - for (( i=0; i<${number_of_ids}; i++ )); - do - discussion_id=${discussion_ids_arr[$i]} - echo "$discussion_id" - curl -X PATCH -H "Authorization: token $GITHUB_TOKEN" \ + for discussion_id in $discussion_ids; do + echo "Closing discussion #$discussion_id" + response=$(curl -s -o /dev/null -w "%{http_code}" -X PATCH -H "Authorization: token $GITHUB_TOKEN" \ -d '{"state": "closed"}' \ - 'https://api.github.com/repos/${{ github.repository }}/discussions/$discussion_id' + "https://api.github.com/repos/${{ github.repository }}/discussions/$discussion_id") + + if [ "$response" -ne 200 ]; then + echo "Failed to close discussion #$discussion_id. HTTP status code: $response" + exit 1 + fi done - shell: bash + shell: bash \ No newline at end of file