diff --git a/README.md b/README.md index b568bd2..655959f 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Add the Nitpicker action to your workflow and allow access to the `secrets.GITHU ```yaml steps: ... - - uses: mobile-actions/nitpicker@v1 + - uses: ethanis/nitpicker@v1 with: nitpicks: '.github/nitpicks.yml' token: '${{ secrets.GITHUB_TOKEN }}' diff --git a/__tests__/services/comments.test.ts b/__tests__/services/comments.test.ts new file mode 100644 index 0000000..09ea308 --- /dev/null +++ b/__tests__/services/comments.test.ts @@ -0,0 +1,21 @@ +import * as path from 'path'; +import { getCommentBody } from '../../src/services'; +import { Constants } from '../../src/constants'; + +test('read valid config file', () => { + const markdown = 'markdown'; + const files = ['package.json', 'src/services/comments.ts']; + const prNumber = 42; + const owner = 'foo'; + const repo = 'bar'; + + const expected = `markdown +-------------- +_Caused by:_ + - [package.json](https://github.com/foo/bar/pull/42/files#diff-b9cfc7f2cdf78a7f4b91a753d10865a2) + - [src/services/comments.ts](https://github.com/foo/bar/pull/42/files#diff-0ea10ba5bc61e4ecb7226e70bec7c02f)`; + + const commentBody = getCommentBody(markdown, files, prNumber, owner, repo); + + expect(commentBody).toEqual(expected); +}); diff --git a/package-lock.json b/package-lock.json index bfe32de..4421dd8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -753,9 +753,9 @@ "dev": true }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", + "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==", "dev": true }, "acorn-globals": { @@ -769,9 +769,9 @@ }, "dependencies": { "acorn": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", - "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true } } @@ -1812,14 +1812,6 @@ "acorn": "^7.1.0", "acorn-jsx": "^5.1.0", "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", - "dev": true - } } }, "esprima": { @@ -2831,15 +2823,30 @@ "dev": true }, "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", + "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", "dev": true, "requires": { + "minimist": "^1.2.5", "neo-async": "^2.6.0", - "optimist": "^0.6.1", "source-map": "^0.6.1", - "uglify-js": "^3.1.4" + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } } }, "har-schema": { @@ -3937,6 +3944,14 @@ "whatwg-url": "^6.4.1", "ws": "^5.2.0", "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + } } }, "jsesc": { @@ -4551,24 +4566,6 @@ "mimic-fn": "^2.1.0" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", @@ -6049,12 +6046,6 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", diff --git a/package.json b/package.json index 3eadcec..7620f76 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "typescript-action", + "name": "nitpicker", "version": "0.0.0", "private": true, - "description": "TypeScript template action", + "description": "Action to auto-comment", "main": "lib/main.js", "scripts": { "build": "tsc", @@ -13,14 +13,14 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/actions/typescript-action.git" + "url": "git+https://github.com/ethanis/nitpicker.git" }, "keywords": [ "actions", "node", "setup" ], - "author": "YourNameOrOrganization", + "author": "ethanis", "license": "MIT", "dependencies": { "@actions/core": "^1.2.4", diff --git a/src/services/comments.ts b/src/services/comments.ts index 29cf787..c510717 100644 --- a/src/services/comments.ts +++ b/src/services/comments.ts @@ -1,5 +1,6 @@ import * as github from '@actions/github'; import * as core from '@actions/core'; +import * as crypto from 'crypto'; import { Comment, PullRequestComment, MatchResult } from '../models'; import { parseContext } from './context'; import { Constants } from '../constants'; @@ -152,17 +153,26 @@ export async function getExistingComments( })); } -function getCommentBody( +export function getCommentBody( markdown: string, files: string[], prNumber: number, owner: string, repo: string ): string { - return `${markdown}${Constants.CannedTextSeparator}${files + // const hasher = crypto.createHash('md5'); + const links = files.map(file => ({ + text: file, + hash: crypto + .createHash('md5') + .update(file) + .digest('hex') + })); + + return `${markdown}${Constants.CannedTextSeparator}${links .map( - m => - ` - [${m}](https://github.com/${owner}/${repo}/pull/${prNumber}/files)` + link => + ` - [${link.text}](https://github.com/${owner}/${repo}/pull/${prNumber}/files#diff-${link.hash})` ) .join('\n')}`; }