github.com/oinume/lekcije@v0.0.0-20231017100347-5b4c5eb6ab24/backend/Makefile (about)

     1  APP = lekcije
     2  COMMANDS = crawler daily_reporter follow_reminder notifier server teacher_error_resetter
     3  GO_TEST ?= gotestsum -- -v -race -p=1 # To avoid database operations conflict
     4  GO_TEST_E2E ?= go test -v -p=1
     5  DB_HOST = 192.168.99.100
     6  LINT_PACKAGES = $(shell go list ./... | grep -v proto_gen)
     7  IMAGE_TAG ?= latest
     8  PID = $(APP).pid
     9  
    10  
    11  all: build
    12  
    13  .PHONY: setup
    14  setup: install-tools
    15  
    16  .PHONY: install-tools
    17  install-tools:
    18  	@go list -e -f='{{ join .Imports "\n" }}' ./tools.go | tr -d [ | tr -d ] | xargs -I{} go install {}
    19  
    20  .PHONY: install
    21  install:
    22  	go install github.com/oinume/lekcije/backend/cmd/lekcije
    23  
    24  .PHONY: build
    25  build: $(foreach command,$(COMMANDS),go/build/$(command))
    26  
    27  # TODO: find server/cmd -type d | xargs basename
    28  # OR CLIENTS=hoge fuga proto: $(foreach var,$(CLIENTS),proto/$(var))
    29  go/build/%:
    30  	GO111MODULE=on go build -o bin/lekcije_$* ./cmd/$*
    31  
    32  clean:
    33  	${RM} $(foreach command,$(COMMANDS),bin/lekcije_$(command))
    34  
    35  .PHONY: db/goose/%
    36  db/goose/%: ## Run goose up|down|status
    37  	goose -dir ./db/migrations mysql "$(MYSQL_USER):$(MYSQL_PASSWORD)@tcp($(MYSQL_HOST):$(MYSQL_PORT))/$(MYSQL_DATABASE)?charset=utf8mb4&parseTime=true&loc=UTC" $*
    38  
    39  .PHONY: db/reset
    40  db/reset: ## Reset databases
    41  	mysql -h $(MYSQL_HOST) -P $(MYSQL_PORT) -u$(MYSQL_USER) -p$(MYSQL_PASSWORD) -e "DROP DATABASE IF EXISTS $(MYSQL_DATABASE)"
    42  	mysql -h $(MYSQL_HOST) -P $(MYSQL_PORT) -u$(MYSQL_USER) -p$(MYSQL_PASSWORD) -e "DROP DATABASE IF EXISTS $(MYSQL_DATABASE)_test"
    43  	mysql -h $(MYSQL_HOST) -P $(MYSQL_PORT) -uroot -proot < db/docker-entrypoint-initdb.d/create_database.sql
    44  
    45  .PHONY: db/connect
    46  db/connect: ## Connect to database with envs
    47  	mysql -h $(MYSQL_HOST) -P $(MYSQL_PORT) -u$(MYSQL_USER) -p$(MYSQL_PASSWORD) $(MYSQL_DATABASE)
    48  
    49  .PHONY: db/generate
    50  db/generate: ## Generate Go code into model2 dir with sqlboiler
    51  	go run ./tools/cmd/sqlboiler/main.go > db/sqlboiler.toml
    52  	grep 'Code generated by SQLBoiler' -l -r ./model2  | xargs rm -f
    53  	sqlboiler -c db/sqlboiler.toml mysql
    54  
    55  .PHONY: gqlgen
    56  gqlgen: ## Run `gqlgen generate`
    57  	go run github.com/99designs/gqlgen generate
    58  
    59  .PHONY: mock/generate
    60  mock/generate: ## Generate mock files with moq
    61  	find . -name "*.moq.go" | xargs rm -f
    62  	go generate ./...
    63  
    64  .PHONY: test
    65  test: go/test
    66  
    67  .PHONY: test/db/goose/%
    68  test/db/goose/%: ## Run goose up|down|status for test database
    69  	goose -dir ./db/migrations mysql "$(MYSQL_USER):$(MYSQL_PASSWORD)@tcp($(MYSQL_HOST):$(MYSQL_PORT))/$(MYSQL_DATABASE_TEST)?charset=utf8mb4&parseTime=true&loc=UTC" $*
    70  
    71  .PHONY: go/test
    72  go/test:
    73  	$(GO_TEST) ./...
    74  
    75  .PHONY: go/goimports
    76  go/goimports:
    77  	goimports -w -local github.com/oinume/lekcije ./backend
    78  
    79  .PHONY: go/lint
    80  go/lint: ## Run golangci-lint
    81  	docker run --rm -v ${GOPATH}/pkg/mod:/go/pkg/mod -v $(shell pwd):/app -v $(shell go env GOCACHE):/cache/go -e GOCACHE=/cache/go -e GOLANGCI_LINT_CACHE=/cache/go -w /app golangci/golangci-lint:v1.52.2 golangci-lint run --modules-download-mode=readonly /app/...
    82  
    83  .PHONY: docker/build/server
    84  docker/build/server:
    85  	docker build --pull -f docker/Dockerfile-server \
    86  	--tag asia.gcr.io/oinume-lekcije/server:$(IMAGE_TAG) .
    87  
    88  kill:
    89  	kill `cat $(PID)` 2> /dev/null || true
    90  
    91  restart: kill clean go/build/server
    92  	bin/$(APP)_server & echo $$! > $(PID)
    93  
    94  watch: restart
    95  	fswatch -o -e ".*" -e vendor -e node_modules -e .venv -i "\\.go$$" . | xargs -n1 -I{} make restart || make kill
    96  
    97  .PHONY: sync-go-mod-from-root
    98  sync-go-mod-from-root: ## Sync go.mod from root directory
    99  	cp -f ../go.* ./
   100  	perl -i -p -e "s!module github.com/oinume/lekcije!module github.com/oinume/lekcije/backend!" go.mod
   101  	go mod tidy
   102  
   103  .PHONY: help
   104  help: ## show this help
   105  	@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n  make \033[36m<target>\033[0m\n\nTargets:\n"} /^[\/a-zA-Z_-]+:.*?##/ { printf "  \033[36m%-20s\033[0m %s\n", $$1, $$2 }' $(MAKEFILE_LIST)