From 158fd281246b99b95024a3ab2cb00002e19db4a1 Mon Sep 17 00:00:00 2001 From: Chad Whitacre Date: Tue, 2 Feb 2021 14:26:15 -0500 Subject: [PATCH] meta(gha): Deploy action validate-new-issue.yml --- .github/workflows/validate-new-issue.yml | 70 +++++++++++++++--------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/.github/workflows/validate-new-issue.yml b/.github/workflows/validate-new-issue.yml index e6d56b46f36..b62d636b373 100644 --- a/.github/workflows/validate-new-issue.yml +++ b/.github/workflows/validate-new-issue.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: "Validate issue against templates" + - name: "Validate new issue" shell: bash env: GITHUB_TOKEN: ${{ github.token }} @@ -22,43 +22,59 @@ jobs: echo "${{ github.actor }} is not a member of the getsentry org. 🧐" fi - # Look for a template where all the headings are also in this issue. - # - extra headings in the issue are fine - # - order doesn't matter - # - case-sensitive tho - # - can't post a template unchanged (ignoring whitespace) + # Prep reasons for error message comment. + REASON="your issue does not properly use one of this repo's available issue templates" + REASON_EXACT_MATCH="you created an issue from a template without filling in anything" + REASON_EMPTY="you created an empty issue" + + # Definition of valid: + # - not empty (ignoring whitespace) + # - matches a template + # - all the headings are also in this issue + # - extra headings in the issue are fine + # - order doesn't matter + # - case-sensitive tho + # - not an *exact* match for a template (ignoring whitespace) function extract-headings { { sed 's/\r$//' "$1" | grep '^#' || echo -n ''; } | sort; } jq -r .issue.body "$GITHUB_EVENT_PATH" > issue - extract-headings <(cat issue) > headings-in-issue - for template in $(ls .github/ISSUE_TEMPLATE/*.md 2> /dev/null); do - # Strip front matter. https://stackoverflow.com/a/29292490/14946704 - sed -i'' '1{/^---$/!q;};1,/^---$/d' "$template" - extract-headings "$template" > headings-in-template - echo -n "$(basename $template)? " - if [ ! -s headings-in-template ]; then - echo "No headers in template. 🤷" - elif [ -z "$(comm -23 headings-in-template headings-in-issue)" ]; then - echo "Match! 👍 💃" - if diff -Bw "$template" issue > /dev/null; then - echo "... like, an /exact/ match. 😖" - break + if ! grep -q '[^[:space:]]' issue; then + REASON="${REASON_EMPTY}" + else + extract-headings <(cat issue) > headings-in-issue + for template in $(ls .github/ISSUE_TEMPLATE/*.md 2> /dev/null); do + # Strip front matter. https://stackoverflow.com/a/29292490/14946704 + sed -i'' '1{/^---$/!q;};1,/^---$/d' "$template" + extract-headings "$template" > headings-in-template + echo -n "$(basename $template)? " + if [ ! -s headings-in-template ]; then + echo "No headers in template. 🤷" + elif [ -z "$(comm -23 headings-in-template headings-in-issue)" ]; then + echo "Match! 👍 💃" + if diff -Bw "$template" issue > /dev/null; then + echo "... like, an /exact/ match. 😖" + REASON="${REASON_EXACT_MATCH}" + break + else + exit 0 + fi else - exit 0 + echo "No match. 👎" fi - else - echo "No match. 👎" - fi - done + done + fi - # Failed to find a match! Close the issue. + # Failed validation! Close the issue with a comment. cat << EOF > comment - Sorry, friend. As far as this ol' bot can tell, your issue does not use one of this repo's available issue templates. Please [try again using a template](https://github.com/${{ github.repository }}/issues/new/choose) so that we have the best chance of understanding and addressing your issue. (And if I'm confused, please [let us know](https://github.com/getsentry/.github/issues/new?title=template+enforcer+is+confused&body=${{ github.event.issue.html_url }}). 😬) + Sorry, friend. As far as this ol' bot can tell, ${REASON}. Please [try again](https://github.com/${{ github.repository }}/issues/new/choose), if you like. (And if I'm confused, please [let us know](https://github.com/getsentry/.github/issues/new?title=template+enforcer+is+confused&body=${{ github.event.issue.html_url }}). 😬) ---- - [![Did you see the memo about this?](https://user-images.githubusercontent.com/134455/104515469-e04a9c80-55c0-11eb-8e15-ffe9c0b8dd7f.gif)](https://www.youtube.com/watch?v=Fy3rjQGc6lA)" + [![Did you see the memo about this?](https://user-images.githubusercontent.com/134455/104515469-e04a9c80-55c0-11eb-8e15-ffe9c0b8dd7f.gif)](https://www.youtube.com/watch?v=Fy3rjQGc6lA) + + ([log](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})) EOF echo -n "Commented: " gh issue comment ${{ github.event.issue.number }} --body "$(cat comment)" gh issue close ${{ github.event.issue.number }} + echo "Closed with: \"${REASON}.\""