Skip to content

Commit

Permalink
Merge pull request #61 from devisscher/master
Browse files Browse the repository at this point in the history
feat(#42): add marker for stale PRs
  • Loading branch information
SeanReece authored May 19, 2022
2 parents dd99ef3 + 59d3a8c commit 2d3a7c1
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 12 deletions.
1 change: 1 addition & 0 deletions .github/workflows/pr-reporter-slack.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ jobs:
repo-token: ${{ secrets.GITHUB_TOKEN }}
slack-webhook: ${{ secrets.SLACK_WEBHOOK }}
notify-empty: 'false'
stale-pr: 15
exclude-labels: 'ignore'
40 changes: 40 additions & 0 deletions __tests__/__snapshots__/messages.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,43 @@ Object {
"username": "PR Reporter",
}
`;

exports[`stale PR 1`] = `
Object {
"blocks": Array [
Object {
"text": Object {
"text": "
*SeanReece/pr-reporter-slack* has 1 PRs ready for review",
"type": "mrkdwn",
},
"type": "section",
},
Object {
"type": "divider",
},
Object {
"text": Object {
"text": "
👉 <https://github.com/SeanReece/pr-reporter-slack/pull/9|Bump acorn from 5.7.3 to 5.7.4> | *1 approvals* | 🚨 6 days ago 🚨",
"type": "mrkdwn",
},
"type": "section",
},
Object {
"elements": Array [
Object {
"text": "You have *2* open PRs and *1* ready for review",
"type": "mrkdwn",
},
],
"type": "context",
},
Object {
"type": "divider",
},
],
"icon_emoji": ":rolled_up_newspaper:",
"username": "PR Reporter",
}
`;
34 changes: 27 additions & 7 deletions __tests__/messages.test.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import * as core from '@actions/core'
import { format } from 'timeago.js'
import { formatSinglePR, formatSlackMessage } from '../src/message'
import { PullRequest } from '../src/github'
import { set as setMockDate } from 'mockdate'

jest.mock('timeago.js')

beforeEach(() => {
(format as jest.Mock).mockImplementationOnce(() => '6 days ago')
jest.clearAllMocks()
setMockDate('2020-03-20T22:40:33Z') // need this semicolon?
;(format as jest.Mock).mockImplementationOnce(() => '6 days ago')
})

const mockPR: PullRequest = {
Expand Down Expand Up @@ -41,10 +43,10 @@ const mockPR: PullRequest = {
labels: {
nodes: [
{
name: 'stuff'
}
]
}
name: 'stuff',
},
],
},
}

test('formats single PR', () => {
Expand All @@ -54,6 +56,24 @@ test('formats single PR', () => {

test('formats slack message', () => {
const formattedPR = formatSinglePR(mockPR)
const formattedSlackMessage = formatSlackMessage('SeanReece/pr-reporter-slack', formattedPR, 2, 1)
const formattedSlackMessage = formatSlackMessage(
'SeanReece/pr-reporter-slack',
formattedPR,
2,
1,
)
expect(formattedSlackMessage).toMatchSnapshot()
})

test('stale PR', () => {
const stalePr = { ...mockPR, createdAt: '2020-03-01T22:40:33Z' }

const formattedPR = formatSinglePR(stalePr)
const formattedSlackMessage = formatSlackMessage(
'SeanReece/pr-reporter-slack',
formattedPR,
2,
1,
)
expect(formattedSlackMessage).toMatchSnapshot()
})
3 changes: 3 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ inputs:
default: 'true'
exclude-labels:
description: 'Comma seperated list of labels to exclude from PR reports'
stale-pr:
description: 'Should stale PR's be marked'
default: 15
runs:
using: 'node12'
main: 'dist/index.js'
Expand Down
11 changes: 11 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"@actions/core": "^1.2.0",
"@actions/github": "^2.0.0",
"axios": "^0.21.1",
"date-fns": "^2.15.0",
"timeago.js": "^4.0.1"
},
"devDependencies": {
Expand All @@ -41,6 +42,7 @@
"jest": "^24.9.0",
"jest-circus": "^24.9.0",
"js-yaml": "^3.13.1",
"mockdate": "^3.0.2",
"prettier": "^1.19.1",
"ts-jest": "^24.2.0",
"typescript": "^3.6.4"
Expand Down
24 changes: 19 additions & 5 deletions src/message.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
import { format } from 'timeago.js'
import * as core from '@actions/core'
import * as github from './github'

import { differenceInCalendarDays } from 'date-fns'
export interface BlockMessage {
username: string
icon_emoji: string
blocks: object[]
}

export function formatSinglePR(pr: github.PullRequest): string {
const stalePrDays: string = core.getInput('stale-pr') // Number of days before marking a PR as stale
if (stalePrDays > 0) stalePrDays = stalePrDays * -1
let status = ''
let stalePr: boolean

const createdAt = new Date(pr.createdAt)
if (differenceInCalendarDays(createdAt, Date.now()) <= (stalePrDays || -15)) {
stalePr = true
}
if (pr.reviews.totalCount === 0) {
status = '*No reviews*'
} else if (
Expand All @@ -20,10 +29,15 @@ export function formatSinglePR(pr: github.PullRequest): string {
} else {
status = `*${pr.reviews.totalCount} approvals*`
}
return `\n👉 <${pr.url}|${pr.title}> | ${status} | ${format(
pr.createdAt,
'en_US',
)}`

const dateString = (): string => {
if (stalePr) {
return `🚨 ${format(pr.createdAt, 'en_US')} 🚨`
}
return `${format(pr.createdAt, 'en_US')}`
}

return `\n👉 <${pr.url}|${pr.title}> | ${status} | ${dateString()}`
}

export function formatSlackMessage(
Expand Down

0 comments on commit 2d3a7c1

Please sign in to comment.