2022-09-14 12:22:57 +00:00
i f e q ( $( OS ) , W i n d o w s _ N T )
SHELL := pwsh.exe
.SHELLFLAGS := -NoProfile -Command
2022-09-15 15:12:29 +00:00
CS_ROOT = $( shell ( Get-Location) .Path)
2022-09-14 12:22:57 +00:00
SYSTEM = windows
EXT = .exe
2022-05-17 10:14:59 +00:00
e l s e
2022-09-15 15:12:29 +00:00
CS_ROOT ?= $( shell pwd )
2022-09-14 12:22:57 +00:00
SYSTEM ?= $( shell uname -s | tr '[A-Z]' '[a-z]' )
2022-05-17 10:14:59 +00:00
e n d i f
2021-03-26 16:42:56 +00:00
2022-03-15 10:19:35 +00:00
i f n e q ( "$(wildcard $(CURDIR)/platform/$(SYSTEM).mk)" , "" )
include $( CURDIR) /platform/$( SYSTEM) .mk
2021-03-26 16:42:56 +00:00
e l s e
2022-03-15 10:19:35 +00:00
include $( CURDIR) /platform/linux.mk
2021-03-26 16:42:56 +00:00
e n d i f
2022-09-14 12:22:57 +00:00
i f n e q ( $( OS ) , W i n d o w s _ N T )
2022-09-15 15:12:29 +00:00
include $( CS_ROOT) /platform/unix_common.mk
2022-05-17 10:14:59 +00:00
e n d i f
2022-01-06 10:20:59 +00:00
2022-05-17 10:14:59 +00:00
CROWDSEC_FOLDER = ./cmd/crowdsec
CSCLI_FOLDER = ./cmd/crowdsec-cli/
2022-01-06 10:20:59 +00:00
2022-05-17 10:14:59 +00:00
HTTP_PLUGIN_FOLDER = ./plugins/notifications/http
SLACK_PLUGIN_FOLDER = ./plugins/notifications/slack
SPLUNK_PLUGIN_FOLDER = ./plugins/notifications/splunk
EMAIL_PLUGIN_FOLDER = ./plugins/notifications/email
DUMMY_PLUGIN_FOLDER = ./plugins/notifications/dummy
2022-01-06 10:20:59 +00:00
2022-05-17 10:14:59 +00:00
HTTP_PLUGIN_BIN = notification-http$( EXT)
SLACK_PLUGIN_BIN = notification-slack$( EXT)
SPLUNK_PLUGIN_BIN = notification-splunk$( EXT)
EMAIL_PLUGIN_BIN = notification-email$( EXT)
DUMMY_PLUGIN_BIN = notification-dummy$( EXT)
2022-01-06 10:20:59 +00:00
2022-05-17 10:14:59 +00:00
HTTP_PLUGIN_CONFIG = http.yaml
SLACK_PLUGIN_CONFIG = slack.yaml
SPLUNK_PLUGIN_CONFIG = splunk.yaml
EMAIL_PLUGIN_CONFIG = email.yaml
CROWDSEC_BIN = crowdsec$( EXT)
CSCLI_BIN = cscli$( EXT)
BUILD_CMD = build
2020-05-15 09:39:16 +00:00
2020-10-29 09:07:03 +00:00
MINIMUM_SUPPORTED_GO_MAJOR_VERSION = 1
2023-02-15 13:27:17 +00:00
MINIMUM_SUPPORTED_GO_MINOR_VERSION = 20
2022-12-02 12:04:00 +00:00
go_major_minor = $( subst ., ,$( BUILD_GOVERSION) )
GO_MAJOR_VERSION = $( word 1, $( go_major_minor) )
GO_MINOR_VERSION = $( word 2, $( go_major_minor) )
2022-02-15 10:09:58 +00:00
GO_VERSION_VALIDATION_ERR_MSG = Golang version ( $( BUILD_GOVERSION) ) is not supported, please use at least $( MINIMUM_SUPPORTED_GO_MAJOR_VERSION) .$( MINIMUM_SUPPORTED_GO_MINOR_VERSION)
2023-01-19 21:24:45 +00:00
GO_MODULE_NAME = github.com/crowdsecurity/crowdsec
2022-02-04 12:02:45 +00:00
LD_OPTS_VARS = \
2023-01-19 21:24:45 +00:00
- X '$(GO_MODULE_NAME)/cmd/crowdsec.bincoverTesting=$(BINCOVER_TESTING)' \
- X '$(GO_MODULE_NAME)/cmd/crowdsec-cli.bincoverTesting=$(BINCOVER_TESTING)' \
- X '$(GO_MODULE_NAME)/pkg/cwversion.Version=$(BUILD_VERSION)' \
- X '$(GO_MODULE_NAME)/pkg/cwversion.BuildDate=$(BUILD_TIMESTAMP)' \
- X '$(GO_MODULE_NAME)/pkg/cwversion.Codename=$(BUILD_CODENAME)' \
- X '$(GO_MODULE_NAME)/pkg/cwversion.Tag=$(BUILD_TAG)' \
- X '$(GO_MODULE_NAME)/pkg/csconfig.defaultConfigDir=$(DEFAULT_CONFIGDIR)' \
- X '$(GO_MODULE_NAME)/pkg/csconfig.defaultDataDir=$(DEFAULT_DATADIR)'
2021-04-26 12:45:52 +00:00
2022-09-14 12:22:57 +00:00
i f d e f B U I L D _ S T A T I C
export LD_OPTS = -ldflags " -s -w $( LD_OPTS_VARS) -extldflags '-static' " -tags netgo,osusergo,sqlite_omit_load_extension
e l s e
export LD_OPTS = -ldflags " -s -w $( LD_OPTS_VARS) "
e n d i f
2021-04-26 12:45:52 +00:00
2022-09-14 12:22:57 +00:00
GOCMD = go
GOTEST = $( GOCMD) test
2022-02-14 21:21:19 +00:00
2020-05-15 09:39:16 +00:00
RELDIR = crowdsec-$( BUILD_VERSION)
2022-02-01 08:22:47 +00:00
.PHONY : build
2021-08-25 09:43:29 +00:00
build : goversion crowdsec cscli plugins
2020-05-15 09:39:16 +00:00
2022-02-18 17:09:19 +00:00
.PHONY : all
all : clean test build
2022-02-01 08:22:47 +00:00
.PHONY : plugins
2022-03-16 08:30:04 +00:00
plugins : http -plugin slack -plugin splunk -plugin email -plugin dummy -plugin
2021-08-25 09:43:29 +00:00
2022-09-14 12:22:57 +00:00
.PHONY : goversion
2020-05-15 09:39:16 +00:00
goversion :
2022-09-14 12:22:57 +00:00
i f n e q ( $( OS ) , W i n d o w s _ N T )
2020-10-29 09:07:03 +00:00
@if [ $( GO_MAJOR_VERSION) -gt $( MINIMUM_SUPPORTED_GO_MAJOR_VERSION) ] ; then \
2022-09-14 12:22:57 +00:00
exit 0 ; \
elif [ $( GO_MAJOR_VERSION) -lt $( MINIMUM_SUPPORTED_GO_MAJOR_VERSION) ] ; then \
echo '$(GO_VERSION_VALIDATION_ERR_MSG)' ; \
exit 1; \
elif [ $( GO_MINOR_VERSION) -lt $( MINIMUM_SUPPORTED_GO_MINOR_VERSION) ] ; then \
echo '$(GO_VERSION_VALIDATION_ERR_MSG)' ; \
exit 1; \
fi
2022-05-17 10:14:59 +00:00
e l s e
2022-09-14 12:22:57 +00:00
# This needs Set-ExecutionPolicy -Scope CurrentUser Unrestricted
2022-09-15 15:12:29 +00:00
@$( CS_ROOT) /scripts/check_go_version.ps1 $( MINIMUM_SUPPORTED_GO_MAJOR_VERSION) $( MINIMUM_SUPPORTED_GO_MINOR_VERSION)
2022-05-17 10:14:59 +00:00
e n d i f
2020-06-11 13:03:43 +00:00
2022-02-01 08:22:47 +00:00
.PHONY : clean
2022-02-14 21:21:19 +00:00
clean : testclean
2022-05-17 10:14:59 +00:00
@$( MAKE) -C $( CROWDSEC_FOLDER) clean --no-print-directory RM = " $( RM) " WIN_IGNORE_ERR = " $( WIN_IGNORE_ERR) " CP = " $( CP) " CPR = " $( CPR) " MKDIR = " $( MKDIR) "
@$( MAKE) -C $( CSCLI_FOLDER) clean --no-print-directory RM = " $( RM) " WIN_IGNORE_ERR = " $( WIN_IGNORE_ERR) " CP = " $( CP) " CPR = " $( CPR) " MKDIR = " $( MKDIR) "
@$( RM) $( CROWDSEC_BIN) $( WIN_IGNORE_ERR)
@$( RM) $( CSCLI_BIN) $( WIN_IGNORE_ERR)
@$( RM) *.log $( WIN_IGNORE_ERR)
@$( RM) crowdsec-release.tgz $( WIN_IGNORE_ERR)
@$( RM) crowdsec-release-static.tgz $( WIN_IGNORE_ERR)
@$( RM) $( HTTP_PLUGIN_FOLDER) /$( HTTP_PLUGIN_BIN) $( WIN_IGNORE_ERR)
@$( RM) $( SLACK_PLUGIN_FOLDER) /$( SLACK_PLUGIN_BIN) $( WIN_IGNORE_ERR)
@$( RM) $( SPLUNK_PLUGIN_FOLDER) /$( SPLUNK_PLUGIN_BIN) $( WIN_IGNORE_ERR)
@$( RM) $( EMAIL_PLUGIN_FOLDER) /$( EMAIL_PLUGIN_BIN) $( WIN_IGNORE_ERR)
@$( RM) $( DUMMY_PLUGIN_FOLDER) /$( DUMMY_PLUGIN_BIN) $( WIN_IGNORE_ERR)
2020-05-15 09:39:16 +00:00
2022-02-14 21:21:19 +00:00
2021-08-25 09:43:29 +00:00
cscli : goversion
2022-05-17 10:14:59 +00:00
@$( MAKE) -C $( CSCLI_FOLDER) build --no-print-directory GOARCH = $( GOARCH) GOOS = $( GOOS) RM = " $( RM) " WIN_IGNORE_ERR = " $( WIN_IGNORE_ERR) " CP = " $( CP) " CPR = " $( CPR) " MKDIR = " $( MKDIR) "
2020-05-15 09:39:16 +00:00
2022-04-01 09:17:45 +00:00
cscli-bincover : goversion
@GOARCH= $( GOARCH) GOOS = $( GOOS) $( MAKE) -C $( CSCLI_FOLDER) build-bincover --no-print-directory
2021-08-25 09:43:29 +00:00
crowdsec : goversion
2022-05-17 10:14:59 +00:00
@$( MAKE) -C $( CROWDSEC_FOLDER) build --no-print-directory GOARCH = $( GOARCH) GOOS = $( GOOS) RM = " $( RM) " WIN_IGNORE_ERR = " $( WIN_IGNORE_ERR) " CP = " $( CP) " CPR = " $( CPR) " MKDIR = " $( MKDIR) "
2020-05-15 09:39:16 +00:00
2022-04-01 09:17:45 +00:00
crowdsec-bincover : goversion
@GOARCH= $( GOARCH) GOOS = $( GOOS) $( MAKE) -C $( CROWDSEC_FOLDER) build-bincover --no-print-directory
2021-08-25 09:43:29 +00:00
http-plugin : goversion
2022-05-17 10:14:59 +00:00
@$( MAKE) -C $( HTTP_PLUGIN_FOLDER) build --no-print-directory GOARCH = $( GOARCH) GOOS = $( GOOS) RM = " $( RM) " WIN_IGNORE_ERR = " $( WIN_IGNORE_ERR) " CP = " $( CP) " CPR = " $( CPR) " MKDIR = " $( MKDIR) "
2020-05-15 09:39:16 +00:00
2021-08-25 09:43:29 +00:00
slack-plugin : goversion
2022-05-17 10:14:59 +00:00
@$( MAKE) -C $( SLACK_PLUGIN_FOLDER) build --no-print-directory GOARCH = $( GOARCH) GOOS = $( GOOS) RM = " $( RM) " WIN_IGNORE_ERR = " $( WIN_IGNORE_ERR) " CP = " $( CP) " CPR = " $( CPR) " MKDIR = " $( MKDIR) "
2020-05-15 09:39:16 +00:00
2021-08-25 09:43:29 +00:00
splunk-plugin : goversion
2022-05-17 10:14:59 +00:00
@$( MAKE) -C $( SPLUNK_PLUGIN_FOLDER) build --no-print-directory GOARCH = $( GOARCH) GOOS = $( GOOS) RM = " $( RM) " WIN_IGNORE_ERR = " $( WIN_IGNORE_ERR) " WIN_IGNORE_ERR = " $( WIN_IGNORE_ERR) " CP = " $( CP) " CPR = " $( CPR) " MKDIR = " $( MKDIR) "
2020-05-15 09:39:16 +00:00
2022-01-06 10:20:59 +00:00
email-plugin : goversion
2022-05-17 10:14:59 +00:00
@$( MAKE) -C $( EMAIL_PLUGIN_FOLDER) build --no-print-directory GOARCH = $( GOARCH) GOOS = $( GOOS) RM = " $( RM) " WIN_IGNORE_ERR = " $( WIN_IGNORE_ERR) " CP = " $( CP) " CPR = " $( CPR) " MKDIR = " $( MKDIR) "
2021-08-25 09:43:29 +00:00
2022-03-16 08:30:04 +00:00
dummy-plugin : goversion
2022-05-17 10:14:59 +00:00
$( MAKE) -C $( DUMMY_PLUGIN_FOLDER) build --no-print-directory GOARCH = $( GOARCH) GOOS = $( GOOS) RM = " $( RM) " WIN_IGNORE_ERR = " $( WIN_IGNORE_ERR) " CP = " $( CP) " CPR = " $( CPR) " MKDIR = " $( MKDIR) "
2022-03-16 08:30:04 +00:00
2022-02-14 21:21:19 +00:00
.PHONY : testclean
2022-03-09 13:45:36 +00:00
testclean : bats -clean
2022-05-17 10:14:59 +00:00
@$( RM) pkg/apiserver/ent $( WIN_IGNORE_ERR)
@$( RM) pkg/cwhub/hubdir $( WIN_IGNORE_ERR)
2022-05-17 13:54:52 +00:00
@$( RM) pkg/cwhub/install $( WIN_IGNORE_ERR)
@$( RM) pkg/types/example.txt $( WIN_IGNORE_ERR)
2022-02-14 21:21:19 +00:00
.PHONY : test
2022-05-17 13:54:52 +00:00
test : export AWS_ENDPOINT_FORCE =http ://localhost :4566
2021-08-25 09:43:29 +00:00
test : goversion
2022-06-16 14:13:48 +00:00
@echo 'NOTE: You need Docker, docker-compose and run "make localstack" in a separate shell ("make localstack-stop" to terminate it)'
2022-02-14 21:21:19 +00:00
$( GOTEST) $( LD_OPTS) ./...
2021-08-25 09:43:29 +00:00
2022-05-17 13:54:52 +00:00
.PHONY : localstack
localstack :
2023-03-03 14:54:49 +00:00
docker-compose -f test/localstack/docker-compose.yml up
2022-05-17 13:54:52 +00:00
2022-06-16 14:13:48 +00:00
.PHONY : localstack -stop
localstack-stop :
2023-03-03 14:54:49 +00:00
docker-compose -f test/localstack/docker-compose.yml down
2022-06-16 14:13:48 +00:00
2022-03-15 10:19:35 +00:00
package-common :
2022-05-17 10:14:59 +00:00
@echo " Building Release to dir $( RELDIR) "
@$( MKDIR) $( RELDIR) /cmd/crowdsec
@$( MKDIR) $( RELDIR) /cmd/crowdsec-cli
@$( MKDIR) $( RELDIR) /$( subst ./,,$( HTTP_PLUGIN_FOLDER) )
@$( MKDIR) $( RELDIR) /$( subst ./,,$( SLACK_PLUGIN_FOLDER) )
@$( MKDIR) $( RELDIR) /$( subst ./,,$( SPLUNK_PLUGIN_FOLDER) )
@$( MKDIR) $( RELDIR) /$( subst ./,,$( EMAIL_PLUGIN_FOLDER) )
@$( CP) $( CROWDSEC_FOLDER) /$( CROWDSEC_BIN) $( RELDIR) /cmd/crowdsec
@$( CP) $( CSCLI_FOLDER) /$( CSCLI_BIN) $( RELDIR) /cmd/crowdsec-cli
@$( CP) $( HTTP_PLUGIN_FOLDER) /$( HTTP_PLUGIN_BIN) $( RELDIR) /$( subst ./,,$( HTTP_PLUGIN_FOLDER) )
@$( CP) $( SLACK_PLUGIN_FOLDER) /$( SLACK_PLUGIN_BIN) $( RELDIR) /$( subst ./,,$( SLACK_PLUGIN_FOLDER) )
@$( CP) $( SPLUNK_PLUGIN_FOLDER) /$( SPLUNK_PLUGIN_BIN) $( RELDIR) /$( subst ./,,$( SPLUNK_PLUGIN_FOLDER) )
@$( CP) $( EMAIL_PLUGIN_FOLDER) /$( EMAIL_PLUGIN_BIN) $( RELDIR) /$( subst ./,,$( EMAIL_PLUGIN_FOLDER) )
@$( CP) $( HTTP_PLUGIN_FOLDER) /$( HTTP_PLUGIN_CONFIG) $( RELDIR) /$( subst ./,,$( HTTP_PLUGIN_FOLDER) )
@$( CP) $( SLACK_PLUGIN_FOLDER) /$( SLACK_PLUGIN_CONFIG) $( RELDIR) /$( subst ./,,$( SLACK_PLUGIN_FOLDER) )
@$( CP) $( SPLUNK_PLUGIN_FOLDER) /$( SPLUNK_PLUGIN_CONFIG) $( RELDIR) /$( subst ./,,$( SPLUNK_PLUGIN_FOLDER) )
@$( CP) $( EMAIL_PLUGIN_FOLDER) /$( EMAIL_PLUGIN_CONFIG) $( RELDIR) /$( subst ./,,$( EMAIL_PLUGIN_FOLDER) )
@$( CPR) ./config $( RELDIR)
@$( CP) wizard.sh $( RELDIR)
@$( CP) scripts/test_env.sh $( RELDIR)
@$( CP) scripts/test_env.ps1 $( RELDIR)
2021-09-14 13:32:35 +00:00
2022-03-15 10:19:35 +00:00
.PHONY : package
package : package -common
@tar cvzf crowdsec-release.tgz $( RELDIR)
2022-01-06 10:20:59 +00:00
2021-08-25 09:43:29 +00:00
.PHONY : check_release
check_release :
2022-09-14 12:22:57 +00:00
i f n e q ( $( OS ) , W i n d o w s _ N T )
2021-08-25 09:43:29 +00:00
@if [ -d $( RELDIR) ] ; then echo " $( RELDIR) already exists, abort " ; exit 1 ; fi
2022-05-17 10:14:59 +00:00
e l s e
@if ( Test-Path -Path $( RELDIR) ) { echo " $( RELDIR) already exists, abort " ; exit 1 ; }
e n d i f
2021-08-25 09:43:29 +00:00
2022-02-01 08:22:47 +00:00
.PHONY : release
2021-08-25 09:43:29 +00:00
release : check_release build package
2022-05-17 10:14:59 +00:00
.PHONY : windows_installer
windows_installer : build
@.\m ake_installer.ps1 -version $( BUILD_VERSION)
.PHONY : chocolatey
chocolatey : windows_installer
@.\m ake_chocolatey.ps1 -version $( BUILD_VERSION)
2022-03-09 13:45:36 +00:00
2023-03-03 14:54:49 +00:00
# Include test/bats.mk only if it exists
2023-01-25 09:39:23 +00:00
# to allow building without a test/ directory
# (i.e. inside docker)
2023-03-03 14:54:49 +00:00
i f e q ( , $( wildcard test /bats .mk ) )
2023-01-25 09:39:23 +00:00
bats-clean :
e l s e
2023-03-03 14:54:49 +00:00
i n c l u d e t e s t / b a t s . m k
2023-01-25 09:39:23 +00:00
e n d i f