From f0ab8a631aeaa4cb458d55f25313080416adf43e Mon Sep 17 00:00:00 2001 From: Marc Hoersken Date: Sat, 23 Oct 2021 21:30:03 +0200 Subject: [PATCH] github: add support for Hacktoberfest using labels Automatically add hacktoberfest-accepted label to PRs opened between September 30th and November 1st once a commit with a close reference to it is pushed onto the master branch. With this workflow we can participate in Hacktoberfest while not relying on GitHub to identify PRs as merged due to our rebasing. Requires hacktoberfest-accepted labels to exist for PRs on the participating repository. Also requires hacktoberfest topic on the participating repository to avoid applying to forked repos. Reviewed-by: Daniel Stenberg Fixes #7865 Closes #7897 --- .github/workflows/hacktoberfest-accepted.yml | 53 ++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 .github/workflows/hacktoberfest-accepted.yml diff --git a/.github/workflows/hacktoberfest-accepted.yml b/.github/workflows/hacktoberfest-accepted.yml new file mode 100644 index 0000000000..0ab7969c1f --- /dev/null +++ b/.github/workflows/hacktoberfest-accepted.yml @@ -0,0 +1,53 @@ +name: Hacktoberfest + +on: + # run for all pushes to master branch + push: + branches: + - master + +jobs: + # add hacktoberfest-accepted label to PRs opened starting from September 30th + # till November 1st which are closed via commit reference from master branch. + merged: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 100 + + - name: Check wether repo participates in Hacktoberfest + run: | + gh config set prompt disabled && echo "::set-output name=label::$( + gh repo view --json repositoryTopics --jq '.repositoryTopics[].name' | grep '^hacktoberfest$')" + id: check + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Search relevant commit message lines starting with Closes/Merges + run: | + git log --format=email ${{ github.event.before }}..${{ github.event.after }} | \ + egrep -i "^Close[sd]? " | sort | uniq | tee log + if: steps.check.outputs.label == 'hacktoberfest' + + - name: Search for Number-based PR references + run: | + egrep -o "#([0-9]+)" log | cut -d# -f2 | sort | uniq | xargs -t -n1 -I{} \ + gh pr view {} --json number,createdAt \ + --jq '{number, opened: .createdAt} | [.number, .opened] | join(":")' | tee /dev/stderr | \ + egrep -o '^([0-9]+):[0-9]{4}-(09-30T|10-|11-01T)' | cut -d: -f1 | sort | uniq | xargs -t -n1 -I {} \ + gh pr edit {} --add-label 'hacktoberfest-accepted' + if: steps.check.outputs.label == 'hacktoberfest' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Search for URL-based PR references + run: | + egrep -o "github.com/(.+)/(.+)/pull/([0-9]+)" log | sort | uniq | xargs -t -n1 -I{} \ + gh pr view "https://{}" --json number,createdAt \ + --jq '{number, opened: .createdAt} | [.number, .opened] | join(":")' | tee /dev/stderr | \ + egrep -o '^([0-9]+):[0-9]{4}-(09-30T|10-|11-01T)' | cut -d: -f1 | sort | uniq | xargs -t -n1 -I {} \ + gh pr edit {} --add-label 'hacktoberfest-accepted' + if: steps.check.outputs.label == 'hacktoberfest' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -- 2.47.3