et_full_system 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,303 @@
1
+ module EtFullSystem
2
+ #!/usr/bin/env ruby
3
+ # frozen_string_literal: true
4
+ require "rubygems"
5
+ require "thor"
6
+ require 'httparty'
7
+ require 'et_full_system/cli/local/file_storage'
8
+ require 'dotenv'
9
+
10
+ class LocalCommand < Thor
11
+ DEFAULT_BASE_URL="http://localhost:3200"
12
+ LOCK_FILE = File.join(Dir.tmpdir, 'et_full_system_traefik_rest_lockfile')
13
+ PROJECT_PATH = Dir.pwd
14
+ GEM_PATH = File.absolute_path('../../..', __dir__)
15
+
16
+ class RestProviderNotConfigured < RuntimeError; end
17
+ class ServiceUrlIncorrect < RuntimeError; end
18
+ desc "boot", "Sets up the server - traefik frontends and backends, along with initial data in local s3 and azure storage"
19
+ method_option :base_url, type: :string, default: DEFAULT_BASE_URL
20
+ def boot
21
+ STDERR.puts "boot - base_url is #{options[:base_url]}"
22
+ json_setup_file = File.absolute_path('../../../foreman/traefik.json', __dir__)
23
+ connect_retry_countdown = 10
24
+ begin
25
+ resp = HTTParty.put "#{options[:base_url]}/api/providers/rest", body: File.read(json_setup_file) , headers: {'Content-Type': 'application/json', 'Accept': 'application/json'}
26
+ raise "Error from traefik when performing initial config says: #{resp.body}" unless (200..299).include? resp.code
27
+ sleep 1
28
+ rescue Errno::EADDRNOTAVAIL, Errno::ECONNREFUSED
29
+ connect_retry_countdown -= 1
30
+ if connect_retry_countdown.zero?
31
+ raise "Could not connect to the traefik API after 10 retries (boot)"
32
+ else
33
+ STDERR.puts "boot - Retrying connection to traefik API in 5 seconds"
34
+ sleep 5
35
+ retry
36
+ end
37
+ end
38
+ end
39
+
40
+ method_option :base_url, type: :string, default: DEFAULT_BASE_URL
41
+ method_option :wait, type: :boolean, default: false, desc: "If set, the command will retry up to 10 times at 5 second intervals to connect to traefik. If not set, will fail immediately"
42
+ desc "update_service_url SERVICE URL", "Configures the reverse proxy to connect to a specific url for a service"
43
+ def update_service_url(service, url)
44
+ within_rest_lock do
45
+ update_rest_backend_url(service, url)
46
+ end
47
+ end
48
+
49
+ method_option :base_url, type: :string, default: DEFAULT_BASE_URL
50
+ desc "wait_for_support", "Waits for the servers support services to be ready - useful to call before starting application services"
51
+ def wait_for_support
52
+ connect_retry_countdown = 10
53
+ setup_retry_countdown = 10
54
+
55
+ begin
56
+ resp = HTTParty.get "#{options[:base_url]}/api/providers/rest", headers: {'Content-Type': 'application/json', 'Accept': 'application/json'}
57
+ raise RestProviderNotConfigured if resp.code == 404
58
+ rescue Errno::EADDRNOTAVAIL, Errno::ECONNREFUSED
59
+ connect_retry_countdown -= 1
60
+ if connect_retry_countdown.zero?
61
+ raise "Could not connect to the traefik API after 10 retries (wait_for_support)"
62
+ else
63
+ STDERR.puts "wait_for_support - Retrying connection to traefik API in 5 seconds"
64
+ sleep 5
65
+ retry
66
+ end
67
+ rescue RestProviderNotConfigured
68
+ setup_retry_countdown -= 1
69
+ if setup_retry_countdown.zero?
70
+ raise "Could not find the REST provider in traefik after 10 retries"
71
+ else
72
+ STDERR.puts "Re checking for the REST provider in traefik in 5 seconds"
73
+ sleep 5
74
+ retry
75
+ end
76
+ end
77
+ STDERR.puts "Support services now ready"
78
+ end
79
+
80
+
81
+ desc "server", "Starts the full system server"
82
+ method_option :without, type: :array, default: [], banner: "service1 service2", desc: "If specified, disables the specified services from running. The services are et1_web, et1_sidekiq, et3_web, mail_web, api_web, api_sidekiq, admin_web, atos_api_web, s3_web, azure_blob_web, fake_acas_web"
83
+ method_option :azurite_storage_path, default: '/tmp/azurite_storage', desc: "Where to store azurite data"
84
+ method_option :minio_storage_path, default: '/tmp/minio_storage', desc: "Where to store minio data"
85
+ def server
86
+ puts "Scheduling traefik config and file storage config"
87
+ pid = fork do
88
+ self.class.start(['boot'])
89
+ EtFullSystem::Cli::Local::FileStorageCommand.start(['setup'])
90
+ end
91
+ Process.detach(pid)
92
+
93
+ puts "Starting Procfile"
94
+ ::Bundler.with_original_env do
95
+ concurrency = " -c #{procfile_concurrency_without(options[:without]).join(',')}"
96
+ cmd = "AZURITE_STORAGE_PATH=\"#{options[:azurite_storage_path]}\" MINIO_STORAGE_PATH=\"#{options[:minio_storage_path]}\" FS_ROOT_PATH=#{PROJECT_PATH} FOREMAN_PATH=#{GEM_PATH}/foreman forego start -f \"#{GEM_PATH}/foreman/Procfile\" -e \"#{GEM_PATH}/foreman/.env\"#{concurrency}"
97
+ STDERR.puts cmd
98
+ exec(cmd)
99
+ end
100
+ end
101
+
102
+ desc "file_storage <commands>", "Tools for the 'local cloud' file storage"
103
+ subcommand "file_storage", ::EtFullSystem::Cli::Local::FileStorageCommand
104
+
105
+ desc "setup", "Sets up everything ready for first run"
106
+ def setup
107
+ setup_depencencies
108
+ setup_services
109
+ end
110
+
111
+ desc "setup_services", "Sets up all services in one command"
112
+ def setup_services
113
+ ::Bundler.with_original_env do
114
+ setup_et1_service
115
+ setup_et3_service
116
+ setup_api_service
117
+ setup_admin_service
118
+ setup_atos_service
119
+ end
120
+ end
121
+
122
+ desc "setup_dependencies", "Sets up all local dependencies"
123
+ def setup_depencencies
124
+ cmd = "bash --login -c \"cd /tmp && git clone https://github.com/ministryofjustice/et_fake_acas_server.git && cd et_fake_acas_server && gem build -o et_fake_acas_server.gem et_fake_acas_server && gem install et_fake_acas_server.gem && cd .. && rm -rf et_fake_acas_server\""
125
+ STDERR.puts cmd
126
+ external_command cmd, 'setup_dependencies'
127
+ end
128
+
129
+ desc "service_env SERVICE", "Returns the environment variables configured for the specified service"
130
+ def service_env(service)
131
+ lookup = {
132
+ 'atos_api' => :et_atos,
133
+ 'admin' => :et_admin,
134
+ 'api' => :et_api,
135
+ 'et1' => :et1,
136
+ 'et3' => :et3
137
+ }
138
+ file = lookup.fetch(service)
139
+ parsed = Dotenv.parse("#{GEM_PATH}/foreman/.env", "#{GEM_PATH}/foreman/#{file}.env")
140
+ parsed.each_pair do |name, value|
141
+ puts "#{name}=#{value}"
142
+ end
143
+
144
+ end
145
+
146
+ private
147
+
148
+ def procfile_services
149
+ File.readlines("#{GEM_PATH}/foreman/Procfile").inject([]) do |acc, line|
150
+ next if line.strip.start_with?('#')
151
+ acc + [line.split(':').first]
152
+ end
153
+ end
154
+
155
+ def procfile_concurrency_without(without)
156
+ procfile_services.map {|service| "#{service}=#{without.include?(service) ? 0 : 1}"}
157
+ end
158
+
159
+ def external_command(cmd, tag)
160
+ IO.popen(cmd) do |io|
161
+ io.each do |line|
162
+ puts "| #{tag} | #{line}"
163
+ end
164
+ end
165
+ end
166
+
167
+ def setup_et1_service
168
+ puts "------------------------------------------------ SETTING UP ET1 SERVICE ---------------------------------------------------"
169
+ cmd = "bash --login -c \"cd #{PROJECT_PATH}/systems/et1 && dotenv -f \"#{GEM_PATH}/foreman/.env\" dotenv -f \"#{GEM_PATH}/foreman/et1.env\" bundle install\""
170
+ puts cmd
171
+ external_command cmd, 'et1 setup'
172
+
173
+ cmd = "bash --login -c \"cd #{PROJECT_PATH}/systems/et1 && npm install\""
174
+ puts cmd
175
+ external_command cmd, 'et1 setup'
176
+
177
+ cmd ="bash --login -c \"cd #{PROJECT_PATH}/systems/et1 && dotenv -f \"#{GEM_PATH}/foreman/.env\" dotenv -f \"#{GEM_PATH}/foreman/et1.env\" bundle exec rake db:create db:migrate assets:precompile\""
178
+ puts cmd
179
+ external_command cmd, 'et1 setup'
180
+ end
181
+
182
+ def setup_et3_service
183
+ puts "------------------------------------------------ SETTING UP ET3 SERVICE ---------------------------------------------------"
184
+ cmd ="bash --login -c \"cd #{PROJECT_PATH}/systems/et3 && dotenv -f \"#{GEM_PATH}/foreman/.env\" dotenv -f \"#{GEM_PATH}/foreman/et3.env\" bundle install --without=development test\""
185
+ puts cmd
186
+ external_command cmd, 'et3 setup'
187
+
188
+ cmd ="bash --login -c \"cd #{PROJECT_PATH}/systems/et3 && dotenv -f \"#{GEM_PATH}/foreman/.env\" dotenv -f \"#{GEM_PATH}/foreman/et3.env\" bundle exec rake db:create db:migrate assets:precompile\""
189
+ puts cmd
190
+ external_command cmd, 'et3 setup'
191
+ end
192
+
193
+ def setup_admin_service
194
+ puts "------------------------------------------------ SETTING UP ADMIN SERVICE ---------------------------------------------------"
195
+ cmd ="bash --login -c \"cd #{PROJECT_PATH}/systems/admin && dotenv -f \"#{GEM_PATH}/foreman/.env\" dotenv -f \"#{GEM_PATH}/foreman/et_admin.env\" bundle install --without=development test\""
196
+ puts cmd
197
+ external_command cmd, 'admin setup'
198
+
199
+ puts "| Admin | Running rake commands"
200
+ cmd ="bash --login -c \"cd #{PROJECT_PATH}/systems/admin && dotenv -f \"#{GEM_PATH}/foreman/.env\" dotenv -f \"#{GEM_PATH}/foreman/et_admin.env\" bundle exec rake db:seed assets:precompile\""
201
+ puts cmd
202
+ external_command cmd, 'admin setup'
203
+ end
204
+
205
+ def setup_api_service
206
+ puts "------------------------------------------------ SETTING UP API SERVICE ---------------------------------------------------"
207
+ cmd ="bash --login -c \"cd #{PROJECT_PATH}/systems/api && dotenv -f \"#{GEM_PATH}/foreman/.env\" dotenv -f \"#{GEM_PATH}/foreman/et_api.env\" bundle install --without=development test\""
208
+ puts cmd
209
+ external_command cmd, 'api setup'
210
+
211
+ puts "| API | Running rake commands"
212
+ cmd ="bash --login -c \"cd #{PROJECT_PATH}/systems/api && dotenv -f \"#{GEM_PATH}/foreman/.env\" dotenv -f \"#{GEM_PATH}/foreman/et_api.env\" bundle exec rake db:create db:migrate db:seed\""
213
+ puts cmd
214
+ external_command cmd, 'api setup'
215
+ end
216
+
217
+ def setup_atos_service
218
+ puts "------------------------------------------------ SETTING UP ATOS SERVICE ---------------------------------------------------"
219
+ cmd ="bash --login -c \"cd #{PROJECT_PATH}/systems/atos && dotenv -f \"#{GEM_PATH}/foreman/.env\" dotenv -f \"#{GEM_PATH}/foreman/et_atos.env\" bundle install --without=development test\""
220
+ puts cmd
221
+ external_command cmd, 'atos setup'
222
+ end
223
+
224
+ def update_rest_backend_url(service, url)
225
+ connect_retry_countdown = 10
226
+ setup_retry_countdown = 10
227
+ begin
228
+ resp = HTTParty.get "#{options[:base_url]}/api/providers/rest", headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }
229
+ raise RestProviderNotConfigured if resp.code == 404
230
+ rescue Errno::EADDRNOTAVAIL, Errno::ECONNREFUSED
231
+ connect_retry_countdown -= 1
232
+ if !options[:wait]
233
+ fail "Could not connect to the traefik API - specify --wait to keep retrying when this happens"
234
+ elsif connect_retry_countdown.zero?
235
+ fail "Could not connect to the traefik API after 10 retries (update_rest_backend_url)"
236
+ else
237
+ STDERR.puts "update_rest_backend_url - Retrying connection to traefik API in 5 seconds"
238
+ sleep 5
239
+ retry
240
+ end
241
+ rescue RestProviderNotConfigured
242
+ setup_retry_countdown -= 1
243
+ if !options[:wait]
244
+ fail "The REST provider in traefik is not yet setup - specify --wait to keep retrying when this happens (i.e to wait for another command to set it up)"
245
+ elsif setup_retry_countdown.zero?
246
+ fail "Could not find the REST provider in traefik after 10 retries"
247
+ else
248
+ STDERR.puts "Re checking for the REST provider in traefik in 5 seconds"
249
+ sleep 5
250
+ retry
251
+ end
252
+ end
253
+
254
+ json = resp.parsed_response.dup
255
+ backend = json['backends'][service]
256
+ raise "Unknown service called #{service} - valid options are #{json['backends'].keys.join(', ')}" if backend.nil?
257
+
258
+ container = backend.dig('servers', 'web')
259
+ raise "The service '#{service}' has no server called 'web' - it must have for this command to work" if container.nil?
260
+
261
+ if container['url'] != url
262
+ container['url'] = url
263
+ put_resp = HTTParty.put "#{options[:base_url]}/api/providers/rest", body: json.to_json, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }
264
+ raise "Error from traefik says: #{put_resp.body}" unless (200..299).include? put_resp.code
265
+
266
+ validate_rest_backend_url(service, url)
267
+ STDERR.puts "The url for service '#{service}' is now '#{url}'"
268
+ else
269
+ STDERR.puts "The url for service '#{service}' was already '#{url}'"
270
+ end
271
+ end
272
+
273
+ def validate_rest_backend_url(service, url)
274
+ retry_countdown = 10
275
+ begin
276
+ resp = HTTParty.get "#{options[:base_url]}/api/providers/rest", headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }
277
+ raise ServiceUrlIncorrect unless (200..299).include?(resp.code) && resp.parsed_response.dig('backends', service, 'servers', 'web', 'url') == url
278
+ return
279
+ rescue ServiceUrlIncorrect
280
+ retry_countdown -= 1
281
+ raise if retry_countdown.zero?
282
+
283
+ STDERR.puts "Retrying request to validate the url of '#{service}' is '#{url}' in 1 second"
284
+ sleep 1
285
+ retry
286
+ end
287
+ end
288
+
289
+ def within_rest_lock(wait: 60 * 60 * 24, timeout: 60)
290
+ File.open(LOCK_FILE, File::RDWR|File::CREAT, 0644) do |file|
291
+ Timeout::timeout(wait) { file.flock(File::LOCK_EX) }
292
+ Timeout::timeout(timeout) { yield file }
293
+ end
294
+ end
295
+
296
+ def summarise_json(json)
297
+ json['backends'].inject({}) do |acc, (service, value)|
298
+ acc[service] = value.dig('servers', 'web', 'url')
299
+ acc
300
+ end
301
+ end
302
+ end
303
+ end
@@ -0,0 +1,2 @@
1
+ require 'et_full_system/cli/local'
2
+ require 'et_full_system/cli/docker'
@@ -0,0 +1,3 @@
1
+ module EtFullSystem
2
+ VERSION = "0.1.23"
3
+ end
@@ -0,0 +1,5 @@
1
+ require "et_full_system/version"
2
+
3
+ module EtFullSystem
4
+ # Your code goes here...
5
+ end
@@ -0,0 +1,20 @@
1
+ #!/bin/bash
2
+ mkdir /home/app/public
3
+ sudo chown app:app /home/app/full_system/systems/et1/public/apply/assets
4
+ sudo chown app:app /home/app/full_system/systems/et3/public/assets
5
+ sudo chown app:app /home/app/full_system/systems/admin/public/assets
6
+ sudo chown app:app /home/app/full_system/systems/et1/node_modules
7
+ sudo chown app:app /home/app/full_system/systems/et1/log
8
+ sudo chown app:app /home/app/full_system/systems/et3/log
9
+ sudo chown app:app /home/app/full_system/systems/admin/log
10
+ sudo chown app:app /home/app/full_system/systems/api/log
11
+ sudo chown app:app /home/app/full_system/systems/atos/lib/rails_container/log
12
+ sudo chown app:app /home/app/full_system/systems/et3/node_modules
13
+ sudo chown app:app /home/app/full_system/systems/admin/node_modules
14
+ sudo chown app:app /home/app/full_system/systems/et1/.bundle
15
+ sudo chown app:app /home/app/full_system/systems/et3/.bundle
16
+ sudo chown app:app /home/app/full_system/systems/api/.bundle
17
+ sudo chown app:app /home/app/full_system/systems/admin/.bundle
18
+ sudo chown app:app /home/app/full_system/systems/atos/.bundle
19
+ sudo chown app:app /home/app/minio_data
20
+ sudo chown app:app /home/app/azure_storage_data
@@ -0,0 +1,32 @@
1
+ #!/bin/bash
2
+ env
3
+ mkdir /home/app/public
4
+ sudo chown app:app /home/app/full_system/systems/et1/public/apply/assets
5
+ sudo chown app:app /home/app/full_system/systems/et3/public/assets
6
+ sudo chown app:app /home/app/full_system/systems/admin/public/assets
7
+ sudo chown app:app /home/app/full_system/systems/et1/node_modules
8
+ sudo chown app:app /home/app/full_system/systems/et1/log
9
+ sudo chown app:app /home/app/full_system/systems/et3/log
10
+ sudo chown app:app /home/app/full_system/systems/admin/log
11
+ sudo chown app:app /home/app/full_system/systems/api/log
12
+ sudo chown app:app /home/app/full_system/systems/atos/lib/rails_container/log
13
+ sudo chown app:app /home/app/full_system/systems/et3/node_modules
14
+ sudo chown app:app /home/app/full_system/systems/admin/node_modules
15
+ sudo chown app:app /home/app/full_system/systems/et1/.bundle
16
+ sudo chown app:app /home/app/full_system/systems/et3/.bundle
17
+ sudo chown app:app /home/app/full_system/systems/api/.bundle
18
+ sudo chown app:app /home/app/full_system/systems/admin/.bundle
19
+ sudo chown app:app /home/app/full_system/systems/atos/.bundle
20
+ sudo chown app:app /home/app/minio_data
21
+ sudo chown app:app /home/app/azure_storage_data
22
+
23
+ parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
24
+ et_full_system local setup_services
25
+ echo "------------------------------------------------ SETTING UP FULL SYSTEM ---------------------------------------------------"
26
+ /usr/local/rvm/bin/rvm use
27
+ bundle install --without=development --with=production test
28
+ bundle exec et_full_system local setup &
29
+ bundle exec et_full_system local file_storage setup &
30
+ export FOREMAN_PATH="`bundle show et_full_system | tail -1`/foreman"
31
+ export FS_ROOT_PATH=$PWD;
32
+ forego start -f "${FOREMAN_PATH}/Procfile" -e "${FOREMAN_PATH}/.env"
metadata ADDED
@@ -0,0 +1,188 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: et_full_system
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.23
5
+ platform: ruby
6
+ authors:
7
+ - Gary Taylor
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-04-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.20'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.20'
27
+ - !ruby/object:Gem::Dependency
28
+ name: httparty
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.16'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.16'
41
+ - !ruby/object:Gem::Dependency
42
+ name: aws-sdk-s3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.9'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.9'
55
+ - !ruby/object:Gem::Dependency
56
+ name: azure-storage
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.15.0.preview
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.15.0.preview
69
+ - !ruby/object:Gem::Dependency
70
+ name: dotenv
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.7'
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 2.7.2
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '2.7'
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 2.7.2
89
+ - !ruby/object:Gem::Dependency
90
+ name: bundler
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.16'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.16'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rake
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '10.0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '10.0'
117
+ description: Runs the employment tribunals system - all services and background jobs
118
+ email:
119
+ - gary.taylor@hmcts.net
120
+ executables:
121
+ - et_full_system
122
+ extensions: []
123
+ extra_rdoc_files: []
124
+ files:
125
+ - ".gitignore"
126
+ - ".rspec"
127
+ - ".ruby-version"
128
+ - ".travis.yml"
129
+ - CODE_OF_CONDUCT.md
130
+ - Gemfile
131
+ - Gemfile.lock
132
+ - LICENSE.txt
133
+ - README.md
134
+ - Rakefile
135
+ - bin/console
136
+ - bin/setup
137
+ - docker/Dockerfile
138
+ - docker/docker-compose.yml
139
+ - et_full_system.gemspec
140
+ - exe/et_full_system
141
+ - foreman/.env
142
+ - foreman/.foreman
143
+ - foreman/Procfile
144
+ - foreman/et1.env
145
+ - foreman/et3.env
146
+ - foreman/et_admin.env
147
+ - foreman/et_api.env
148
+ - foreman/et_atos.env
149
+ - foreman/mailhog.env
150
+ - foreman/minio.env
151
+ - foreman/ports.env
152
+ - foreman/s3/.env
153
+ - foreman/traefik.json
154
+ - foreman/traefik.toml
155
+ - lib/et_full_system.rb
156
+ - lib/et_full_system/cli.rb
157
+ - lib/et_full_system/cli/docker.rb
158
+ - lib/et_full_system/cli/docker/server.rb
159
+ - lib/et_full_system/cli/local.rb
160
+ - lib/et_full_system/cli/local/file_storage.rb
161
+ - lib/et_full_system/version.rb
162
+ - shell_scripts/docker_bootstrap.sh
163
+ - shell_scripts/run_foreman
164
+ homepage: https://github.com/ministryofjustice/et-full-system
165
+ licenses:
166
+ - MIT
167
+ metadata:
168
+ allowed_push_host: http://mygemserver.com
169
+ post_install_message:
170
+ rdoc_options: []
171
+ require_paths:
172
+ - lib
173
+ required_ruby_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ required_rubygems_version: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ requirements: []
184
+ rubygems_version: 3.0.3
185
+ signing_key:
186
+ specification_version: 4
187
+ summary: Runs the employment tribunals system - all services and background jobs
188
+ test_files: []