From 61cc74f4f17f216eee357afcd9e645ae609af655 Mon Sep 17 00:00:00 2001 From: Andrea Panattoni Date: Wed, 6 Apr 2022 14:31:45 +0200 Subject: [PATCH] Add coverage evidence to the project Configure CI to collect coverage and integrate with coveralls.io service. Move plugin packages out of `pkg` package, as they aren't exportable as library and their presence conflicts with `-coverpkg=./...` cover parameter. Add Makefile rules for merging coverage profiles from multiple sources, as tests are usually run by `make test-pkg` and `make test-controllers`. Add Makefile's rules to download gocovmerge and gcov2lcov. Signed-off-by: Andrea Panattoni --- .github/workflows/go.yml | 28 +++++++++++++++++++ Makefile | 12 +++++++- hack/build-plugins.sh | 2 +- .../generic/generic_plugin.go | 0 .../plugins => plugins}/intel/intel_plugin.go | 0 {pkg/plugins => plugins}/k8s/k8s_plugin.go | 0 .../mellanox/mellanox_plugin.go | 0 .../virtual/virtual_plugin.go | 0 8 files changed, 40 insertions(+), 2 deletions(-) rename {pkg/plugins => plugins}/generic/generic_plugin.go (100%) rename {pkg/plugins => plugins}/intel/intel_plugin.go (100%) rename {pkg/plugins => plugins}/k8s/k8s_plugin.go (100%) rename {pkg/plugins => plugins}/mellanox/mellanox_plugin.go (100%) rename {pkg/plugins => plugins}/virtual/virtual_plugin.go (100%) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index f3a9c2b16c..0fdd15bc00 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -60,3 +60,31 @@ jobs: with: # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. version: v1.46 + + test-coverage: + name: test-coverage + runs-on: ubuntu-latest + steps: + + - name: Set up Go 1.17 + uses: actions/setup-go@v2 + with: + go-version: 1.17.8 + + - name: Check out code into the Go module directory + uses: actions/checkout@v2 + + - name: test pkg + run: make test-pkg + + - name: test controllers on opensfhit + run: CLUSTER_TYPE=openshift make test-controllers + + - name: merge test coverage + run: make merge-test-coverage + + - name: Coveralls + uses: coverallsapp/github-action@1.1.3 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + path-to-lcov: lcov.out diff --git a/Makefile b/Makefile index e2a617eab1..f592d1e5de 100644 --- a/Makefile +++ b/Makefile @@ -222,13 +222,23 @@ test-bindata-scripts: fakechroot test-%: generate vet manifests mkdir -p ${ENVTEST_ASSETS_DIR} test -f ${ENVTEST_ASSETS_DIR}/setup-envtest.sh || curl -sSLo ${ENVTEST_ASSETS_DIR}/setup-envtest.sh https://raw.githubusercontent.com/kubernetes-sigs/controller-runtime/v0.8.3/hack/setup-envtest.sh - source ${ENVTEST_ASSETS_DIR}/setup-envtest.sh; fetch_envtest_tools $(ENVTEST_ASSETS_DIR); setup_envtest_env $(ENVTEST_ASSETS_DIR); go test ./$*/... -coverprofile cover.out -v + source ${ENVTEST_ASSETS_DIR}/setup-envtest.sh; fetch_envtest_tools $(ENVTEST_ASSETS_DIR); setup_envtest_env $(ENVTEST_ASSETS_DIR); go test ./$*/... -coverprofile cover-$*.out -coverpkg ./... -v # deploy-setup-k8s: export NAMESPACE=sriov-network-operator # deploy-setup-k8s: export ENABLE_ADMISSION_CONTROLLER=false # deploy-setup-k8s: export CNI_BIN_PATH=/opt/cni/bin # test-e2e-k8s: test-e2e +gocovmerge: ## Download gocovmerge locally if necessary. + go install -mod=readonly github.com/shabbyrobe/gocovmerge/cmd/gocovmerge@latest + +gcov2lcov: + go install -mod=readonly github.com/jandelgado/gcov2lcov@v1.0.5 + +merge-test-coverage: gocovmerge gcov2lcov + gocovmerge cover-*.out > cover.out + gcov2lcov -infile cover.out -outfile lcov.out + deploy-wait: hack/deploy-wait.sh diff --git a/hack/build-plugins.sh b/hack/build-plugins.sh index 6412236220..990977c7d3 100755 --- a/hack/build-plugins.sh +++ b/hack/build-plugins.sh @@ -35,5 +35,5 @@ mkdir -p ${BIN_PATH} CGO_ENABLED=1 echo "Building ${REPO}/pkg/plugins (${VERSION_OVERRIDE})" -CGO_ENABLED=${CGO_ENABLED} GOOS=${GOOS} GOARCH=${GOARCH} go build -buildmode=plugin -ldflags "${GLDFLAGS} -s -w" ${GOFLAGS} -o ${BIN_PATH}/plugins/$1_plugin.so ${REPO}/pkg/plugins/$1 +CGO_ENABLED=${CGO_ENABLED} GOOS=${GOOS} GOARCH=${GOARCH} go build -buildmode=plugin -ldflags "${GLDFLAGS} -s -w" ${GOFLAGS} -o ${BIN_PATH}/plugins/$1_plugin.so ${REPO}/plugins/$1 #CGO_ENABLED=${CGO_ENABLED} GOOS=${GOOS} GOARCH=${GOARCH} go build -buildmode=plugin -gcflags='all=-N -l' -ldflags "${GLDFLAGS} -s -w" ${GOFLAGS} -o ${BIN_PATH}/plugins/$1_plugin.so ${REPO}/pkg/plugins/$1 diff --git a/pkg/plugins/generic/generic_plugin.go b/plugins/generic/generic_plugin.go similarity index 100% rename from pkg/plugins/generic/generic_plugin.go rename to plugins/generic/generic_plugin.go diff --git a/pkg/plugins/intel/intel_plugin.go b/plugins/intel/intel_plugin.go similarity index 100% rename from pkg/plugins/intel/intel_plugin.go rename to plugins/intel/intel_plugin.go diff --git a/pkg/plugins/k8s/k8s_plugin.go b/plugins/k8s/k8s_plugin.go similarity index 100% rename from pkg/plugins/k8s/k8s_plugin.go rename to plugins/k8s/k8s_plugin.go diff --git a/pkg/plugins/mellanox/mellanox_plugin.go b/plugins/mellanox/mellanox_plugin.go similarity index 100% rename from pkg/plugins/mellanox/mellanox_plugin.go rename to plugins/mellanox/mellanox_plugin.go diff --git a/pkg/plugins/virtual/virtual_plugin.go b/plugins/virtual/virtual_plugin.go similarity index 100% rename from pkg/plugins/virtual/virtual_plugin.go rename to plugins/virtual/virtual_plugin.go