orchestration 0.5.6 → 0.5.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/README.md +1 -1
- data/lib/orchestration.rb +1 -1
- data/lib/orchestration/docker_compose/app_service.rb +18 -15
- data/lib/orchestration/docker_compose/configuration.rb +4 -0
- data/lib/orchestration/docker_compose/database_service.rb +8 -1
- data/lib/orchestration/docker_compose/install_generator.rb +8 -1
- data/lib/orchestration/docker_healthcheck.rb +1 -1
- data/lib/orchestration/file_helpers.rb +2 -6
- data/lib/orchestration/install_generator.rb +1 -5
- data/lib/orchestration/services/mongo/configuration.rb +1 -3
- data/lib/orchestration/templates/Dockerfile.erb +3 -1
- data/lib/orchestration/templates/env.erb +2 -0
- data/lib/orchestration/templates/makefile_macros.mk.erb +1 -0
- data/lib/orchestration/templates/orchestration.mk.erb +29 -31
- data/lib/orchestration/terminal.rb +6 -6
- data/lib/orchestration/version.rb +1 -1
- data/lib/tasks/orchestration.rake +1 -1
- data/orchestration.gemspec +5 -5
- metadata +12 -27
- data/lib/orchestration/templates/deploy.mk.erb +0 -69
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9dd4904167052dde3f1cbf5f441225f2719c42467204077d943534f73bb2873
|
4
|
+
data.tar.gz: 873bea476a74979aa917e87449c0da23a1c63128c1257a6c0ab40414e464a2ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf66b2842c17ed6cb43d7a02045f9c35f7a4bf6fe70e8c7d4425ddee8c72c24a810ab64175fa00430da2c38b3c9e66dde62cedc31b65a68b5b51ba65e53c87c9
|
7
|
+
data.tar.gz: 4e3aa0a3ba1f8b2f9b7bd58e6a553a86924cbf0805657de8b5b6c63eeefc8ee38bea13a560f093410778690c5c0d9228359e9d8a0f38bd6e600b1c42e80bd253
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
data/lib/orchestration.rb
CHANGED
@@ -64,7 +64,8 @@ module Orchestration
|
|
64
64
|
'environment' => environment,
|
65
65
|
'ports' => ports,
|
66
66
|
'deploy' => deploy,
|
67
|
-
'logging' => logging
|
67
|
+
'logging' => logging,
|
68
|
+
'networks' => networks
|
68
69
|
}
|
69
70
|
end
|
70
71
|
|
@@ -75,10 +76,7 @@ module Orchestration
|
|
75
76
|
end
|
76
77
|
|
77
78
|
def deploy
|
78
|
-
{
|
79
|
-
'mode' => 'replicated',
|
80
|
-
'replicas' => '${REPLICAS}'
|
81
|
-
}
|
79
|
+
{ 'mode' => 'replicated', 'replicas' => '${REPLICAS:-3}' }
|
82
80
|
end
|
83
81
|
|
84
82
|
def logging
|
@@ -91,25 +89,30 @@ module Orchestration
|
|
91
89
|
}
|
92
90
|
end
|
93
91
|
|
92
|
+
def networks
|
93
|
+
{ 'local' => {} }
|
94
|
+
end
|
95
|
+
|
94
96
|
def environment
|
95
97
|
{
|
96
98
|
'RAILS_LOG_TO_STDOUT' => '1',
|
97
99
|
'RAILS_SERVE_STATIC_FILES' => '1',
|
98
100
|
'WEB_PRELOAD_APP' => '1',
|
99
|
-
'WEB_HEALTHCHECK_PATH' => '/'
|
101
|
+
'WEB_HEALTHCHECK_PATH' => '/',
|
102
|
+
'DATABASE_URL' => database_url
|
100
103
|
}.merge(Hash[inherited_environment.map { |key| [key, nil] }])
|
101
104
|
end
|
102
105
|
|
106
|
+
def database_url
|
107
|
+
{
|
108
|
+
'postgresql' => 'postgresql://postgres:password@database-local:5432/production',
|
109
|
+
'mysql2' => 'mysql2://root:password@database-local:3306/production',
|
110
|
+
'sqlite3' => 'sqlite3:db/production.sqlite3'
|
111
|
+
}.fetch(DockerCompose::ComposeConfiguration.database_adapter_name)
|
112
|
+
end
|
113
|
+
|
103
114
|
def inherited_environment
|
104
|
-
%w[
|
105
|
-
DATABASE_URL
|
106
|
-
HOST_UID
|
107
|
-
RAILS_ENV
|
108
|
-
SECRET_KEY_BASE
|
109
|
-
WEB_CONCURRENCY
|
110
|
-
WEB_TIMEOUT
|
111
|
-
WEB_WORKER_PROCESSES
|
112
|
-
]
|
115
|
+
%w[HOST_UID RAILS_ENV SECRET_KEY_BASE WEB_CONCURRENCY WEB_TIMEOUT WEB_WORKER_PROCESSES]
|
113
116
|
end
|
114
117
|
|
115
118
|
def ports
|
@@ -16,7 +16,8 @@ module Orchestration
|
|
16
16
|
|
17
17
|
{
|
18
18
|
'image' => adapter.image,
|
19
|
-
'environment' => adapter.environment
|
19
|
+
'environment' => adapter.environment,
|
20
|
+
'networks' => networks
|
20
21
|
}.merge(ports).merge(volumes)
|
21
22
|
end
|
22
23
|
|
@@ -32,6 +33,12 @@ module Orchestration
|
|
32
33
|
adapter.default_port
|
33
34
|
end
|
34
35
|
|
36
|
+
def networks
|
37
|
+
return {} unless @environment == :production
|
38
|
+
|
39
|
+
{ 'local' => { 'aliases' => ['database-local'] } }
|
40
|
+
end
|
41
|
+
|
35
42
|
def ports
|
36
43
|
return {} unless %i[development test].include?(@environment)
|
37
44
|
|
@@ -41,7 +41,8 @@ module Orchestration
|
|
41
41
|
{
|
42
42
|
'version' => compose_config(environment).version,
|
43
43
|
'services' => services(environment),
|
44
|
-
'volumes' => volumes(environment)
|
44
|
+
'volumes' => volumes(environment),
|
45
|
+
'networks' => networks(environment)
|
45
46
|
}
|
46
47
|
end
|
47
48
|
|
@@ -55,6 +56,12 @@ module Orchestration
|
|
55
56
|
compose_config(environment).volumes
|
56
57
|
end
|
57
58
|
|
59
|
+
def networks(environment)
|
60
|
+
return {} unless environment == :production
|
61
|
+
|
62
|
+
compose_config(environment).networks
|
63
|
+
end
|
64
|
+
|
58
65
|
def compose_config(environment)
|
59
66
|
DockerCompose::Configuration.new(
|
60
67
|
@env,
|
@@ -35,7 +35,7 @@ module Orchestration
|
|
35
35
|
client.open_timeout = ENV.fetch('WEB_HEALTHCHECK_OPEN_TIMEOUT', '10').to_i
|
36
36
|
|
37
37
|
client.start do |request|
|
38
|
-
request.get(ENV.fetch('WEB_HEALTHCHECK_PATH'
|
38
|
+
request.get(ENV.fetch('WEB_HEALTHCHECK_PATH', '/'))
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -18,9 +18,7 @@ module Orchestration
|
|
18
18
|
|
19
19
|
def inject_if_missing(path, content, index = 0)
|
20
20
|
lines = File.exist?(path) ? File.readlines(path).map(&:chomp) : []
|
21
|
-
if lines.any? { |line| line == content }
|
22
|
-
return @terminal.write(:skip, relative_path(path))
|
23
|
-
end
|
21
|
+
return @terminal.write(:skip, relative_path(path)) if lines.any? { |line| line == content }
|
24
22
|
|
25
23
|
lines.insert(index, content)
|
26
24
|
update_file(path, lines.join("\n"))
|
@@ -56,9 +54,7 @@ module Orchestration
|
|
56
54
|
return create_file(path, content) unless present
|
57
55
|
|
58
56
|
previous_content = File.read(path) if present
|
59
|
-
if skip?(present, content, previous_content, options)
|
60
|
-
return @terminal.write(:skip, relative_path(path))
|
61
|
-
end
|
57
|
+
return @terminal.write(:skip, relative_path(path)) if skip?(present, content, previous_content, options)
|
62
58
|
|
63
59
|
backup(path, previous_content) if options.fetch(:backup, false)
|
64
60
|
File.write(path, content)
|
@@ -27,7 +27,7 @@ module Orchestration
|
|
27
27
|
@terminal.write(:skip, relpath)
|
28
28
|
end
|
29
29
|
|
30
|
-
def verify_makefile(skip
|
30
|
+
def verify_makefile(skip: true)
|
31
31
|
# Only run when called explicitly [from Rake tasks].
|
32
32
|
# (I know this is hacky).
|
33
33
|
return if skip
|
@@ -127,10 +127,6 @@ module Orchestration
|
|
127
127
|
ensure_lines_in_file(path, lines)
|
128
128
|
end
|
129
129
|
|
130
|
-
def deploy_mk
|
131
|
-
simple_copy('deploy.mk')
|
132
|
-
end
|
133
|
-
|
134
130
|
private
|
135
131
|
|
136
132
|
def t(key)
|
@@ -42,9 +42,7 @@ module Orchestration
|
|
42
42
|
|
43
43
|
def url_config
|
44
44
|
uri = URI.parse(@env.mongo_url)
|
45
|
-
unless uri.scheme == 'mongodb'
|
46
|
-
raise ArgumentError, 'MONGO_URL protocol must be mongodb://'
|
47
|
-
end
|
45
|
+
raise ArgumentError, 'MONGO_URL protocol must be mongodb://' unless uri.scheme == 'mongodb'
|
48
46
|
|
49
47
|
url_config_structure(uri)
|
50
48
|
end
|
@@ -13,7 +13,9 @@ RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
|
|
13
13
|
&& mkdir /app<%if defined?(Webpacker) %> \
|
14
14
|
&& curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash \
|
15
15
|
&& . /root/.bashrc \
|
16
|
-
&& nvm install 10.
|
16
|
+
&& nvm install 10.13.0 \
|
17
|
+
&& npm config set user 0 \
|
18
|
+
&& npm config set unsafe-perm true \
|
17
19
|
&& npm install -g yarn<% end %>
|
18
20
|
WORKDIR /app
|
19
21
|
COPY .build/Gemfile .build/Gemfile.lock ./
|
@@ -31,6 +31,7 @@ stdout=${pwd}/log/orchestration.stdout.log
|
|
31
31
|
stderr=${pwd}/log/orchestration.stderr.log
|
32
32
|
log_path_length=$(shell echo "${stdout}" | wc -c)
|
33
33
|
ifndef verbose
|
34
|
+
log_tee:= 2>&1 | tee -a ${stdout}
|
34
35
|
log:= >>${stdout} 2>>${stderr}
|
35
36
|
progress_point:=perl -e 'while( my $$line = <STDIN> ) { printf("."); select()->flush(); }'
|
36
37
|
log_progress:= > >(tee -ai ${stdout} >&1 | ${progress_point}) 2> >(tee -ai ${stderr} 2>&1 | ${progress_point})
|
@@ -41,7 +41,7 @@ endif
|
|
41
41
|
ifeq (,$(findstring serve,$(MAKECMDGOALS)))
|
42
42
|
ifeq (,$(findstring console,$(MAKECMDGOALS)))
|
43
43
|
ifeq (,$(findstring test,$(MAKECMDGOALS)))
|
44
|
-
docker_config:=$(shell
|
44
|
+
docker_config:=$(shell RAILS_ENV=development bundle exec rake orchestration:config)
|
45
45
|
docker_organization=$(word 1,$(docker_config))
|
46
46
|
docker_repository=$(word 2,$(docker_config))
|
47
47
|
endif
|
@@ -238,6 +238,7 @@ ifndef verbose
|
|
238
238
|
$(call hr,${red}) ; \
|
239
239
|
)
|
240
240
|
endif
|
241
|
+
ifneq (,$(findstring deploy,$(MAKECMDGOALS)))
|
241
242
|
@echo ; \
|
242
243
|
$(call hr,${yellow}) ; \
|
243
244
|
$(call println,'${gray}docker-compose logs${reset}') ; \
|
@@ -246,6 +247,8 @@ endif
|
|
246
247
|
@${compose} logs
|
247
248
|
@echo ; \
|
248
249
|
$(call hr,${yellow})
|
250
|
+
endif
|
251
|
+
@$(NOOP)
|
249
252
|
|
250
253
|
.PHONY: image
|
251
254
|
image:
|
@@ -253,45 +256,40 @@ image:
|
|
253
256
|
|
254
257
|
### Deployment utility commands ###
|
255
258
|
|
256
|
-
.PHONY: bundle
|
257
|
-
bundle:
|
258
|
-
ifndef path
|
259
|
-
@$(warning Missing `path` parameter; using `./bundle.tar`. Set a custom path with `make bundle path=/tmp/bundle.tar`)
|
260
|
-
endif
|
261
|
-
@rm -rf ${orchestration_dir}/.deploy/
|
262
|
-
@mkdir -p ${orchestration_dir}/.deploy/${docker_repository}/
|
263
|
-
@sed -e "s/%%VERSION%%/${git_version}/g" \
|
264
|
-
-e "s/%%REPOSITORY%%/${docker_repository}/g" \
|
265
|
-
-e "s/%%ORGANIZATION%%/${docker_organization}/g" \
|
266
|
-
${orchestration_dir}/deploy.mk > \
|
267
|
-
${orchestration_dir}/.deploy/${docker_repository}/Makefile
|
268
|
-
@bundle_path="${path}" ; tar -C '${orchestration_dir}/.deploy' -cf "$${bundle_path:-./bundle.tar}" ./${docker_repository}
|
269
|
-
|
270
259
|
.PHONY: deploy
|
271
|
-
|
260
|
+
ifdef env_file
|
261
|
+
deploy: env_file_option = --env-file ${env_file}
|
262
|
+
endif
|
272
263
|
deploy: RAILS_ENV := ${env}
|
273
264
|
deploy: RACK_ENV := ${env}
|
274
265
|
deploy: DOCKER_TAG = ${git_version}
|
266
|
+
deploy: base_vars = DOCKER_ORGANIZATION=${docker_organization} DOCKER_REPOSITORY=${docker_repository} DOCKER_TAG=${git_version}
|
267
|
+
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.${env}.yml
|
268
|
+
deploy: compose_config := ${compose_deploy} config
|
269
|
+
deploy: deploy_cmd := echo "$${config}" | ssh "${manager}" "/bin/bash -lc 'cat | docker stack deploy --prune --with-registry-auth -c - ${project_base}'"
|
270
|
+
deploy: out_of_sequence_error := rpc error: code = Unknown desc = update out of sequence
|
271
|
+
deploy: retry_message := ${yellow}Detected Docker RPC error: ${red}${out_of_sequence_error}${yellow}. Retrying in
|
275
272
|
deploy:
|
276
273
|
ifndef manager
|
277
274
|
@$(call println_error,'Missing `manager` parameter: `make deploy manager=swarm-manager.example.com`') ; exit 1
|
278
275
|
endif
|
279
|
-
@$(call println,'${yellow}Deploying ${green}${env}${
|
276
|
+
@$(call println,'${yellow}Deploying ${green}${env} ${yellow}stack via ${green}${manager} ${yellow}as ${green}${project_base}${reset} ...') && \
|
280
277
|
( \
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
278
|
+
$(call println,'${yellow}Deployment environment${reset}:') && \
|
279
|
+
( test -f '${env_file}' && cat '${env_file}' | ${format_env} || : ) && \
|
280
|
+
$(call println,'') && \
|
281
|
+
$(call println,'${yellow}Application image${reset}: ${cyan}${docker_image}${reset}') && \
|
282
|
+
export config="$$(${compose_config} 2>${stderr})" ; \
|
283
|
+
config_exit_code=$$? ; \
|
284
|
+
if [[ "$${config_exit_code}" != "0" ]]; then exit ${config_exit_code}; fi ; \
|
285
|
+
output="$$(${deploy_cmd} | tee /dev/tty)" ; \
|
286
|
+
deploy_exit_code=$$? ; \
|
287
|
+
if [[ "$${deploy_exit_code}" == 0 ]] ; then exit 0 ; fi ; \
|
288
|
+
if ! echo "$${output}" | grep -q '${out_of_sequence_error}' ; then exit ${deploy_exit_code} ; fi ; \
|
289
|
+
retry_in="$$(( 10 + RANDOM % 50 ))" ; \
|
290
|
+
echo "${retry_message} ${green}$${retry_in} ${yellow}seconds.${reset}" ; \
|
291
|
+
sleep "$${retry_in}" ; \
|
292
|
+
${deploy_cmd} \
|
295
293
|
) \
|
296
294
|
|| ${fail}
|
297
295
|
|
@@ -20,15 +20,15 @@ module Orchestration
|
|
20
20
|
@settings = settings
|
21
21
|
end
|
22
22
|
|
23
|
-
def write(desc, message, color_name = nil, newline
|
23
|
+
def write(desc, message, color_name = nil, newline: true)
|
24
24
|
output = newline ? "#{message}\n" : message.to_s
|
25
|
-
|
26
|
-
|
25
|
+
$stdout.print colorize(desc, output, color_name)
|
26
|
+
$stdout.flush
|
27
27
|
end
|
28
28
|
|
29
29
|
def read(message, default = nil)
|
30
|
-
write(:input, prompt(message, default), nil, false)
|
31
|
-
result =
|
30
|
+
write(:input, prompt(message, default), nil, newline: false)
|
31
|
+
result = $stdin.gets.chomp.strip
|
32
32
|
return default if result.empty?
|
33
33
|
|
34
34
|
result
|
@@ -57,7 +57,7 @@ module Orchestration
|
|
57
57
|
COLOR_MAP.fetch(color_name)
|
58
58
|
end
|
59
59
|
|
60
|
-
Paint[desc.to_s.rjust(15), *color]
|
60
|
+
"#{Paint[desc.to_s.rjust(15), *color]} #{message}"
|
61
61
|
end
|
62
62
|
|
63
63
|
def t(key)
|
@@ -28,7 +28,7 @@ namespace :orchestration do
|
|
28
28
|
|
29
29
|
desc I18n.t('orchestration.rake.wait')
|
30
30
|
task :wait do
|
31
|
-
Orchestration::InstallGenerator.new.verify_makefile(false)
|
31
|
+
Orchestration::InstallGenerator.new.verify_makefile(skip: false)
|
32
32
|
env = Orchestration::Environment.new
|
33
33
|
services = Orchestration::Services
|
34
34
|
env.docker_compose_config['services'].each do |name, _service|
|
data/orchestration.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.name = 'orchestration'
|
10
10
|
spec.version = Orchestration::VERSION
|
11
11
|
spec.authors = ['Bob Farrell']
|
12
|
-
spec.email = ['
|
12
|
+
spec.email = ['git@bob.frl']
|
13
13
|
|
14
14
|
spec.summary = 'Docker orchestration toolkit'
|
15
15
|
spec.description = 'Tools to help launch apps in Docker'
|
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
spec.required_ruby_version = '~> 2.6'
|
24
25
|
spec.bindir = 'bin'
|
25
26
|
spec.executables = []
|
26
27
|
spec.require_paths = ['lib']
|
@@ -32,10 +33,9 @@ Gem::Specification.new do |spec|
|
|
32
33
|
spec.add_runtime_dependency 'thor', '~> 1.0'
|
33
34
|
|
34
35
|
spec.add_development_dependency 'activerecord', '~> 6.0'
|
35
|
-
spec.add_development_dependency 'betterp', '~> 0.1.3'
|
36
36
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
37
37
|
spec.add_development_dependency 'bunny', '~> 2.12'
|
38
|
-
spec.add_development_dependency '
|
38
|
+
spec.add_development_dependency 'devpack', '~> 0.3.0'
|
39
39
|
spec.add_development_dependency 'mongoid', '~> 7.0'
|
40
40
|
spec.add_development_dependency 'mysql2', '~> 0.5.2'
|
41
41
|
spec.add_development_dependency 'pg', '~> 1.1'
|
@@ -43,8 +43,8 @@ Gem::Specification.new do |spec|
|
|
43
43
|
spec.add_development_dependency 'rake', '~> 10.0'
|
44
44
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
45
45
|
spec.add_development_dependency 'rspec-its', '~> 1.2'
|
46
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
46
|
+
spec.add_development_dependency 'rubocop', '~> 0.90.0'
|
47
47
|
spec.add_development_dependency 'sqlite3', '~> 1.3'
|
48
|
-
spec.add_development_dependency 'strong_versions', '~> 0.
|
48
|
+
spec.add_development_dependency 'strong_versions', '~> 0.4.5'
|
49
49
|
spec.add_development_dependency 'webmock', '~> 3.4'
|
50
50
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: orchestration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bob Farrell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: database_url
|
@@ -94,20 +94,6 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '6.0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: betterp
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 0.1.3
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 0.1.3
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: bundler
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,19 +123,19 @@ dependencies:
|
|
137
123
|
- !ruby/object:Gem::Version
|
138
124
|
version: '2.12'
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
126
|
+
name: devpack
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
142
128
|
requirements:
|
143
129
|
- - "~>"
|
144
130
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
131
|
+
version: 0.3.0
|
146
132
|
type: :development
|
147
133
|
prerelease: false
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
136
|
- - "~>"
|
151
137
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
138
|
+
version: 0.3.0
|
153
139
|
- !ruby/object:Gem::Dependency
|
154
140
|
name: mongoid
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -254,14 +240,14 @@ dependencies:
|
|
254
240
|
requirements:
|
255
241
|
- - "~>"
|
256
242
|
- !ruby/object:Gem::Version
|
257
|
-
version: 0.
|
243
|
+
version: 0.90.0
|
258
244
|
type: :development
|
259
245
|
prerelease: false
|
260
246
|
version_requirements: !ruby/object:Gem::Requirement
|
261
247
|
requirements:
|
262
248
|
- - "~>"
|
263
249
|
- !ruby/object:Gem::Version
|
264
|
-
version: 0.
|
250
|
+
version: 0.90.0
|
265
251
|
- !ruby/object:Gem::Dependency
|
266
252
|
name: sqlite3
|
267
253
|
requirement: !ruby/object:Gem::Requirement
|
@@ -282,14 +268,14 @@ dependencies:
|
|
282
268
|
requirements:
|
283
269
|
- - "~>"
|
284
270
|
- !ruby/object:Gem::Version
|
285
|
-
version: 0.
|
271
|
+
version: 0.4.5
|
286
272
|
type: :development
|
287
273
|
prerelease: false
|
288
274
|
version_requirements: !ruby/object:Gem::Requirement
|
289
275
|
requirements:
|
290
276
|
- - "~>"
|
291
277
|
- !ruby/object:Gem::Version
|
292
|
-
version: 0.
|
278
|
+
version: 0.4.5
|
293
279
|
- !ruby/object:Gem::Dependency
|
294
280
|
name: webmock
|
295
281
|
requirement: !ruby/object:Gem::Requirement
|
@@ -306,7 +292,7 @@ dependencies:
|
|
306
292
|
version: '3.4'
|
307
293
|
description: Tools to help launch apps in Docker
|
308
294
|
email:
|
309
|
-
-
|
295
|
+
- git@bob.frl
|
310
296
|
executables: []
|
311
297
|
extensions: []
|
312
298
|
extra_rdoc_files: []
|
@@ -370,7 +356,6 @@ files:
|
|
370
356
|
- lib/orchestration/templates/Dockerfile.erb
|
371
357
|
- lib/orchestration/templates/application.mk.erb
|
372
358
|
- lib/orchestration/templates/database.yml.erb
|
373
|
-
- lib/orchestration/templates/deploy.mk.erb
|
374
359
|
- lib/orchestration/templates/entrypoint.sh.erb
|
375
360
|
- lib/orchestration/templates/env.erb
|
376
361
|
- lib/orchestration/templates/makefile_macros.mk.erb
|
@@ -392,9 +377,9 @@ require_paths:
|
|
392
377
|
- lib
|
393
378
|
required_ruby_version: !ruby/object:Gem::Requirement
|
394
379
|
requirements:
|
395
|
-
- - "
|
380
|
+
- - "~>"
|
396
381
|
- !ruby/object:Gem::Version
|
397
|
-
version: '
|
382
|
+
version: '2.6'
|
398
383
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
399
384
|
requirements:
|
400
385
|
- - ">="
|
@@ -1,69 +0,0 @@
|
|
1
|
-
-include .env
|
2
|
-
export
|
3
|
-
|
4
|
-
ifneq (,$(RAILS_ENV))
|
5
|
-
env:=$(RAILS_ENV)
|
6
|
-
else ifneq (,$(RACK_ENV))
|
7
|
-
env:=$(RACK_ENV)
|
8
|
-
endif
|
9
|
-
|
10
|
-
verify-environment:
|
11
|
-
ifndef PUBLISH_PORT
|
12
|
-
@$(error `PUBLISH_PORT` must be defined in environment)
|
13
|
-
endif
|
14
|
-
|
15
|
-
ifndef env
|
16
|
-
@$(error Either `env`, `RACK_ENV` or `RAILS_ENV` must be defined in environment)
|
17
|
-
endif
|
18
|
-
|
19
|
-
project_name:=%%REPOSITORY%%_${env}
|
20
|
-
compose_base:=env HOST_UID=$(shell id -u) \
|
21
|
-
DOCKER_ORGANIZATION=%%ORGANIZATION%% \
|
22
|
-
DOCKER_REPOSITORY=%%REPOSITORY%%:%%VERSION%% \
|
23
|
-
docker-compose \
|
24
|
-
-p ${project_name} \
|
25
|
-
-f docker-compose.production.yml
|
26
|
-
|
27
|
-
.PHONY: deploy
|
28
|
-
deploy:
|
29
|
-
ifndef manager
|
30
|
-
@$(error Missing `manager` parameter: `make deploy manager=swarm-manager.example.com`)
|
31
|
-
else
|
32
|
-
@tar -cf - . | ssh ${manager} 'cd $$(mktemp -d) ; chmod 0700 . ; cat - | tar -x ; make deploy-stack ; rm -r $$(pwd)'
|
33
|
-
endif
|
34
|
-
|
35
|
-
.PHONY: deploy-stack
|
36
|
-
deploy-stack:
|
37
|
-
${compose} config | docker stack deploy --prune --with-registry-auth -c - ${project_name}
|
38
|
-
|
39
|
-
.PHONY: console
|
40
|
-
service := app
|
41
|
-
command := /bin/bash
|
42
|
-
console:
|
43
|
-
@echo "Creating temporary container..."
|
44
|
-
@${compose} run --rm ${service} ${command}
|
45
|
-
|
46
|
-
.PHONY: config
|
47
|
-
config:
|
48
|
-
@${compose} config
|
49
|
-
|
50
|
-
.PHONY: pull
|
51
|
-
pull:
|
52
|
-
@${compose} pull
|
53
|
-
|
54
|
-
.PHONY: logs
|
55
|
-
logs: service := app
|
56
|
-
logs:
|
57
|
-
ifndef manager
|
58
|
-
@$(error Missing `manager` parameter: `make logs manager=swarm-manager.example.com`)
|
59
|
-
else
|
60
|
-
ssh ${manager} "docker service logs -f ${project_name}_${service}"
|
61
|
-
endif
|
62
|
-
|
63
|
-
.PHONY: migrate
|
64
|
-
migrate:
|
65
|
-
@${compose} run --rm app bundle exec rake db:migrate
|
66
|
-
|
67
|
-
.PHONY: compose
|
68
|
-
compose:
|
69
|
-
@echo ${compose}
|