diff --git a/CHANGELOG.md b/CHANGELOG.md index deec8aec..77572194 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change log +## v0.4.6 + +* [FIX] Customised jacoco test-reporter to support Grails 3.x applications. + ## v0.4.5 [(2018-02-19)](https://github.com/codeclimate/test-reporter/releases/tag/v0.4.5) * [FIX] Add partial automated support for Heroku CI builds [#305][] diff --git a/Makefile b/Makefile index 4af9fc33..23a44dac 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ MAN_FILES = $(wildcard man/*.md) MAN_PAGES = $(patsubst man/%.md,man/%,$(MAN_FILES)) PROJECT = github.com/codeclimate/test-reporter -VERSION ?= 0.4.5 +VERSION ?= 0.4.6 BUILD_VERSION = $(shell git log -1 --pretty=format:'%H') BUILD_TIME = $(shell date +%FT%T%z) LDFLAGS = -ldflags "-X $(PROJECT)/version.Version=${VERSION} -X $(PROJECT)/version.BuildVersion=${BUILD_VERSION} -X $(PROJECT)/version.BuildTime=${BUILD_TIME}" diff --git a/formatters/jacoco/jacoco.go b/formatters/jacoco/jacoco.go index bf9c2932..8220e382 100644 --- a/formatters/jacoco/jacoco.go +++ b/formatters/jacoco/jacoco.go @@ -2,7 +2,6 @@ package jacoco import ( "encoding/xml" - "fmt" "os" "strings" @@ -10,6 +9,8 @@ import ( "github.com/codeclimate/test-reporter/env" "github.com/codeclimate/test-reporter/formatters" "github.com/pkg/errors" + "path/filepath" + "fmt" ) var searchPaths = []string{"jacoco.xml"} @@ -52,8 +53,25 @@ func (r Formatter) Format() (formatters.Report, error) { for _, xmlPackage := range xmlJacoco.Packages { for _, xmlSF := range xmlPackage.SourceFile { num := 1 - filepath := fmt.Sprintf("%s/%s", xmlPackage.Name, xmlSF.Name) - sf, err := formatters.NewSourceFile(filepath, gitHead) + defaultFilepath := fmt.Sprintf("%s/%s", xmlPackage.Name, xmlSF.Name) + filePathPatternForGrailsAppDir := "./grails-app/*/" + xmlPackage.Name + "/" + xmlSF.Name + filePathPatternForSrcDir := "./src/main/*/" + xmlPackage.Name + "/" + xmlSF.Name + + logrus.Debugf("Searching for source file: " + xmlSF.Name + " with search pattern: " + + filePathPatternForGrailsAppDir) + actualFilePath := getActualFilePath(filePathPatternForGrailsAppDir) + + if (actualFilePath == "") { + logrus.Debugf("Searching for source file: " + xmlSF.Name + " with search pattern: " + + filePathPatternForSrcDir) + actualFilePath = getActualFilePath(filePathPatternForSrcDir) + + if (actualFilePath == "") { + actualFilePath = defaultFilepath + } + } + + sf, err := formatters.NewSourceFile(actualFilePath, gitHead) if err != nil { return rep, errors.WithStack(err) } @@ -75,3 +93,14 @@ func (r Formatter) Format() (formatters.Report, error) { return rep, nil } + +func getActualFilePath(filePathPattern string) (string) { + filePaths, _ := filepath.Glob(filePathPattern) + var numberOfMatches = len(filePaths) + + if (numberOfMatches != 1) { + return "" + } + + return filePaths[0] +}