Makefile: "make help" target, remove obsolete "notification-email" target (#2282)
This commit is contained in:
parent
822fcdacbb
commit
44eb4d4a94
3 changed files with 33 additions and 43 deletions
48
Makefile
48
Makefile
|
@ -128,11 +128,10 @@ endif
|
||||||
#--------------------------------------
|
#--------------------------------------
|
||||||
|
|
||||||
.PHONY: build
|
.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
|
.PHONY: pre-build
|
||||||
pre-build:
|
pre-build: ## Sanity checks and build information
|
||||||
$(info Building $(BUILD_VERSION) ($(BUILD_TAG)) $(BUILD_TYPE) for $(GOOS)/$(GOARCH))
|
$(info Building $(BUILD_VERSION) ($(BUILD_TAG)) $(BUILD_TYPE) for $(GOOS)/$(GOARCH))
|
||||||
|
|
||||||
ifneq (,$(RE2_FAIL))
|
ifneq (,$(RE2_FAIL))
|
||||||
|
@ -153,14 +152,14 @@ ifeq ($(call bool,$(TEST_COVERAGE)),1)
|
||||||
$(info Test coverage collection enabled)
|
$(info Test coverage collection enabled)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# intentional, empty line
|
||||||
$(info )
|
$(info )
|
||||||
|
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: clean test build
|
all: clean test build ## Clean, test and build (requires localstack)
|
||||||
|
|
||||||
.PHONY: plugins
|
.PHONY: plugins
|
||||||
plugins:
|
plugins: ## Build notification plugins
|
||||||
@$(foreach plugin,$(PLUGINS), \
|
@$(foreach plugin,$(PLUGINS), \
|
||||||
$(MAKE) -C $(PLUGINS_DIR_PREFIX)$(plugin) build $(MAKE_FLAGS); \
|
$(MAKE) -C $(PLUGINS_DIR_PREFIX)$(plugin) build $(MAKE_FLAGS); \
|
||||||
)
|
)
|
||||||
|
@ -184,7 +183,7 @@ clean-rpm:
|
||||||
@$(RM) -r rpm/SRPMS
|
@$(RM) -r rpm/SRPMS
|
||||||
|
|
||||||
.PHONY: clean
|
.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 $(CROWDSEC_FOLDER) clean $(MAKE_FLAGS)
|
||||||
@$(MAKE) -C $(CSCLI_FOLDER) clean $(MAKE_FLAGS)
|
@$(MAKE) -C $(CSCLI_FOLDER) clean $(MAKE_FLAGS)
|
||||||
@$(RM) $(CROWDSEC_BIN) $(WIN_IGNORE_ERR)
|
@$(RM) $(CROWDSEC_BIN) $(WIN_IGNORE_ERR)
|
||||||
|
@ -196,21 +195,16 @@ clean: clean-debian clean-rpm testclean
|
||||||
)
|
)
|
||||||
|
|
||||||
.PHONY: cscli
|
.PHONY: cscli
|
||||||
cscli: goversion
|
cscli: goversion ## Build cscli
|
||||||
@$(MAKE) -C $(CSCLI_FOLDER) build $(MAKE_FLAGS)
|
@$(MAKE) -C $(CSCLI_FOLDER) build $(MAKE_FLAGS)
|
||||||
|
|
||||||
.PHONY: crowdsec
|
.PHONY: crowdsec
|
||||||
crowdsec: goversion
|
crowdsec: goversion ## Build crowdsec
|
||||||
@$(MAKE) -C $(CROWDSEC_FOLDER) build $(MAKE_FLAGS)
|
@$(MAKE) -C $(CROWDSEC_FOLDER) build $(MAKE_FLAGS)
|
||||||
|
|
||||||
.PHONY: notification-email
|
|
||||||
notification-email: goversion
|
|
||||||
@$(MAKE) -C cmd/notification-email build $(MAKE_FLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: testclean
|
.PHONY: testclean
|
||||||
testclean: bats-clean
|
testclean: bats-clean ## Remove test artifacts
|
||||||
@$(RM) pkg/apiserver/ent $(WIN_IGNORE_ERR)
|
@$(RM) pkg/apiserver/ent $(WIN_IGNORE_ERR)
|
||||||
@$(RM) pkg/cwhub/hubdir $(WIN_IGNORE_ERR)
|
@$(RM) pkg/cwhub/hubdir $(WIN_IGNORE_ERR)
|
||||||
@$(RM) pkg/cwhub/install $(WIN_IGNORE_ERR)
|
@$(RM) pkg/cwhub/install $(WIN_IGNORE_ERR)
|
||||||
|
@ -224,35 +218,33 @@ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
|
||||||
testenv:
|
testenv:
|
||||||
@echo 'NOTE: You need Docker, docker-compose and run "make localstack" in a separate shell ("make localstack-stop" to terminate it)'
|
@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
|
.PHONY: test
|
||||||
test: testenv goversion
|
test: testenv goversion ## Run unit tests with localstack
|
||||||
$(GOTEST) $(LD_OPTS) ./...
|
$(GOTEST) $(LD_OPTS) ./...
|
||||||
|
|
||||||
# run the tests with localstack and coverage
|
|
||||||
.PHONY: go-acc
|
.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)
|
go-acc ./... -o coverage.out --ignore database,notifications,protobufs,cwversion,cstest,models -- $(LD_OPTS)
|
||||||
|
|
||||||
# mock AWS services
|
# mock AWS services
|
||||||
.PHONY: localstack
|
.PHONY: localstack
|
||||||
localstack:
|
localstack: ## Run localstack containers (required for unit testing)
|
||||||
docker-compose -f test/localstack/docker-compose.yml up
|
docker-compose -f test/localstack/docker-compose.yml up
|
||||||
|
|
||||||
.PHONY: localstack-stop
|
.PHONY: localstack-stop
|
||||||
localstack-stop:
|
localstack-stop: ## Stop localstack containers
|
||||||
docker-compose -f test/localstack/docker-compose.yml down
|
docker-compose -f test/localstack/docker-compose.yml down
|
||||||
|
|
||||||
# build vendor.tgz to be distributed with the release
|
# build vendor.tgz to be distributed with the release
|
||||||
.PHONY: vendor
|
.PHONY: vendor
|
||||||
vendor: vendor-remove
|
vendor: vendor-remove ## CI only - vendor dependencies and archive them for packaging
|
||||||
$(GO) mod vendor
|
$(GO) mod vendor
|
||||||
tar czf vendor.tgz vendor
|
tar czf vendor.tgz vendor
|
||||||
tar --create --auto-compress --file=$(RELDIR)-vendor.tar.xz vendor
|
tar --create --auto-compress --file=$(RELDIR)-vendor.tar.xz vendor
|
||||||
|
|
||||||
# remove vendor directories and vendor.tgz
|
# remove vendor directories and vendor.tgz
|
||||||
.PHONY: vendor-remove
|
.PHONY: vendor-remove
|
||||||
vendor-remove:
|
vendor-remove: ## Remove vendor dependencies and archives
|
||||||
$(RM) vendor vendor.tgz *-vendor.tar.xz
|
$(RM) vendor vendor.tgz *-vendor.tar.xz
|
||||||
|
|
||||||
.PHONY: package
|
.PHONY: package
|
||||||
|
@ -284,18 +276,15 @@ else
|
||||||
@if (Test-Path -Path $(RELDIR)) { echo "$(RELDIR) already exists, abort" ; exit 1 ; }
|
@if (Test-Path -Path $(RELDIR)) { echo "$(RELDIR) already exists, abort" ; exit 1 ; }
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# build a release tarball
|
|
||||||
.PHONY: release
|
.PHONY: release
|
||||||
release: check_release build package
|
release: check_release build package ## Build a release tarball
|
||||||
|
|
||||||
# build the windows installer
|
|
||||||
.PHONY: windows_installer
|
.PHONY: windows_installer
|
||||||
windows_installer: build
|
windows_installer: build ## Windows - build the installer
|
||||||
@.\make_installer.ps1 -version $(BUILD_VERSION)
|
@.\make_installer.ps1 -version $(BUILD_VERSION)
|
||||||
|
|
||||||
# build the chocolatey package
|
|
||||||
.PHONY: chocolatey
|
.PHONY: chocolatey
|
||||||
chocolatey: windows_installer
|
chocolatey: windows_installer ## Windows - build the chocolatey package
|
||||||
@.\make_chocolatey.ps1 -version $(BUILD_VERSION)
|
@.\make_chocolatey.ps1 -version $(BUILD_VERSION)
|
||||||
|
|
||||||
# Include test/bats.mk only if it exists
|
# Include test/bats.mk only if it exists
|
||||||
|
@ -308,3 +297,4 @@ include test/bats.mk
|
||||||
endif
|
endif
|
||||||
|
|
||||||
include mk/goversion.mk
|
include mk/goversion.mk
|
||||||
|
include mk/help.mk
|
||||||
|
|
5
mk/help.mk
Normal file
5
mk/help.mk
Normal file
|
@ -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}'
|
23
test/bats.mk
23
test/bats.mk
|
@ -62,12 +62,10 @@ bats-environment: export ENV:=$(ENV)
|
||||||
bats-environment:
|
bats-environment:
|
||||||
@echo "$${ENV}" > $(TEST_DIR)/.environment.sh
|
@echo "$${ENV}" > $(TEST_DIR)/.environment.sh
|
||||||
|
|
||||||
# Verify dependencies and submodules
|
bats-check-requirements: ## Check dependencies for functional tests
|
||||||
bats-check-requirements:
|
|
||||||
@$(TEST_DIR)/bin/check-requirements
|
@$(TEST_DIR)/bin/check-requirements
|
||||||
|
|
||||||
# Install/update some of the tools required to run the tests
|
bats-update-tools: ## Install/update tools required for functional tests
|
||||||
bats-update-tools:
|
|
||||||
# yq v4.40.4
|
# yq v4.40.4
|
||||||
GOBIN=$(TEST_DIR)/tools go install github.com/mikefarah/yq/v4@1c3d55106075bd37df197b4bc03cb4a413fdb903
|
GOBIN=$(TEST_DIR)/tools go install github.com/mikefarah/yq/v4@1c3d55106075bd37df197b4bc03cb4a413fdb903
|
||||||
# cfssl v1.6.4
|
# cfssl v1.6.4
|
||||||
|
@ -75,42 +73,39 @@ bats-update-tools:
|
||||||
GOBIN=$(TEST_DIR)/tools go install github.com/cloudflare/cfssl/cmd/cfssljson@b4d0d877cac528f63db39dfb62d5c96cd3a32a0b
|
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.
|
# 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)
|
@$(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)
|
@$(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/crowdsec/crowdsec cmd/crowdsec-cli/cscli $(BIN_DIR)/
|
||||||
@install -m 0755 cmd/notification-*/notification-* $(BATS_PLUGIN_DIR)/
|
@install -m 0755 cmd/notification-*/notification-* $(BATS_PLUGIN_DIR)/
|
||||||
|
|
||||||
# Create a reusable package with initial configuration + data
|
# 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."
|
@echo "Creating functional test fixture."
|
||||||
@$(TEST_DIR)/instance-data make
|
@$(TEST_DIR)/instance-data make
|
||||||
|
|
||||||
# Remove the local crowdsec installation and the fixture config + data
|
# 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
|
# 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) $(TEST_DIR)/local $(WIN_IGNORE_ERR)
|
||||||
@$(RM) $(LOCAL_INIT_DIR) $(WIN_IGNORE_ERR)
|
@$(RM) $(LOCAL_INIT_DIR) $(WIN_IGNORE_ERR)
|
||||||
@$(RM) $(TEST_DIR)/dyn-bats/*.bats $(WIN_IGNORE_ERR)
|
@$(RM) $(TEST_DIR)/dyn-bats/*.bats $(WIN_IGNORE_ERR)
|
||||||
@$(RM) test/.environment.sh $(WIN_IGNORE_ERR)
|
@$(RM) test/.environment.sh $(WIN_IGNORE_ERR)
|
||||||
@$(RM) test/coverage/* $(WIN_IGNORE_ERR)
|
@$(RM) test/coverage/* $(WIN_IGNORE_ERR)
|
||||||
|
|
||||||
# Run the test suite
|
bats-test: bats-environment ## Run functional tests
|
||||||
bats-test: bats-environment
|
|
||||||
$(TEST_DIR)/run-tests $(TEST_DIR)/bats
|
$(TEST_DIR)/run-tests $(TEST_DIR)/bats
|
||||||
|
|
||||||
# Generate dynamic tests
|
bats-test-hub: bats-environment bats-check-requirements ## Run all hub tests
|
||||||
bats-test-hub: bats-environment bats-check-requirements
|
|
||||||
@$(TEST_DIR)/bin/generate-hub-tests
|
@$(TEST_DIR)/bin/generate-hub-tests
|
||||||
$(TEST_DIR)/run-tests $(TEST_DIR)/dyn-bats
|
$(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
|
# 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 --version >/dev/null 2>&1 || (echo "ERROR: shellcheck is required."; exit 1)
|
||||||
@shellcheck -x $(TEST_DIR)/bats/*.bats
|
@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)/instance-data make
|
||||||
$(TEST_DIR)/run-tests $(TEST_DIR)/bats
|
$(TEST_DIR)/run-tests $(TEST_DIR)/bats
|
||||||
$(TEST_DIR)/run-tests $(TEST_DIR)/dyn-bats
|
$(TEST_DIR)/run-tests $(TEST_DIR)/dyn-bats
|
||||||
|
|
Loading…
Reference in a new issue