Using the directory cmd/flux/manifests as a prerequisite causes a
problem: if the script that creates the files within fails, the next
invocation of make will see the directory and assume it
succeeded. Since the executable expects certain files to be present,
but they are not explicit prerequisites of the recipe for building the
binary, this results in a successful build but a broken `flux`
executable.
Instead, depend on a file that's explicitly updated when the script
has succeeded, and which itself depends on the inputs.
A couple of the CI workflows run
make cmd/flux/manifests
before doing other things, presumably as a way to avoid running the
whole test suite in a CI pipeline for some purpose other than testing,
so these needed changing as well.
Signed-off-by: Michael Bridgen <michael@weave.works>
75 lines
2.2 KiB
Makefile
75 lines
2.2 KiB
Makefile
VERSION?=$(shell grep 'VERSION' cmd/flux/main.go | awk '{ print $$4 }' | head -n 1 | tr -d '"')
|
|
EMBEDDED_MANIFESTS_TARGET=cmd/flux/.manifests.done
|
|
TEST_KUBECONFIG?=/tmp/flux-e2e-test-kubeconfig
|
|
ENVTEST_BIN_VERSION?=latest
|
|
KUBEBUILDER_ASSETS?="$(shell $(SETUP_ENVTEST) use -i $(ENVTEST_BIN_VERSION) -p path)"
|
|
|
|
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
|
|
ifeq (,$(shell go env GOBIN))
|
|
GOBIN=$(shell go env GOPATH)/bin
|
|
else
|
|
GOBIN=$(shell go env GOBIN)
|
|
endif
|
|
|
|
rwildcard=$(foreach d,$(wildcard $(addsuffix *,$(1))),$(call rwildcard,$(d)/,$(2)) $(filter $(subst *,%,$(2)),$(d)))
|
|
|
|
all: test build
|
|
|
|
tidy:
|
|
go mod tidy
|
|
|
|
fmt:
|
|
go fmt ./...
|
|
|
|
vet:
|
|
go vet ./...
|
|
|
|
setup-kind:
|
|
kind create cluster --name=flux-e2e-test --kubeconfig=$(TEST_KUBECONFIG) --config=.github/kind/config.yaml
|
|
kubectl --kubeconfig=$(TEST_KUBECONFIG) apply -f https://docs.projectcalico.org/v3.16/manifests/calico.yaml
|
|
kubectl --kubeconfig=$(TEST_KUBECONFIG) -n kube-system set env daemonset/calico-node FELIX_IGNORELOOSERPF=true
|
|
|
|
cleanup-kind:
|
|
kind delete cluster --name=flux-e2e-test
|
|
rm $(TEST_KUBECONFIG)
|
|
|
|
test: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet setup-envtest
|
|
KUBEBUILDER_ASSETS=$(KUBEBUILDER_ASSETS) go test ./... -coverprofile cover.out --tags=unit
|
|
|
|
e2e: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet
|
|
TEST_KUBECONFIG=$(TEST_KUBECONFIG) go test ./cmd/flux/... -coverprofile e2e.cover.out --tags=e2e -v -failfast
|
|
|
|
test-with-kind: setup-envtest
|
|
make setup-kind
|
|
make e2e
|
|
make cleanup-kind
|
|
|
|
$(EMBEDDED_MANIFESTS_TARGET): $(call rwildcard,manifests/,*.yaml *.json)
|
|
./manifests/scripts/bundle.sh
|
|
touch $@
|
|
|
|
build: $(EMBEDDED_MANIFESTS_TARGET)
|
|
CGO_ENABLED=0 go build -ldflags="-s -w -X main.VERSION=$(VERSION)" -o ./bin/flux ./cmd/flux
|
|
|
|
install:
|
|
go install cmd/flux
|
|
|
|
install-dev:
|
|
CGO_ENABLED=0 go build -o /usr/local/bin ./cmd/flux
|
|
|
|
# Find or download setup-envtest
|
|
setup-envtest:
|
|
ifeq (, $(shell which setup-envtest))
|
|
@{ \
|
|
set -e ;\
|
|
SETUP_ENVTEST_TMP_DIR=$$(mktemp -d) ;\
|
|
cd $$SETUP_ENVTEST_TMP_DIR ;\
|
|
go mod init tmp ;\
|
|
go get sigs.k8s.io/controller-runtime/tools/setup-envtest@latest ;\
|
|
rm -rf $$SETUP_ENVTEST_TMP_DIR ;\
|
|
}
|
|
SETUP_ENVTEST=$(GOBIN)/setup-envtest
|
|
else
|
|
SETUP_ENVTEST=$(shell which setup-envtest)
|
|
endif
|