mirror of
https://github.com/mshick/add-pr-comment.git
synced 2025-12-31 14:20:32 +11:00
ci: adding simple workflow
This commit is contained in:
parent
81c7cad365
commit
c03114a108
7 changed files with 175 additions and 11 deletions
|
|
@ -1,2 +1,3 @@
|
||||||
*.js
|
*.js
|
||||||
|
*.txt
|
||||||
!/.github
|
!/.github
|
||||||
|
|
|
||||||
30
.github/workflows/ci.yml
vendored
Normal file
30
.github/workflows/ci.yml
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup node.js
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: '12.x'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
npm ci
|
||||||
|
|
||||||
|
- name: Lint code
|
||||||
|
run: |
|
||||||
|
npm run lint
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: |
|
||||||
|
npm test
|
||||||
|
|
@ -1,18 +1,33 @@
|
||||||
|
import * as fs from 'fs'
|
||||||
|
import * as path from 'path'
|
||||||
import * as core from '@actions/core'
|
import * as core from '@actions/core'
|
||||||
import * as github from '@actions/github'
|
import * as github from '@actions/github'
|
||||||
import {WebhookPayload} from '@actions/github/lib/interfaces'
|
import {WebhookPayload} from '@actions/github/lib/interfaces'
|
||||||
|
import nock from 'nock'
|
||||||
import run from '../add-pr-comment'
|
import run from '../add-pr-comment'
|
||||||
|
|
||||||
|
const repoFullName = 'foo/bar'
|
||||||
|
const repoToken = '12345'
|
||||||
|
const simpleMessage = 'hello world'
|
||||||
|
const multilineMessage = fs.readFileSync(path.resolve(__dirname, './message-windows.txt')).toString()
|
||||||
|
const multilineMessageWindows = fs.readFileSync(path.resolve(__dirname, './message-windows.txt')).toString()
|
||||||
|
|
||||||
|
const inputs = {
|
||||||
|
message: '',
|
||||||
|
'repo-token': '',
|
||||||
|
'allow-repeats': 'false',
|
||||||
|
}
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules()
|
jest.resetModules()
|
||||||
jest.spyOn(core, 'getInput').mockImplementation((name: string): string => {
|
jest.spyOn(core, 'getInput').mockImplementation((name: string): string => {
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case 'message':
|
case 'message':
|
||||||
return 'hello world'
|
return inputs.message
|
||||||
case 'repo-token':
|
case 'repo-token':
|
||||||
return '12345'
|
return inputs['repo-token']
|
||||||
case 'allow-repeats':
|
case 'allow-repeats':
|
||||||
return 'false'
|
return inputs['allow-repeats']
|
||||||
default:
|
default:
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
|
|
@ -20,22 +35,107 @@ beforeEach(() => {
|
||||||
|
|
||||||
// https://developer.github.com/webhooks/event-payloads/#issues
|
// https://developer.github.com/webhooks/event-payloads/#issues
|
||||||
github.context.payload = {
|
github.context.payload = {
|
||||||
action: 'created',
|
pull_request: {
|
||||||
issue: {
|
|
||||||
number: 1,
|
number: 1,
|
||||||
},
|
},
|
||||||
comment: {
|
repository: {
|
||||||
id: 1,
|
full_name: repoFullName,
|
||||||
user: {
|
name: 'bar',
|
||||||
login: 'monalisa',
|
owner: {
|
||||||
|
login: 'bar',
|
||||||
},
|
},
|
||||||
body: 'Honk',
|
|
||||||
},
|
},
|
||||||
|
sha: 'abc123',
|
||||||
} as WebhookPayload
|
} as WebhookPayload
|
||||||
})
|
})
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
jest.restoreAllMocks()
|
||||||
|
expect(nock.pendingMocks()).toEqual([])
|
||||||
|
nock.isDone()
|
||||||
|
nock.cleanAll()
|
||||||
|
})
|
||||||
|
|
||||||
describe('add-pr-comment action', () => {
|
describe('add-pr-comment action', () => {
|
||||||
it('runs', async () => {
|
it('creates a comment', async () => {
|
||||||
|
inputs.message = simpleMessage
|
||||||
|
inputs['repo-token'] = repoToken
|
||||||
|
inputs['allow-repeats'] = 'true'
|
||||||
|
|
||||||
|
const originalSetOutput = core.setOutput
|
||||||
|
|
||||||
|
jest.spyOn(core, 'setOutput').mockImplementation((key: string, value: string): void => {
|
||||||
|
if (key === 'comment-created') {
|
||||||
|
expect(value).toBe('true')
|
||||||
|
}
|
||||||
|
|
||||||
|
return originalSetOutput(key, value)
|
||||||
|
})
|
||||||
|
|
||||||
|
nock('https://api.github.com')
|
||||||
|
.post(`/repos/${repoFullName}/issues/1/comments`, ({body}) => body === simpleMessage)
|
||||||
|
.reply(200, {
|
||||||
|
url: 'https://github.com/#example',
|
||||||
|
})
|
||||||
|
|
||||||
await expect(run()).resolves.not.toThrow()
|
await expect(run()).resolves.not.toThrow()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('identifies repeat messages and does not create a comment', async () => {
|
||||||
|
inputs.message = simpleMessage
|
||||||
|
inputs['repo-token'] = repoToken
|
||||||
|
inputs['allow-repeats'] = 'false'
|
||||||
|
|
||||||
|
const originalSetOutput = core.setOutput
|
||||||
|
|
||||||
|
jest.spyOn(core, 'setOutput').mockImplementation((key: string, value: string): void => {
|
||||||
|
if (key === 'comment-created') {
|
||||||
|
expect(value).toBe('false')
|
||||||
|
}
|
||||||
|
|
||||||
|
return originalSetOutput(key, value)
|
||||||
|
})
|
||||||
|
|
||||||
|
nock('https://api.github.com')
|
||||||
|
.get(`/repos/${repoFullName}/issues/1/comments`)
|
||||||
|
.reply(200, [
|
||||||
|
{
|
||||||
|
body: simpleMessage,
|
||||||
|
user: {
|
||||||
|
login: 'github-actions[bot]',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
|
await run()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('matches multiline messages with windows line feeds against api responses with unix linefeeds', async () => {
|
||||||
|
inputs.message = multilineMessageWindows
|
||||||
|
inputs['repo-token'] = repoToken
|
||||||
|
inputs['allow-repeats'] = 'false'
|
||||||
|
|
||||||
|
const originalSetOutput = core.setOutput
|
||||||
|
|
||||||
|
jest.spyOn(core, 'setOutput').mockImplementation((key: string, value: string): void => {
|
||||||
|
if (key === 'comment-created') {
|
||||||
|
expect(value).toBe('false')
|
||||||
|
}
|
||||||
|
|
||||||
|
return originalSetOutput(key, value)
|
||||||
|
})
|
||||||
|
|
||||||
|
nock('https://api.github.com')
|
||||||
|
.get(`/repos/${repoFullName}/issues/1/comments`)
|
||||||
|
.reply(200, [
|
||||||
|
{
|
||||||
|
body: multilineMessage,
|
||||||
|
user: {
|
||||||
|
login: 'github-actions[bot]',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
|
await run()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
7
__tests__/message-windows.txt
Normal file
7
__tests__/message-windows.txt
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
## [Preview link](https://antares-blog-staging-pr-${{ github.event.number }}.azurewebsites.net)
|
||||||
|
|
||||||
|
- Your changes have been deployed to the preview site. The preview site will update as you add more commits to this branch.
|
||||||
|
- The preview site shows any future-dated articles. Don't worry, if you are publishing a future-dated article, it will not show on the production site until the file's specified date.
|
||||||
|
- The preview link is shareable, but will be deleted when the pull request is merged or closed.
|
||||||
|
|
||||||
|
> *This is an automated message.*
|
||||||
7
__tests__/message.txt
Normal file
7
__tests__/message.txt
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
## [Preview link](https://antares-blog-staging-pr-${{ github.event.number }}.azurewebsites.net)
|
||||||
|
|
||||||
|
- Your changes have been deployed to the preview site. The preview site will update as you add more commits to this branch.
|
||||||
|
- The preview site shows any future-dated articles. Don't worry, if you are publishing a future-dated article, it will not show on the production site until the file's specified date.
|
||||||
|
- The preview link is shareable, but will be deleted when the pull request is merged or closed.
|
||||||
|
|
||||||
|
> *This is an automated message.*
|
||||||
18
package-lock.json
generated
18
package-lock.json
generated
|
|
@ -3976,6 +3976,18 @@
|
||||||
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
|
||||||
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
|
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
|
||||||
},
|
},
|
||||||
|
"nock": {
|
||||||
|
"version": "12.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/nock/-/nock-12.0.3.tgz",
|
||||||
|
"integrity": "sha512-QNb/j8kbFnKCiyqi9C5DD0jH/FubFGj5rt9NQFONXwQm3IPB0CULECg/eS3AU1KgZb/6SwUa4/DTRKhVxkGABw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "^4.1.0",
|
||||||
|
"json-stringify-safe": "^5.0.1",
|
||||||
|
"lodash": "^4.17.13",
|
||||||
|
"propagate": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node-fetch": {
|
"node-fetch": {
|
||||||
"version": "2.6.0",
|
"version": "2.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
|
||||||
|
|
@ -4352,6 +4364,12 @@
|
||||||
"sisteransi": "^1.0.4"
|
"sisteransi": "^1.0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"propagate": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"psl": {
|
"psl": {
|
||||||
"version": "1.8.0",
|
"version": "1.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@
|
||||||
"eslint-config-prettier": "^6.10.1",
|
"eslint-config-prettier": "^6.10.1",
|
||||||
"eslint-plugin-prettier": "^3.1.2",
|
"eslint-plugin-prettier": "^3.1.2",
|
||||||
"jest": "^25.3.0",
|
"jest": "^25.3.0",
|
||||||
|
"nock": "^12.0.3",
|
||||||
"prettier": "^2.0.4",
|
"prettier": "^2.0.4",
|
||||||
"ts-jest": "^25.3.1",
|
"ts-jest": "^25.3.1",
|
||||||
"typescript": "^3.8.3"
|
"typescript": "^3.8.3"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue