# Modify env.sh and uncomment to change config. include env.sh IMPORT_FILE:=./import.go APP:=mailer # Start the race detector with "RACE=1 make test" on the command line. ifdef RACE RACE:=-race else RACE:= endif # To be verbose while testing use VERBOSE=1. ifdef VERBOSE VERBOSE:=-v else VERBOSE:= endif # Use this when you run this test on a domain with a valid MX entry. EXTERNAL=1 ifdef EXTERNAL EXTERNAL:=-external else EXTERNAL:= endif ifndef LOGDIR LOGDIR := /home/horus/logs/$(APP) endif # Include the sqlit3 database in archiv. ifeq ($(FREEMAIL_DB_DRIVER), sqlite3) FREEMAIL_DB_DIR:=db else FREEMAIL_DB_DIR:= endif ifndef VAGRANT_DIR VAGRANT_DIR:=/vagrant endif _TEST_FILES = $(wildcard *_test.go) FILTER_TEST= grep -v "import" | grep -oE '^func Test.+\(' | sed 's/(//g' | sed s'/func //g' | tr '\n' '|' | sed 's/|$$//' # Start targets all: kill build run clean: kill @(rm $(IMPORT_FILE) 2>/dev/null && echo "Removing import file..." ) || true @(rm $(FREEMAIL_DB_CREDENTIALS) 2>/dev/null echo && "Removing sqlite3 database..." ) || true @(rm $(APP).tar.gz 1>&2 2>/dev/null && echo "Removing tar archiv...") || true @(rm _env.sh 1>&2 2>/dev/null && echo "Removing _env.sh...") || true @(rm $(APP) 2>/dev/null && echo "Removing binary ($(APP))...") || true @(rm start.sh 1>&2 2>/dev/null && echo "Removing startup script...") || true @echo "Done." build: import go build -o $(APP) run: _test_build ./$(APP) & kill: @(pgrep $(APP) && \ echo "Killing running instances..." && \ pkill $(APP) ) || true create_import: @if [ ! -f $(IMPORT_FILE) ] ; \ then \ echo "package main" > $(IMPORT_FILE) ; \ fi import: @if [ ! -f $(IMPORT_FILE) ] ; \ then \ echo "package main" > $(IMPORT_FILE) ; \ echo "import _ \"$(FREEMAIL_DB_IMPORT_DRIVER)\"" >> $(IMPORT_FILE) ; \ fi sqlite3: create_import @echo "import _ \"github.com/mattn/go-sqlite3\"" >> $(IMPORT_FILE) mysql: create_import @echo "import _ \"github.com/go-sql-driver/mysql\"" >> $(IMPORT_FILE) postgresql: create_import @echo "import _ \"github.com/lib/pq\"" >> $(IMPORT_FILE) database_all: sqlite3 mysql postgresql @echo "Created import file for all databases." pack: gen_config echo "#!/bin/bash" > start.sh && \ echo 'DIR=$$( cd "$$( dirname "$${BASH_SOURCE[0]}" )" && pwd )' >> start.sh && \ echo 'cd "$$DIR"' >> start.sh && \ echo 'source "$$DIR/_env.sh"' >> start.sh && \ echo 'exec "$$DIR/mailer" >> "$$LOGDIR/$(APP).log" 2 >> "$$LOGDIR/$(APP).err"' >> start.sh && \ chmod +x start.sh && \ if [ ! -d $(FREEMAIL_DB_DIR) ]; then \ mkdir $(FREEMAIL_DB_DIR); \ fi tar czf $(APP).tar.gz start.sh $(APP) _env.sh html static $(FREEMAIL_DB_DIR) statistics 2>/dev/null && \ rm start.sh 2>/dev/null && \ echo "\n/$(APP).tar.gz is ready." || \ (echo "Run \"make build\" first." && exit 1) test: test_all test_new: import _info_test _run_test _info_test: @echo "Please note: We are testing only changes." @echo "To run the complete test suite run 'make test_all'." @echo "" _run_test: $(_TEST_FILES) @echo Testing $? @echo "" @FREEMAIL_SMTP_MAILER_MX=localhost FREEMAIL_DB_CREDENTIALS=':memory:' \ go test $(RACE) $(VERBOSE) $(EXTERNAL) \ -run="$$(gofmt $? | $(FILTER_TEST))" && \ touch $@ test_all: import @FREEMAIL_SMTP_MAILER_MX=localhost.iamfabulous.de FREEMAIL_DB_CREDENTIALS=':memory:' go test $(RACE) $(VERBOSE) $(EXTERNAL) benchmark: import DB_FREEMAIL_LOG=false FREEMAIL_DB_CREDENTIALS=":memory:" go test $(VERBOSE) -bench=".*" @(rm $(IMPORT_FILE) 2>/dev/null && echo "Removing import file..." ) || true _test_build: @if [ ! -f ./$(APP) ] || [ ! -x ./$(APP) ]; then \ echo "No executable binary found." 1>&2; \ echo "Run \"make build\" first." 1>&2; \ echo ""; \ exit 1; \ fi gen_config: _test_build @echo "Generating config file!\n" echo "#!/bin/sh" > _env.sh @echo "# Database" >> _env.sh echo "export FREEMAIL_DB_DRIVER=$(FREEMAIL_DB_DRIVER)" >> _env.sh echo "export FREEMAIL_DB_CREDENTIALS=$(FREEMAIL_DB_CREDENTIALS)" >> _env.sh echo "export FREEMAIL_DB_IMPORT_DRIVER=$(FREEMAIL_DB_IMPORT_DRIVER)" >> _env.sh echo "export FREEMAIL_DB_LOG=$(FREEMAIL_DB_LOG)\n" >> _env.sh @echo "" @echo "# Redis" >> _env.sh echo "export FREEMAIL_REDIS_SERVER=$(FREEMAIL_REDIS_SERVER)" >> _env.sh echo "export FREEMAIL_REDIS_PORT=$(FREEMAIL_REDIS_PORT)\n" >> _env.sh @echo "" @echo "# Http" >> _env.sh echo "export FREEMAIL_HTTP_IP=$(FREEMAIL_HTTP_IP)" >> _env.sh echo "export FREEMAIL_HTTP_PORT=$(FREEMAIL_HTTP_PORT)" >> _env.sh @echo "" echo "export FREEMAIL_SECRET=$(FREEMAIL_SECRET)" >> _env.sh @echo "" @echo "# Smtp" >> _env.sh echo "export FREEMAIL_SMTP_MAILER_MX=$(FREEMAIL_SMTP_MAILER_MX)" >> _env.sh echo "export FREEMAIL_SMTP_PASSWORD=$(FREEMAIL_SMTP_PASSWORD)" >> _env.sh echo "export FREEMAIL_SMTP_ADRESS=$(FREEMAIL_SMTP_ADRESS)" >> _env.sh echo "export LOGDIR=$(LOGDIR)" >> _env.sh @chmod +x _env.sh restart: kill build run go_get: go get github.com/jinzhu/gorm go get github.com/gorilla/mux go get github.com/gorilla/schema go get github.com/gorilla/sessions go get github.com/mattn/go-sqlite3 go get github.com/go-sql-driver/mysql go get github.com/lib/pq _test_archiv: @if [ ! -f ./$(APP).tar.gz ]; then \ echo "No archive found." 1>&2; \ echo "Run \"make pack\" first." 1>&2; \ echo ""; \ exit 1; \ fi _test_vagrant_env: @if [ ! -d $(VAGRANT_DIR) ]; then \ echo "Directory $(VAGRANT_DIR) not found."; \ echo ""; \ exit 1; \ fi vagrant: _test_vagrant_env go_get build pack mv $(APP).tar.gz $(VAGRANT_DIR)