fanforce-plugin-factory 2.0.0.rc19 → 2.0.0.rc21
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.
- checksums.yaml +4 -4
- data/fanforce-plugin-factory.gemspec +1 -1
- data/lib/fanforce/plugin_factory/cli/lib/iron.rb +44 -7
- data/lib/fanforce/plugin_factory/cli/scripts/push.rb +2 -2
- data/lib/fanforce/plugin_factory/cli/scripts/setup.rb +17 -2
- data/lib/fanforce/plugin_factory/cli_single_plugin.rb +9 -7
- data/lib/fanforce/plugin_factory/core_config.rb +5 -5
- data/lib/fanforce/plugin_factory/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b34938545968edb9683e0fe8a0497252ff80c6cd
|
4
|
+
data.tar.gz: 6e4f825d5557d6b8124f41d27cb985c155b10541
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6235a31d6069ffad1a0d675acef98d505bd1b43d211c7174bbc9418f211f03a4878c8781015172e8ae59d24e58cf2802ee4ae382c42bdd0b3c95880475d400c6
|
7
|
+
data.tar.gz: d054e133b6fc6ba3b5b8de51be7c6a9b1e3f74c37ead3bf7f80b8cfee050d99ca0c06b2979d4db385dfc6b4365c7db4112ccae624d5dd1823555913ae3b98029
|
@@ -39,7 +39,7 @@ Gem::Specification.new do |gem|
|
|
39
39
|
|
40
40
|
gem.add_runtime_dependency 'fanforce-base', '>= 2.0.0.rc3'
|
41
41
|
gem.add_runtime_dependency 'fanforce-api', '>= 2.0.0.rc5'
|
42
|
-
gem.add_runtime_dependency 'fanforce-plugin-worker', '>= 2.0.0.
|
42
|
+
gem.add_runtime_dependency 'fanforce-plugin-worker', '>= 2.0.0.rc12'
|
43
43
|
|
44
44
|
gem.add_development_dependency 'fanforce-test', '>= 2.0.0.rc3'
|
45
45
|
end
|
@@ -15,7 +15,7 @@ class Fanforce::PluginFactory::CLI::Iron
|
|
15
15
|
@workers_dir ||= "#{plugin.dir}/workers"
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
18
|
+
def dockerize(environment, worker_filename=nil)
|
19
19
|
return log "#{'Skipped '.format(:bold)} no workers folder was found" if !File.directory?(workers_dir)
|
20
20
|
|
21
21
|
worker_filename = worker_filename.gsub('.worker', '') if worker_filename
|
@@ -29,14 +29,35 @@ class Fanforce::PluginFactory::CLI::Iron
|
|
29
29
|
upload_processes = []
|
30
30
|
workers.each do |filename|
|
31
31
|
next if worker_filename and !filename.include?(worker_filename)
|
32
|
-
|
32
|
+
dockerize_worker(filename, environment, env_vars)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def dockerize_and_upload(environment, worker_filename=nil)
|
38
|
+
return log "#{'Skipped '.format(:bold)} no workers folder was found" if !File.directory?(workers_dir)
|
39
|
+
|
40
|
+
worker_filename = worker_filename.gsub('.worker', '') if worker_filename
|
41
|
+
env_vars = Fanforce::PluginFactory::CLI::Env.new(plugin).vars(environment) || {}
|
42
|
+
return puts "#{'Skipped '.format(:bold)} #{environment.to_s.titleize} is missing IRON_TOKEN and/or IRON_PROJECT_ID env variables" if env_vars['IRON_TOKEN'].blank? or env_vars['IRON_PROJECT_ID'].blank?
|
43
|
+
|
44
|
+
Dir.chdir(workers_dir) do
|
45
|
+
workers = Dir['*.rb']
|
46
|
+
return puts "#{'Skipped '.format(:bold)} #{environment.to_s.titleize} has 0 workers" if workers.size == 0
|
47
|
+
|
48
|
+
upload_processes = []
|
49
|
+
workers.each do |filename|
|
50
|
+
next if worker_filename and !filename.include?(worker_filename)
|
51
|
+
zipped_filepath = dockerize_worker(filename, environment, env_vars)
|
33
52
|
upload_processes << upload_worker(filename, environment, env_vars, zipped_filepath)
|
34
53
|
end
|
35
54
|
upload_processes.each { |pid| Process.waitpid(pid) }
|
36
55
|
end
|
37
56
|
end
|
38
57
|
|
39
|
-
|
58
|
+
######################################################################################################################
|
59
|
+
|
60
|
+
def dockerize_worker(filename, environment, env_vars)
|
40
61
|
puts "#{'Compiling'.format(:green,:bold)} #{filename.gsub('.rb', '')} to #{environment.to_s.titleize}..."
|
41
62
|
code_name = filename.gsub('.rb', '')
|
42
63
|
|
@@ -87,7 +108,6 @@ class Fanforce::PluginFactory::CLI::Iron
|
|
87
108
|
end
|
88
109
|
|
89
110
|
# lib/
|
90
|
-
|
91
111
|
if File.directory?("#{plugin.dir}/lib")
|
92
112
|
puts "Copying /lib/ to #{dockerized_worker_dir_relative}/lib/"
|
93
113
|
FileUtils.rm_r("#{dockerized_worker_dir}/lib") if File.directory?("#{dockerized_worker_dir}/lib")
|
@@ -105,15 +125,31 @@ class Fanforce::PluginFactory::CLI::Iron
|
|
105
125
|
puts "Setting up ENV for #{environment.to_s.titleize} (#{env_vars.size} variables)"
|
106
126
|
File.open("#{dockerized_worker_dir}/env.#{env(environment)}.rb", 'w') {|f| f.write Fanforce::PluginFactory::CLI::Env.convert_hash_to_ruby_env(env_vars) }
|
107
127
|
|
108
|
-
|
128
|
+
# Bundle
|
109
129
|
puts "Dockerizing #{dockerized_worker_dir_relative}"
|
110
|
-
console_command("docker run --rm -v \"#{File.expand_path(dockerized_worker_dir)}\":/worker -w /worker iron/images:ruby-2.1 sh -c 'bundle install --standalone'", true)
|
130
|
+
bundle_output = console_command("docker run --rm -v \"#{File.expand_path(dockerized_worker_dir)}\":/worker -w /worker iron/images:ruby-2.1 sh -c 'bundle install --standalone'", true)
|
131
|
+
|
132
|
+
active_gems = {}
|
133
|
+
bundle_output.split("\n").each do |line|
|
134
|
+
active_gems["#{$2}-#{$3}"] = true if line =~ /^(Using|Installing)\s([^\s]+)\s([^\s]+)/
|
135
|
+
end
|
136
|
+
|
137
|
+
# Cleanup gems
|
138
|
+
dockerized_gems_dir = "#{dockerized_worker_dir}/bundle/ruby/2.1.0/gems"
|
139
|
+
Dir["#{dockerized_gems_dir}/*"].each do |dir_path|
|
140
|
+
dir_name = dir_path.gsub(/^#{dockerized_gems_dir}\//, '')
|
141
|
+
next if active_gems[dir_name]
|
142
|
+
puts "REMOVING UNUSED GEM #{dir_name}"
|
143
|
+
FileUtils.rm_r(dir_path)
|
144
|
+
end
|
111
145
|
|
112
|
-
|
146
|
+
print "Zipping to #{zipped_filepath_relative}... "
|
113
147
|
File.delete(zipped_filepath) if File.exists?(zipped_filepath)
|
114
148
|
Dir.chdir(dockerized_worker_dir) do
|
115
149
|
console_command("zip -r #{zipped_filepath} .")
|
116
150
|
end
|
151
|
+
zipped_filesize = (File.size(zipped_filepath).to_f / 2**20).round(2)
|
152
|
+
puts "#{zipped_filesize} MB"
|
117
153
|
|
118
154
|
return zipped_filepath
|
119
155
|
end
|
@@ -132,6 +168,7 @@ class Fanforce::PluginFactory::CLI::Iron
|
|
132
168
|
# Command format for old versions
|
133
169
|
command = "iron --project-id #{env_vars['IRON_PROJECT_ID']} --token #{env_vars['IRON_TOKEN']} worker upload --stack ruby-2.1 --name #{code_name} #{zipped_filepath} ruby worker.ru"
|
134
170
|
end
|
171
|
+
puts command
|
135
172
|
puts console_command(command)
|
136
173
|
rescue Exception => e
|
137
174
|
puts "#{'Aborted '.format(:red,:bold)} upload of #{code_name} to #{environment.to_s.titleize}..."
|
@@ -54,13 +54,13 @@ class Fanforce::PluginFactory::CLI::Scripts
|
|
54
54
|
|
55
55
|
def push_plugin_worker(plugin, environment, filename)
|
56
56
|
Dir.chdir(plugin.dir) do
|
57
|
-
Fanforce::PluginFactory::CLI::Iron.new(plugin).
|
57
|
+
Fanforce::PluginFactory::CLI::Iron.new(plugin).dockerize_and_upload(environment, filename)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
def push_plugin_workers(plugin, environment)
|
62
62
|
Dir.chdir(plugin.dir) do
|
63
|
-
Fanforce::PluginFactory::CLI::Iron.new(plugin).
|
63
|
+
Fanforce::PluginFactory::CLI::Iron.new(plugin).dockerize_and_upload(environment)
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
@@ -7,13 +7,19 @@ class Fanforce::PluginFactory::CLI::Scripts
|
|
7
7
|
require_relative '../lib/bitbucket'
|
8
8
|
require_relative '../lib/env'
|
9
9
|
require_relative '../lib/uranium'
|
10
|
+
require_relative '../lib/iron'
|
10
11
|
|
11
12
|
######################################################################################################################
|
12
13
|
|
13
|
-
def setup(type=:all)
|
14
|
+
def setup(type=:all, environment=nil)
|
14
15
|
plugin = Fanforce::CLI::Plugin.new(Fanforce::CLI::DIR)
|
15
16
|
type = type.to_s.downcase.to_sym
|
16
|
-
|
17
|
+
environment = environment.to_sym if environment
|
18
|
+
|
19
|
+
if (![:all,:bundler,:pow,:git,:bitbucket,:env,:uranium,:workers].include?(type) &&
|
20
|
+
!type.to_s.include?('.worker'))
|
21
|
+
error 'Unknown setup type', :setup
|
22
|
+
end
|
17
23
|
|
18
24
|
if !File.exists?("#{plugin.dir}/config.ru")
|
19
25
|
error "This does not seem to be a valid plugin directory since it's missing config.ru"
|
@@ -62,6 +68,15 @@ class Fanforce::PluginFactory::CLI::Scripts
|
|
62
68
|
Fanforce::PluginFactory::CLI::Uranium.new(plugin).setup
|
63
69
|
end
|
64
70
|
|
71
|
+
if type.to_s.include?('.worker')
|
72
|
+
Fanforce::PluginFactory::CLI::Iron.new(plugin).dockerize(environment, type.to_s)
|
73
|
+
end
|
74
|
+
|
75
|
+
if [:workers].include?(type)
|
76
|
+
log divider '+---------------------------------------------------------------------------------------------------'
|
77
|
+
Fanforce::PluginFactory::CLI::Iron.new(plugin).dockerize(environment)
|
78
|
+
end
|
79
|
+
|
65
80
|
log divider '+-----------------------------------------------------------------------------------------------------'
|
66
81
|
log 'SUCCESS!'.format(:bold,:green)
|
67
82
|
log divider '----------------------------------------------------------------------------------------------------++'
|
@@ -14,13 +14,15 @@ class Fanforce::PluginFactory::CLI::Scripts
|
|
14
14
|
########################################################################################################################
|
15
15
|
|
16
16
|
Fanforce::CLI.register(self, :setup,
|
17
|
-
['*all/TYPE',
|
18
|
-
['bundler',
|
19
|
-
['pow',
|
20
|
-
['git',
|
21
|
-
['bitbucket',
|
22
|
-
['env',
|
23
|
-
['uranium',
|
17
|
+
['*all/TYPE', 'Setup bundle, pow, git, and env variables'],
|
18
|
+
['bundler', 'Ensure bundler is installed then run bundle'],
|
19
|
+
['pow', 'Ensure pow domains are setup correctly'],
|
20
|
+
['git', 'Ensure git repository is initialized'],
|
21
|
+
['bitbucket', 'Setup remote repository on bitbucket'],
|
22
|
+
['env', 'Create ENV variables from local .env folder'],
|
23
|
+
['uranium', 'Register config.json with uranium and add environ'],
|
24
|
+
['workers RACK_ENV', 'Dockerize workers to zipped files ready for iron'],
|
25
|
+
['FILENAME.worker RACK_ENV', 'Dockerize workers to zipped files ready for iron']
|
24
26
|
) { require_relative 'cli/scripts/setup' }
|
25
27
|
|
26
28
|
########################################################################################################################
|
@@ -29,15 +29,15 @@ class Fanforce::Plugin::CoreConfig
|
|
29
29
|
@redis_url || ENV['REDIS_URL'] || 'redis://localhost:6379'
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
33
|
-
ENV['
|
32
|
+
def worker_should_run_locally_and_instantly
|
33
|
+
ENV['FANFORCE_WORKER_SHOULD_RUN_LOCALLY_AND_INSTANTLY'] == 'true'
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
36
|
+
def worker_should_run_locally_and_instantly=(bool)
|
37
37
|
if bool == true
|
38
|
-
ENV['
|
38
|
+
ENV['FANFORCE_WORKER_SHOULD_RUN_LOCALLY_AND_INSTANTLY'] = 'true'
|
39
39
|
else
|
40
|
-
ENV.delete('
|
40
|
+
ENV.delete('FANFORCE_WORKER_SHOULD_RUN_LOCALLY_AND_INSTANTLY')
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fanforce-plugin-factory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.rc21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Caleb Clark
|
@@ -310,14 +310,14 @@ dependencies:
|
|
310
310
|
requirements:
|
311
311
|
- - ">="
|
312
312
|
- !ruby/object:Gem::Version
|
313
|
-
version: 2.0.0.
|
313
|
+
version: 2.0.0.rc12
|
314
314
|
type: :runtime
|
315
315
|
prerelease: false
|
316
316
|
version_requirements: !ruby/object:Gem::Requirement
|
317
317
|
requirements:
|
318
318
|
- - ">="
|
319
319
|
- !ruby/object:Gem::Version
|
320
|
-
version: 2.0.0.
|
320
|
+
version: 2.0.0.rc12
|
321
321
|
- !ruby/object:Gem::Dependency
|
322
322
|
name: fanforce-test
|
323
323
|
requirement: !ruby/object:Gem::Requirement
|