From 44eb4d4a9481bb6c98c8d89c2769be04f74007cb Mon Sep 17 00:00:00 2001 From: mmetc <92726601+mmetc@users.noreply.github.com> Date: Mon, 18 Dec 2023 10:13:08 +0100 Subject: [PATCH] Makefile: "make help" target, remove obsolete "notification-email" target (#2282) --- Makefile | 48 +++++++++++++++++++----------------------------- mk/help.mk | 5 +++++ test/bats.mk | 23 +++++++++-------------- 3 files changed, 33 insertions(+), 43 deletions(-) create mode 100644 mk/help.mk diff --git a/Makefile b/Makefile index da384923d..66ad2e025 100644 --- a/Makefile +++ b/Makefile @@ -128,11 +128,10 @@ endif #-------------------------------------- .PHONY: build -build: pre-build goversion crowdsec cscli plugins +build: pre-build goversion crowdsec cscli plugins ## Build crowdsec, cscli and plugins -# Sanity checks and build information .PHONY: pre-build -pre-build: +pre-build: ## Sanity checks and build information $(info Building $(BUILD_VERSION) ($(BUILD_TAG)) $(BUILD_TYPE) for $(GOOS)/$(GOARCH)) ifneq (,$(RE2_FAIL)) @@ -153,14 +152,14 @@ ifeq ($(call bool,$(TEST_COVERAGE)),1) $(info Test coverage collection enabled) endif +# intentional, empty line $(info ) - .PHONY: all -all: clean test build +all: clean test build ## Clean, test and build (requires localstack) .PHONY: plugins -plugins: +plugins: ## Build notification plugins @$(foreach plugin,$(PLUGINS), \ $(MAKE) -C $(PLUGINS_DIR_PREFIX)$(plugin) build $(MAKE_FLAGS); \ ) @@ -184,7 +183,7 @@ clean-rpm: @$(RM) -r rpm/SRPMS .PHONY: clean -clean: clean-debian clean-rpm testclean +clean: clean-debian clean-rpm testclean ## Remove build artifacts @$(MAKE) -C $(CROWDSEC_FOLDER) clean $(MAKE_FLAGS) @$(MAKE) -C $(CSCLI_FOLDER) clean $(MAKE_FLAGS) @$(RM) $(CROWDSEC_BIN) $(WIN_IGNORE_ERR) @@ -196,21 +195,16 @@ clean: clean-debian clean-rpm testclean ) .PHONY: cscli -cscli: goversion +cscli: goversion ## Build cscli @$(MAKE) -C $(CSCLI_FOLDER) build $(MAKE_FLAGS) .PHONY: crowdsec -crowdsec: goversion +crowdsec: goversion ## Build crowdsec @$(MAKE) -C $(CROWDSEC_FOLDER) build $(MAKE_FLAGS) -.PHONY: notification-email -notification-email: goversion - @$(MAKE) -C cmd/notification-email build $(MAKE_FLAGS) - - .PHONY: testclean -testclean: bats-clean +testclean: bats-clean ## Remove test artifacts @$(RM) pkg/apiserver/ent $(WIN_IGNORE_ERR) @$(RM) pkg/cwhub/hubdir $(WIN_IGNORE_ERR) @$(RM) pkg/cwhub/install $(WIN_IGNORE_ERR) @@ -224,35 +218,33 @@ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY testenv: @echo 'NOTE: You need Docker, docker-compose and run "make localstack" in a separate shell ("make localstack-stop" to terminate it)' -# run the tests with localstack .PHONY: test -test: testenv goversion +test: testenv goversion ## Run unit tests with localstack $(GOTEST) $(LD_OPTS) ./... -# run the tests with localstack and coverage .PHONY: go-acc -go-acc: testenv goversion +go-acc: testenv goversion ## Run unit tests with localstack + coverage go-acc ./... -o coverage.out --ignore database,notifications,protobufs,cwversion,cstest,models -- $(LD_OPTS) # mock AWS services .PHONY: localstack -localstack: +localstack: ## Run localstack containers (required for unit testing) docker-compose -f test/localstack/docker-compose.yml up .PHONY: localstack-stop -localstack-stop: +localstack-stop: ## Stop localstack containers docker-compose -f test/localstack/docker-compose.yml down # build vendor.tgz to be distributed with the release .PHONY: vendor -vendor: vendor-remove +vendor: vendor-remove ## CI only - vendor dependencies and archive them for packaging $(GO) mod vendor tar czf vendor.tgz vendor tar --create --auto-compress --file=$(RELDIR)-vendor.tar.xz vendor # remove vendor directories and vendor.tgz .PHONY: vendor-remove -vendor-remove: +vendor-remove: ## Remove vendor dependencies and archives $(RM) vendor vendor.tgz *-vendor.tar.xz .PHONY: package @@ -284,18 +276,15 @@ else @if (Test-Path -Path $(RELDIR)) { echo "$(RELDIR) already exists, abort" ; exit 1 ; } endif -# build a release tarball .PHONY: release -release: check_release build package +release: check_release build package ## Build a release tarball -# build the windows installer .PHONY: windows_installer -windows_installer: build +windows_installer: build ## Windows - build the installer @.\make_installer.ps1 -version $(BUILD_VERSION) -# build the chocolatey package .PHONY: chocolatey -chocolatey: windows_installer +chocolatey: windows_installer ## Windows - build the chocolatey package @.\make_chocolatey.ps1 -version $(BUILD_VERSION) # Include test/bats.mk only if it exists @@ -308,3 +297,4 @@ include test/bats.mk endif include mk/goversion.mk +include mk/help.mk diff --git a/mk/help.mk b/mk/help.mk new file mode 100644 index 000000000..36392255e --- /dev/null +++ b/mk/help.mk @@ -0,0 +1,5 @@ +.PHONY: help +help: + @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) \ + | sed -n 's/^.*:\(.*\): \(.*\)##\(.*\)/\1:\3/p' \ + | awk 'BEGIN {FS = ":"; printf "\033[33m"} {printf "%-20s \033[32m %s\033[0m\n", $$1, $$2}' diff --git a/test/bats.mk b/test/bats.mk index 4fe1dce91..0cc5deb9b 100644 --- a/test/bats.mk +++ b/test/bats.mk @@ -62,12 +62,10 @@ bats-environment: export ENV:=$(ENV) bats-environment: @echo "$${ENV}" > $(TEST_DIR)/.environment.sh -# Verify dependencies and submodules -bats-check-requirements: +bats-check-requirements: ## Check dependencies for functional tests @$(TEST_DIR)/bin/check-requirements -# Install/update some of the tools required to run the tests -bats-update-tools: +bats-update-tools: ## Install/update tools required for functional tests # yq v4.40.4 GOBIN=$(TEST_DIR)/tools go install github.com/mikefarah/yq/v4@1c3d55106075bd37df197b4bc03cb4a413fdb903 # cfssl v1.6.4 @@ -75,42 +73,39 @@ bats-update-tools: GOBIN=$(TEST_DIR)/tools go install github.com/cloudflare/cfssl/cmd/cfssljson@b4d0d877cac528f63db39dfb62d5c96cd3a32a0b # Build and installs crowdsec in a local directory. Rebuilds if already exists. -bats-build: bats-environment +bats-build: bats-environment ## Build binaries for functional tests @$(MKDIR) $(BIN_DIR) $(LOG_DIR) $(PID_DIR) $(BATS_PLUGIN_DIR) @$(MAKE) build DEBUG=1 TEST_COVERAGE=$(TEST_COVERAGE) DEFAULT_CONFIGDIR=$(CONFIG_DIR) DEFAULT_DATADIR=$(DATA_DIR) @install -m 0755 cmd/crowdsec/crowdsec cmd/crowdsec-cli/cscli $(BIN_DIR)/ @install -m 0755 cmd/notification-*/notification-* $(BATS_PLUGIN_DIR)/ # Create a reusable package with initial configuration + data -bats-fixture: bats-check-requirements bats-update-tools +bats-fixture: bats-check-requirements bats-update-tools ## Build fixture for functional tests @echo "Creating functional test fixture." @$(TEST_DIR)/instance-data make # Remove the local crowdsec installation and the fixture config + data # Don't remove LOCAL_DIR directly because it could be / or anything else outside the repo -bats-clean: +bats-clean: ## Remove functional test environment @$(RM) $(TEST_DIR)/local $(WIN_IGNORE_ERR) @$(RM) $(LOCAL_INIT_DIR) $(WIN_IGNORE_ERR) @$(RM) $(TEST_DIR)/dyn-bats/*.bats $(WIN_IGNORE_ERR) @$(RM) test/.environment.sh $(WIN_IGNORE_ERR) @$(RM) test/coverage/* $(WIN_IGNORE_ERR) -# Run the test suite -bats-test: bats-environment +bats-test: bats-environment ## Run functional tests $(TEST_DIR)/run-tests $(TEST_DIR)/bats -# Generate dynamic tests -bats-test-hub: bats-environment bats-check-requirements +bats-test-hub: bats-environment bats-check-requirements ## Run all hub tests @$(TEST_DIR)/bin/generate-hub-tests $(TEST_DIR)/run-tests $(TEST_DIR)/dyn-bats -# Static checks for the test scripts. # Not failproof but they can catch bugs and improve learning of sh/bash -bats-lint: +bats-lint: ## Static checks for the test scripts. @shellcheck --version >/dev/null 2>&1 || (echo "ERROR: shellcheck is required."; exit 1) @shellcheck -x $(TEST_DIR)/bats/*.bats -bats-test-package: bats-environment +bats-test-package: bats-environment ## CI only - test a binary package (deb, rpm, ...) $(TEST_DIR)/instance-data make $(TEST_DIR)/run-tests $(TEST_DIR)/bats $(TEST_DIR)/run-tests $(TEST_DIR)/dyn-bats