diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e7c50a..fadfe7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] -_Nothing yet_ +- Show coverage report also if only test files changed (#18) ## [v1.0.0] - 2024-03-18 - Initial release diff --git a/action.yml b/action.yml index afcaf80..e23c595 100644 --- a/action.yml +++ b/action.yml @@ -60,7 +60,6 @@ runs: files: | **.go files_ignore: | - **_test.go vendor/** - name: Code coverage report diff --git a/cmd/go-coverage-report/coverage_test.go b/cmd/go-coverage-report/coverage_test.go index 1b9d8bb..1a82a58 100644 --- a/cmd/go-coverage-report/coverage_test.go +++ b/cmd/go-coverage-report/coverage_test.go @@ -8,7 +8,7 @@ import ( ) func TestParse(t *testing.T) { - cov, err := ParseCoverage("testdata/new-coverage.txt") + cov, err := ParseCoverage("testdata/01-new-coverage.txt") require.NoError(t, err) assert.EqualValues(t, 102, cov.TotalStmt) @@ -18,7 +18,7 @@ func TestParse(t *testing.T) { } func TestCoverage_ByPackage(t *testing.T) { - cov, err := ParseCoverage("testdata/new-coverage.txt") + cov, err := ParseCoverage("testdata/01-new-coverage.txt") require.NoError(t, err) pkgs := cov.ByPackage() diff --git a/cmd/go-coverage-report/report.go b/cmd/go-coverage-report/report.go index 573ec06..479e38c 100644 --- a/cmd/go-coverage-report/report.go +++ b/cmd/go-coverage-report/report.go @@ -125,10 +125,32 @@ func (r *Report) addDetails(report *strings.Builder) { fmt.Fprintln(report, "Coverage by file") fmt.Fprintln(report) + var codeFiles, unitTestFiles []string + for _, f := range r.ChangedFiles { + if strings.HasSuffix(f, "_test.go") { + unitTestFiles = append(unitTestFiles, f) + } else { + codeFiles = append(codeFiles, f) + } + } + + if len(codeFiles) > 0 { + r.addCodeFileDetails(report, codeFiles) + } + if len(unitTestFiles) > 0 { + r.addTestFileDetails(report, unitTestFiles) + } + + fmt.Fprint(report, "") +} + +func (r *Report) addCodeFileDetails(report *strings.Builder, files []string) { + fmt.Fprintln(report, "### Changed files (no unit tests)") + fmt.Fprintln(report) fmt.Fprintln(report, "| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |") fmt.Fprintln(report, "|--------------|------------|-------|---------|--------|---------|") - for _, name := range r.ChangedFiles { + for _, name := range files { var oldPercent, newPercent float64 oldProfile := r.Old.Files[name] @@ -170,8 +192,17 @@ func (r *Report) addDetails(report *strings.Builder) { "above refer to ***code statements*** instead of lines of code. The value in brackets "+ "refers to the test coverage of that file in the old version of the code._") fmt.Fprintln(report) +} - fmt.Fprint(report, "") +func (r *Report) addTestFileDetails(report *strings.Builder, files []string) { + fmt.Fprintln(report, "### Changed unit test files") + fmt.Fprintln(report) + + for _, name := range files { + fmt.Fprintf(report, "- %s\n", name) + } + + fmt.Fprintln(report) } func (r *Report) JSON() string { diff --git a/cmd/go-coverage-report/report_test.go b/cmd/go-coverage-report/report_test.go index b8c3ee5..dede414 100644 --- a/cmd/go-coverage-report/report_test.go +++ b/cmd/go-coverage-report/report_test.go @@ -8,13 +8,13 @@ import ( ) func TestReport_Markdown(t *testing.T) { - oldCov, err := ParseCoverage("testdata/old-coverage.txt") + oldCov, err := ParseCoverage("testdata/01-old-coverage.txt") require.NoError(t, err) - newCov, err := ParseCoverage("testdata/new-coverage.txt") + newCov, err := ParseCoverage("testdata/01-new-coverage.txt") require.NoError(t, err) - changedFiles, err := ParseChangedFiles("testdata/changed-files.json", "github.com/fgrosse/prioqueue") + changedFiles, err := ParseChangedFiles("testdata/01-changed-files.json", "github.com/fgrosse/prioqueue") require.NoError(t, err) report := NewReport(oldCov, newCov, changedFiles) @@ -33,6 +33,8 @@ func TestReport_Markdown(t *testing.T) { Coverage by file +### Changed files (no unit tests) + | Changed File | Coverage Δ | Total | Covered | Missed | :robot: | |--------------|------------|-------|---------|--------|---------| | github.com/fgrosse/prioqueue/foo/bar/baz.go | 0.00% (ø) | 0 | 0 | 0 | | @@ -43,3 +45,36 @@ _Please note that the "Total", "Covered", and "Missed" counts above refer to *** ` assert.Equal(t, expected, actual) } + +func TestReport_Markdown_OnlyChangedUnitTests(t *testing.T) { + oldCov, err := ParseCoverage("testdata/02-old-coverage.txt") + require.NoError(t, err) + + newCov, err := ParseCoverage("testdata/02-new-coverage.txt") + require.NoError(t, err) + + changedFiles, err := ParseChangedFiles("testdata/02-changed-files.json", "github.com/fgrosse/prioqueue") + require.NoError(t, err) + + report := NewReport(oldCov, newCov, changedFiles) + actual := report.Markdown() + + expected := `### Merging this branch will **increase** overall coverage + +| Impacted Packages | Coverage Δ | :robot: | +|-------------------|------------|---------| +| github.com/fgrosse/prioqueue | 99.02% (**+8.82%**) | :thumbsup: | + +--- + +
+ +Coverage by file + +### Changed unit test files + +- github.com/fgrosse/prioqueue/min_heap_test.go + +
` + assert.Equal(t, expected, actual) +} diff --git a/cmd/go-coverage-report/testdata/changed-files.json b/cmd/go-coverage-report/testdata/01-changed-files.json similarity index 100% rename from cmd/go-coverage-report/testdata/changed-files.json rename to cmd/go-coverage-report/testdata/01-changed-files.json diff --git a/cmd/go-coverage-report/testdata/new-coverage.txt b/cmd/go-coverage-report/testdata/01-new-coverage.txt similarity index 100% rename from cmd/go-coverage-report/testdata/new-coverage.txt rename to cmd/go-coverage-report/testdata/01-new-coverage.txt diff --git a/cmd/go-coverage-report/testdata/old-coverage.txt b/cmd/go-coverage-report/testdata/01-old-coverage.txt similarity index 100% rename from cmd/go-coverage-report/testdata/old-coverage.txt rename to cmd/go-coverage-report/testdata/01-old-coverage.txt diff --git a/cmd/go-coverage-report/testdata/02-changed-files.json b/cmd/go-coverage-report/testdata/02-changed-files.json new file mode 100644 index 0000000..ad06281 --- /dev/null +++ b/cmd/go-coverage-report/testdata/02-changed-files.json @@ -0,0 +1 @@ +[ "min_heap_test.go"] diff --git a/cmd/go-coverage-report/testdata/02-new-coverage.txt b/cmd/go-coverage-report/testdata/02-new-coverage.txt new file mode 100644 index 0000000..3dc3e52 --- /dev/null +++ b/cmd/go-coverage-report/testdata/02-new-coverage.txt @@ -0,0 +1,67 @@ +mode: set +github.com/fgrosse/prioqueue/max_heap.go:38.36,40.14 2 1 +github.com/fgrosse/prioqueue/max_heap.go:40.14,42.3 1 1 +github.com/fgrosse/prioqueue/max_heap.go:43.2,43.10 1 1 +github.com/fgrosse/prioqueue/max_heap.go:48.43,50.14 2 1 +github.com/fgrosse/prioqueue/max_heap.go:50.14,52.3 1 1 +github.com/fgrosse/prioqueue/max_heap.go:54.2,54.21 1 1 +github.com/fgrosse/prioqueue/max_heap.go:59.35,60.23 1 1 +github.com/fgrosse/prioqueue/max_heap.go:60.23,62.3 1 1 +github.com/fgrosse/prioqueue/max_heap.go:63.2,63.19 1 1 +github.com/fgrosse/prioqueue/max_heap.go:67.29,69.2 1 1 +github.com/fgrosse/prioqueue/max_heap.go:75.27,77.2 1 1 +github.com/fgrosse/prioqueue/max_heap.go:82.35,84.2 1 1 +github.com/fgrosse/prioqueue/max_heap.go:89.42,92.2 2 1 +github.com/fgrosse/prioqueue/max_heap.go:95.49,98.2 2 1 +github.com/fgrosse/prioqueue/max_heap.go:101.40,107.12 3 1 +github.com/fgrosse/prioqueue/max_heap.go:107.12,109.46 2 1 +github.com/fgrosse/prioqueue/max_heap.go:109.46,112.4 1 1 +github.com/fgrosse/prioqueue/max_heap.go:114.3,115.13 2 1 +github.com/fgrosse/prioqueue/max_heap.go:126.55,128.14 2 1 +github.com/fgrosse/prioqueue/max_heap.go:128.14,130.3 1 1 +github.com/fgrosse/prioqueue/max_heap.go:132.2,132.21 1 1 +github.com/fgrosse/prioqueue/max_heap.go:136.35,137.23 1 1 +github.com/fgrosse/prioqueue/max_heap.go:137.23,139.3 1 1 +github.com/fgrosse/prioqueue/max_heap.go:141.2,151.13 6 1 +github.com/fgrosse/prioqueue/max_heap.go:156.31,159.6 3 1 +github.com/fgrosse/prioqueue/max_heap.go:159.6,162.28 2 1 +github.com/fgrosse/prioqueue/max_heap.go:162.28,163.9 1 1 +github.com/fgrosse/prioqueue/max_heap.go:166.3,166.58 1 1 +github.com/fgrosse/prioqueue/max_heap.go:166.58,168.4 1 1 +github.com/fgrosse/prioqueue/max_heap.go:170.3,170.41 1 1 +github.com/fgrosse/prioqueue/max_heap.go:170.41,172.9 1 1 +github.com/fgrosse/prioqueue/max_heap.go:176.3,179.8 2 1 +github.com/fgrosse/prioqueue/min_heap.go:42.36,44.14 2 1 +github.com/fgrosse/prioqueue/min_heap.go:44.14,46.3 1 1 +github.com/fgrosse/prioqueue/min_heap.go:48.2,48.16 1 1 +github.com/fgrosse/prioqueue/min_heap.go:48.16,50.3 1 0 +github.com/fgrosse/prioqueue/min_heap.go:52.2,52.10 1 1 +github.com/fgrosse/prioqueue/min_heap.go:57.51,59.14 2 1 +github.com/fgrosse/prioqueue/min_heap.go:59.14,61.3 1 1 +github.com/fgrosse/prioqueue/min_heap.go:63.2,63.21 1 1 +github.com/fgrosse/prioqueue/min_heap.go:68.35,69.23 1 1 +github.com/fgrosse/prioqueue/min_heap.go:69.23,71.3 1 1 +github.com/fgrosse/prioqueue/min_heap.go:72.2,72.19 1 1 +github.com/fgrosse/prioqueue/min_heap.go:76.29,78.2 1 1 +github.com/fgrosse/prioqueue/min_heap.go:84.27,86.2 1 1 +github.com/fgrosse/prioqueue/min_heap.go:91.35,93.2 1 1 +github.com/fgrosse/prioqueue/min_heap.go:98.42,101.2 2 1 +github.com/fgrosse/prioqueue/min_heap.go:104.53,107.2 2 1 +github.com/fgrosse/prioqueue/min_heap.go:110.40,116.12 3 1 +github.com/fgrosse/prioqueue/min_heap.go:116.12,118.46 2 1 +github.com/fgrosse/prioqueue/min_heap.go:118.46,121.4 1 1 +github.com/fgrosse/prioqueue/min_heap.go:123.3,124.13 2 1 +github.com/fgrosse/prioqueue/min_heap.go:135.55,137.14 2 1 +github.com/fgrosse/prioqueue/min_heap.go:137.14,139.3 1 1 +github.com/fgrosse/prioqueue/min_heap.go:141.2,141.21 1 1 +github.com/fgrosse/prioqueue/min_heap.go:145.35,146.23 1 1 +github.com/fgrosse/prioqueue/min_heap.go:146.23,148.3 1 1 +github.com/fgrosse/prioqueue/min_heap.go:150.2,160.13 6 1 +github.com/fgrosse/prioqueue/min_heap.go:165.31,168.6 3 1 +github.com/fgrosse/prioqueue/min_heap.go:168.6,171.28 2 1 +github.com/fgrosse/prioqueue/min_heap.go:171.28,172.9 1 1 +github.com/fgrosse/prioqueue/min_heap.go:175.3,175.58 1 1 +github.com/fgrosse/prioqueue/min_heap.go:175.58,177.4 1 1 +github.com/fgrosse/prioqueue/min_heap.go:179.3,179.41 1 1 +github.com/fgrosse/prioqueue/min_heap.go:179.41,181.9 1 1 +github.com/fgrosse/prioqueue/min_heap.go:185.3,188.8 2 1 diff --git a/cmd/go-coverage-report/testdata/02-old-coverage.txt b/cmd/go-coverage-report/testdata/02-old-coverage.txt new file mode 100644 index 0000000..f73d768 --- /dev/null +++ b/cmd/go-coverage-report/testdata/02-old-coverage.txt @@ -0,0 +1,67 @@ +mode: set +github.com/fgrosse/prioqueue/max_heap.go:38.36,40.14 2 1 +github.com/fgrosse/prioqueue/max_heap.go:40.14,42.3 1 1 +github.com/fgrosse/prioqueue/max_heap.go:43.2,43.10 1 1 +github.com/fgrosse/prioqueue/max_heap.go:48.43,50.14 2 1 +github.com/fgrosse/prioqueue/max_heap.go:50.14,52.3 1 1 +github.com/fgrosse/prioqueue/max_heap.go:54.2,54.21 1 1 +github.com/fgrosse/prioqueue/max_heap.go:59.35,60.23 1 1 +github.com/fgrosse/prioqueue/max_heap.go:60.23,62.3 1 1 +github.com/fgrosse/prioqueue/max_heap.go:63.2,63.19 1 1 +github.com/fgrosse/prioqueue/max_heap.go:67.29,69.2 1 1 +github.com/fgrosse/prioqueue/max_heap.go:75.27,77.2 1 1 +github.com/fgrosse/prioqueue/max_heap.go:82.35,84.2 1 1 +github.com/fgrosse/prioqueue/max_heap.go:89.42,92.2 2 1 +github.com/fgrosse/prioqueue/max_heap.go:95.49,98.2 2 1 +github.com/fgrosse/prioqueue/max_heap.go:101.40,107.12 3 1 +github.com/fgrosse/prioqueue/max_heap.go:107.12,109.46 2 1 +github.com/fgrosse/prioqueue/max_heap.go:109.46,112.4 1 1 +github.com/fgrosse/prioqueue/max_heap.go:114.3,115.13 2 1 +github.com/fgrosse/prioqueue/max_heap.go:126.55,128.14 2 1 +github.com/fgrosse/prioqueue/max_heap.go:128.14,130.3 1 1 +github.com/fgrosse/prioqueue/max_heap.go:132.2,132.21 1 1 +github.com/fgrosse/prioqueue/max_heap.go:136.35,137.23 1 1 +github.com/fgrosse/prioqueue/max_heap.go:137.23,139.3 1 1 +github.com/fgrosse/prioqueue/max_heap.go:141.2,151.13 6 1 +github.com/fgrosse/prioqueue/max_heap.go:156.31,159.6 3 1 +github.com/fgrosse/prioqueue/max_heap.go:159.6,162.28 2 1 +github.com/fgrosse/prioqueue/max_heap.go:162.28,163.9 1 1 +github.com/fgrosse/prioqueue/max_heap.go:166.3,166.58 1 1 +github.com/fgrosse/prioqueue/max_heap.go:166.58,168.4 1 1 +github.com/fgrosse/prioqueue/max_heap.go:170.3,170.41 1 1 +github.com/fgrosse/prioqueue/max_heap.go:170.41,172.9 1 1 +github.com/fgrosse/prioqueue/max_heap.go:176.3,179.8 2 1 +github.com/fgrosse/prioqueue/min_heap.go:42.36,44.14 2 0 +github.com/fgrosse/prioqueue/min_heap.go:44.14,46.3 1 0 +github.com/fgrosse/prioqueue/min_heap.go:48.2,48.16 1 0 +github.com/fgrosse/prioqueue/min_heap.go:48.16,50.3 1 0 +github.com/fgrosse/prioqueue/min_heap.go:52.2,52.10 1 0 +github.com/fgrosse/prioqueue/min_heap.go:57.51,59.14 2 1 +github.com/fgrosse/prioqueue/min_heap.go:59.14,61.3 1 0 +github.com/fgrosse/prioqueue/min_heap.go:63.2,63.21 1 1 +github.com/fgrosse/prioqueue/min_heap.go:68.35,69.23 1 1 +github.com/fgrosse/prioqueue/min_heap.go:69.23,71.3 1 0 +github.com/fgrosse/prioqueue/min_heap.go:72.2,72.19 1 1 +github.com/fgrosse/prioqueue/min_heap.go:76.29,78.2 1 1 +github.com/fgrosse/prioqueue/min_heap.go:84.27,86.2 1 1 +github.com/fgrosse/prioqueue/min_heap.go:91.35,93.2 1 1 +github.com/fgrosse/prioqueue/min_heap.go:98.42,101.2 2 1 +github.com/fgrosse/prioqueue/min_heap.go:104.53,107.2 2 1 +github.com/fgrosse/prioqueue/min_heap.go:110.40,116.12 3 1 +github.com/fgrosse/prioqueue/min_heap.go:116.12,118.46 2 1 +github.com/fgrosse/prioqueue/min_heap.go:118.46,121.4 1 1 +github.com/fgrosse/prioqueue/min_heap.go:123.3,124.13 2 1 +github.com/fgrosse/prioqueue/min_heap.go:135.55,137.14 2 1 +github.com/fgrosse/prioqueue/min_heap.go:137.14,139.3 1 0 +github.com/fgrosse/prioqueue/min_heap.go:141.2,141.21 1 1 +github.com/fgrosse/prioqueue/min_heap.go:145.35,146.23 1 1 +github.com/fgrosse/prioqueue/min_heap.go:146.23,148.3 1 0 +github.com/fgrosse/prioqueue/min_heap.go:150.2,160.13 6 1 +github.com/fgrosse/prioqueue/min_heap.go:165.31,168.6 3 1 +github.com/fgrosse/prioqueue/min_heap.go:168.6,171.28 2 1 +github.com/fgrosse/prioqueue/min_heap.go:171.28,172.9 1 1 +github.com/fgrosse/prioqueue/min_heap.go:175.3,175.58 1 1 +github.com/fgrosse/prioqueue/min_heap.go:175.58,177.4 1 1 +github.com/fgrosse/prioqueue/min_heap.go:179.3,179.41 1 1 +github.com/fgrosse/prioqueue/min_heap.go:179.41,181.9 1 1 +github.com/fgrosse/prioqueue/min_heap.go:185.3,188.8 2 1