From 37887edb29d5c0f1946eee5d28f0b20ae9f6c2f7 Mon Sep 17 00:00:00 2001 From: Sascha Grunert Date: Wed, 4 Sep 2024 11:13:59 +0200 Subject: [PATCH] Add support for `make help` Signed-off-by: Sascha Grunert --- Makefile | 109 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 75 insertions(+), 34 deletions(-) diff --git a/Makefile b/Makefile index f109d82205..5cd7e0afd0 100644 --- a/Makefile +++ b/Makefile @@ -14,64 +14,104 @@ CI_TAG ?= GOLANGCI_LINT_VERSION := v1.60.3 ZEITGEIST_VERSION := v0.4.4 -default: +COLOR:=\\033[36m +NOCOLOR:=\\033[0m +WIDTH:=25 + +all: default + +.PHONY: help +help: ## Display this help. + @awk \ + -v "col=${COLOR}" -v "nocol=${NOCOLOR}" \ + ' \ + BEGIN { \ + FS = ":.*##" ; \ + printf "Usage:\n make %s%s\n", col, nocol \ + } \ + /^[./a-zA-Z_-]+:.*?##/ { \ + printf " %s%-${WIDTH}s%s %s\n", col, $$1, nocol, $$2 \ + } \ + /^##@/ { \ + printf "\n%s\n", substr($$0, 5) \ + } \ + ' $(MAKEFILE_LIST) + +##@ Build targets: + +.PHONY: default +default: ## Build in debug mode. cargo build -release: +.PHONY: release +release: ## Build in release mode. cargo build --release .PHONY: release-static -release-static: +release-static: ## Build the static release binary. RUSTFLAGS="-C target-feature=+crt-static" cargo build --release --target x86_64-unknown-linux-gnu strip -s target/x86_64-unknown-linux-gnu/release/conmonrs ldd target/x86_64-unknown-linux-gnu/release/conmonrs 2>&1 | grep -qE '(statically linked)|(not a dynamic executable)' -lint: lint-rust lint-go +##@ Test targets: +.PHONY: unit +unit: ## Run the unit tests. + cargo test --no-fail-fast + +.PHONY: integration +integration: .install.ginkgo release ## Run the integration tests using the release binary. + export CONMON_BINARY="$(MAKEFILE_PATH)target/release/$(BINARY)" && \ + export RUNTIME_BINARY="$(RUNTIME_PATH)" && \ + export MAX_RSS_KB=10240 && \ + "$(GOTOOLS_BINDIR)/ginkgo" $(TEST_FLAGS) $(GINKGO_FLAGS) + +.PHONY: integration-static +integration-static: .install.ginkgo ## Run the integration tests using the static release binary. + export CONMON_BINARY="$(MAKEFILE_PATH)target/x86_64-unknown-linux-gnu/release/$(BINARY)" && \ + if [ ! -f "$$CONMON_BINARY" ]; then \ + $(MAKE) release-static; \ + fi && \ + export RUNTIME_BINARY="$(RUNTIME_PATH)" && \ + export MAX_RSS_KB=9500 && \ + "$(GOTOOLS_BINDIR)/ginkgo" $(TEST_FLAGS) $(GINKGO_FLAGS) -lint-rust: +##@ Verify targets: + +.PHONY: lint +lint: lint-rust lint-go ## Lint Rust and Go sources. + +.PHONY: lint-rust +lint-rust: ## Lint the Rust sources. cargo fmt && git diff --exit-code cargo clippy --all-targets --all-features -- -D warnings -lint-go: .install.golangci-lint +.PHONY: lint-go +lint-go: .install.golangci-lint ## Lint the Go sources. $(GOTOOLS_BINDIR)/golangci-lint version $(GOTOOLS_BINDIR)/golangci-lint linters GL_DEBUG=gocritic $(GOTOOLS_BINDIR)/golangci-lint run .PHONY: verify-dependencies -verify-dependencies: $(GOTOOLS_BINDIR)/zeitgeist +verify-dependencies: $(GOTOOLS_BINDIR)/zeitgeist ## Verify the local dependencies. $(GOTOOLS_BINDIR)/zeitgeist validate --local-only --base-path . --config dependencies.yaml .PHONY: verify-prettier verify-prettier: prettier ## Run prettier on the project. ./hack/tree_status.sh +##@ Utility targets: + .PHONY: prettier prettier: ## Prettify supported files. $(CONTAINER_RUNTIME) run -it --privileged -v ${PWD}:/w -w /w --entrypoint bash node:latest -c \ 'npm install -g prettier && prettier -w .' -unit: - cargo test --no-fail-fast - -integration: .install.ginkgo release # It needs to be release so we correctly test the RSS usage - export CONMON_BINARY="$(MAKEFILE_PATH)target/release/$(BINARY)" && \ - export RUNTIME_BINARY="$(RUNTIME_PATH)" && \ - export MAX_RSS_KB=10240 && \ - "$(GOTOOLS_BINDIR)/ginkgo" $(TEST_FLAGS) $(GINKGO_FLAGS) - -integration-static: .install.ginkgo # It needs to be release so we correctly test the RSS usage - export CONMON_BINARY="$(MAKEFILE_PATH)target/x86_64-unknown-linux-gnu/release/$(BINARY)" && \ - if [ ! -f "$$CONMON_BINARY" ]; then \ - $(MAKE) release-static; \ - fi && \ - export RUNTIME_BINARY="$(RUNTIME_PATH)" && \ - export MAX_RSS_KB=9500 && \ - "$(GOTOOLS_BINDIR)/ginkgo" $(TEST_FLAGS) $(GINKGO_FLAGS) - +.PHONY: .install.ginkgo .install.ginkgo: GOBIN=$(abspath $(GOTOOLS_BINDIR)) \ go install "github.com/onsi/ginkgo/v2/ginkgo@$$(go list -m -f {{.Version}} github.com/onsi/ginkgo/v2)" +.PHONY: .install.golangci-lint .install.golangci-lint: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | \ BINDIR=$(abspath $(GOTOOLS_BINDIR)) sh -s $(GOLANGCI_LINT_VERSION) @@ -82,42 +122,43 @@ $(GOTOOLS_BINDIR)/zeitgeist: https://storage.googleapis.com/k8s-artifacts-sig-release/kubernetes-sigs/zeitgeist/$(ZEITGEIST_VERSION)/zeitgeist-amd64-linux chmod +x $(GOTOOLS_BINDIR)/zeitgeist -clean: +.PHONY: clean +clean: ## Cleanup the project files. rm -rf target/ .INTERMEDIATE: internal/proto/conmon.capnp internal/proto/conmon.capnp: cat $(PROTO_PATH)/conmon.capnp $(PROTO_PATH)/go-patch > $@ -update-proto: internal/proto/conmon.capnp + +.PHONY: update-proto +update-proto: internal/proto/conmon.capnp ## Update the Cap'n Proto protocol. $(eval GO_CAPNP_VERSION ?= $(shell grep '^\s*capnproto.org/go/capnp/v3 v3\.' go.mod | grep -o 'v3\..*')) go install capnproto.org/go/capnp/v3/capnpc-go@$(GO_CAPNP_VERSION) capnp compile \ -I$(shell go env GOMODCACHE)/capnproto.org/go/capnp/v3@$(GO_CAPNP_VERSION)/std \ -ogo internal/proto/conmon.capnp -.PHONY: lint lint-go lint-rust clean unit integration update-proto - .PHONY: create-release-packages -create-release-packages: release +create-release-packages: release ## Create the release tarballs. if [ "$(PACKAGE_NAME)" != "conmonrs-$(CI_TAG)" ]; then \ echo "crate version and tag mismatch" ; \ exit 1 ; \ fi git archive --format tar --prefix=conmonrs-$(CI_TAG)/ $(CI_TAG) | gzip >$(PACKAGE_NAME).tar.gz - .PHONY: install -install: +install: ## Install the binary. mkdir -p "${DESTDIR}$(PREFIX)/bin" install -D -t "${DESTDIR}$(PREFIX)/bin" target/release/conmonrs # Only meant to build the latest HEAD commit + any uncommitted changes # Not a replacement for the distro package .PHONY: rpm -rpm: +rpm: # Build the RPM locally rpkg local -nixpkgs: +.PHONY: nixpkgs +nixpkgs: ## Update the NIX package dependencies. @nix run -f channel:nixpkgs-unstable nix-prefetch-git -- \ --no-deepClone https://github.com/nixos/nixpkgs > nix/nixpkgs.json