diff --git a/__tests__/setup-go.test.ts b/__tests__/setup-go.test.ts index d81a2aa..7efffbc 100644 --- a/__tests__/setup-go.test.ts +++ b/__tests__/setup-go.test.ts @@ -9,6 +9,9 @@ import * as main from '../src/main'; import * as im from '../src/installer'; let goJsonData = require('./data/golang-dl.json'); +let matchers = require('../matchers.json'); +let matcherPattern = matchers.problemMatcher[0].pattern[0]; +let matcherRegExp = new RegExp(matcherPattern.regexp); describe('setup-go', () => { let inputs = {} as any; @@ -322,6 +325,100 @@ describe('setup-go', () => { expect(added).toBeTruthy; }); + interface Annotation { + file: string; + line: number; + column: number; + message: string; + } + + // + // problem matcher regex pattern tests + + function testMatch(line: string): Annotation { + let annotation = {}; + + let match = matcherRegExp.exec(line); + if (match) { + annotation.line = parseInt(match[matcherPattern.line], 10); + annotation.column = parseInt(match[matcherPattern.column], 10); + annotation.file = match[matcherPattern.file].trim(); + annotation.message = match[matcherPattern.message].trim(); + } + + return annotation; + } + + it('matches on relative unix path', async () => { + let line = './main.go:13:2: undefined: fmt.Printl'; + let annotation = testMatch(line); + expect(annotation).toBeDefined(); + expect(annotation.line).toBe(13); + expect(annotation.column).toBe(2); + expect(annotation.file).toBe('./main.go'); + expect(annotation.message).toBe('undefined: fmt.Printl'); + }); + + it('matches on unix path up the tree', async () => { + let line = '../main.go:13:2: undefined: fmt.Printl'; + let annotation = testMatch(line); + expect(annotation).toBeDefined(); + expect(annotation.line).toBe(13); + expect(annotation.column).toBe(2); + expect(annotation.file).toBe('../main.go'); + expect(annotation.message).toBe('undefined: fmt.Printl'); + }); + + it('matches on rooted unix path', async () => { + let line = '/assert.go:4:1: missing return at end of function'; + let annotation = testMatch(line); + expect(annotation).toBeDefined(); + expect(annotation.line).toBe(4); + expect(annotation.column).toBe(1); + expect(annotation.file).toBe('/assert.go'); + expect(annotation.message).toBe('missing return at end of function'); + }); + + it('matches on unix path with spaces', async () => { + let line = ' ./assert.go:5:2: missing return at end of function '; + let annotation = testMatch(line); + expect(annotation).toBeDefined(); + expect(annotation.line).toBe(5); + expect(annotation.column).toBe(2); + expect(annotation.file).toBe('./assert.go'); + expect(annotation.message).toBe('missing return at end of function'); + }); + + it('matches on unix path with tabs', async () => { + let line = '\t./assert.go:5:2: missing return at end of function '; + let annotation = testMatch(line); + expect(annotation).toBeDefined(); + expect(annotation.line).toBe(5); + expect(annotation.column).toBe(2); + expect(annotation.file).toBe('./assert.go'); + expect(annotation.message).toBe('missing return at end of function'); + }); + + it('matches on relative windows path', async () => { + let line = '.\\main.go:13:2: undefined: fmt.Printl'; + let annotation = testMatch(line); + expect(annotation).toBeDefined(); + expect(annotation.line).toBe(13); + expect(annotation.column).toBe(2); + expect(annotation.file).toBe('.\\main.go'); + expect(annotation.message).toBe('undefined: fmt.Printl'); + }); + + it('matches on windows path up the tree', async () => { + let line = '..\\main.go:13:2: undefined: fmt.Printl'; + let annotation = testMatch(line); + expect(annotation).toBeDefined(); + expect(annotation.line).toBe(13); + expect(annotation.column).toBe(2); + expect(annotation.file).toBe('..\\main.go'); + expect(annotation.message).toBe('undefined: fmt.Printl'); + }); + // 1.13.1 => 1.13.1 // 1.13 => 1.13.0 // 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1 diff --git a/dist/index.js b/dist/index.js index 7b347bd..87a1a02 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1318,6 +1318,10 @@ function run() { // add problem matchers const matchersPath = path_1.default.join(__dirname, '..', 'matchers.json'); console.log(`##[add-matcher]${matchersPath}`); + // output the version actually being used + let goPath = yield io.which('go'); + let goVersion = (child_process_1.default.execSync(`${goPath} version`) || '').toString(); + console.log(goVersion); } catch (error) { core.setFailed(error.message); diff --git a/matchers.json b/matchers.json index f370917..675fdb7 100644 --- a/matchers.json +++ b/matchers.json @@ -4,11 +4,11 @@ "owner": "go", "pattern": [ { - "regexp": "^([^:]*: )?((.:)?[^:]*):(\\d+)(:(\\d+))?: (.*)$", - "file": 2, - "line": 4, - "column": 6, - "message": 7 + "regexp": "^\\s*(\\.{0,2}[\\/\\\\].+\\.go):(?:(\\d+):(\\d+):)? (.*)", + "file": 1, + "line": 2, + "column": 3, + "message": 4 } ] } diff --git a/src/main.ts b/src/main.ts index 9948f98..d693deb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -50,6 +50,12 @@ export async function run() { // add problem matchers const matchersPath = path.join(__dirname, '..', 'matchers.json'); console.log(`##[add-matcher]${matchersPath}`); + + // output the version actually being used + let goPath = await io.which('go'); + let goVersion = (cp.execSync(`${goPath} version`) || '').toString(); + + console.log(goVersion); } catch (error) { core.setFailed(error.message); }