-
Notifications
You must be signed in to change notification settings - Fork 4
54 lines (46 loc) · 1.79 KB
/
signoff.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
on: issue_comment
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@0.3.0
if: github.event.action == 'created'
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const isValidSignOff = (
context.payload.action === 'created' &&
context.payload.issue.pull_request &&
context.payload.comment.user.id === context.payload.issue.user.id &&
context.payload.comment.body === '/signoff'
)
if (!isValidSignOff) return
const pr = await github.pulls.get({
...context.repo,
pull_number: context.payload.issue.number
})
const commits = await github.pulls.listCommits({
...context.repo,
pull_number: context.payload.issue.number
})
const baseCommit = await github.git.getCommit({
...context.repo,
commit_sha: pr.data.head.sha
})
const tree = await github.git.getTree({
...context.repo,
tree_sha: baseCommit.data.tree.sha
})
const commitLines = commits.data.map(item => `- ${item.sha.slice(0, 6)}: ${item.commit.message}`).join('\n')
const header = `I, @${context.payload.comment.user.login}, hereby signoff on these commits:`
const newCommit = await github.git.createCommit({
...context.repo,
message: `${header}\n\n${commitLines}`,
tree: tree.data.sha,
parents: [pr.data.head.sha]
})
await github.git.updateRef({
...context.repo,
ref: `heads/${pr.data.head.ref}`,
sha: newCommit.data.sha
})