diff --git a/.ci/buildspec.yml b/.ci/buildspec.yml index a8348bdf8..8e895812e 100644 --- a/.ci/buildspec.yml +++ b/.ci/buildspec.yml @@ -29,18 +29,16 @@ phases: build: commands: - - make go-check - - make mdlint - - - make -C vpp-manager clean-vpp + - make clean-vpp - make images - - docker images - - make run-integration-tests + - make mdlint + - make ci-lint + - make ci-test + - make ci-cov + - make push post_build: commands: - - echo "Build complete" - - echo Build completed on `date` diff --git a/Dockerfile.depend b/Dockerfile.depend index 261ded3d7..6e2bbc186 100644 --- a/Dockerfile.depend +++ b/Dockerfile.depend @@ -9,7 +9,7 @@ ENV UNATTENDED=y RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq \ - apt-utils wget cmake curl git + apt-utils wget cmake curl git docker.io ENV GOVERSION=1.24.0 ENV GOROOT="/root/.go" diff --git a/Makefile b/Makefile index 6f10516d7..193e1e6a6 100644 --- a/Makefile +++ b/Makefile @@ -8,8 +8,7 @@ build: $(MAKE) -C calico-vpp-agent $@ $(MAKE) -C vpp-manager $@ $(MAKE) -C multinet-monitor $@ - @mkdir -p cmd/bin - go build -o cmd/bin/calicovppctl ./cmd/calicovppctl/main.go + $(MAKE) -C cmd/calicovppctl $@ .PHONY: image images images: image @@ -17,6 +16,7 @@ image: $(MAKE) -C calico-vpp-agent $@ $(MAKE) -C vpp-manager $@ $(MAKE) -C multinet-monitor $@ + $(MAKE) -C cmd/calicovppctl $@ .PHONY: image-kind image-kind: image @@ -49,6 +49,7 @@ push: $(MAKE) -C calico-vpp-agent $@ $(MAKE) -C vpp-manager $@ $(MAKE) -C multinet-monitor $@ + $(MAKE) -C cmd/calicovppctl $@ .PHONY: dev dev: @@ -56,6 +57,10 @@ dev: $(MAKE) -C vpp-manager ALSO_LATEST=y $@ $(MAKE) -C multinet-monitor ALSO_LATEST=y $@ +.PHONY: clean-vpp +clean-vpp: + $(MAKE) -C vpp-manager clean-vpp + .PHONY: proto proto: $(MAKE) -C calico-vpp-agent $@ @@ -284,14 +289,6 @@ lint: test -d vpp-manager/vpp_build && touch vpp-manager/vpp_build/go.mod || true golangci-lint run --color=never -.PHONY: test -test: go-lint - rm -rf .coverage/unit - mkdir -p .coverage/unit - go test -cover -covermode=atomic ./... \ - -args \ - -test.gocoverdir=$(shell pwd)/.coverage/unit - .PHONY: cov-html cov-html: go tool covdata percent -i=.coverage/unit @@ -299,7 +296,7 @@ cov-html: go tool cover -html=.coverage/profile .PHONY: cov -cov: test +cov: go tool covdata percent -i=.coverage/unit @go tool covdata textfmt -i=.coverage/unit -o .coverage/profile @echo "TOTAL:" @@ -347,16 +344,55 @@ builder-image: ## Make dependencies image. (Not required normally; is implied in && ${PUSH_IMAGE} ) docker tag ${DEPEND_IMAGE} ${DEPEND_BASE}:latest -.PHONY: go-check -go-check: builder-image - @echo Checking go code +# make test - runs the unit & VPP-integration tests +# requiring sudo, this is useful in dev as this caches go deps. +# Altought this requires go, sudo installed +.PHONY: test +test: builder-image + @rm -rf $(shell pwd)/.coverage/unit + @mkdir -p $(shell pwd)/.coverage/unit + $(MAKE) -C vpp-manager image + $(MAKE) -C vpp-manager mock-pod-image + sudo -E env "PATH=$$PATH" VPP_BINARY=/usr/bin/vpp \ + VPP_IMAGE=calicovpp/vpp:$(TAG) \ + go test ./... \ + -cover \ + -covermode=atomic \ + -test.v \ + -test.gocoverdir=$(shell pwd)/.coverage/unit \ + +# make ci-test - runs the unit & VPP-integration tests +# within a container, with mounted /var/run/docker.sock +# this is portable, but lack go cache +.PHONY: ci-test +ci-test: builder-image + @rm -rf $(shell pwd)/.coverage/unit + @mkdir -p $(shell pwd)/.coverage/unit + $(MAKE) -C vpp-manager image + $(MAKE) -C vpp-manager mock-pod-image docker run -t --rm \ + --privileged \ + --pid=host \ + -v /proc:/proc \ -v $(CURDIR):/vpp-dataplane \ + -v /tmp/cni-tests-vpp:/tmp/cni-tests-vpp \ + -v /var/run/docker.sock:/var/run/docker.sock \ + --env VPP_BINARY=/usr/bin/vpp \ + --env VPP_IMAGE=calicovpp/vpp:$(TAG) \ + -w /vpp-dataplane \ ${DEPEND_IMAGE} \ - make -C /vpp-dataplane cov - -.PHONY: go-lint -go-lint: lint + go test ./... \ + -cover \ + -covermode=atomic \ + -test.v \ + -test.gocoverdir=/vpp-dataplane/.coverage/unit + +.PHONY: ci-% +ci-%: builder-image + docker run -t --rm \ + -v $(CURDIR):/vpp-dataplane \ + ${DEPEND_IMAGE} \ + make -C /vpp-dataplane $* .PHONY: depend-image-hash depend-image-hash: diff --git a/calico-vpp-agent/Makefile b/calico-vpp-agent/Makefile index 8bff5b04c..e77c6e9a9 100644 --- a/calico-vpp-agent/Makefile +++ b/calico-vpp-agent/Makefile @@ -1,28 +1,24 @@ include ../common.mk -.PHONY: all build gobgp image push proto - TAG ?= latest # Tag images with :$(TAG) ALSO_LATEST ?= n # If 'y' also tag images with :latest GENERATE_LOG_FILE=../vpplink/generated/generate.log VERSION_FILE=version -all: build gobgp image +.PHONY: all +all: image bin: mkdir -p bin -.PHONY: felix-api-proxy -felix-api-proxy: bin - ${DOCKER_RUN} go build -o ./bin/felix-api-proxy ./cmd/api-proxy - -build: felix-api-proxy bin - ${DOCKER_RUN} go build -o ./bin/calico-vpp-agent ./cmd - -gobgp: bin +.PHONY: build +build: bin + ${DOCKER_RUN} go build $(COVER_OPTS) -o ./bin/felix-api-proxy ./cmd/api-proxy + ${DOCKER_RUN} go build $(COVER_OPTS) -o ./bin/calico-vpp-agent ./cmd ${DOCKER_RUN} go build -o ./bin/gobgp github.com/osrg/gobgp/v3/cmd/gobgp/ -image: build gobgp +.PHONY: image +image: build @echo "Image tag : $(TAG)" > $(VERSION_FILE) @echo "VPP-dataplane version : $(shell git log -1 --oneline)" >> $(VERSION_FILE) @cat $(GENERATE_LOG_FILE) >> $(VERSION_FILE) @@ -32,6 +28,14 @@ image: build gobgp docker tag calicovpp/agent:$(TAG) calicovpp/agent:prerelease; \ fi +.PHONY: image-cov +image-cov: build-cov + @echo "Image tag : $(TAG)" > $(VERSION_FILE) + @echo "VPP-dataplane version : $(shell git log -1 --oneline)" >> $(VERSION_FILE) + @cat $(GENERATE_LOG_FILE) >> $(VERSION_FILE) + docker build --pull -t calicovpp/agent:$(TAG) . + +.PHONY: push push: ${PUSH_DEP} set -e; for registry in ${REGISTRIES}; do \ docker tag calicovpp/agent:$(TAG) $${registry}calicovpp/agent:$(TAG); \ @@ -42,7 +46,9 @@ push: ${PUSH_DEP} docker push --all-tags $${registry}calicovpp/agent; \ done +.PHONY: dev dev: image +.PHONY: proto proto: $(MAKE) -C proto $@ diff --git a/calico-vpp-agent/cmd/calico_vpp_dataplane.go b/calico-vpp-agent/cmd/calico_vpp_dataplane.go index ef46595a3..8e126ddc9 100644 --- a/calico-vpp-agent/cmd/calico_vpp_dataplane.go +++ b/calico-vpp-agent/cmd/calico_vpp_dataplane.go @@ -228,6 +228,10 @@ func main() { syscall.SIGUSR2, ) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + config.HandleUsr2Signal(ctx, log.WithFields(logrus.Fields{"component": "sighdlr"})) + select { case sig := <-sigChan: switch sig { diff --git a/calico-vpp-agent/cni/cni_node_test.go b/calico-vpp-agent/cni/cni_node_test.go index 9d7e6d543..e2f10f2be 100644 --- a/calico-vpp-agent/cni/cni_node_test.go +++ b/calico-vpp-agent/cni/cni_node_test.go @@ -47,16 +47,15 @@ import ( // Names of integration tests arguments const ( - IntegrationTestEnableArgName = "INTEGRATION_TEST" - VppImageArgName = "VPP_IMAGE" - VppBinaryArgName = "VPP_BINARY" - VppContainerExtraArgsName = "VPP_CONTAINER_EXTRA_ARGS" + VppImageArgName = "VPP_IMAGE" + VppBinaryArgName = "VPP_BINARY" + VppContainerExtraArgsName = "VPP_CONTAINER_EXTRA_ARGS" ) // TestCniIntegration runs all the ginkgo integration test inside CNI package func TestCniIntegration(t *testing.T) { // skip test if test run is not integration test run (prevent accidental run of integration tests using go test ./...) - _, isIntegrationTestRun := os.LookupEnv(IntegrationTestEnableArgName) + _, isIntegrationTestRun := os.LookupEnv(VppImageArgName) if !isIntegrationTestRun { t.Skip("skipping CNI integration tests (set INTEGRATION_TEST env variable to run these tests)") } diff --git a/cmd/calicovppctl/Dockerfile b/cmd/calicovppctl/Dockerfile new file mode 100644 index 000000000..06a90f445 --- /dev/null +++ b/cmd/calicovppctl/Dockerfile @@ -0,0 +1,20 @@ +FROM --platform=${BUILDPLATFORM} golang:1.24 AS builder + +WORKDIR /src +COPY go.mod go.sum /src +RUN go mod download + +COPY *.go /src + +ARG TARGETOS +ARG TARGETARCH + +RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} \ + go build \ + -ldflags="-s -w" -o /cmd/calicovppctl + +FROM scratch +WORKDIR / +COPY --from=builder /cmd/calicovppctl /calicovppctl + +CMD ["./calicovppctl"] diff --git a/cmd/calicovppctl/Makefile b/cmd/calicovppctl/Makefile new file mode 100644 index 000000000..29c42f7a5 --- /dev/null +++ b/cmd/calicovppctl/Makefile @@ -0,0 +1,35 @@ +include ../../common.mk + +BIN_DIR = $(VPP_DATAPLANE_DIR)/bin + +.PHONY: bin +bin: + @mkdir -p $(BIN_DIR) + +.PHONY: build +build: bin + ${DOCKER_RUN} go build -o $(BIN_DIR)/calicovppctl . + +.PHONY: image +image: +ifndef CI_BUILD + docker build --network=host --build-arg http_proxy=${DOCKER_BUILD_PROXY} \ + --platform linux/arm64,linux/amd64 \ + -t calicovpp/ctl:$(TAG) . +endif + +.PHONY: push +push: ${PUSH_DEP} + docker buildx create \ + --name vppctlbuilder \ + --driver docker-container \ + --use + docker buildx build \ + --network=host \ + --build-arg http_proxy=${DOCKER_BUILD_PROXY} \ + --platform linux/arm64,linux/amd64 \ + --push \ + $(foreach registry,$(REGISTRIES),-t $(registry)calicovpp/ctl:$(TAG)) \ + $(if $(ALSO_LATEST),$(foreach registry,$(REGISTRIES),-t $(registry)calicovpp/ctl:latest)) \ + . + docker buildx rm vppctlbuilder diff --git a/cmd/calicovppctl/go.mod b/cmd/calicovppctl/go.mod new file mode 100644 index 000000000..b4c742004 --- /dev/null +++ b/cmd/calicovppctl/go.mod @@ -0,0 +1,55 @@ +module github.com/projectcalico/vpp-dataplane/cmd/calicovppctl/v3 + +go 1.24.4 + +require ( + github.com/gookit/color v1.5.4 + github.com/onsi/gomega v1.36.2 // indirect + github.com/pkg/errors v0.9.1 // indirect + golang.org/x/net v0.41.0 // indirect + golang.org/x/sys v0.33.0 // indirect + google.golang.org/protobuf v1.36.5 // indirect + k8s.io/api v0.32.5 + k8s.io/apimachinery v0.32.5 + k8s.io/client-go v0.32.5 + sigs.k8s.io/yaml v1.4.0 +) + +require ( + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.23.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/onsi/ginkgo/v2 v2.22.2 // indirect + github.com/spf13/pflag v1.0.6 // indirect + github.com/stretchr/testify v1.10.0 // indirect + github.com/x448/float16 v0.8.4 // indirect + github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect + golang.org/x/oauth2 v0.28.0 // indirect + golang.org/x/term v0.32.0 // indirect + golang.org/x/text v0.26.0 // indirect + golang.org/x/time v0.11.0 // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect + k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect + sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect +) diff --git a/cmd/calicovppctl/go.sum b/cmd/calicovppctl/go.sum new file mode 100644 index 000000000..1ee3c1506 --- /dev/null +++ b/cmd/calicovppctl/go.sum @@ -0,0 +1,158 @@ +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 h1:0VpGH+cDhbDtdcweoyCVsF3fhN8kejK6rFe/2FFX2nU= +github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49/go.mod h1:BkkQ4L1KS1xMt2aWSPStnn55ChGC0DPOn2FQYj+f25M= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= +github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= +github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= +github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= +github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= +golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= +golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= +golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +k8s.io/api v0.32.5 h1:uqjjsYo1kTJr5NIcoIaP9F+TgXgADH7nKQx91FDAhtk= +k8s.io/api v0.32.5/go.mod h1:bXXFU3fGCZ/eFMZvfHZC69PeGbXEL4zzjuPVzOxHF64= +k8s.io/apimachinery v0.32.5 h1:6We3aJ6crC0ap8EhsEXcgX3LpI6SEjubpiOMXLROwPM= +k8s.io/apimachinery v0.32.5/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/client-go v0.32.5 h1:huFmQMzgWu0z4kbWsuZci+Gt4Fo72I4CcrvhToZ/Qp0= +k8s.io/client-go v0.32.5/go.mod h1:Qchw6f9WIVrur7DKojAHpRgGLcANT0RLIvF39Jz58xA= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= +k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= +k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro= +k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= +sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= +sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA= +sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/common.mk b/common.mk index a22e0b724..ae133d091 100644 --- a/common.mk +++ b/common.mk @@ -1,14 +1,8 @@ -CUR_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) -PROJECT_DIR = $(shell pwd | sed -E 's/(^.+vpp-dataplane).*$$/\1/') -ROOT_DIR = $(shell pwd | sed -E 's/(^.+vpp-dataplane).*$$/\1/') -SUB_DIR = $(shell pwd | sed -E 's/^.+vpp-dataplane\/(.*$$)/\1/') -THIS_DIR = $(notdir $(CUR_DIR)) +VPP_DATAPLANE_DIR = $(shell git rev-parse --show-toplevel) DEPEND_BASE = calicovpp/ci-builder - VPP_BUCKET = calico-vpp-ci-artefacts -WITH_GDB ?= yes export GOOS ?= linux # Docker option @@ -23,6 +17,12 @@ ifdef CODEBUILD_BUILD_NUMBER CI_BUILD = 1 endif +ifdef COVER + COVER_OPTS = -cover -covermode=atomic +else + COVER_OPTS := +endif + ifdef CI_BUILD export CI_BUILD GOFLAGS := -buildvcs=false @@ -33,8 +33,8 @@ ifdef CI_BUILD DOCKER_OPTS = -e CI_BUILD=1 -e GOFLAGS=${GOFLAGS} DOCKER_OPTS += -e CGO_ENABLED=0 DOCKER_OPTS += --user $$(id -u):$$(id -g) - DOCKER_OPTS += -w /vpp-dataplane/${SUB_DIR} - DOCKER_OPTS += -v ${PROJECT_DIR}:/vpp-dataplane + DOCKER_OPTS += -w /vpp-dataplane/$(shell git rev-parse --show-prefix) + DOCKER_OPTS += -v $(VPP_DATAPLANE_DIR):/vpp-dataplane DOCKER_RUN = docker run -t --rm --name build_temp ${DOCKER_OPTS} calicovpp/ci-builder:latest PUSH_DEP := diff --git a/config/utils.go b/config/utils.go index 81e0a6ebf..4e5c0d58f 100644 --- a/config/utils.go +++ b/config/utils.go @@ -16,8 +16,15 @@ package config import ( + "context" "crypto/sha512" "encoding/base64" + "os" + "os/signal" + "runtime/coverage" + "syscall" + + "github.com/sirupsen/logrus" ) /* 8 base64 character hash */ @@ -32,3 +39,38 @@ func TruncateStr(text string, size int) string { } return text } + +// HandleUsr2Signal implements the USR2 signal +// that outputs the covarge data, provided the binary +// is compiled with -cover and GOCOVERDIR is set. +// This allows us to not require a proper binary +// termination in order to get coverage data. +func HandleUsr2Signal(ctx context.Context, log *logrus.Entry) { + usr2SignalChannel := make(chan os.Signal, 1) + signal.Notify(usr2SignalChannel, syscall.SIGUSR2) + go func() { + for { + select { + case <-usr2SignalChannel: + log.Warnf("Received SIGUSR2, writing coverage to %s", os.Getenv("GOCOVERDIR")) + if os.Getenv("GOCOVERDIR") != "" { + err := os.Mkdir(os.Getenv("GOCOVERDIR"), 0750) + if err != nil && !os.IsExist(err) { + log.WithError(err).Errorf("Could not create dir %s", os.Getenv("GOCOVERDIR")) + continue + } + err = coverage.WriteCountersDir(os.Getenv("GOCOVERDIR")) + if err != nil { + log.WithError(err).Error("Could not write counters dir") + } + err = coverage.WriteMetaDir(os.Getenv("GOCOVERDIR")) + if err != nil { + log.WithError(err).Error("Could not write meta dir") + } + } + case <-ctx.Done(): + return + } + } + }() +} diff --git a/docs/install/calicovppctl.md b/docs/install/calicovppctl.md index 8ccf51b5e..2f7606703 100644 --- a/docs/install/calicovppctl.md +++ b/docs/install/calicovppctl.md @@ -5,8 +5,16 @@ in a kubernetes pod. The following CLIs install the latest ``calicovppctl`` to ``/usr/local/bin``. +## Using published images + ````console docker create --name calicovppctl docker.io/calicovpp/ctl:latest sudo docker cp calicovppctl:/calicovppctl /usr/local/bin/calicovppctl docker rm calicovppctl ```` + +## Using go + +````bash +go install github.com/projectcalico/vpp-dataplane/v3/cmd/calicovppctl@master +```` diff --git a/go.mod b/go.mod index a57026a61..4bf3bf9ea 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ require ( github.com/census-instrumentation/opencensus-proto v0.4.1 github.com/containernetworking/plugins v1.6.2 github.com/google/gopacket v1.1.19 - github.com/gookit/color v1.5.4 github.com/inconshreveable/mousetrap v1.1.0 github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.4.0 github.com/lunixbochs/struc v0.0.0-20241101090106-8d528fa2c543 // indirect @@ -34,7 +33,7 @@ require ( k8s.io/apimachinery v0.32.5 k8s.io/client-go v0.32.5 sigs.k8s.io/controller-runtime v0.20.3 - sigs.k8s.io/yaml v1.4.0 + sigs.k8s.io/yaml v1.4.0 // indirect ) require ( @@ -97,7 +96,6 @@ require ( github.com/spf13/viper v1.20.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect go.etcd.io/etcd/api/v3 v3.5.19 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.19 // indirect go.etcd.io/etcd/client/v3 v3.5.19 // indirect diff --git a/go.sum b/go.sum index 30a52e8b1..b0a6a98ef 100644 --- a/go.sum +++ b/go.sum @@ -136,8 +136,6 @@ github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAx github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= -github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -293,8 +291,6 @@ github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1Y github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/yookoala/realpath v1.0.0 h1:7OA9pj4FZd+oZDsyvXWQvjn5oBdcHRTV44PpdMSuImQ= github.com/yookoala/realpath v1.0.0/go.mod h1:gJJMA9wuX7AcqLy1+ffPatSCySA1FQ2S8Ya9AIoYBpE= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/test/integration-tests/Makefile b/test/integration-tests/Makefile deleted file mode 100644 index e9c43ff10..000000000 --- a/test/integration-tests/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -include ../../common.mk - -.PHONY: run-integration-tests vpp-image mock-image build-tests - -TAG ?= latest # Tag images with :$(TAG) - -ifndef CI_BUILD -SUDO := sudo -E -endif - -VPP_IMAGE := calicovpp/vpp:$(TAG) -POD_MOCK_IMAGE := calicovpp/vpp-test-pod-mock:latest - -vpp-image: - docker image inspect ${VPP_IMAGE} >/dev/null 2>&1 \ - || $(MAKE) -C ../../vpp-manager image - - -mock-image: - docker build --network=host -t ${POD_MOCK_IMAGE} images/pod-mock - - -# Build integration tests -build-tests: - ${DOCKER_RUN} go test -c ../../calico-vpp-agent/cni - - -run-integration-tests: build-tests mock-image vpp-image - @echo "Running Integration tests..." - @echo "Running Calico VPP Agent - CNI tests..." - ${SUDO} env "PATH=$$PATH" VPP_BINARY=/usr/bin/vpp INTEGRATION_TEST=. VPP_IMAGE="${VPP_IMAGE}" ./cni.test -test.v -test.run Integration - -VPP_DEV_DIR ?= /repo/vpp-manager/vpp_build/build-root/install-vpp_debug-native -dev: build-tests mock-image - ${SUDO} env "PATH=$$PATH" \ - VPP_BINARY=${VPP_DEV_DIR}/vpp/bin/vpp \ - LD_LIBRARY_PATH="${VPP_DEV_DIR}/vpp/lib/x86_64-linux-gnu" \ - INTEGRATION_TEST=. VPP_IMAGE="calicovpp/vpp:latest" ./cni.test -test.v -test.run Integration - diff --git a/test/scripts/mngmt.sh b/test/scripts/mngmt.sh index 40dff0d8d..ff3825422 100755 --- a/test/scripts/mngmt.sh +++ b/test/scripts/mngmt.sh @@ -53,7 +53,7 @@ fi git reset $BRANCH_NAME --hard git clean -fd -make -C $VPP_DATAPLANE_DIRECTORY image TAG=$TAG WITH_GDB=$WITH_GDB +make -C $VPP_DATAPLANE_DIRECTORY image TAG=$TAG echo "built calicovpp/vpp:${TAG}" echo "built calicovpp/agent:${TAG}" @@ -91,7 +91,6 @@ echo "Date : $(date +"%Y-%m-%d %H:%M")" >> ${BUILD_LOG_DIR}/ echo "REPO_URL : $REPO_URL" >> ${BUILD_LOG_DIR}/${BUILD_NAME}/summary echo "BRANCH_NAME : $BRANCH_NAME" >> ${BUILD_LOG_DIR}/${BUILD_NAME}/summary echo "VPP_DATAPLANE_DIRECTORY : $VPP_DATAPLANE_DIRECTORY" >> ${BUILD_LOG_DIR}/${BUILD_NAME}/summary -echo "WITH_GDB : $WITH_GDB" >> ${BUILD_LOG_DIR}/${BUILD_NAME}/summary echo "SSH_NAME : $SSH_NAME" >> ${BUILD_LOG_DIR}/${BUILD_NAME}/summary echo "PUSH : $PUSH" >> ${BUILD_LOG_DIR}/${BUILD_NAME}/summary echo "Tags built : ${TAG},${EXTRA_TAGS}" >> ${BUILD_LOG_DIR}/${BUILD_NAME}/summary diff --git a/vpp-manager/Makefile b/vpp-manager/Makefile index ce163e7c3..b00d86734 100644 --- a/vpp-manager/Makefile +++ b/vpp-manager/Makefile @@ -20,6 +20,7 @@ VERSION_FILE=$(VPP_DIR)/calicovppversion # BASE allows to override the VPP base commit in vpp_clone_current.sh BASE ?= +MOCK_POD_IMAGE ?= calicovpp/vpp-test-pod-mock:latest VPP_REL_DEB_LIST = \ $(VPP_DIR)/build-root/debs/release/vpp_*.deb \ @@ -68,7 +69,12 @@ all: image build: mkdir -p $(IMAGE_DIR)/bin cp $(VPPDEV_FILE) $(IMAGE_DIR)/bin/vppdev.sh - ${DOCKER_RUN} go build -o $(IMAGE_DIR)/bin/vpp-manager + ${DOCKER_RUN} go build $(COVER_OPTS) -o $(IMAGE_DIR)/bin/vpp-manager + +.PHONY: mock-pod-image +mock-pod-image: + docker build --network=host \ + -t ${MOCK_POD_IMAGE} images/mock-pod .PHONY: eks-image eks-image: @@ -98,7 +104,6 @@ vpp-image: build ${VPP_TARBALL} tar -xvf ${VPP_TARBALL} -C $(IMAGE_DIR) docker build --pull --network=host \ --build-arg http_proxy=${DOCKER_BUILD_PROXY} \ - --build-arg WITH_GDB=${WITH_GDB} \ -t calicovpp/vpp:$(TAG) $(IMAGE_DIR) docker build --pull --network=host \ --build-arg http_proxy=${DOCKER_BUILD_PROXY} \ @@ -113,6 +118,13 @@ vpp-image: build ${VPP_TARBALL} .PHONY: image image: vpp-image eks-image vclsidecar-image +.PHONY: image-cov +image-cov: build-cov ${VPP_TARBALL} + @cp $(VPPDEV_FILE) $(IMAGE_DIR) + docker build ${SQUASH} --pull --network=host \ + --build-arg http_proxy=${DOCKER_BUILD_PROXY} \ + -t calicovpp/vpp:$(TAG) $(IMAGE_DIR) + .PHONY: push push: ${PUSH_DEP} set -e; for registry in ${REGISTRIES}; do \ @@ -211,7 +223,6 @@ dev: build docker build --network=host \ --build-arg http_proxy=${DOCKER_BUILD_PROXY} \ --build-arg https_proxy=${DOCKER_BUILD_PROXY} \ - --build-arg WITH_GDB=${WITH_GDB} \ -t calicovpp/vpp:$(TAG) $(DEV_IMAGE_DIR) @if [ "${ALSO_LATEST}" = "y" ]; then \ docker tag calicovpp/vpp:$(TAG) calicovpp/vpp:latest; \ diff --git a/test/integration-tests/images/pod-mock/Dockerfile b/vpp-manager/images/mock-pod/Dockerfile similarity index 100% rename from test/integration-tests/images/pod-mock/Dockerfile rename to vpp-manager/images/mock-pod/Dockerfile diff --git a/vpp-manager/main.go b/vpp-manager/main.go index 87352f826..8e2eca3a0 100644 --- a/vpp-manager/main.go +++ b/vpp-manager/main.go @@ -16,6 +16,7 @@ package main import ( + "context" "os" "os/signal" "sync" @@ -72,6 +73,7 @@ func handleSignals() { signals = make(chan os.Signal, 10) signal.Notify(signals) signal.Reset(syscall.SIGURG) + signal.Reset(syscall.SIGUSR2) for { s := <-signals if vppProcess == nil && s == syscall.SIGCHLD { @@ -183,6 +185,10 @@ func main() { runningCond = sync.NewCond(&sync.Mutex{}) go handleSignals() + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + config.HandleUsr2Signal(ctx, log.WithFields(logrus.Fields{"component": "sighdlr"})) + startup.PrintVppManagerConfig(params, confs) runner := NewVPPRunner(params, confs) diff --git a/yaml/overlays/dev/calico-vpp-dev-configmap.yaml b/yaml/overlays/dev/calico-vpp-dev-configmap.yaml index 23aaf02d0..9960e6b67 100644 --- a/yaml/overlays/dev/calico-vpp-dev-configmap.yaml +++ b/yaml/overlays/dev/calico-vpp-dev-configmap.yaml @@ -20,3 +20,4 @@ data: CALICOVPP_IPSEC: ${CALICOVPP_IPSEC} CALICOVPP_SRV6: ${CALICOVPP_SRV6} CALICOVPP_LOG_FORMAT: pretty + GOCOVERDIR: /repo/.coverage/kind diff --git a/yaml/overlays/dev/calico-vpp-dev-patch.yaml b/yaml/overlays/dev/calico-vpp-dev-patch.yaml index 45e8f489f..5e076448e 100644 --- a/yaml/overlays/dev/calico-vpp-dev-patch.yaml +++ b/yaml/overlays/dev/calico-vpp-dev-patch.yaml @@ -11,6 +11,9 @@ spec: - name: agent image: ${CALICO_AGENT_IMAGE} imagePullPolicy: ${IMAGE_PULL_POLICY} + volumeMounts: + - name: repo-directory + mountPath: /repo - name: vpp image: ${CALICO_VPP_IMAGE} imagePullPolicy: ${IMAGE_PULL_POLICY}