orchestration 0.6.15 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,535 +0,0 @@
1
-
2
- ### Environment setup ###
3
- SHELL:=/bin/bash
4
- MAKE:=mkpath=${mkpath} make --no-print-directory
5
- ORCHESTRATION_DISABLE_ENV=1
6
- export
7
- TERM ?= 'dumb'
8
- pwd:=$(shell pwd)
9
-
10
- orchestration_dir_name=orchestration
11
- orchestration_dir=orchestration
12
-
13
- ifdef env_file
14
- custom_env_file ?= 1
15
- else
16
- custom_env_file ?= 0
17
- endif
18
-
19
- ifneq (,$(wildcard ${pwd}/config/database.yml))
20
- database_enabled = 1
21
- else
22
- database_enabled = 0
23
- endif
24
-
25
- red:=$(shell tput setaf 1)
26
- green:=$(shell tput setaf 2)
27
- yellow:=$(shell tput setaf 3)
28
- blue:=$(shell tput setaf 4)
29
- magenta:=$(shell tput setaf 5)
30
- cyan:=$(shell tput setaf 6)
31
- gray:=$(shell tput setaf 7)
32
- reset:=$(shell tput sgr0)
33
- tick=[${green}✓${reset}]
34
- cross=[${red}✘${reset}]
35
-
36
- make=$(MAKE) $1
37
- orchestration_config_filename:=.orchestration.yml
38
- orchestration_config:=${pwd}/${orchestration_config_filename}
39
- system_prefix=${reset}[${cyan}exec${reset}]
40
- warn_prefix=${reset}[${yellow}warn${reset}]
41
- echo_prefix=${reset}[${blue}info${reset}]
42
- fail_prefix=${reset}[${red}fail${reset}]
43
- logs_prefix=${reset}[${green}logs${reset}]
44
- system=echo '${system_prefix} ${cyan}$1${reset}'
45
- warn=echo '${warn_prefix} ${reset}$1${reset}'
46
- echo=echo '${echo_prefix} ${reset}$1${reset}'
47
- fail=echo '${fail_prefix} ${reset}$1${reset}'
48
- logs=echo '${logs_prefix} ${reset}$1${reset}'
49
- print_error=printf '${red}\#${reset} '$1 | tee '${stderr}'
50
- println_error=$(call print_error,$1'\n')
51
- print=printf '${blue}\#${reset} '$1
52
- println=$(call print,$1'\n')
53
- printraw=printf $1
54
- stdout=${pwd}/log/orchestration.stdout.log
55
- stderr=${pwd}/log/orchestration.stderr.log
56
- log_path_length:=$(shell echo "${stdout}" | wc -c)
57
- ifndef verbose
58
- log_tee:= 2>&1 | tee -a ${stdout}
59
- log:= >>${stdout} 2>>${stderr}
60
- progress_point:=perl -e 'printf("[${magenta}busy${reset}] "); while( my $$line = <STDIN> ) { printf("."); select()->flush(); }'
61
- log_progress:= > >(tee -ai ${stdout} >&1 | ${progress_point}) 2> >(tee -ai ${stderr} 2>&1 | ${progress_point})
62
- endif
63
- hr:=$(call println,"$1$(shell head -c ${log_path_length} < /dev/zero | tr '\0' '=')${reset}")
64
- managed_env_tag:=\# -|- ORCHESTRATION
65
- standard_env_path:=${pwd}/.env
66
- backup_env_path:=${pwd}/.env.orchestration.backup
67
- is_managed_env:=$$(test -f '${standard_env_path}' && tail -n 1 '${standard_env_path}') == "${managed_env_tag}"*
68
- token:=$(shell cat /dev/urandom | LC_CTYPE=C tr -dc 'a-z0-9' | fold -w8 | head -n1)
69
- back_up_env:=( \
70
- [ ! -f '${standard_env_path}' ] \
71
- || \
72
- ( \
73
- [ -f '${standard_env_path}' ] \
74
- && cp '${standard_env_path}' '${backup_env_path}' \
75
- ) \
76
- )
77
-
78
- key_chars:=[a-zA-Z0-9_]
79
- censored:=**********
80
- censor=s/\(^${key_chars}*$(1)${key_chars}*\)=\(.*\)$$/\1=${censored}/
81
- censor_urls:=s|\([a-zA-Z0-9_+]\+://.*:\).*\(@.*\)$$|\1${censored}\2|
82
- format_env:=sed '$(call censor,SECRET); \
83
- $(call censor,TOKEN); \
84
- $(call censor,PRIVATE); \
85
- $(call censor,KEY); \
86
- $(censor_urls); \
87
- /^\s*$$/d; \
88
- /^\s*\#/d; \
89
- s/\(^[a-zA-Z0-9_]\+\)=/${blue}\1${reset}=/; \
90
- s/^/ /; \
91
- s/=\(.*\)$$/=${yellow}\1${reset}/' | \
92
- sort
93
-
94
- exit_fail=( \
95
- $(call printraw,' ${cross}') ; \
96
- $(call make,dump src_cmd=$(MAKECMDGOALS)) ; \
97
- echo ; \
98
- $(call println,'Failed. ${cross}') ; \
99
- exit 1 \
100
- )
101
-
102
- ifdef env_file
103
- env_path=${env_file}
104
- else
105
- env_path=.env
106
- endif
107
-
108
- ifneq (${env},test)
109
- ifeq (,$(findstring test,$(MAKECMDGOALS)))
110
- ifeq (,$(findstring deploy,$(MAKECMDGOALS)))
111
- ifeq (,$(findstring setup,$(MAKECMDGOALS)))
112
- -include ${env_path}
113
- endif
114
- endif
115
- endif
116
- endif
117
-
118
- ifneq (,$(findstring deploy,$(MAKECMDGOALS)))
119
- RAILS_ENV=$(shell grep '^RAILS_ENV=' '${env_path}' | tail -n1 | sed 's/^RAILS_ENV=//')
120
- endif
121
-
122
- export
123
-
124
- ifneq (,$(findstring test,$(MAKECMDGOALS)))
125
- env=test
126
- endif
127
-
128
- ifneq (,$(RAILS_ENV))
129
- env=$(RAILS_ENV)
130
- else ifneq (,$(env))
131
- # `env` set by current shell.
132
- else ifneq (,$(RAILS_ENV))
133
- env=$(RAILS_ENV)
134
- else ifneq (,$(RACK_ENV))
135
- env=$(RACK_ENV)
136
- else
137
- env=development
138
- endif
139
-
140
- env_human=${gray}${env}${reset}
141
- DOCKER_TAG ?= latest
142
-
143
- ifneq (,$(wildcard ./Gemfile))
144
- bundle_cmd = bundle exec
145
- endif
146
- rake=ORCHESTRATION_DISABLE_ENV=1 DEVPACK_DISABLE=1 RACK_ENV=${env} SECRET_KEY_BASE='placeholder-secret' RAILS_ENV=${env} ${bundle_cmd} rake
147
-
148
- ifneq (,$(wildcard ${env_file}))
149
- ifeq (,$(findstring deploy,$(MAKECMDGOALS)))
150
- rake_cmd:=${rake}
151
- rake=. ${env_file} && ${rake_cmd}
152
- endif
153
- endif
154
-
155
- docker_config:=$(shell DEVPACK_DISABLE=1 RAILS_ENV=development ${bundle_cmd} rake orchestration:config 2>/dev/null || echo no-org no-repo)
156
- docker_organization=$(word 1,$(docker_config))
157
- docker_repository=$(word 2,$(docker_config))
158
-
159
- compose_services:=$(shell ${rake} orchestration:compose_services RAILS_ENV=${env})
160
-
161
- ifeq (,$(project_name))
162
- project_base = ${docker_repository}_${env}
163
- else
164
- project_base := $(project_name)
165
- endif
166
-
167
- ifeq (,$(findstring deploy,$(MAKECMDGOALS)))
168
- sidecar_suffix := $(shell test -f ${orchestration_dir}/.sidecar && cat ${orchestration_dir}/.sidecar)
169
- ifneq (,${sidecar_suffix})
170
- sidecar := 1
171
- endif
172
-
173
- ifdef sidecar
174
- # Set the variable to an empty string so that "#{sidecar-1234}" will
175
- # evaluate to "1234" in port mappings.
176
- sidecar_compose = sidecar=''
177
- ifeq (,${sidecar_suffix})
178
- sidecar_suffix := $(call token)
179
- _ignore := $(shell echo ${sidecar_suffix} > ${orchestration_dir}/.sidecar)
180
- endif
181
-
182
- ifeq (,${sidecar_suffix})
183
- $(warning Unable to generate project suffix; project name collisions may occur.)
184
- endif
185
- compose_project_name_base = ${project_base}_${sidecar_suffix}
186
- else
187
- compose_project_name_base = ${project_base}
188
- endif
189
- else
190
- compose_project_name_base = ${project_base}
191
- endif
192
-
193
- ifdef COMPOSE_PROJECT_NAME_SUFFIX
194
- compose_project_name = ${compose_project_name_base}_${COMPOSE_PROJECT_NAME_SUFFIX}
195
- else
196
- compose_project_name = ${compose_project_name_base}
197
- endif
198
-
199
- compose_base:=env -i \
200
- PATH=$(PATH) \
201
- HOST_UID=$(shell id -u) \
202
- DOCKER_ORGANIZATION="${docker_organization}" \
203
- DOCKER_REPOSITORY="${docker_repository}" \
204
- COMPOSE_PROJECT_NAME="${compose_project_name}" \
205
- COMPOSE_PROJECT_NAME_SUFFIX="${COMPOSE_PROJECT_NAME_SUFFIX}" \
206
- ${sidecar_compose} \
207
- docker-compose \
208
- -f ${orchestration_dir}/docker-compose.${env}.yml
209
-
210
- git_branch := $(if $(branch),$(branch),$(shell git rev-parse --abbrev-ref HEAD 2>/dev/null || echo no-branch))
211
- ifndef dev
212
- git_version := $(shell git rev-parse --short --verify ${git_branch} 2>/dev/null || echo no-version)
213
- else
214
- git_version := dev
215
- endif
216
-
217
- docker_image:=${docker_organization}/${docker_repository}:${git_version}
218
-
219
- compose=${compose_base}
220
- compose_human=docker-compose -f ${orchestration_dir_name}/docker-compose.${env}.yml
221
- random_str=cat /dev/urandom | LC_ALL=C tr -dc 'a-z' | head -c $1
222
-
223
- ifneq (,$(wildcard ${orchestration_dir}/docker-compose.local.yml))
224
- compose:=${compose} -f ${orchestration_dir}/docker-compose.local.yml
225
- endif
226
-
227
- all: build
228
-
229
- ### Container management commands ###
230
-
231
- .PHONY: pull
232
- pull:
233
- @$(call system,${compose_human} pull)
234
- @${compose} pull
235
-
236
- .PHONY: start
237
- ifndef network
238
- start: network := ${compose_project_name}
239
- endif
240
- start: _create-log-directory _clean-logs pull
241
- ifneq (,${compose_services})
242
- @$(call system,${compose_human} up --detach)
243
- ifeq (${env},$(filter ${env},test development))
244
- @${compose} up --detach --force-recreate --renew-anon-volumes --remove-orphans ${services} ${log} || ${exit_fail}
245
- @[ -n '${sidecar}' ] && \
246
- ( \
247
- $(call echo,(joining dependency network ${cyan}${network}${reset})) ; \
248
- $(call system,docker network connect "${network}") ; \
249
- docker network connect '${network}' '$(shell hostname)' ${log} \
250
- || ( \
251
- $(call warn,Unable to join network: "${cyan}${network}${reset}". Container will not be able to connect to dependency services) ; \
252
- $(call echo,Try deleting "${cyan}orchestration/.sidecar${reset}" if you do not want to use sidecar mode) ; \
253
- ) \
254
- ) \
255
- || ( [ -z '${sidecar}' ] || ${exit_fail} )
256
- else
257
- @${compose} up --detach --scale app=$${instances:-1} ${log} || ${exit_fail}
258
- endif
259
- @$(call echo,${env_human} containers started ${tick})
260
- @$(call echo,Waiting for services to become available)
261
- @$(call make,wait) 2>${stderr} || ${exit_fail}
262
- endif
263
-
264
- .PHONY: stop
265
- stop: network := ${compose_project_name}
266
- stop:
267
- ifneq (,${compose_services})
268
- @$(call echo,Stopping ${env_human} containers)
269
- @$(call system,${compose_human} down)
270
- @if docker ps --format "{{.ID}}" | grep -q $(shell hostname) ; \
271
- then \
272
- ( docker network disconnect ${network} $(shell hostname) ${log} || : ) \
273
- && \
274
- ( ${compose} down ${log} || ${exit_fail} ) ; \
275
- else \
276
- ${compose} down ${log} || ${exit_fail} ; \
277
- fi
278
- @$(call echo,${env_human} containers stopped ${tick})
279
- endif
280
-
281
- .PHONY: logs
282
- logs:
283
- @${compose} logs -f
284
-
285
- .PHONY: config
286
- config:
287
- @${compose} config
288
-
289
- .PHONY: compose
290
- compose:
291
- @echo ${compose}
292
-
293
- ### Development/Test Utility Commands
294
-
295
- .PHONY: serve
296
- serve: env_file ?= ./.env
297
- serve: rails = RAILS_ENV='${env}' bundle exec rails server ${server}
298
- serve:
299
- @if [ -f "${env_file}" ] ; \
300
- then ( \
301
- $(call echo,Environment${reset}: ${cyan}${env_file}${reset}) && \
302
- cat '${env_file}' | ${format_env} \
303
- ) ; \
304
- fi
305
- ${rails}
306
-
307
- .PHONY: console
308
- console: env_file ?= ./.env
309
- console: rails = RAILS_ENV='${env}' bundle exec rails
310
- console:
311
- @if [ -f "${env_file}" ] ; \
312
- then ( \
313
- $(call echo,Environment${reset}: ${cyan}${env_file}${reset}) && \
314
- cat '${env_file}' | ${format_env} \
315
- ) ; \
316
- fi
317
- ${rails} console
318
-
319
- .PHONY: db-console
320
- db-console:
321
- @${rake} orchestration:db:console RAILS_ENV=${env}
322
-
323
- .PHONY: setup
324
- ifneq (,$(wildcard config/database.yml))
325
- setup: url := $(shell ${rake} orchestration:db:url RAILS_ENV=${env} 2>/dev/null)
326
- endif
327
- setup: _log-notify
328
- @$(call echo,Setting up ${env_human} environment)
329
- @$(call make,start env=${env})
330
- ifneq (,$(wildcard config/database.yml))
331
- @$(call echo,Preparing ${env_human} database)
332
- @$(call system,rake db:create RAILS_ENV="${env}")
333
- @${rake} db:create RAILS_ENV=${env} DATABASE_URL='${url}' ${log} || : ${log}
334
- ifneq (,$(wildcard db/structure.sql))
335
- @$(call system,rake db:structure:load RAILS_ENV="${env}" ${url_prefix}DATABASE_URL="${url}")
336
- @${rake} db:structure:load RAILS_ENV="${env}" DATABASE_URL='${url}' ${log} || ${exit_fail}
337
- else ifneq (,$(wildcard db/schema.rb))
338
- @$(call system,rake db:schema:load RAILS_ENV="${env}" ${url_prefix}DATABASE_URL="${url}")
339
- @${rake} db:schema:load RAILS_ENV="${env}" DATABASE_URL='${url}' ${log} || ${exit_fail}
340
- endif
341
- @$(call system,rake db:migrate RAILS_ENV="${env}" ${url_prefix}DATABASE_URL="${url}")
342
- @${rake} db:migrate RAILS_ENV="${env}" DATABASE_URL='${url}' ${log} || ${exit_fail}
343
- endif
344
- @if $(MAKE) -n post-setup >/dev/null 2>&1; then \
345
- $(call system,make post-setup RAILS_ENV="${env}") \
346
- && $(MAKE) post-setup RAILS_ENV=${env}; fi
347
- @$(call echo,${env_human} environment setup complete ${tick})
348
-
349
- .PHONY: dump
350
- dump:
351
- ifndef verbose
352
- @$(call println)
353
- @$(call println,'${yellow}Captured${reset} ${green}stdout${reset} ${yellow}and${reset} ${red}stderr${reset} ${yellow}log data [${cyan}${env}${yellow}]${reset}:')
354
- @$(call println)
355
- @echo
356
- @test -f '${stdout}' && ( \
357
- $(call hr,${green}) ; \
358
- $(call println,'${gray}${stdout}${reset}') ; \
359
- $(call hr,${green}) ; \
360
- echo ; cat '${stdout}' ; echo ; \
361
- $(call hr,${green}) ; \
362
- )
363
-
364
- @test -f '${stdout}' && ( \
365
- echo ; \
366
- $(call hr,${red}) ; \
367
- $(call println,'${gray}${stderr}${reset}') ; \
368
- $(call hr,${red}) ; \
369
- echo ; cat '${stderr}' ; echo ; \
370
- $(call hr,${red}) ; \
371
- )
372
- endif
373
- ifneq (build,${src_cmd})
374
- ifneq (push,${src_cmd})
375
- @echo ; \
376
- $(call hr,${yellow}) ; \
377
- $(call println,'${gray}docker-compose logs${reset}') ; \
378
- $(call hr,${yellow}) ; \
379
- echo
380
- @${compose} logs
381
- @echo ; \
382
- $(call hr,${yellow})
383
- @$(NOOP)
384
- endif
385
- endif
386
-
387
- .PHONY: tag
388
- tag:
389
- @echo ${docker_image}
390
-
391
- ### Deployment utility commands ###
392
-
393
- .PHONY: deploy
394
- deploy: _log-notify _clean-logs
395
- ifdef env_file
396
- deploy: env_file_option = --env-file ${env_file}
397
- endif
398
- deploy: RAILS_ENV := ${env}
399
- deploy: RACK_ENV := ${env}
400
- deploy: DOCKER_TAG = ${git_version}
401
- deploy: base_vars = DOCKER_ORGANIZATION=${docker_organization} DOCKER_REPOSITORY=${docker_repository} DOCKER_TAG=${git_version}
402
- deploy: compose_deploy := ${base_vars} COMPOSE_PROJECT_NAME=${project_base} HOST_UID=$(shell id -u) docker-compose ${env_file_option} --project-name ${project_base} -f orchestration/docker-compose.deployment.yml
403
- deploy: config_cmd = ${compose_deploy} config
404
- deploy: remote_cmd = cat | docker stack deploy --prune --with-registry-auth -c - ${project_base}
405
- deploy: ssh_cmd = ssh "${manager}"
406
- deploy: deploy_cmd := ${config_cmd} | ${ssh_cmd} "/bin/bash -lc '${remote_cmd}'"
407
- deploy:
408
- ifndef manager
409
- @$(call fail,Missing ${cyan}manager${reset} parameter: ${cyan}make deploy manager=swarm-manager.example.com${reset}) ; exit 1
410
- endif
411
- @$(call echo,Deploying ${env_human} stack via ${cyan}${manager}${reset} as ${cyan}${project_base}${reset}) && \
412
- ( \
413
- ( test -f '${env_file}' && $(call echo,Deployment environment:) && cat '${env_file}' | ${format_env} || : ) && \
414
- $(call echo,Application image: ${cyan}${docker_image}${reset}) ; \
415
- $(call system,${config_cmd} | ${ssh_cmd} "/bin/bash -lc '\''${remote_cmd}'\''") ; \
416
- ${deploy_cmd} \
417
- )
418
- @$(call echo,Deployment ${green}complete${reset} ${tick})
419
-
420
- .PHONY: rollback
421
- ifndef service
422
- rollback: service = app
423
- endif
424
- rollback:
425
- ifndef manager
426
- @$(call fail,Missing `manager` parameter: `make deploy manager=swarm-manager.example.com`)
427
- @exit 1
428
- endif
429
- @$(call echo,Rolling back ${cyan}${compose_project_name}_${service}${reset} via ${cyan}${manager}${reset} ...)
430
- @$(call system,docker service rollback --detach "${compose_project_name}_${service}")
431
- @ssh "${manager}" 'docker service rollback --detach "${compose_project_name}_${service}"' ${log} || ${exit_fail}
432
- @$(call echo,Rollback request ${green}complete${reset} ${tick})
433
-
434
- ### Service healthcheck commands ###
435
-
436
- .PHONY: wait
437
- wait:
438
- @${rake} orchestration:wait
439
- @$(call echo,${env_human} services ${green}ready${reset} ${tick})
440
-
441
- ## Generic Listener healthcheck for TCP services ##
442
-
443
- wait-listener:
444
- @${rake} orchestration:listener:wait service=${service} sidecar=${sidecar}
445
-
446
- ### Docker build commands ###
447
-
448
- .PHONY: build
449
- build: _log-notify _clean-logs
450
- build: build_dir = ${orchestration_dir}/.build
451
- build: context = ${build_dir}/context.tar
452
- build: build_args := --build-arg GIT_COMMIT='${git_version}' $(shell grep '^ARG ' orchestration/Dockerfile | sed -e 's/=.*$$//' -e 's/^ARG /--build-arg /')
453
- build: tag_human = ${cyan}${docker_organization}/${docker_repository}:${git_version}${reset}
454
- build: latest_tag_human = ${cyan}${docker_organization}/${docker_repository}:latest${reset}
455
- build: _create-log-directory check-local-changes
456
- @$(call echo,Preparing build context from ${cyan}${git_branch}${reset} (${cyan}${git_version}${reset})${reset})
457
- @$(call system,git archive --format "tar" -o "${context}" "${git_branch}")
458
- @mkdir -p ${orchestration_dir}/.build ${log} || ${exit_fail}
459
- @cp '$(shell bundle info --path orchestration)/lib/orchestration/healthcheck.bash' '${orchestration_dir}/healthcheck'
460
- @chmod +x '${orchestration_dir}/healthcheck'
461
- ifndef dev
462
- @git show ${git_branch}:./Gemfile > ${orchestration_dir}/.build/Gemfile 2>${stderr} || ${exit_fail}
463
- @git show ${git_branch}:./Gemfile.lock > ${orchestration_dir}/.build/Gemfile.lock 2>${stderr} || ${exit_fail}
464
- @git archive --format 'tar' -o '${context}' '${git_branch}' ${log} || ${exit_fail}
465
- else
466
- @tar -cvf '${context}' . ${log} || ${exit_fail}
467
- endif
468
- @tar --append --file '${context}' '${orchestration_dir}/healthcheck'
469
- @rm '${orchestration_dir}/healthcheck'
470
- ifdef include
471
- @$(call echo,Including files from: ${cyan}${include}${reset})
472
- @(while read line; do \
473
- export line; \
474
- include_dir="${build_dir}/$$(dirname "$${line}")/" && \
475
- mkdir -p "$${include_dir}" && cp "$${line}" "$${include_dir}" \
476
- && (cd '${orchestration_dir}/.build/' && tar rf 'context.tar' "$${line}"); \
477
- echo "${system_prefix}" "tar rf 'context.tar' '$${line}'"; \
478
- done < '${include}') ${log} || ${exit_fail}
479
- @$(call echo,Build context ${green}ready${reset} ${tick})
480
- endif
481
- @$(call echo,Building image ${tag_human})
482
- @$(call system,docker build ${build_args} -t ${docker_organization}/${docker_repository}:${git_version} ${orchestration_dir}/)
483
- @docker build ${build_args} \
484
- -t ${docker_organization}/${docker_repository}:${git_version} \
485
- ${orchestration_dir}/ ${log_progress} || ${exit_fail}
486
- @echo
487
- @$(call echo,Build ${green}complete${reset} ${tick})
488
- @$(call echo,[${green}tag${reset}] ${tag_human})
489
-
490
- .PHONY: push
491
- push: _log-notify _clean-logs
492
- @$(call echo,Pushing ${cyan}${docker_image}${reset} to registry)
493
- @$(call system,docker push ${docker_image})
494
- @docker push ${docker_image} ${log_progress} || ${exit_fail}
495
- @echo
496
- @$(call echo,Push ${green}complete${reset} ${tick})
497
-
498
- .PHONY: check-local-changes
499
- check-local-changes:
500
- ifndef dev
501
- @changes="$$(git status --porcelain)"; if ! [ -z "${changes}" ] && [[ "${changes}" != "?? orchestration/.sidecar" ]]; \
502
- then \
503
- $(call warn,You have uncommitted changes which will not be included in your build:) ; \
504
- git status --porcelain ; \
505
- $(call echo,Commit these changes to Git or, alternatively, build in development mode to test your changes before committing: ${cyan}make build dev=1${reset}) ; \
506
- fi
507
- endif
508
-
509
- ### Internal Commands ###
510
- #
511
- .PHONY: _log-notify
512
- _log-notify: comma=,
513
- _log-notify: _verify-repository
514
- ifndef verbose
515
- @$(call logs,${green}stdout${reset}: ${cyan}log/orchestration.stdout.log${reset}${comma} ${red}stderr${reset}: ${cyan}log/orchestration.stderr.log)
516
- endif
517
-
518
- .PHONY: _verify-repository
519
- _verify-repository:
520
- @if ! git rev-parse HEAD >/dev/null 2>&1 ; then $(call fail,You must make at least one commit before you can use Orchestration commands) ; exit 1 ; fi
521
-
522
- .PHONY: _clean-logs
523
- _clean-logs:
524
- _clean-logs: _create-log-directory
525
- @rm -f '${stdout}' '${stderr}'
526
- @touch '${stdout}' '${stderr}'
527
-
528
- .PHONY: _create-log-directory
529
- _create-log-directory:
530
- @mkdir -p log
531
-
532
- # Used by Orchestration test suite to verify Makefile syntax
533
- .PHONY: _test
534
- _test:
535
- @echo 'test command'