• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
2#
3# SPDX-License-Identifier: curl
4
5name: Hacktoberfest
6
7'on':
8  # this must not ever run on any other branch than master
9  push:
10    branches:
11      - master
12
13concurrency:
14  # this should not run in parallel, so just run one at a time
15  group: ${{ github.workflow }}
16
17permissions: {}
18
19jobs:
20  # add hacktoberfest-accepted label to PRs opened starting from September 30th
21  # till November 1st which are closed via commit reference from master branch.
22  merged:
23    runs-on: ubuntu-latest
24    permissions:
25      # requires issues AND pull-requests write permissions to edit labels on PRs!
26      issues: write
27      pull-requests: write
28    steps:
29      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
30        with:
31          persist-credentials: false
32          fetch-depth: 100
33
34      - name: Check whether repo participates in Hacktoberfest
35        run: |
36          gh config set prompt disabled && echo "label=$(
37            gh repo view --json repositoryTopics --jq '.repositoryTopics[].name' | grep '^hacktoberfest$')" >> $GITHUB_OUTPUT
38        id: check
39        env:
40          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41
42      - name: Search relevant commit message lines starting with Closes/Merges
43        run: |
44          git log --format=email '${{ github.event.before }}..${{ github.event.after }}' | \
45            grep -Ei '^Close[sd]? ' | sort | uniq | tee log
46        if: steps.check.outputs.label == 'hacktoberfest'
47
48      - name: Search for Number-based PR references
49        run: |
50          grep -Eo '#([0-9]+)' log | cut -d# -f2 | sort | uniq | xargs -t -n1 -I{} \
51            gh pr view {} --json number,createdAt \
52              --jq '{number, opened: .createdAt} | [.number, .opened] | join(":")' | tee /dev/stderr | \
53            grep -Eo '^([0-9]+):[0-9]{4}-(09-30T|10-|11-01T)' | cut -d: -f1 | sort | uniq | xargs -t -n1 -I {} \
54              gh pr edit {} --add-label 'hacktoberfest-accepted'
55        if: steps.check.outputs.label == 'hacktoberfest'
56        env:
57          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
58
59      - name: Search for URL-based PR references
60        run: |
61          grep -Eo 'github.com/(.+)/(.+)/pull/([0-9]+)' log | sort | uniq | xargs -t -n1 -I{} \
62            gh pr view 'https://{}' --json number,createdAt \
63              --jq '{number, opened: .createdAt} | [.number, .opened] | join(":")' | tee /dev/stderr | \
64            grep -Eo '^([0-9]+):[0-9]{4}-(09-30T|10-|11-01T)' | cut -d: -f1 | sort | uniq | xargs -t -n1 -I {} \
65              gh pr edit {} --add-label 'hacktoberfest-accepted'
66        if: steps.check.outputs.label == 'hacktoberfest'
67        env:
68          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
69