1
- PROJECTNAME := $(shell basename "$(PWD ) ")
2
- # PROJECTNAME := SET-PAYMENT
3
- VERSION := v0.1.0-0
1
+ PROJECTNAME := $(shell go run app/main.go project)
2
+ VERSION := $(shell go run app/main.go version)
4
3
RELEASENAME := $(PROJECTNAME ) _$(VERSION )
5
4
6
- MYSQL_USER ?= root
7
- MYSQL_PASSWORD ?= 123456
8
- MYSQL_ADDRESS ?= 127.0.0.1:3306
9
- MYSQL_DATABASE ?= goscription
5
+ MYSQL_DB ?= $(shell go run app/main.go mysql)
6
+ MYSQL_DIR ?= database/migrations
10
7
11
8
ifndef $(GOPATH)
12
9
GOPATH =$(shell go env GOPATH)
@@ -18,147 +15,188 @@ all:
18
15
.PHONY : lint-prepare
19
16
lint-prepare :
20
17
@echo " Preparing Linter"
18
+ ifeq (,$(wildcard ./bin/golangci-lint) )
21
19
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s latest
20
+ else
21
+ @echo "golangci-lint already installed"
22
+ endif
22
23
23
- .PHONY : lint
24
- lint :
25
- ./bin/golangci-lint run \
24
+ # # lint, l: run linter to check quality code
25
+ .PHONY : lint l
26
+ lint l :
27
+ @make lint-prepare
28
+ ./bin/golangci-lint run -v \
26
29
--exclude-use-default=false \
27
- --enable=golint \
30
+ --disable-all \
31
+ --enable=goimports \
28
32
--enable=gocyclo \
33
+ --enable=nakedret \
34
+ --enable=golint \
35
+ --enable=gosimple \
29
36
--enable=goconst \
37
+ --enable=misspell \
30
38
--enable=unconvert \
39
+ --enable=varcheck \
40
+ --enable=unused \
41
+ --enable=deadcode \
42
+ --enable=unparam \
43
+ --enable=ineffassign \
44
+ --enable=gocritic \
45
+ --enable=prealloc \
46
+ --enable=scopelint \
47
+ --enable=staticcheck \
48
+ --enable=gosec \
31
49
./...
32
50
33
- # # mockery-prepare: install mockery before generate
34
51
.PHONY : mockery-prepare
35
52
mockery-prepare :
36
- @echo " Remove the existing one if exists "
37
- @rm -rf $( GOPATH ) /bin/mockery
53
+ @echo " prepare mockery "
54
+ ifeq (, $( wildcard . /bin/mockery) )
38
55
@echo "Installing mockery"
39
- @go get github.com/vektra/mockery/.../
56
+ @go build -a -o ./bin/mockery github.com/vektra/mockery/v2/
57
+ else
58
+ @echo "mockery already installed"
59
+ endif
40
60
41
61
# # mockery-generate: generate all mock
62
+ .PHONY : mockery-generate
42
63
mockery-generate :
43
- @$(GOPATH ) /bin/mockery -all
44
-
45
- .PHONY : mysql-test-up
46
- mysql-test-up :
47
- @docker-compose up -d mysql_test
64
+ @make mockery-prepare
65
+ @echo " start mockery all"
66
+ @./bin/mockery --all
48
67
49
- .PHONY : mysql-down-test
50
- mysql-down-test :
51
- @docker-compose stop mysql_test
52
-
53
- # # test-docker: test docker integration
54
- .PHONY : test-docker
55
- test-docker : mysql-test-up
56
- @go test -v -race ./...
57
- @make mysql-down-test
58
-
59
- # # test-unit: run all unit test & lint
60
- .PHONY : test-unit
61
- test-unit :
68
+ # # test-unit, t: run all unit test
69
+ .PHONY : test-unit t
70
+ test-unit t :
62
71
@echo " Start: unit test"
63
72
@go test -v -short -race ./...
64
- @echo " gofmt: start..."
65
- @gofmt -l -e -d .
66
- @echo " gofmt: done"
67
- @echo " golint: start..."
68
- @golint ./...
69
- @echo " golint: done"
70
73
@echo " End: unit test"
71
74
72
- # # go-build: build to compile the project & swagger docs
73
- go-build :
75
+ # # go-build, b: build to compile the project & swagger docs
76
+ .PHONY : go-build b
77
+ go-build b :
74
78
@echo " Start: build " $(PROJECTNAME ) " project"
75
- @make test-unit
76
79
@make swagger-init
77
80
@make swagger-validate
78
- @echo " Run: go build -o " $(PROJECTNAME ) " app/main.go"
79
- @go build -o " $( PROJECTNAME) " app/main.go
81
+ @echo " Run: go build -o bin/ " $(PROJECTNAME ) " app/main.go"
82
+ @go build -o bin/ " $( PROJECTNAME) " app/main.go
80
83
@echo " Done: " $(PROJECTNAME ) " project has build"
81
84
82
- # # go-run: run project
83
- go-run :
84
- @make go-build
85
+ # # go-run, r : run http rest api project
86
+ .PHONY : go-run r
87
+ go-run r :
85
88
@echo " Run " $(PROJECTNAME ) " project"
86
- ./$(PROJECTNAME ) http
89
+ @make swagger-init
90
+ @make swagger-validate
91
+ @go run app/main.go
92
+
93
+ # # worker, w: run worker for consumer
94
+ .PHONY : worker w
95
+ worker w :
96
+ @echo " Run " $(PROJECTNAME ) " worker"
97
+ @go run app/main.go worker
87
98
88
99
# # docker-build: dockerize the project
89
100
.PHONY : docker-build
90
101
docker-build :
91
- @make swagger-init
92
- @make swagger-validate
93
- @docker build . -t " $( PROJECTNAME) " :latest
102
+ @docker build . -f build/builder/Dockerfile -t " $( PROJECTNAME) " :latest
94
103
95
104
# # docker-up: run docker compose up
96
105
.PHONY : docker-up
97
106
docker-up :
98
107
@docker-compose up -d
99
- @make mysql-down-test
100
108
101
109
# # docker-down: run docker compose down
102
110
.PHONY : docker-down
103
111
docker-down :
104
112
@docker-compose down
105
113
106
- # # swagger-init: initialize swagger to folder ./docs
114
+ .PHONY : swagger-init-prepare
115
+ swagger-init-prepare :
116
+ @echo " Prepare swag"
117
+ ifeq (,$(wildcard ./bin/swag) )
118
+ go build -a -o ./bin/swag github.com/swaggo/swag/cmd/swag
119
+ else
120
+ @echo "swag already installed"
121
+ endif
122
+
123
+ .PHONY : swagger-validate-prepare
124
+ swagger-validate-prepare :
125
+ @echo " Prepare go-swagger"
126
+ ifeq (,$(wildcard ./bin/go-swagger) )
127
+ go build -a -o ./bin/go-swagger github.com/go-swagger/go-swagger/cmd/swagger
128
+ else
129
+ @echo "go-swagger already installed"
130
+ endif
131
+
132
+ # # swagger-init: initialize swagger to folder ./api/docs
107
133
.PHONY : swagger-init
108
134
swagger-init :
135
+ @make swagger-init-prepare
109
136
@echo " Start: Initialize swagger"
110
- @ swag init -g app/main.go
111
- @echo " Done: initialize ./docs swagger"
137
+ ./bin/ swag init -g app/main.go -o ./api/docs
138
+ @echo " Done: initialize ./api/ docs swagger"
112
139
113
- # # swagger-validate: validate swagger.yaml in folder ./docs
140
+ # # swagger-validate: validate swagger.yaml in folder ./api/ docs
114
141
.PHONY : swagger-validate
115
142
swagger-validate :
143
+ @make swagger-validate-prepare
116
144
@echo " Start: Validate swagger"
117
- @ swagger validate docs/swagger.yaml
145
+ ./bin/go- swagger validate api/ docs/swagger.yaml
118
146
@echo " Done: Validate swagger"
119
147
120
- # # migrate-prepare: prepare migrate the schema with mysql
121
148
.PHONY : migrate-prepare
122
149
migrate-prepare :
123
- @go get -u github.com/golang-migrate/migrate/v4
150
+ @echo " prepare golang migrate using mysql"
151
+ ifeq (,$(wildcard ./bin/migrate) )
124
152
@go build -a -o ./bin/migrate -tags 'mysql' github.com/golang-migrate/migrate/v4/cli
153
+ else
154
+ @echo "golang-migrate already installed"
155
+ endif
156
+
157
+ # # migrate-create [file_name]: create migration file
158
+ .PHONY : migrate-create
159
+ migrate-create :
160
+ @make migrate-prepare
161
+ ./bin/migrate create -ext sql -dir $(MYSQL_DIR ) -seq $(filter-out $@ ,$(MAKECMDGOALS ) )
125
162
126
- # # migrate-up: run migration up to latest version
163
+ # # migrate-up [N]: Apply all or N up migrations
127
164
.PHONY : migrate-up
128
165
migrate-up :
129
- @migrate -database " mysql:// $( MYSQL_USER ) : $( MYSQL_PASSWORD ) @tcp( $( MYSQL_ADDRESS ) )/ $( MYSQL_DATABASE ) " \
130
- - path=internal/database/mysql/migrations up
166
+ @make migrate-prepare
167
+ ./bin/migrate -database " $( MYSQL_DB ) " - path=$( MYSQL_DIR ) up $( filter-out $@ , $( MAKECMDGOALS ) )
131
168
132
- # # migrate-down: run migration down to oldest version
169
+ # # migrate-down [N]: Apply all or N down migrations
133
170
.PHONY : migrate-down
134
171
migrate-down :
135
- @migrate -database " mysql://$( MYSQL_USER) :$( MYSQL_PASSWORD) @tcp($( MYSQL_ADDRESS) )/$( MYSQL_DATABASE) " \
136
- -path=internal/database/mysql/migrations down
137
-
138
- .PHONY : help
139
- all : help
140
- help : Makefile
141
- @echo
142
- @echo " Choose a command run in " $(PROJECTNAME ) " :"
143
- @echo
144
- @sed -n ' s/^##//p' $< | column -t -s ' :' | sed -e ' s/^/ /'
145
- @echo
172
+ @make migrate-prepare
173
+ ./bin/migrate -database " $( MYSQL_DB) " -path=$(MYSQL_DIR ) down $(filter-out $@ ,$(MAKECMDGOALS ) )
146
174
147
175
# # release: create release app with version
148
176
.PHONY : release
149
177
release :
150
178
@echo " Start: build release " $(RELEASENAME ) " "
151
- @rm -rf release
152
- @mkdir release
153
-
179
+ @make lint
154
180
@make test-unit
155
181
@make swagger-init
156
182
@make swagger-validate
157
183
184
+ @rm -rf release
185
+ @mkdir release
186
+
158
187
@echo "Build release "$(RELEASENAME)"_linux_amd64"
159
188
@GOOS=linux GOARCH=amd64 go build -o release/"$(RELEASENAME)"_linux_amd64 app/main.go
160
189
161
190
@echo "Build release "$(RELEASENAME)"_darwin_amd64"
162
191
@GOOS=darwin GOARCH=amd64 go build -o release/"$(RELEASENAME)"_darwin_amd64 app/main.go
163
192
164
193
@echo "Done: build release "$(RELEASENAME)""
194
+
195
+ .PHONY : help
196
+ all : help
197
+ help : Makefile
198
+ @echo
199
+ @echo " Choose a command run in " $(PROJECTNAME ) " :"
200
+ @echo
201
+ @sed -n ' s/^##//p' $< | column -t -s ' :' | sed -e ' s/^/ /'
202
+ @echo
0 commit comments