orchestration 0.5.1 → 0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +19 -12
- data/lib/orchestration.rb +2 -1
- data/lib/orchestration/docker_compose/app_service.rb +1 -1
- data/lib/orchestration/docker_healthcheck.rb +47 -46
- data/lib/orchestration/environment.rb +1 -1
- data/lib/orchestration/service_check.rb +1 -9
- data/lib/orchestration/templates/Dockerfile.erb +2 -2
- data/lib/orchestration/templates/application.mk.erb +3 -1
- data/lib/orchestration/templates/deploy.mk.erb +2 -2
- data/lib/orchestration/templates/env.erb +4 -7
- data/lib/orchestration/templates/makefile_macros.mk.erb +13 -11
- data/lib/orchestration/templates/orchestration.mk.erb +37 -14
- data/lib/orchestration/version.rb +1 -1
- data/lib/tasks/orchestration.rake +1 -1
- metadata +2 -5
- data/bin/rspec +0 -29
- data/bin/rubocop +0 -29
- data/bin/strong_versions +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de4a4ad1a3d892e6177e6a4397ed5daafbc2ea14d2183600a39103624b40f5c6
|
4
|
+
data.tar.gz: 38c8b982edd2468d9fc034eedaf841b7074d5775483aa5d5761ee58eef646ac7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5054562d388aec2a51995729db9b5e291ebfddbc490e2d030e5f9de5a6a4642bcf97cfa274d20ec77289f8a350c467872a8046f69adcf11728962192b95e2ef
|
7
|
+
data.tar.gz: 7142310c047fdef7c19b210a0a4139cfdd751e6a2f23584135bf01adabb23cacf4f1d53daa8021ad52c803a16ea8453c5f383b8236870feaf758d5b8dda00827
|
data/README.md
CHANGED
@@ -1,13 +1,5 @@
|
|
1
1
|
# Orchestration
|
2
2
|
|
3
|
-
```
|
4
|
-
I've got two tickets to the game
|
5
|
-
It'd be great if I could take you to it this Sunday
|
6
|
-
--Nickelback
|
7
|
-
```
|
8
|
-
|
9
|
-
## Overview
|
10
|
-
|
11
3
|
_Orchestration_ aims to provide a convenient and consistent process for working with _Rails_ and _Docker_ without obscuring underlying components.
|
12
4
|
|
13
5
|
At its core _Orchestration_ is simply a `Makefile` and a set of `docker-compose.yml` files with sensible, general-purpose default settings. Users are encouraged to tailor the generated build-out to suit their application; once the build-out has been generated it belongs to the application.
|
@@ -35,7 +27,7 @@ The below screenshot demonstrates _Orchestration_ being installed in a brand new
|
|
35
27
|
Add _Orchestration_ to your Gemfile:
|
36
28
|
|
37
29
|
```ruby
|
38
|
-
gem 'orchestration', '~> 0.5.
|
30
|
+
gem 'orchestration', '~> 0.5.6'
|
39
31
|
```
|
40
32
|
|
41
33
|
Install:
|
@@ -143,7 +135,20 @@ Note that `git archive` is used to generate the build context. Any uncommitted c
|
|
143
135
|
make build
|
144
136
|
```
|
145
137
|
|
146
|
-
|
138
|
+
The `include` option can also be passed to provide a manifest file. Any files listed in this file will also be built into the _Docker_ image. Files **must** be located within the project directory.
|
139
|
+
|
140
|
+
```bash
|
141
|
+
make build include=manifest.txt
|
142
|
+
```
|
143
|
+
|
144
|
+
```bash
|
145
|
+
# manifest.txt
|
146
|
+
doc/api/swagger.json
|
147
|
+
doc/api/soap.xml
|
148
|
+
doc/api/doc.html
|
149
|
+
```
|
150
|
+
|
151
|
+
See also [build environment](#build-environment) if you use gems hosted on private _GitHub_/_Bitbucket_ repositories.
|
147
152
|
|
148
153
|
#### Push latest image
|
149
154
|
|
@@ -222,6 +227,8 @@ To connect via _SSH_ to a remote swarm and deploy, pass the `manager` parameter:
|
|
222
227
|
make deploy manager=user@manager.swarm.example.com
|
223
228
|
```
|
224
229
|
|
230
|
+
The file `orchestration/docker-compose.production.yml` is created automatically. If your `RAILS_ENV` is set to something other than `production` then another file will need to be created (e.g. `orchestration/docker-compose.staging.yml`). In most cases this file can be a _symlink_ to the original `production` configuration and environment variables can be used to customise the content.
|
231
|
+
|
225
232
|
#### Roll back a deployment
|
226
233
|
|
227
234
|
Roll back the `app` service of your stack:
|
@@ -265,7 +272,7 @@ Note that the following two variables _must_ be set in the relevant `.env` file
|
|
265
272
|
|
266
273
|
```
|
267
274
|
# Published port for your application service:
|
268
|
-
|
275
|
+
PUBLISH_PORT=3000
|
269
276
|
|
270
277
|
# Number of replicas of your application service:
|
271
278
|
REPLICAS=5
|
@@ -320,7 +327,7 @@ See related documentation:
|
|
320
327
|
| `WEB_HEALTHCHECK_PATH` | Path expected to return a successful response | `/` |
|
321
328
|
| `WEB_HEALTHCHECK_READ_TIMEOUT` | Number of seconds to wait for data before failing healthcheck | `10` |
|
322
329
|
| `WEB_HEALTHCHECK_OPEN_TIMEOUT` | Number of seconds to wait for connection before failing healthcheck | `10` |
|
323
|
-
| `WEB_HEALTHCHECK_SUCCESS_CODES` | Comma-separated list of HTTP status codes that will be deemed a success | `200,202,204` |
|
330
|
+
| `WEB_HEALTHCHECK_SUCCESS_CODES` | Comma-separated list of HTTP status codes that will be deemed a success | `200,201,202,204` |
|
324
331
|
|
325
332
|
If your application does not have a suitable always-available route to use as a healthcheck, the following one-liner may be useful:
|
326
333
|
|
data/lib/orchestration.rb
CHANGED
@@ -11,7 +11,7 @@ require 'paint'
|
|
11
11
|
begin
|
12
12
|
require 'rails'
|
13
13
|
rescue LoadError
|
14
|
-
warn('[orchestration]
|
14
|
+
warn('[orchestration] Running in non-Rails mode.')
|
15
15
|
end
|
16
16
|
|
17
17
|
I18n.load_path += Dir[File.join(File.expand_path('..', __dir__),
|
@@ -22,6 +22,7 @@ require 'orchestration/file_helpers'
|
|
22
22
|
require 'orchestration/docker_compose'
|
23
23
|
require 'orchestration/environment'
|
24
24
|
require 'orchestration/errors'
|
25
|
+
require 'orchestration/docker_healthcheck'
|
25
26
|
require 'orchestration/install_generator'
|
26
27
|
require 'orchestration/railtie' if defined?(Rails)
|
27
28
|
require 'orchestration/service_check'
|
@@ -1,64 +1,65 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'net/http'
|
4
|
+
module Orchestration
|
5
|
+
class DockerHealthcheck
|
6
|
+
def self.execute
|
7
|
+
new.execute
|
8
|
+
end
|
4
9
|
|
5
|
-
|
6
|
-
|
7
|
-
new.execute
|
8
|
-
end
|
9
|
-
|
10
|
-
def execute
|
11
|
-
return_code = 1
|
10
|
+
def execute
|
11
|
+
return_code = 1
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
13
|
+
# rubocop:disable Lint/RescueException
|
14
|
+
begin
|
15
|
+
response = run
|
16
|
+
return_code = 0 if success?(response.code)
|
17
|
+
puts message(response.code)
|
18
|
+
rescue Exception => e
|
19
|
+
puts "[#{__FILE__}] ERROR: #{e.inspect}"
|
20
|
+
ensure
|
21
|
+
exit return_code
|
22
|
+
end
|
23
|
+
# rubocop:enable Lint/RescueException
|
22
24
|
end
|
23
|
-
# rubocop:enable Lint/RescueException
|
24
|
-
end
|
25
25
|
|
26
|
-
|
26
|
+
private
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
28
|
+
def run
|
29
|
+
client = Net::HTTP.new(
|
30
|
+
ENV.fetch('WEB_HOST', 'localhost'),
|
31
|
+
ENV.fetch('WEB_PORT', '8080').to_i
|
32
|
+
)
|
33
33
|
|
34
|
-
|
35
|
-
|
34
|
+
client.read_timeout = ENV.fetch('WEB_HEALTHCHECK_READ_TIMEOUT', '10').to_i
|
35
|
+
client.open_timeout = ENV.fetch('WEB_HEALTHCHECK_OPEN_TIMEOUT', '10').to_i
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
client.start do |request|
|
38
|
+
request.get(ENV.fetch('WEB_HEALTHCHECK_PATH') { '/' })
|
39
|
+
end
|
39
40
|
end
|
40
|
-
end
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
def success?(code)
|
47
|
-
success_codes.include?(code.to_s)
|
48
|
-
end
|
42
|
+
def success_codes
|
43
|
+
ENV.fetch('WEB_HEALTHCHECK_SUCCESS_CODES', '200,201,202,204').split(',')
|
44
|
+
end
|
49
45
|
|
50
|
-
|
51
|
-
|
52
|
-
outcome = 'SUCCESS ✓ '
|
53
|
-
in_or_not = 'IN'
|
54
|
-
else
|
55
|
-
outcome = 'FAILURE ✘ '
|
56
|
-
in_or_not = 'NOT IN'
|
46
|
+
def success?(code)
|
47
|
+
success_codes.include?(code.to_s)
|
57
48
|
end
|
58
49
|
|
59
|
-
|
60
|
-
|
50
|
+
def message(code)
|
51
|
+
if success?(code)
|
52
|
+
outcome = 'SUCCESS ✓ '
|
53
|
+
in_or_not = 'IN'
|
54
|
+
else
|
55
|
+
outcome = 'FAILURE ✘ '
|
56
|
+
in_or_not = 'NOT IN'
|
57
|
+
end
|
61
58
|
|
62
|
-
|
59
|
+
accepted = success_codes.join(', ')
|
60
|
+
message = "#{in_or_not} [#{accepted}] : #{outcome} [#{__FILE__}]"
|
61
|
+
|
62
|
+
"# HTTP_STATUS(#{code}) #{message}"
|
63
|
+
end
|
63
64
|
end
|
64
65
|
end
|
@@ -16,7 +16,7 @@ module Orchestration
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def run
|
19
|
-
return
|
19
|
+
return unless @service.configuration.configured?
|
20
20
|
|
21
21
|
echo_start
|
22
22
|
success = attempt_connection
|
@@ -39,14 +39,6 @@ module Orchestration
|
|
39
39
|
false
|
40
40
|
end
|
41
41
|
|
42
|
-
def echo_missing
|
43
|
-
@terminal.write(
|
44
|
-
@service_name.to_sym,
|
45
|
-
"#{@service.configuration.error} (skipping)",
|
46
|
-
:error
|
47
|
-
)
|
48
|
-
end
|
49
|
-
|
50
42
|
def echo_start
|
51
43
|
@terminal.write(@service_name.to_sym, '', :status)
|
52
44
|
end
|
@@ -20,10 +20,10 @@ COPY .build/Gemfile .build/Gemfile.lock ./
|
|
20
20
|
RUN bundle install --without development test --deployment
|
21
21
|
<% if defined?(Webpacker) %>
|
22
22
|
COPY .build/package.json .build/yarn.lock ./
|
23
|
-
RUN . /root/.bashrc
|
23
|
+
RUN . /root/.bashrc ; yarn install
|
24
24
|
<% end %>
|
25
25
|
ADD .build/context.tar .
|
26
|
-
<% if defined?(Webpacker) %>RUN . /root/.bashrc
|
26
|
+
<% if defined?(Webpacker) %>RUN . /root/.bashrc ; NODE_ENV=production RAILS_ENV=production yarn install && NODE_ENV=production RAILS_ENV=production SECRET_KEY_BASE=abc123 bundle exec rake assets:precompile<% elsif Rake::Task.tasks.map(&:name).include?('assets:precompile') %>RUN NODE_ENV=production RAILS_ENV=production SECRET_KEY_BASE=abc123 bundle exec rake assets:precompile<% end %>
|
27
27
|
RUN echo "${GIT_COMMIT}" > /app/GIT_COMMIT
|
28
28
|
HEALTHCHECK --interval=<%= healthcheck['interval'] %> \
|
29
29
|
--timeout=<%= healthcheck['timeout'] %> \
|
@@ -15,8 +15,10 @@ test: test-setup
|
|
15
15
|
|
16
16
|
# Start development containers and create/migrate/seed database
|
17
17
|
.PHONY: develop
|
18
|
-
develop:
|
18
|
+
develop:
|
19
19
|
bundle install
|
20
|
+
@$(MAKE) start env=test
|
21
|
+
@$(MAKE) start env=development
|
20
22
|
bundle exec rake db:create
|
21
23
|
bundle exec rake db:migrate
|
22
24
|
bundle exec rake db:seed
|
@@ -1,7 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
# Use this setting to control the number of replicas to create for your
|
6
|
-
# application service:
|
7
|
-
REPLICAS=1
|
1
|
+
# Set any development environment variables here
|
2
|
+
# e.g.:
|
3
|
+
#
|
4
|
+
# DISABLE_SPRING=1
|
@@ -87,17 +87,19 @@ restore_env:=( \
|
|
87
87
|
|
88
88
|
key_chars:=[a-zA-Z0-9_]
|
89
89
|
censored:=**********
|
90
|
-
censor=
|
91
|
-
censor_urls:=
|
92
|
-
format_env
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
90
|
+
censor=s/\(^${key_chars}*$(1)${key_chars}*\)=\(.*\)$$/\1=${censored}/
|
91
|
+
censor_urls:=s|\([a-zA-Z0-9_+]\+://.*:\).*\(@.*\)$$|\1${censored}\2|
|
92
|
+
format_env:=sed '$(call censor,SECRET); \
|
93
|
+
$(call censor,TOKEN); \
|
94
|
+
$(call censor,PRIVATE); \
|
95
|
+
$(call censor,KEY); \
|
96
|
+
$(censor_urls); \
|
97
|
+
/^\s*$$/d; \
|
98
|
+
/^\s*\#/d; \
|
99
|
+
s/\(^[a-zA-Z0-9_]\+\)=/${blue}\1${reset}=/; \
|
100
|
+
s/^/ /; \
|
101
|
+
s/=\(.*\)$$/=${yellow}\1${reset}/' | \
|
102
|
+
sort
|
101
103
|
|
102
104
|
fail=( \
|
103
105
|
$(call printraw,' ${cross}') ; \
|
@@ -38,9 +38,15 @@ ifneq (,$(wildcard ${env_file}))
|
|
38
38
|
rake=. ${env_file} && ${rake_cmd}
|
39
39
|
endif
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
ifeq (,$(findstring serve,$(MAKECMDGOALS)))
|
42
|
+
ifeq (,$(findstring console,$(MAKECMDGOALS)))
|
43
|
+
ifeq (,$(findstring test,$(MAKECMDGOALS)))
|
44
|
+
docker_config:=$(shell ${rake} orchestration:config)
|
45
|
+
docker_organization=$(word 1,$(docker_config))
|
46
|
+
docker_repository=$(word 2,$(docker_config))
|
47
|
+
endif
|
48
|
+
endif
|
49
|
+
endif
|
44
50
|
|
45
51
|
ifeq (,$(project_name))
|
46
52
|
project_base = ${docker_repository}_${env}
|
@@ -74,7 +80,9 @@ else
|
|
74
80
|
compose_project_name = ${project_base}
|
75
81
|
endif
|
76
82
|
|
77
|
-
compose_base=env
|
83
|
+
compose_base=env -i \
|
84
|
+
PATH=$(PATH) \
|
85
|
+
HOST_UID=$(shell id -u) \
|
78
86
|
DOCKER_ORGANIZATION="${docker_organization}" \
|
79
87
|
DOCKER_REPOSITORY="${docker_repository}" \
|
80
88
|
COMPOSE_PROJECT_NAME="${compose_project_name}" \
|
@@ -106,8 +114,8 @@ all: build
|
|
106
114
|
ifndef network
|
107
115
|
start: network := ${compose_project_name}_default
|
108
116
|
endif
|
109
|
-
start: _clean-logs
|
110
|
-
@$(call print,'${yellow}Starting containers${reset} ...')
|
117
|
+
start: _create-log-directory _clean-logs
|
118
|
+
@$(call print,'${yellow}Starting ${cyan}${env}${yellow} containers${reset} ...')
|
111
119
|
ifeq (${env},$(filter ${env},test development))
|
112
120
|
@${compose} up --detach --force-recreate --renew-anon-volumes --remove-orphans ${services} ${log} || ${fail}
|
113
121
|
@[ -n '${sidecar}' ] && \
|
@@ -138,7 +146,7 @@ start-<%= service %>:
|
|
138
146
|
.PHONY: stop
|
139
147
|
stop: network := ${compose_project_name}_default
|
140
148
|
stop:
|
141
|
-
@$(call print,'${yellow}Stopping containers${reset} ...')
|
149
|
+
@$(call print,'${yellow}Stopping ${cyan}${env}${yellow} containers${reset} ...')
|
142
150
|
@if docker ps --format "{{.ID}}" | grep -q $(shell hostname) ; \
|
143
151
|
then \
|
144
152
|
( docker network disconnect ${network} $(shell hostname) ${log} || : ) \
|
@@ -171,7 +179,7 @@ serve:
|
|
171
179
|
then ( \
|
172
180
|
$(call println,'${yellow}Environment${reset}: ${green}${env_file}${reset}') && \
|
173
181
|
cat '${env_file}' | ${format_env} && \
|
174
|
-
$(call
|
182
|
+
$(call printrawln,'') \
|
175
183
|
) ; \
|
176
184
|
fi
|
177
185
|
${rails}
|
@@ -184,7 +192,7 @@ console:
|
|
184
192
|
then ( \
|
185
193
|
$(call println,'${yellow}Environment${reset}: ${green}${env_file}${reset}') && \
|
186
194
|
cat '${env_file}' | ${format_env} && \
|
187
|
-
$(call
|
195
|
+
$(call printrawln,'') \
|
188
196
|
) ; \
|
189
197
|
fi
|
190
198
|
${rails} console
|
@@ -210,7 +218,7 @@ endif
|
|
210
218
|
dump:
|
211
219
|
ifndef verbose
|
212
220
|
@$(call println)
|
213
|
-
@$(call println,'${yellow}Captured${reset} ${green}stdout${reset} ${yellow}and${reset} ${red}stderr${reset} ${yellow}log data${reset}:')
|
221
|
+
@$(call println,'${yellow}Captured${reset} ${green}stdout${reset} ${yellow}and${reset} ${red}stderr${reset} ${yellow}log data [${cyan}${env}${yellow}]${reset}:')
|
214
222
|
@$(call println)
|
215
223
|
@echo
|
216
224
|
@test -f '${stdout}' && ( \
|
@@ -268,7 +276,7 @@ deploy:
|
|
268
276
|
ifndef manager
|
269
277
|
@$(call println_error,'Missing `manager` parameter: `make deploy manager=swarm-manager.example.com`') ; exit 1
|
270
278
|
endif
|
271
|
-
@$(call println,'${yellow}Deploying stack via${reset} ${green}${manager}${reset} ...') && \
|
279
|
+
@$(call println,'${yellow}Deploying ${green}${env}${reset} stack via${reset} ${green}${manager}${reset} ...') && \
|
272
280
|
( \
|
273
281
|
$(call make,bundle path='${path}/bundle.tar') ${log} && \
|
274
282
|
cd '${path}' ${log} && \
|
@@ -316,8 +324,9 @@ wait-listener:
|
|
316
324
|
### Docker build commands ###
|
317
325
|
|
318
326
|
.PHONY: build
|
319
|
-
build:
|
320
|
-
build:
|
327
|
+
build: build_dir = ${orchestration_dir}/.build
|
328
|
+
build: context = ${build_dir}/context.tar
|
329
|
+
build: _create-log-directory check-local-changes
|
321
330
|
@$(call print,'${yellow}Preparing build context from${reset} ${cyan}${git_branch}:${git_version}${reset} ... ')
|
322
331
|
@mkdir -p ${orchestration_dir}/.build ${log} || ${fail}
|
323
332
|
ifndef dev
|
@@ -330,6 +339,16 @@ else
|
|
330
339
|
@tar -cvf '${context}' . ${log} || ${fail}
|
331
340
|
endif
|
332
341
|
@$(call printrawln,'${green}complete.${reset} ${tick}')
|
342
|
+
ifdef include
|
343
|
+
@$(call print,'${yellow}Including files from:${reset} ${cyan}${include}${reset} ...')
|
344
|
+
@(while read line; do \
|
345
|
+
export line; \
|
346
|
+
include_dir="${build_dir}/$$(dirname "$${line}")/" && \
|
347
|
+
mkdir -p "$${include_dir}" && cp "$${line}" "$${include_dir}" \
|
348
|
+
&& (cd '${orchestration_dir}/.build/' && tar rf 'context.tar' "$${line}"); \
|
349
|
+
done < '${include}') ${log} || ${fail}
|
350
|
+
@$(call printrawln,' ${green}complete.${reset} ${tick}')
|
351
|
+
endif
|
333
352
|
ifdef sidecar
|
334
353
|
# Assume we are in a line-buffered environment (e.g. Jenkins)
|
335
354
|
@$(call println,'${yellow}Building image${reset} ...')
|
@@ -348,7 +367,7 @@ endif
|
|
348
367
|
@$(call println,'[${green}tag${reset}] ${cyan}${docker_organization}/${docker_repository}:${git_version}${reset}')
|
349
368
|
|
350
369
|
.PHONY: push
|
351
|
-
push:
|
370
|
+
push: _create-log-directory
|
352
371
|
@$(call print,'${yellow}Pushing${reset} ${cyan}${docker_image}${reset} ...')
|
353
372
|
@docker push ${docker_image} ${log_progress} || ${fail}
|
354
373
|
@$(call printrawln,' ${green}complete${reset}. ${tick}')
|
@@ -370,3 +389,7 @@ endif
|
|
370
389
|
_clean-logs:
|
371
390
|
@rm -f '${stdout}' '${stderr}'
|
372
391
|
@touch '${stdout}' '${stderr}'
|
392
|
+
|
393
|
+
.PHONY: _create-log-directory
|
394
|
+
_create-log-directory:
|
395
|
+
@mkdir -p log
|
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.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bob Farrell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: database_url
|
@@ -322,10 +322,7 @@ files:
|
|
322
322
|
- README.md
|
323
323
|
- Rakefile
|
324
324
|
- bin/console
|
325
|
-
- bin/rspec
|
326
|
-
- bin/rubocop
|
327
325
|
- bin/setup
|
328
|
-
- bin/strong_versions
|
329
326
|
- config/locales/en.yml
|
330
327
|
- doc/images/example.png
|
331
328
|
- lib/Rakefile
|
data/bin/rspec
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
#
|
5
|
-
# This file was generated by Bundler.
|
6
|
-
#
|
7
|
-
# The application 'rspec' is installed as part of a gem, and
|
8
|
-
# this file is here to facilitate running it.
|
9
|
-
#
|
10
|
-
|
11
|
-
require "pathname"
|
12
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
-
Pathname.new(__FILE__).realpath)
|
14
|
-
|
15
|
-
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
-
|
17
|
-
if File.file?(bundle_binstub)
|
18
|
-
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
-
load(bundle_binstub)
|
20
|
-
else
|
21
|
-
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
-
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
require "rubygems"
|
27
|
-
require "bundler/setup"
|
28
|
-
|
29
|
-
load Gem.bin_path("rspec-core", "rspec")
|
data/bin/rubocop
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
#
|
5
|
-
# This file was generated by Bundler.
|
6
|
-
#
|
7
|
-
# The application 'rubocop' is installed as part of a gem, and
|
8
|
-
# this file is here to facilitate running it.
|
9
|
-
#
|
10
|
-
|
11
|
-
require "pathname"
|
12
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
-
Pathname.new(__FILE__).realpath)
|
14
|
-
|
15
|
-
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
-
|
17
|
-
if File.file?(bundle_binstub)
|
18
|
-
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
-
load(bundle_binstub)
|
20
|
-
else
|
21
|
-
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
-
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
require "rubygems"
|
27
|
-
require "bundler/setup"
|
28
|
-
|
29
|
-
load Gem.bin_path("rubocop", "rubocop")
|
data/bin/strong_versions
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
#
|
5
|
-
# This file was generated by Bundler.
|
6
|
-
#
|
7
|
-
# The application 'strong_versions' is installed as part of a gem, and
|
8
|
-
# this file is here to facilitate running it.
|
9
|
-
#
|
10
|
-
|
11
|
-
require "pathname"
|
12
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
-
Pathname.new(__FILE__).realpath)
|
14
|
-
|
15
|
-
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
-
|
17
|
-
if File.file?(bundle_binstub)
|
18
|
-
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
-
load(bundle_binstub)
|
20
|
-
else
|
21
|
-
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
-
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
require "rubygems"
|
27
|
-
require "bundler/setup"
|
28
|
-
|
29
|
-
load Gem.bin_path("strong_versions", "strong_versions")
|