From 8b94649479976d0de7b3b95d158bfb3d3f527789 Mon Sep 17 00:00:00 2001 From: Szabolcs Horvath Date: Thu, 19 Dec 2024 19:22:39 +0100 Subject: [PATCH] Add unit test coverage to workflows --- .github/.testcoverage.yml | 55 ++++++++++++++++++++++++++++++++++ .github/workflows/go-build.yml | 14 +++++---- 2 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 .github/.testcoverage.yml diff --git a/.github/.testcoverage.yml b/.github/.testcoverage.yml new file mode 100644 index 0000000..c8eb348 --- /dev/null +++ b/.github/.testcoverage.yml @@ -0,0 +1,55 @@ +# (mandatory) +# Path to coverage profile file (output of `go test -coverprofile` command). +# +# For cases where there are many coverage profiles, such as when running +# unit tests and integration tests separately, you can combine all those +# profiles into one. In this case, the profile should have a comma-separated list +# of profile files, e.g., 'cover_unit.out,cover_integration.out'. +profile: cover.out + +# (optional; but recommended to set) +# When specified reported file paths will not contain local prefix in the output. +local-prefix: "github.com/szabolcs-horvath/nutrition-tracker" + +# # Holds coverage thresholds percentages, values should be in range [0-100]. +# threshold: +# # (optional; default 0) +# # Minimum coverage percentage required for individual files. +# file: 70 +# +# # (optional; default 0) +# # Minimum coverage percentage required for each package. +# package: 80 +# +# # (optional; default 0) +# # Minimum overall project coverage percentage required. +# total: 95 + +# # Holds regexp rules which will override thresholds for matched files or packages +# # using their paths. +# # +# # First rule from this list that matches file or package is going to apply +# # new threshold to it. If project has multiple rules that match same path, +# # override rules should be listed in order from specific to more general rules. +# override: +# # Increase coverage threshold to 100% for `foo` package +# # (default is 80, as configured above in this example). +# - path: ^pkg/lib/foo$ +# threshold: 100 + +# # Holds regexp rules which will exclude matched files or packages +# # from coverage statistics. +# exclude: +# # Exclude files or packages matching their paths +# paths: +# - \.pb\.go$ # excludes all protobuf generated files +# - ^pkg/bar # exclude package `pkg/bar` + +# # File name of go-test-coverage breakdown file, which can be used to +# # analyze coverage difference. +# breakdown-file-name: '' +# +# diff: +# # File name of go-test-coverage breakdown file which will be used to +# # report coverage difference. +# base-breakdown-file-name: '' \ No newline at end of file diff --git a/.github/workflows/go-build.yml b/.github/workflows/go-build.yml index e9f3535..8df2a34 100644 --- a/.github/workflows/go-build.yml +++ b/.github/workflows/go-build.yml @@ -11,13 +11,12 @@ on: jobs: - build: + build-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Set up Go - uses: actions/setup-go@v4 + - uses: actions/setup-go@v4 with: go-version: '1.23.1' @@ -33,5 +32,10 @@ jobs: - name: Build run: make build - # - name: Test - # run: go test -v ./... + - name: Generate test coverage + run: go test ./... -v -coverprofile=./cover.out -covermode=atomic -coverpkg=./... + + - name: Check test coverage + uses: vladopajic/go-test-coverage@v2 + with: + config: ./.github/.testcoverage.yml