github.com/xzl8028/xenia-server@v0.0.0-20190809101854-18450a97da63/Makefile (about) 1 .PHONY: build package run stop run-client run-server stop-client stop-server restart restart-server restart-client start-docker clean-dist clean nuke check-style check-client-style check-server-style check-unit-tests test dist setup-mac prepare-enteprise run-client-tests setup-run-client-tests cleanup-run-client-tests test-client build-linux build-osx build-windows internal-test-web-client vet run-server-for-web-client-tests 2 3 ROOT := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) 4 5 IS_CI ?= false 6 # Build Flags 7 BUILD_NUMBER ?= $(BUILD_NUMBER:) 8 BUILD_DATE = $(shell date -u) 9 BUILD_HASH = $(shell git rev-parse HEAD) 10 # If we don't set the build number it defaults to dev 11 ifeq ($(BUILD_NUMBER),) 12 BUILD_NUMBER := dev 13 endif 14 BUILD_ENTERPRISE_DIR ?= ../enterprise 15 BUILD_ENTERPRISE ?= true 16 BUILD_ENTERPRISE_READY = false 17 BUILD_TYPE_NAME = team 18 BUILD_HASH_ENTERPRISE = none 19 LDAP_DATA ?= test 20 ifneq ($(wildcard $(BUILD_ENTERPRISE_DIR)/.),) 21 ifeq ($(BUILD_ENTERPRISE),true) 22 BUILD_ENTERPRISE_READY = true 23 BUILD_TYPE_NAME = enterprise 24 BUILD_HASH_ENTERPRISE = $(shell cd $(BUILD_ENTERPRISE_DIR) && git rev-parse HEAD) 25 else 26 BUILD_ENTERPRISE_READY = false 27 BUILD_TYPE_NAME = team 28 endif 29 else 30 BUILD_ENTERPRISE_READY = false 31 BUILD_TYPE_NAME = team 32 endif 33 BUILD_WEBAPP_DIR ?= ../xenia-webapp 34 BUILD_CLIENT = false 35 BUILD_HASH_CLIENT = independant 36 ifneq ($(wildcard $(BUILD_WEBAPP_DIR)/.),) 37 ifeq ($(BUILD_CLIENT),true) 38 BUILD_CLIENT = true 39 BUILD_HASH_CLIENT = $(shell cd $(BUILD_WEBAPP_DIR) && git rev-parse HEAD) 40 else 41 BUILD_CLIENT = false 42 endif 43 else 44 BUILD_CLIENT = false 45 endif 46 47 # Golang Flags 48 GOPATH ?= $(shell go env GOPATH) 49 GOFLAGS ?= $(GOFLAGS:) 50 GO=go 51 DELVE=dlv 52 LDFLAGS += -X "github.com/xzl8028/xenia-server/model.BuildNumber=$(BUILD_NUMBER)" 53 LDFLAGS += -X "github.com/xzl8028/xenia-server/model.BuildDate=$(BUILD_DATE)" 54 LDFLAGS += -X "github.com/xzl8028/xenia-server/model.BuildHash=$(BUILD_HASH)" 55 LDFLAGS += -X "github.com/xzl8028/xenia-server/model.BuildHashEnterprise=$(BUILD_HASH_ENTERPRISE)" 56 LDFLAGS += -X "github.com/xzl8028/xenia-server/model.BuildEnterpriseReady=$(BUILD_ENTERPRISE_READY)" 57 58 # GOOS/GOARCH of the build host, used to determine whether we're cross-compiling or not 59 BUILDER_GOOS_GOARCH="$(shell $(GO) env GOOS)_$(shell $(GO) env GOARCH)" 60 61 PLATFORM_FILES="./cmd/xenia/main.go" 62 63 # Output paths 64 DIST_ROOT=dist 65 DIST_PATH=$(DIST_ROOT)/xenia 66 67 # Tests 68 TESTS=. 69 70 TESTFLAGS ?= -short 71 TESTFLAGSEE ?= -short 72 73 # Packages lists 74 TE_PACKAGES=$(shell go list ./...|grep -v plugin_tests) 75 76 # Plugins Packages 77 PLUGIN_PACKAGES=xenia-plugin-zoom-v1.0.7 78 PLUGIN_PACKAGES += xenia-plugin-autolink-v1.0.0 79 PLUGIN_PACKAGES += xenia-plugin-nps-v1.0.0 80 PLUGIN_PACKAGES += xenia-plugin-custom-attributes-v1.0.0 81 PLUGIN_PACKAGES += xenia-plugin-github-v0.10.2 82 PLUGIN_PACKAGES += xenia-plugin-welcomebot-v1.0.0 83 PLUGIN_PACKAGES += xenia-plugin-aws-SNS-v1.0.0 84 PLUGIN_PACKAGES += xenia-plugin-jira-v2.0.6 85 86 # Prepares the enterprise build if exists. The IGNORE stuff is a hack to get the Makefile to execute the commands outside a target 87 ifeq ($(BUILD_ENTERPRISE_READY),true) 88 IGNORE:=$(shell echo Enterprise build selected, preparing) 89 IGNORE:=$(shell rm -f imports/imports.go) 90 IGNORE:=$(shell cp $(BUILD_ENTERPRISE_DIR)/imports/imports.go imports/) 91 IGNORE:=$(shell rm -f enterprise) 92 IGNORE:=$(shell ln -s $(BUILD_ENTERPRISE_DIR) enterprise) 93 else 94 IGNORE:=$(shell rm -f imports/imports.go) 95 endif 96 97 EE_PACKAGES=$(shell go list ./enterprise/...) 98 99 ifeq ($(BUILD_ENTERPRISE_READY),true) 100 ALL_PACKAGES=$(TE_PACKAGES) $(EE_PACKAGES) 101 else 102 ALL_PACKAGES=$(TE_PACKAGES) 103 endif 104 105 106 all: run ## Alias for 'run'. 107 108 include build/*.mk 109 110 start-docker: ## Starts the docker containers for local development. 111 ifeq ($(IS_CI),false) 112 @echo Starting docker containers 113 114 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-mysql$$ | wc -l) -eq 0 ]; then \ 115 echo starting xenia-mysql; \ 116 docker run --name xenia-mysql -p 3306:3306 \ 117 -e MYSQL_ROOT_PASSWORD=mostest \ 118 -e MYSQL_USER=mmuser \ 119 -e MYSQL_PASSWORD=mostest \ 120 -e MYSQL_DATABASE=xenia_test \ 121 -d mysql:5.7 > /dev/null; \ 122 elif [ $(shell docker ps --no-trunc --quiet --filter name=^/xenia-mysql$$ | wc -l) -eq 0 ]; then \ 123 echo restarting xenia-mysql; \ 124 docker start xenia-mysql > /dev/null; \ 125 fi 126 127 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-postgres$$ | wc -l) -eq 0 ]; then \ 128 echo starting xenia-postgres; \ 129 docker run --name xenia-postgres -p 5432:5432 \ 130 -e POSTGRES_USER=mmuser \ 131 -e POSTGRES_PASSWORD=mostest \ 132 -e POSTGRES_DB=xenia_test \ 133 -d postgres:9.4 > /dev/null; \ 134 elif [ $(shell docker ps --no-trunc --quiet --filter name=^/xenia-postgres$$ | wc -l) -eq 0 ]; then \ 135 echo restarting xenia-postgres; \ 136 docker start xenia-postgres > /dev/null; \ 137 fi 138 139 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-inbucket$$ | wc -l) -eq 0 ]; then \ 140 echo starting xenia-inbucket; \ 141 docker run --name xenia-inbucket -p 9000:10080 -p 2500:10025 -d jhillyerd/inbucket:release-1.2.0 > /dev/null; \ 142 elif [ $(shell docker ps --no-trunc --quiet --filter name=^/xenia-inbucket$$ | wc -l) -eq 0 ]; then \ 143 echo restarting xenia-inbucket; \ 144 docker start xenia-inbucket > /dev/null; \ 145 fi 146 147 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-minio$$ | wc -l) -eq 0 ]; then \ 148 echo starting xenia-minio; \ 149 docker run --name xenia-minio -p 9001:9000 -e "MINIO_ACCESS_KEY=minioaccesskey" \ 150 -e "MINIO_SSE_MASTER_KEY=my-minio-key:6368616e676520746869732070617373776f726420746f206120736563726574" \ 151 -e "MINIO_SECRET_KEY=miniosecretkey" -d minio/minio:RELEASE.2019-04-23T23-50-36Z server /data > /dev/null; \ 152 docker exec -it xenia-minio /bin/sh -c "mkdir -p /data/xenia-test" > /dev/null; \ 153 elif [ $(shell docker ps --no-trunc --quiet --filter name=^/xenia-minio$$ | wc -l) -eq 0 ]; then \ 154 echo restarting xenia-minio; \ 155 docker start xenia-minio > /dev/null; \ 156 fi 157 158 ifeq ($(BUILD_ENTERPRISE_READY),true) 159 @echo Ldap test user test.one 160 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-openldap$$ | wc -l) -eq 0 ]; then \ 161 echo starting xenia-openldap; \ 162 docker run --name xenia-openldap -p 389:389 -p 636:636 \ 163 -e LDAP_TLS_VERIFY_CLIENT="never" \ 164 -e LDAP_ORGANISATION="Xenia Test" \ 165 -e LDAP_DOMAIN="mm.test.com" \ 166 -e LDAP_ADMIN_PASSWORD="mostest" \ 167 -d osixia/openldap:1.2.2 > /dev/null;\ 168 sleep 10; \ 169 docker cp tests/test-data.ldif xenia-openldap:/test-data.ldif;\ 170 docker cp tests/qa-data.ldif xenia-openldap:/qa-data.ldif;\ 171 docker exec -ti xenia-openldap bash -c 'ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest -f /$(LDAP_DATA)-data.ldif';\ 172 elif [ $(shell docker ps | grep -ci xenia-openldap) -eq 0 ]; then \ 173 echo restarting xenia-openldap; \ 174 docker start xenia-openldap > /dev/null; \ 175 sleep 10; \ 176 fi 177 178 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-elasticsearch$$ | wc -l) -eq 0 ]; then \ 179 echo starting xenia-elasticsearch; \ 180 docker run --name xenia-elasticsearch -p 9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" -e "ES_JAVA_OPTS=-Xms250m -Xmx250m" -d xenia/xenia-elasticsearch-docker:6.5.1 > /dev/null; \ 181 elif [ $(shell docker ps --no-trunc --quiet --filter name=^/xenia-elasticsearch$$ | wc -l) -eq 0 ]; then \ 182 echo restarting xenia-elasticsearch; \ 183 docker start xenia-elasticsearch> /dev/null; \ 184 fi 185 186 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-redis$$ | wc -l) -eq 0 ]; then \ 187 echo starting xenia-redis; \ 188 docker run --name xenia-redis -p 6379:6379 -d redis > /dev/null; \ 189 elif [ $(shell docker ps --no-trunc --quiet --filter name=^/xenia-redis$$ | wc -l) -eq 0 ]; then \ 190 echo restarting xenia-redis; \ 191 docker start xenia-redis > /dev/null; \ 192 fi 193 endif 194 else 195 @echo CI Build: skipping docker start 196 endif 197 198 stop-docker: ## Stops the docker containers for local development. 199 @echo Stopping docker containers 200 201 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-mysql$$ | wc -l) -eq 1 ]; then \ 202 echo stopping xenia-mysql; \ 203 docker stop xenia-mysql > /dev/null; \ 204 fi 205 206 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-mysql-unittest$$ | wc -l) -eq 1 ]; then \ 207 echo stopping xenia-mysql-unittest; \ 208 docker stop xenia-mysql-unittest > /dev/null; \ 209 fi 210 211 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-postgres$$ | wc -l) -eq 1 ]; then \ 212 echo stopping xenia-postgres; \ 213 docker stop xenia-postgres > /dev/null; \ 214 fi 215 216 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-postgres-unittest$$ | wc -l) -eq 1 ]; then \ 217 echo stopping xenia-postgres-unittest; \ 218 docker stop xenia-postgres-unittest > /dev/null; \ 219 fi 220 221 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-openldap$$ | wc -l) -eq 1 ]; then \ 222 echo stopping xenia-openldap; \ 223 docker stop xenia-openldap > /dev/null; \ 224 fi 225 226 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-inbucket$$ | wc -l) -eq 1 ]; then \ 227 echo stopping xenia-inbucket; \ 228 docker stop xenia-inbucket > /dev/null; \ 229 fi 230 231 @if [ $(shell docker ps -a | grep -ci xenia-minio) -eq 1 ]; then \ 232 echo stopping xenia-minio; \ 233 docker stop xenia-minio > /dev/null; \ 234 fi 235 236 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-elasticsearch$$ | wc -l) -eq 1 ]; then \ 237 echo stopping xenia-elasticsearch; \ 238 docker stop xenia-elasticsearch > /dev/null; \ 239 fi 240 241 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-redis$$ | wc -l) -eq 1 ]; then \ 242 echo stopping xenia-redis; \ 243 docker stop xenia-redis > /dev/null; \ 244 fi 245 246 clean-docker: ## Deletes the docker containers for local development. 247 @echo Removing docker containers 248 249 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-mysql$$ | wc -l) -eq 1 ]; then \ 250 echo removing xenia-mysql; \ 251 docker stop xenia-mysql > /dev/null; \ 252 docker rm -v xenia-mysql > /dev/null; \ 253 fi 254 255 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-mysql-unittest$$ | wc -l) -eq 1 ]; then \ 256 echo removing xenia-mysql-unittest; \ 257 docker stop xenia-mysql-unittest > /dev/null; \ 258 docker rm -v xenia-mysql-unittest > /dev/null; \ 259 fi 260 261 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-postgres$$ | wc -l) -eq 1 ]; then \ 262 echo removing xenia-postgres; \ 263 docker stop xenia-postgres > /dev/null; \ 264 docker rm -v xenia-postgres > /dev/null; \ 265 fi 266 267 @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/xenia-postgres-unittest$$ | wc -l) -eq 1 ]; then \ 268 echo removing xenia-postgres-unittest; \ 269 docker stop xenia-postgres-unittest > /dev/null; \ 270 docker rm -v xenia-postgres-unittest > /dev/null; \ 271 fi 272 273 @if [ $(shell docker ps -a | grep -ci xenia-openldap) -eq 1 ]; then \ 274 echo removing xenia-openldap; \ 275 docker stop xenia-openldap > /dev/null; \ 276 docker rm -v xenia-openldap > /dev/null; \ 277 fi 278 279 @if [ $(shell docker ps -a | grep -ci xenia-inbucket) -eq 1 ]; then \ 280 echo removing xenia-inbucket; \ 281 docker stop xenia-inbucket > /dev/null; \ 282 docker rm -v xenia-inbucket > /dev/null; \ 283 fi 284 285 @if [ $(shell docker ps -a | grep -ci xenia-minio) -eq 1 ]; then \ 286 echo removing xenia-minio; \ 287 docker stop xenia-minio > /dev/null; \ 288 docker rm -v xenia-minio > /dev/null; \ 289 fi 290 291 @if [ $(shell docker ps -a | grep -ci xenia-elasticsearch) -eq 1 ]; then \ 292 echo removing xenia-elasticsearch; \ 293 docker stop xenia-elasticsearch > /dev/null; \ 294 docker rm -v xenia-elasticsearch > /dev/null; \ 295 fi 296 297 govet: ## Runs govet against all packages. 298 @echo Running GOVET 299 $(GO) get golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow 300 $(GO) vet $(GOFLAGS) $(ALL_PACKAGES) || exit 1 301 $(GO) vet -vettool=$(GOPATH)/bin/shadow $(GOFLAGS) $(ALL_PACKAGES) || exit 1 302 303 gofmt: ## Runs gofmt against all packages. 304 @echo Running GOFMT 305 306 @for package in $(TE_PACKAGES) $(EE_PACKAGES); do \ 307 echo "Checking "$$package; \ 308 files=$$(go list -f '{{range .GoFiles}}{{$$.Dir}}/{{.}} {{end}}' $$package); \ 309 if [ "$$files" ]; then \ 310 gofmt_output=$$(gofmt -d -s $$files 2>&1); \ 311 if [ "$$gofmt_output" ]; then \ 312 echo "$$gofmt_output"; \ 313 echo "gofmt failure"; \ 314 exit 1; \ 315 fi; \ 316 fi; \ 317 done 318 @echo "gofmt success"; \ 319 320 megacheck: ## Run megacheck on codebasis 321 env GO111MODULE=off go get -u honnef.co/go/tools/cmd/megacheck 322 $(GOPATH)/bin/megacheck $(TE_PACKAGES) 323 324 ifeq ($(BUILD_ENTERPRISE_READY),true) 325 $(GOPATH)/bin/megacheck $(EE_PACKAGES) || exit 1 326 endif 327 328 i18n-extract: ## Extract strings for translation from the source code 329 env GO111MODULE=off go get -u github.com/xzl8028/xenia-utilities/mmgotool 330 $(GOPATH)/bin/mmgotool i18n extract 331 332 store-mocks: ## Creates mock files. 333 env GO111MODULE=off go get -u github.com/vektra/mockery/... 334 $(GOPATH)/bin/mockery -dir store -all -output store/storetest/mocks -note 'Regenerate this file using `make store-mocks`.' 335 336 filesstore-mocks: ## Creates mock files. 337 env GO111MODULE=off go get -u github.com/vektra/mockery/... 338 $(GOPATH)/bin/mockery -dir services/filesstore -all -output services/filesstore/mocks -note 'Regenerate this file using `make filesstore-mocks`.' 339 340 ldap-mocks: ## Creates mock files for ldap. 341 env GO111MODULE=off go get -u github.com/vektra/mockery/... 342 $(GOPATH)/bin/mockery -dir enterprise/ldap -all -output enterprise/ldap/mocks -note 'Regenerate this file using `make ldap-mocks`.' 343 344 plugin-mocks: ## Creates mock files for plugins. 345 env GO111MODULE=off go get -u github.com/vektra/mockery/... 346 $(GOPATH)/bin/mockery -dir plugin -name API -output plugin/plugintest -outpkg plugintest -case underscore -note 'Regenerate this file using `make plugin-mocks`.' 347 $(GOPATH)/bin/mockery -dir plugin -name Hooks -output plugin/plugintest -outpkg plugintest -case underscore -note 'Regenerate this file using `make plugin-mocks`.' 348 $(GOPATH)/bin/mockery -dir plugin -name Helpers -output plugin/plugintest -outpkg plugintest -case underscore -note 'Regenerate this file using `make plugin-mocks`.' 349 350 pluginapi: ## Generates api and hooks glue code for plugins 351 go generate ./plugin 352 353 check-licenses: ## Checks license status. 354 ./scripts/license-check.sh $(TE_PACKAGES) $(EE_PACKAGES) 355 356 check-prereqs: ## Checks prerequisite software status. 357 ./scripts/prereq-check.sh 358 359 check-style: govet gofmt check-licenses ## Runs govet and gofmt against all packages. 360 361 test-te-race: ## Checks for race conditions in the team edition. 362 @echo Testing TE race conditions 363 364 @echo "Packages to test: "$(TE_PACKAGES) 365 366 @for package in $(TE_PACKAGES); do \ 367 echo "Testing "$$package; \ 368 $(GO) test $(GOFLAGS) -race -run=$(TESTS) -test.timeout=4000s $$package || exit 1; \ 369 done 370 371 test-ee-race: ## Checks for race conditions in the enterprise edition. 372 @echo Testing EE race conditions 373 374 ifeq ($(BUILD_ENTERPRISE_READY),true) 375 @echo "Packages to test: "$(EE_PACKAGES) 376 377 for package in $(EE_PACKAGES); do \ 378 echo "Testing "$$package; \ 379 $(GO) test $(GOFLAGS) -race -run=$(TESTS) -c $$package; \ 380 if [ -f $$(basename $$package).test ]; then \ 381 echo "Testing "$$package; \ 382 ./$$(basename $$package).test -test.timeout=2000s || exit 1; \ 383 rm -r $$(basename $$package).test; \ 384 fi; \ 385 done 386 387 rm -f config/*.crt 388 rm -f config/*.key 389 endif 390 391 test-server-race: test-te-race test-ee-race ## Checks for race conditions. 392 find . -type d -name data -not -path './vendor/*' | xargs rm -rf 393 394 do-cover-file: ## Creates the test coverage report file. 395 @echo "mode: count" > cover.out 396 397 go-junit-report: 398 env GO111MODULE=off go get -u github.com/jstemmer/go-junit-report 399 400 test-compile: 401 @echo COMPILE TESTS 402 403 for package in $(TE_PACKAGES) $(EE_PACKAGES); do \ 404 $(GO) test $(GOFLAGS) -c $$package; \ 405 done 406 407 test-db-migration: start-docker 408 ./scripts/mysql-migration-test.sh 409 ./scripts/psql-migration-test.sh 410 411 test-server: start-docker go-junit-report do-cover-file ## Runs tests. 412 ifeq ($(BUILD_ENTERPRISE_READY),true) 413 @echo Running all tests 414 else 415 @echo Running only TE tests 416 endif 417 ./scripts/test.sh "$(GO)" "$(GOFLAGS)" "$(ALL_PACKAGES)" "$(TESTS)" "$(TESTFLAGS)" 418 419 internal-test-web-client: ## Runs web client tests. 420 $(GO) run $(GOFLAGS) $(PLATFORM_FILES) test web_client_tests 421 422 run-server-for-web-client-tests: ## Tests the server for web client. 423 $(GO) run $(GOFLAGS) $(PLATFORM_FILES) test web_client_tests_server 424 425 test-client: ## Test client app. 426 @echo Running client tests 427 428 cd $(BUILD_WEBAPP_DIR) && $(MAKE) test 429 430 test: test-server test-client ## Runs all checks and tests below (except race detection and postgres). 431 432 cover: ## Runs the golang coverage tool. You must run the unit tests first. 433 @echo Opening coverage info in browser. If this failed run make test first 434 435 $(GO) tool cover -html=cover.out 436 $(GO) tool cover -html=ecover.out 437 438 test-data: start-docker ## Add test data to the local instance. 439 $(GO) run $(GOFLAGS) -ldflags '$(LDFLAGS)' $(PLATFORM_FILES) config set TeamSettings.MaxUsersPerTeam 100 440 $(GO) run $(GOFLAGS) -ldflags '$(LDFLAGS)' $(PLATFORM_FILES) sampledata -w 4 -u 60 441 442 @echo You may need to restart the Xenia server before using the following 443 @echo ======================================================================== 444 @echo Login with a system admin account username=sysadmin password=sysadmin 445 @echo Login with a regular account username=user-1 password=user-1 446 @echo ======================================================================== 447 448 run-server: start-docker ## Starts the server. 449 @echo Running xenia for development 450 451 mkdir -p $(BUILD_WEBAPP_DIR)/dist/files 452 $(GO) run $(GOFLAGS) -ldflags '$(LDFLAGS)' $(PLATFORM_FILES) --disableconfigwatch | \ 453 $(GO) run $(GOFLAGS) -ldflags '$(LDFLAGS)' $(PLATFORM_FILES) logs --logrus & 454 455 debug-server: start-docker 456 mkdir -p $(BUILD_WEBAPP_DIR)/dist/files 457 $(DELVE) debug $(PLATFORM_FILES) --build-flags="-ldflags '\ 458 -X github.com/xzl8028/xenia-server/model.BuildNumber=$(BUILD_NUMBER)\ 459 -X \"github.com/xzl8028/xenia-server/model.BuildDate=$(BUILD_DATE)\"\ 460 -X github.com/xzl8028/xenia-server/model.BuildHash=$(BUILD_HASH)\ 461 -X github.com/xzl8028/xenia-server/model.BuildHashEnterprise=$(BUILD_HASH_ENTERPRISE)\ 462 -X github.com/xzl8028/xenia-server/model.BuildEnterpriseReady=$(BUILD_ENTERPRISE_READY)'" 463 464 run-cli: start-docker ## Runs CLI. 465 @echo Running xenia for development 466 @echo Example should be like 'make ARGS="-version" run-cli' 467 468 $(GO) run $(GOFLAGS) -ldflags '$(LDFLAGS)' $(PLATFORM_FILES) ${ARGS} 469 470 run-client: ## Runs the webapp. 471 @echo Running xenia client for development 472 473 ln -nfs $(BUILD_WEBAPP_DIR)/dist client 474 cd $(BUILD_WEBAPP_DIR) && $(MAKE) run 475 476 run-client-fullmap: ## Legacy alias to run-client 477 @echo Running xenia client for development 478 479 cd $(BUILD_WEBAPP_DIR) && $(MAKE) run 480 481 run: check-prereqs run-server run-client ## Runs the server and webapp. 482 483 run-fullmap: run-server run-client ## Legacy alias to run 484 485 stop-server: ## Stops the server. 486 @echo Stopping xenia 487 488 ifeq ($(BUILDER_GOOS_GOARCH),"windows_amd64") 489 wmic process where "Caption='go.exe' and CommandLine like '%go.exe run%'" call terminate 490 wmic process where "Caption='xenia.exe' and CommandLine like '%go-build%'" call terminate 491 else 492 @for PID in $$(ps -ef | grep "[g]o run" | awk '{ print $$2 }'); do \ 493 echo stopping go $$PID; \ 494 kill $$PID; \ 495 done 496 @for PID in $$(ps -ef | grep "[g]o-build" | awk '{ print $$2 }'); do \ 497 echo stopping xenia $$PID; \ 498 kill $$PID; \ 499 done 500 endif 501 502 stop-client: ## Stops the webapp. 503 @echo Stopping xenia client 504 505 cd $(BUILD_WEBAPP_DIR) && $(MAKE) stop 506 507 stop: stop-server stop-client ## Stops server and client. 508 509 restart: restart-server restart-client ## Restarts the server and webapp. 510 511 restart-server: | stop-server run-server ## Restarts the xenia server to pick up development change. 512 513 restart-client: | stop-client run-client ## Restarts the webapp. 514 515 run-job-server: ## Runs the background job server. 516 @echo Running job server for development 517 $(GO) run $(GOFLAGS) -ldflags '$(LDFLAGS)' $(PLATFORM_FILES) jobserver --disableconfigwatch & 518 519 config-ldap: ## Configures LDAP. 520 @echo Setting up configuration for local LDAP 521 522 @sed -i'' -e 's|"LdapServer": ".*"|"LdapServer": "dockerhost"|g' config/config.json 523 @sed -i'' -e 's|"BaseDN": ".*"|"BaseDN": "dc=mm,dc=test,dc=com"|g' config/config.json 524 @sed -i'' -e 's|"BindUsername": ".*"|"BindUsername": "cn=admin,dc=mm,dc=test,dc=com"|g' config/config.json 525 @sed -i'' -e 's|"BindPassword": ".*"|"BindPassword": "mostest"|g' config/config.json 526 @sed -i'' -e 's|"FirstNameAttribute": ".*"|"FirstNameAttribute": "cn"|g' config/config.json 527 @sed -i'' -e 's|"LastNameAttribute": ".*"|"LastNameAttribute": "sn"|g' config/config.json 528 @sed -i'' -e 's|"NicknameAttribute": ".*"|"NicknameAttribute": "cn"|g' config/config.json 529 @sed -i'' -e 's|"EmailAttribute": ".*"|"EmailAttribute": "mail"|g' config/config.json 530 @sed -i'' -e 's|"UsernameAttribute": ".*"|"UsernameAttribute": "uid"|g' config/config.json 531 @sed -i'' -e 's|"IdAttribute": ".*"|"IdAttribute": "uid"|g' config/config.json 532 @sed -i'' -e 's|"LoginIdAttribute": ".*"|"LoginIdAttribute": "uid"|g' config/config.json 533 @sed -i'' -e 's|"GroupDisplayNameAttribute": ".*"|"GroupDisplayNameAttribute": "cn"|g' config/config.json 534 @sed -i'' -e 's|"GroupIdAttribute": ".*"|"GroupIdAttribute": "entryUUID"|g' config/config.json 535 536 config-reset: ## Resets the config/config.json file to the default. 537 @echo Resetting configuration to default 538 rm -f config/config.json 539 OUTPUT_CONFIG=$(PWD)/config/config.json go generate ./config 540 541 clean: stop-docker ## Clean up everything except persistant server data. 542 @echo Cleaning 543 544 rm -Rf $(DIST_ROOT) 545 go clean $(GOFLAGS) -i ./... 546 547 cd $(BUILD_WEBAPP_DIR) && $(MAKE) clean 548 549 find . -type d -name data -not -path './vendor/*' | xargs rm -rf 550 rm -rf logs 551 552 rm -f xenia.log 553 rm -f xenia.log.jsonl 554 rm -f npm-debug.log 555 rm -f .prepare-go 556 rm -f enterprise 557 rm -f cover.out 558 rm -f ecover.out 559 rm -f *.out 560 rm -f *.test 561 rm -f imports/imports.go 562 rm -f cmd/platform/cprofile*.out 563 rm -f cmd/xenia/cprofile*.out 564 565 nuke: clean clean-docker ## Clean plus removes persistent server data. 566 @echo BOOM 567 568 rm -rf data 569 570 setup-mac: ## Adds macOS hosts entries for Docker. 571 echo $$(boot2docker ip 2> /dev/null) dockerhost | sudo tee -a /etc/hosts 572 573 update-dependencies: ## Uses go get -u to update all the dependencies while holding back any that require it. 574 @echo Updating Dependencies 575 576 # Update all dependencies (does not update across major versions) 577 go get -u 578 579 # Keep back because of breaking API changes 580 go get -u github.com/segmentio/analytics-go@2.1.1 581 582 # Tidy up 583 go mod tidy 584 585 # Copy everything to vendor directory 586 go mod vendor 587 588 589 todo: ## Display TODO and FIXME items in the source code. 590 @! ag --ignore Makefile --ignore-dir vendor --ignore-dir runtime TODO 591 @! ag --ignore Makefile --ignore-dir vendor --ignore-dir runtime XXX 592 @! ag --ignore Makefile --ignore-dir vendor --ignore-dir runtime FIXME 593 @! ag --ignore Makefile --ignore-dir vendor --ignore-dir runtime "FIX ME" 594 ifeq ($(BUILD_ENTERPRISE_READY),true) 595 @! ag --ignore Makefile --ignore-dir vendor --ignore-dir runtime TODO enterprise/ 596 @! ag --ignore Makefile --ignore-dir vendor --ignore-dir runtime XXX enterprise/ 597 @! ag --ignore Makefile --ignore-dir vendor --ignore-dir runtime FIXME enterprise/ 598 @! ag --ignore Makefile --ignore-dir vendor --ignore-dir runtime "FIX ME" enterprise/ 599 endif 600 601 ## Help documentatin à la https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html 602 help: 603 @grep -E '^[a-zA-Z_-]+:.*?## .*$$' ./Makefile | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'