-
Notifications
You must be signed in to change notification settings - Fork 0
137 lines (121 loc) · 5.44 KB
/
upvote.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/bin/bash
name: Upvote
# The jobs in this file are triggered on either a PR or sheduled
on:
pull_request_target:
types: [labeled]
schedule:
- cron: '* * * * *'
jobs:
# First job: Triggered on a PR to the repository listed on line 16
new_issue:
if: github.repository == '${{ github.event.inputs.repository }}'
runs-on: ubuntu-latest
name: Create an issue if none exists
outputs:
output1: ${{ steps.issue.outputs.number }}
output2: ${{ steps.fc.outputs.comment-id}}
steps:
- uses: actions/checkout@v2
# An issue is created if none exists
- name: Create issue
uses: JasonEtco/create-an-issue@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
update_existing: true
id: issue
# Looks for the first comment, the "Top-list"
- name: Find Comment
uses: peter-evans/[email protected]
id: fc
with:
token: ${{ secrets.GITHUB_TOKEN }}
repository: ${{github.repository}}
issue-number: ${{ steps.issue.outputs.number }}
body-includes: Toplist (Updated every 5 min)
# Second job: Triggered on a PR labeled with 'Upvote - Course Automation'
first_comment:
needs: new_issue
# The "Top-list" is created if there is no first comment
if: needs.new_issue.outputs.output2 == 0 && github.event.label.name == '${{ github.event.inputs.label }}'
runs-on: ubuntu-latest
name: Create first comment
steps:
- uses: actions/checkout@v2
- uses: peter-evans/create-or-update-comment@v1
with:
issue-number: ${{ needs.new_issue.outputs.output1 }}
body: |
Toplist (Updated every 5 min)
# Third job: Triggered on a PR labeled with 'Upvote - Course Automation'
other_comments:
needs: new_issue
if: github.event_name != 'schedule' && github.event.label.name == '${{ github.event.inputs.label }}'
runs-on: ubuntu-latest
# Creates a comment in the issue thread including the title of the PR, a link to the PR and a link to the repository
name: Create comment
steps:
- uses: peter-evans/create-or-update-comment@v1
with:
issue-number: ${{ needs.new_issue.outputs.output1}}
body: |
Title of pull request: ${{ github.event.pull_request.title }}
Link to pull request: ${{ github.event.pull_request.html_url }}
You can view the repository [here](https://github.com/${{github.event.pull_request.head.repo.full_name}}/tree/${{ github.head_ref }})
# Creates a comment on the PR, with a link to the issue-thread
- name: Comment on PR
uses: thollander/actions-comment-pull-request@master
with:
message: 'A comment has been added to the following thread: #${{ needs.new_issue.outputs.output1 }}. People can now upvote your project!'
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Fourth job: Scheduled to run
update_comment:
needs: new_issue
if: ${{github.event_name == 'schedule'}}
runs-on: ubuntu-latest
# Updates the table with information that is accquired by looping through the comments and listing the comments with 1 or more upvotes
name: Update table every 5 minutes
steps:
- name: Test json echo
id: commentid
run: |
curl -s https://api.github.com/repos/${{github.repository}}/issues/${{ needs.new_issue.outputs.output1}}/comments | jq -c '.[].id' | while read id ; do
echo -e ${id}:$( curl -s -H "Accept: application/vnd.github.squirrel-girl-preview+json" https://api.github.com/repos/${{github.repository}}/issues/comments/${id}/reactions | jq 'map(select(.content=="+1"))' | jq length):title:$(curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/${{github.repository}}/issues/comments/${id} | jq '.body' | sed -n '1p' | cut -d: -f1-2 ) >> output.txt
done
- run: |
while read t; do
a=$(echo $t | cut -d':' -f2)
if [ $a -ne 0 ]
then
b=$(echo $t | cut -d':' -f1)
c=$(echo $t | cut -d':' -f3)
d=$(echo $t | cut -d':' -f5)
f=$(echo $t | cut -d':' -f4 | cut -c 2-)
echo ${b} ${c} ${d} ${a} $f
e=" | [${d}](https://github.com/${{ github.repository }}/issues/${{ needs.new_issue.outputs.output1}}#issuecomment-${b})"
if [[ ${f} == "Title of pull request" ]]
then
echo ${a} ${e} >> result.txt
fi
fi
done < output.txt
# Sorts the "Top-list"-table in descending order and insert to textfile
sort -k1,1nr -k2,2 result.txt >> resultSorted.txt
# Reads result from textfile
- name: Read result
id: package
uses: juliangruber/read-file-action@v1
with:
path: ./resultSorted.txt
# Updates the "Top-list with a table containing the outputs given when reading the result"
- name: Update first comment ("Top-list")
uses: peter-evans/create-or-update-comment@v1
with:
comment-id: ${{ needs.new_issue.outputs.output2 }}
body: |
Toplist (Updated every 5 min):
Points | Title
------------ | -------------
${{ steps.package.outputs.content }}
edit-mode: replace