1
- .PHONY : build server scheduler test proto certs swagger https
1
+ .PHONY : run run- server run-server-https run- scheduler test lint build certs swagger
2
2
3
- # ######### Arguments ##########
3
+ # #############################################################################
4
+ # Arguments
5
+ # #############################################################################
4
6
5
7
VERSION =
6
8
7
- # ######### Variables ##########
9
+ # #############################################################################
10
+ # Variables
11
+ # #############################################################################
8
12
9
13
# This Makefile's directory
10
14
SCRIPT_DIR =$(abspath $(dir $(lastword $(MAKEFILE_LIST ) ) ) )
15
+
16
+ # Directories for miscellaneous files for the local environment
11
17
LOCAL_DIR =$(SCRIPT_DIR ) /local
18
+ LOCAL_BIN_DIR =$(LOCAL_DIR ) /bin
12
19
13
- SRC_DIR = $( SCRIPT_DIR )
14
- DST_DIR =$(SRC_DIR ) /internal
20
+ # Configuration directory
21
+ CONFIG_DIR =$(SCRIPT_DIR ) /config
15
22
23
+ # Local build settings
24
+ BIN_DIR =$(SCRIPT_DIR ) /bin
16
25
BUILD_VERSION =$(shell date +'% y% m% d% H% M% S')
17
26
LDFLAGS =-X 'main.version=$(BUILD_VERSION ) '
18
27
19
- DOCKER_CMD := docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm64/v8 --builder container --build-arg VERSION= $( VERSION ) --push --no-cache
28
+ # Application name
20
29
21
- DEV_CERT_SUBJ_CA="/C=TR/ST=ASIA/L=TOKYO/O=DEV/OU=DAGU/CN=*.dagu.dev/emailAddress [email protected] "
22
- DEV_CERT_SUBJ_SERVER="/C=TR/ST=ASIA/L=TOKYO/O=DEV/OU=SERVER/CN=*.server.dev/emailAddress [email protected] "
23
- DEV_CERT_SUBJ_CLIENT="/C=TR/ST=ASIA/L=TOKYO/O=DEV/OU=CLIENT/CN=*.client.dev/emailAddress [email protected] "
24
- DEV_CERT_SUBJ_ALT="subjectAltName =DNS:localhost"
30
+ APP_NAME =dagu
25
31
26
- PKG_SWAGGER =github.com/go-swagger/go-swagger/cmd/swagger
27
- PKG_GOLANGCI_LINT =github.com/golangci/golangci-lint/cmd/golangci-lint
28
- PKG_gotestsum =gotest.tools/gotestsum
32
+ # Docker image build configuration
33
+ DOCKER_CMD := docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm64/v8 --builder container --build-arg VERSION=$(VERSION ) --push --no-cache
29
34
30
- COLOR_GREEN =\033[0;32m
31
- COLOR_RESET =\033[0m
35
+ # Arguments for the tests
36
+ GOTESTSUM_ARGS=--format =standard-quiet
37
+ GO_TEST_FLAGS =-v --race
38
+
39
+ # Frontend directories
32
40
33
41
FE_DIR =./internal/frontend
34
42
FE_GEN_DIR =${FE_DIR}/gen
35
43
FE_ASSETS_DIR =${FE_DIR}/assets
44
+ FE_BUILD_DIR =./ui/dist
45
+ FE_BUNDLE_JS =${FE_ASSETS_DIR}/bundle.js
36
46
37
- CERT_DIR =${LOCAL_DIR}/cert
47
+ # Colors for the output
38
48
39
- CA_CERT_FILE =${CERT_DIR}/ca-cert.pem
40
- CA_KEY_FILE =${CERT_DIR}/ca-key.pem
41
- SERVER_CERT_REQ =${CERT_DIR}/server-req.pem
42
- SERVER_CERT_FILE =${CERT_DIR}/server-cert.pem
43
- SERVER_KEY_FILE =${CERT_DIR}/server-key.pem
44
- CLIENT_CERT_REQ =${CERT_DIR}/client-req.pem
45
- CLIENT_CERT_FILE =${CERT_DIR}/client-cert.pem
46
- CLIENT_KEY_FILE =${CERT_DIR}/client-key.pem
47
- OPENSSL_CONF =${CERT_DIR}/openssl.conf
49
+ COLOR_GREEN =\033[0;32m
50
+ COLOR_RESET =\033[0m
51
+ COLOR_RED =\033[0;31m
48
52
49
- FE_BUILD_DIR =./ui/dist
50
- FE_BUNDLE_JS =${FE_ASSETS_DIR}/bundle.js
53
+ # Go packages for the tools
51
54
52
- APP_NAME =dagu
53
- BIN_DIR =${SCRIPT_DIR}/bin
55
+ PKG_swagger =github.com/go-swagger/go-swagger/cmd/swagger
56
+ PKG_golangci_lint =github.com/golangci/golangci-lint/cmd/golangci-lint
57
+ PKG_gotestsum =gotest.tools/gotestsum
58
+ PKG_gomerger =github.com/yohamta/gomerger
54
59
55
- # gotestsum args
56
- GOTESTSUM_ARGS=--format =standard-quiet
57
- GO_TEST_FLAGS =-v --race
60
+ # Certificates for the development environment
61
+
62
+ CERTS_DIR =${LOCAL_DIR}/certs
63
+
64
+ DEV_CERT_SUBJ_CA="/C=TR/ST=ASIA/L=TOKYO/O=DEV/OU=DAGU/CN=*.dagu.dev/emailAddress [email protected] "
65
+ DEV_CERT_SUBJ_SERVER="/C=TR/ST=ASIA/L=TOKYO/O=DEV/OU=SERVER/CN=*.server.dev/emailAddress [email protected] "
66
+ DEV_CERT_SUBJ_CLIENT="/C=TR/ST=ASIA/L=TOKYO/O=DEV/OU=CLIENT/CN=*.client.dev/emailAddress [email protected] "
67
+ DEV_CERT_SUBJ_ALT="subjectAltName =DNS:localhost"
68
+
69
+ CA_CERT_FILE =${CERTS_DIR}/ca-cert.pem
70
+ CA_KEY_FILE =${CERTS_DIR}/ca-key.pem
71
+ SERVER_CERT_REQ =${CERTS_DIR}/server-req.pem
72
+ SERVER_CERT_FILE =${CERTS_DIR}/server-cert.pem
73
+ SERVER_KEY_FILE =${CERTS_DIR}/server-key.pem
74
+ CLIENT_CERT_REQ =${CERTS_DIR}/client-req.pem
75
+ CLIENT_CERT_FILE =${CERTS_DIR}/client-cert.pem
76
+ CLIENT_KEY_FILE =${CERTS_DIR}/client-key.pem
77
+ OPENSSL_CONF =${CONFIG_DIR}/openssl.local.conf
58
78
59
- # ######### Main Targets ##########
79
+ # #############################################################################
80
+ # Targets
81
+ # #############################################################################
60
82
61
83
# run starts the frontend server and the scheduler.
62
84
run : ${FE_BUNDLE_JS}
63
- go run . start-all
85
+ @echo " ${COLOR_GREEN} Starting the frontend server and the scheduler...${COLOR_RESET} "
86
+ @go run . start-all
87
+
88
+ # server build the binary and start the server.
89
+ run-server : golangci-lint build-bin
90
+ @echo " ${COLOR_GREEN} Starting the server...${COLOR_RESET} "
91
+ ${LOCAL_BIN_DIR} /${APP_NAME} server
92
+
93
+ # scheduler build the binary and start the scheduler.
94
+ run-scheduler : golangci-lint build-bin
95
+ @echo " ${COLOR_GREEN} Starting the scheduler...${COLOR_RESET} "
96
+ ${LOCAL_BIN_DIR} /${APP_NAME} scheduler
64
97
65
98
# check if the frontend assets are built.
66
99
${FE_BUNDLE_JS} :
67
- echo " Please run 'make build-ui' to build the frontend assets."
100
+ @echo " ${COLOR_RED} Error: frontend assets are not built.${COLOR_RESET} "
101
+ @echo " ${COLOR_RED} Please run 'make build-ui' before starting the server.${COLOR_RESET} "
68
102
69
103
# https starts the server with the HTTPS protocol.
70
- https : ${SERVER_CERT_FILE} ${SERVER_KEY_FILE}
104
+ run-server-https : ${SERVER_CERT_FILE} ${SERVER_KEY_FILE}
105
+ @echo " ${COLOR_GREEN} Starting the server with HTTPS...${COLOR_RESET} "
71
106
@DAGU_CERT_FILE=${SERVER_CERT_FILE} \
72
107
DAGU_KEY_FILE=${SERVER_KEY_FILE} \
73
108
go run . start-all
74
109
75
- # watch starts development UI server.
76
- # The backend server should be running.
77
- watch :
78
- @echo " ${COLOR_GREEN} Installing nodemon...${COLOR_RESET} "
79
- @npm install -g nodemon
80
- @nodemon --watch . --ext go,gohtml --verbose --signal SIGINT --exec ' make server'
81
-
82
110
# test runs all tests.
83
111
test :
84
- @go install ${PKG_gotestsum}
85
- @gotestsum ${GOTESTSUM_ARGS} -- ${GO_TEST_FLAGS} ./...
112
+ @echo " ${COLOR_GREEN} Running tests...${COLOR_RESET} "
113
+ @GOBIN=${LOCAL_BIN_DIR} go install ${PKG_gotestsum}
114
+ @${LOCAL_BIN_DIR} /gotestsum ${GOTESTSUM_ARGS} -- ${GO_TEST_FLAGS} ./...
86
115
87
116
# test-coverage runs all tests with coverage.
88
117
test-coverage :
89
- @go install ${PKG_gotestsum}
90
- @gotestsum ${GOTESTSUM_ARGS} -- ${GO_TEST_FLAGS} -coverprofile=" coverage.txt" -covermode=atomic ./...
118
+ @echo " ${COLOR_GREEN} Running tests with coverage...${COLOR_RESET} "
119
+ @GOBIN=${LOCAL_BIN_DIR} go install ${PKG_gotestsum}
120
+ @${LOCAL_BIN_DIR} /gotestsum ${GOTESTSUM_ARGS} -- ${GO_TEST_FLAGS} -coverprofile=" coverage.txt" -covermode=atomic ./...
91
121
92
122
# test-clean cleans the test cache and run all tests.
93
123
test-clean : build-bin
94
- @go install ${PKG_gotestsum}
124
+ @echo " ${COLOR_GREEN} Running tests...${COLOR_RESET} "
125
+ @GOBIN=${LOCAL_BIN_DIR} go install ${PKG_gotestsum}
95
126
@go clean -testcache
96
- @gotestsum ${GOTESTSUM_ARGS} -- ${GO_TEST_FLAGS} ./...
127
+ @${LOCAL_BIN_DIR} / gotestsum ${GOTESTSUM_ARGS} -- ${GO_TEST_FLAGS} ./...
97
128
98
129
# lint runs the linter.
99
130
lint : golangci-lint
@@ -102,7 +133,7 @@ lint: golangci-lint
102
133
swagger : clean-swagger gen-swagger
103
134
104
135
# certs generates the certificates to use in the development environment.
105
- certs : ${SERVER_CERT_FILE} ${CLIENT_CERT_FILE} gencert -check
136
+ certs : ${CERTS_DIR} ${ SERVER_CERT_FILE} ${CLIENT_CERT_FILE} certs -check
106
137
107
138
# build build the binary.
108
139
build : build-ui build-bin
@@ -112,30 +143,38 @@ build: build-ui build-bin
112
143
# ```sh
113
144
# make build-image VERSION={version}
114
145
# ```
115
- # {version} should be the version number such as v1.13.0.
146
+ # {version} should be the version number such as "1.13.0".
147
+
116
148
build-image : build-image-version build-image-latest
117
149
build-image-version :
118
150
ifeq ($(VERSION ) ,)
119
- $(error "VERSION is null ")
151
+ $(error "VERSION is not set ")
120
152
endif
153
+ echo "${COLOR_GREEN}Building the docker image with the version $(VERSION)...${COLOR_RESET}"
121
154
$(DOCKER_CMD) -t ghcr.io/dagu-dev/${APP_NAME}:$(VERSION) .
122
155
123
156
# build-image-latest build the docker image with the latest tag and push to
124
157
# the registry.
125
158
build-image-latest :
159
+ @echo " ${COLOR_GREEN} Building the docker image...${COLOR_RESET} "
126
160
$(DOCKER_CMD ) -t ghcr.io/dagu-dev/${APP_NAME} :latest .
127
161
128
- # server build the binary and start the server.
129
- server : golangci-lint build-bin
130
- ${BIN_DIR} /${APP_NAME} server
162
+ gomerger : ${LOCAL_DIR}/merged
163
+ @echo " ${COLOR_GREEN} Merging Go files...${COLOR_RESET} "
164
+ @rm -f ${LOCAL_DIR} /merged/merged_project.go
165
+ @GOBIN=${LOCAL_BIN_DIR} go install ${PKG_gomerger}
166
+ @${LOCAL_BIN_DIR} /gomerger .
167
+ @mv merged_project.go ${LOCAL_DIR} /merged/
131
168
132
- # scheduler build the binary and start the scheduler.
133
- scheduler : golangci-lint build-bin
134
- ${BIN_DIR} /${APP_NAME} scheduler
169
+ ${LOCAL_DIR}/merged :
170
+ @mkdir -p ${LOCAL_DIR} /merged
135
171
136
- # ######### Tools ##########
172
+ # #############################################################################
173
+ # Internal targets
174
+ # #############################################################################
137
175
138
176
build-bin :
177
+ @echo " ${COLOR_GREEN} Building the binary...${COLOR_RESET} "
139
178
@mkdir -p ${BIN_DIR}
140
179
@go build -ldflags=" $( LDFLAGS) " -o ${BIN_DIR} /${APP_NAME} .
141
180
@@ -148,20 +187,25 @@ build-ui:
148
187
@cp ${FE_BUILD_DIR} /* ${FE_ASSETS_DIR}
149
188
150
189
golangci-lint :
151
- @go install $(PKG_GOLANGCI_LINT )
152
- @golangci-lint run ./...
190
+ @echo " ${COLOR_GREEN} Running linter...${COLOR_RESET} "
191
+ @GOBIN=${LOCAL_BIN_DIR} go install $(PKG_golangci_lint )
192
+ @${LOCAL_BIN_DIR} /golangci-lint run ./...
153
193
154
194
clean-swagger :
195
+ @echo " ${COLOR_GREEN} Cleaning the swagger files...${COLOR_RESET} "
155
196
@rm -rf ${FE_GEN_DIR} /restapi/models
156
197
@rm -rf ${FE_GEN_DIR} /restapi/operations
157
198
158
199
gen-swagger :
159
- @go install $(PKG_SWAGGER )
160
- @swagger validate ./swagger.yaml
161
- @swagger generate server -t ${FE_GEN_DIR} --server-package=restapi --exclude-main -f ./swagger.yaml
200
+ @echo " ${COLOR_GREEN} Generating the swagger server code...${COLOR_RESET} "
201
+ @GOBIN=${LOCAL_BIN_DIR} go install $(PKG_swagger )
202
+ @${LOCAL_BIN_DIR} /swagger validate ./swagger.yaml
203
+ @${LOCAL_BIN_DIR} /swagger generate server -t ${FE_GEN_DIR} --server-package=restapi --exclude-main -f ./swagger.yaml
162
204
@go mod tidy
163
205
164
- # ######### Certificates ##########
206
+ # #############################################################################
207
+ # Certificates
208
+ # #############################################################################
165
209
166
210
${CA_CERT_FILE} :
167
211
@echo " ${COLOR_GREEN} Generating CA certificates...${COLOR_RESET} "
@@ -194,7 +238,10 @@ ${CLIENT_CERT_FILE}: ${CA_CERT_FILE} ${CLIENT_KEY_FILE}
194
238
-CAkey ${CA_KEY_FILE} -CAcreateserial -out ${CLIENT_CERT_FILE} \
195
239
-extfile ${OPENSSL_CONF}
196
240
197
- gencert-check :
241
+ ${CERTS_DIR} :
242
+ @echo " ${COLOR_GREEN} Creating the certificates directory...${COLOR_RESET} "
243
+ @mkdir -p ${CERTS_DIR}
244
+
245
+ certs-check :
198
246
@echo " ${COLOR_GREEN} Checking CA certificate...${COLOR_RESET} "
199
247
@openssl x509 -in ${SERVER_CERT_FILE} -noout -text
200
-
0 commit comments