From f4f53c4d9f2069af2cc76c718005333385960fcf Mon Sep 17 00:00:00 2001 From: Joakim Olsson Date: Tue, 4 Nov 2025 21:33:28 +0100 Subject: [PATCH] ci: add code coverage reporting to CI pipeline Update code coverage file handling in the Dockerfile to generate coverage reports properly. Change temporary coverage file name and exclude specific files from the report. Remove the temporary file after processing. Add steps to the CI pipeline to download and execute the Codecov uploader, ensuring coverage data is uploaded for analysis during the build stage. --- .gitlab-ci.yml | 3 +++ Dockerfile | 12 ++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1211240..66cf715 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -13,6 +13,9 @@ build: stage: build script: - build + - curl -Os https://uploader.codecov.io/latest/linux/codecov + - chmod +x codecov + - ./codecov -t ${CODECOV_TOKEN} -R $CI_PROJECT_DIR -C $CI_COMMIT_SHA -r $CI_PROJECT_PATH - push artifacts: paths: diff --git a/Dockerfile b/Dockerfile index d567e52..2627244 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,10 +5,11 @@ ADD . /build RUN if [ $(go mod tidy -v 2>&1 | grep -c unused) != 0 ]; then echo "Unused modules, please run 'go mod tidy'"; exit 1; fi RUN go fmt ./... RUN go vet ./... -RUN CGO_ENABLED=1 go test -mod=readonly -race -coverprofile=.testCoverage.txt.tmp -covermode=atomic -coverpkg=$(go list ./... | tr '\n' , | sed 's/,$//') ./... -RUN cat .testCoverage.txt.tmp | grep -v generated.go | grep -v _gen.go > .testCoverage.txt -RUN go tool cover -html=.testCoverage.txt -o coverage.html -RUN go tool cover -func=.testCoverage.txt +RUN CGO_ENABLED=1 go test -mod=readonly -race -coverprofile=coverage.txt.tmp -covermode=atomic -coverpkg=$(go list ./... | tr '\n' , | sed 's/,$//') ./... +RUN ["/bin/bash", "-c", "cat coverage.txt.tmp | grep -v testing.go | grep -v -f <(find . -type f | xargs grep -l 'Code generated by github.com/99designs/gqlgen, DO NOT EDIT') > coverage.txt"] +RUN go tool cover -html=coverage.txt -o coverage.html +RUN go tool cover -func=coverage.txt +RUN rm coverage.txt.tmp RUN GOOS=linux GOARCH=amd64 go build \ -tags prod \ @@ -18,6 +19,9 @@ RUN GOOS=linux GOARCH=amd64 go build \ -ldflags '-w -s' \ ./cmd/dancefetcher/dancefetcher.go +FROM scratch as export +COPY --from=build /build/coverage.txt / + FROM scratch COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ COPY --from=build /release/dancefetcher /