pi_build_modifier 0.4.0.pre.alpha → 0.5.0.pre.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/CODE_OF_CONDUCT.md +1 -1
  4. data/README.md +55 -20
  5. data/Rakefile +6 -5
  6. data/docs/concept.md +0 -18
  7. data/docs/incubation.md +3 -14
  8. data/pi_build_modifier/Gemfile.lock +50 -0
  9. data/pi_build_modifier/lib/pi_build_modifier.rb +4 -7
  10. data/pi_build_modifier/lib/pi_build_modifier/modify/configs.rb +335 -0
  11. data/pi_build_modifier/lib/pi_build_modifier/modify/modifiers.rb +281 -0
  12. data/pi_build_modifier/lib/pi_build_modifier/{locale → modify}/templates/00-debconf.erb +1 -1
  13. data/pi_build_modifier/lib/pi_build_modifier/{boot-files → modify}/templates/07-resize-init.diff.erb +1 -1
  14. data/pi_build_modifier/lib/pi_build_modifier/{net-tweaks → modify}/templates/wpa_supplicant.conf.erb +1 -1
  15. data/pi_build_modifier/lib/pi_build_modifier/{config → utils}/logex.rb +5 -1
  16. data/pi_build_modifier/lib/pi_build_modifier/version.rb +1 -1
  17. data/pi_build_modifier/spec/pi_build_modifier/modify/modify_spec.rb +306 -0
  18. data/pi_build_modifier/spec/pi_build_modifier_spec.rb +3 -3
  19. data/pi_build_modifier/spec/spec_helper.rb +1 -0
  20. data/pi_customizer/Gemfile.lock +47 -0
  21. data/pi_customizer/lib/pi_customizer.rb +15 -9
  22. data/pi_customizer/lib/pi_customizer/build/builder/build_executor.rb +12 -24
  23. data/pi_customizer/lib/pi_customizer/build/builder/builder.rb +17 -13
  24. data/pi_customizer/{spec/pi_customizer/environment/environment_builder_factory_spec.rb → lib/pi_customizer/build/config/build_config.rb} +27 -18
  25. data/pi_customizer/lib/pi_customizer/build/{workspace → config}/local_workspace.rb +8 -8
  26. data/pi_customizer/lib/pi_customizer/build/{workspace → config}/remote_workspace.rb +1 -1
  27. data/pi_customizer/lib/pi_customizer/build/environment/docker/docker.rb +1 -1
  28. data/pi_customizer/lib/pi_customizer/build/environment/environment.rb +1 -1
  29. data/pi_customizer/lib/pi_customizer/build/{builder/start_prepare_execute_builder.rb → environment/environment_factory.rb} +27 -16
  30. data/pi_customizer/lib/pi_customizer/build/environment/vagrant/templates/Vagrantfile.erb +2 -2
  31. data/pi_customizer/lib/pi_customizer/build/environment/vagrant/vagrant.rb +3 -8
  32. data/pi_customizer/lib/pi_customizer/build/environment/vagrant/vagrant_file.rb +3 -3
  33. data/pi_customizer/lib/pi_customizer/version.rb +1 -1
  34. data/pi_customizer/lib/pi_customizer/write/image_writer.rb +3 -2
  35. data/pi_customizer/spec/pi_customizer/build/builder/builder_spec.rb +122 -0
  36. data/pi_customizer/spec/pi_customizer/{environment/aws_spec.rb → build/config/build_config_spec.rb} +20 -25
  37. data/pi_customizer/spec/pi_customizer/{workspace/local_workspace_spec.rb → build/config/local_workspace_config_spec.rb} +10 -10
  38. data/pi_customizer/spec/pi_customizer/{workspace → build/config}/remote_workspace_spec.rb +2 -2
  39. data/pi_customizer/spec/pi_customizer/{environment/vagrant/vagrant_spec.rb → build/environment/environment_builder_factory_spec.rb} +17 -13
  40. data/pi_customizer/spec/pi_customizer/{environment → build/environment}/environment_spec.rb +1 -1
  41. data/pi_customizer/spec/pi_customizer/{environment → build/environment}/vagrant/vagrant_file_spec.rb +7 -7
  42. data/pi_customizer/spec/pi_customizer/build/environment/vagrant/vagrant_spec.rb +80 -0
  43. data/pi_customizer/spec/pi_customizer_spec.rb +19 -14
  44. data/pi_customizer/spec/spec_helper.rb +21 -0
  45. data/version.rb +1 -1
  46. metadata +23 -42
  47. data/Vagrantfile +0 -27
  48. data/pi_build_modifier/.gitignore +0 -12
  49. data/pi_build_modifier/lib/pi_build_modifier/boot-files/boot.rb +0 -64
  50. data/pi_build_modifier/lib/pi_build_modifier/locale/locale_debconf.rb +0 -66
  51. data/pi_build_modifier/lib/pi_build_modifier/modifier/erb_mapper.rb +0 -72
  52. data/pi_build_modifier/lib/pi_build_modifier/modifier/mapper.rb +0 -49
  53. data/pi_build_modifier/lib/pi_build_modifier/modifier/pi_modifier.rb +0 -81
  54. data/pi_build_modifier/lib/pi_build_modifier/modifier_task.rb +0 -79
  55. data/pi_build_modifier/lib/pi_build_modifier/net-tweaks/wifi_network.rb +0 -124
  56. data/pi_build_modifier/lib/pi_build_modifier/sys_tweaks/run_modifier.rb +0 -63
  57. data/pi_build_modifier/lib/pi_build_modifier/sys_tweaks/ssh.rb +0 -61
  58. data/pi_build_modifier/lib/pi_build_modifier/sys_tweaks/templates/ssh.sh.erb +0 -8
  59. data/pi_build_modifier/lib/pi_build_modifier/system/system_type.rb +0 -84
  60. data/pi_build_modifier/spec/pi_build_modifier/boot/boot_spec.rb +0 -103
  61. data/pi_build_modifier/spec/pi_build_modifier/locale/locale_spec.rb +0 -87
  62. data/pi_build_modifier/spec/pi_build_modifier/modifier/mapper_spec.rb +0 -105
  63. data/pi_build_modifier/spec/pi_build_modifier/modifier/modifier_spec.rb +0 -83
  64. data/pi_build_modifier/spec/pi_build_modifier/modifier_task_spec.rb +0 -63
  65. data/pi_build_modifier/spec/pi_build_modifier/net-tweaks/wifi_network_spec.rb +0 -91
  66. data/pi_build_modifier/spec/pi_build_modifier/sys_tweaks/run_modifier_spec.rb +0 -74
  67. data/pi_build_modifier/spec/pi_build_modifier/sys_tweaks/ssh_spec.rb +0 -73
  68. data/pi_build_modifier/spec/pi_build_modifier/system/system_spec.rb +0 -66
  69. data/pi_customizer/lib/pi_customizer/build/builder/prepare_start_execute_builder.rb +0 -43
  70. data/pi_customizer/lib/pi_customizer/build/environment/aws/aws.rb +0 -76
  71. data/pi_customizer/lib/pi_customizer/build/environment/environment_builder_factory.rb +0 -81
  72. data/pi_customizer/spec/pi_customizer/builder/build_executor_spec.rb +0 -64
@@ -21,7 +21,7 @@
21
21
  require_relative 'spec_helper'
22
22
  require 'pi_build_modifier'
23
23
  require 'pi_build_modifier/version'
24
- require 'pi_build_modifier/modifier_task'
24
+ require 'pi_build_modifier/modify/modifiers'
25
25
 
26
26
  RSpec.describe PiBuildModifier do
27
27
  it 'has a version number' do
@@ -62,8 +62,8 @@ RSpec.describe PiBuildModifier::PiBuildModifier do
62
62
  end
63
63
 
64
64
  it 'triggers the modifier task' do
65
- expect(PiBuildModifier::Task::Modifier).to receive(:new).with(tmp_json_config, tmp_workspace).and_return(PiBuildModifier::Task::Modifier.new(tmp_json_config, tmp_workspace))
66
- expect_any_instance_of(PiBuildModifier::Task::Modifier).to receive(:execute)
65
+ expect(PiBuildModifier::Modifiers::ModifiersBuilder).to receive(:build_defaults).with(tmp_workspace, tmp_json_config).and_return(PiBuildModifier::Modifiers::Modifiers.new)
66
+ expect_any_instance_of(PiBuildModifier::Modifiers::Modifiers).to receive(:modify_configs)
67
67
  PiBuildModifier::PiBuildModifier.start(['modify', tmp_json_config, tmp_workspace])
68
68
  end
69
69
  end
@@ -1,4 +1,5 @@
1
1
  require 'simplecov'
2
+ require 'rspec'
2
3
  #require 'codecov'
3
4
 
4
5
  SimpleCov.start do
@@ -0,0 +1,47 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ pi_customizer (0.5.0.pre.alpha)
5
+ thor (~> 0.20)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.3)
11
+ docile (1.3.2)
12
+ json (2.2.0)
13
+ rake (12.3.2)
14
+ rdoc (6.1.1)
15
+ rspec (3.8.0)
16
+ rspec-core (~> 3.8.0)
17
+ rspec-expectations (~> 3.8.0)
18
+ rspec-mocks (~> 3.8.0)
19
+ rspec-core (3.8.1)
20
+ rspec-support (~> 3.8.0)
21
+ rspec-expectations (3.8.4)
22
+ diff-lcs (>= 1.2.0, < 2.0)
23
+ rspec-support (~> 3.8.0)
24
+ rspec-mocks (3.8.1)
25
+ diff-lcs (>= 1.2.0, < 2.0)
26
+ rspec-support (~> 3.8.0)
27
+ rspec-support (3.8.2)
28
+ simplecov (0.16.1)
29
+ docile (~> 1.1)
30
+ json (>= 1.8, < 3)
31
+ simplecov-html (~> 0.10.0)
32
+ simplecov-html (0.10.2)
33
+ thor (0.20.3)
34
+
35
+ PLATFORMS
36
+ ruby
37
+
38
+ DEPENDENCIES
39
+ bundler (~> 2.0)
40
+ pi_customizer!
41
+ rake (~> 12.3)
42
+ rdoc (~> 6.1)
43
+ rspec (~> 3.8)
44
+ simplecov (~> 0.16)
45
+
46
+ BUNDLED WITH
47
+ 2.0.2
@@ -21,9 +21,11 @@
21
21
  require 'thor'
22
22
  require 'fileutils'
23
23
  require 'pi_customizer/version'
24
- require 'pi_customizer/build/environment/environment_builder_factory'
25
- require 'pi_customizer/build/workspace/remote_workspace'
26
- require 'pi_customizer/build/workspace/local_workspace'
24
+ require 'pi_customizer/build/builder/builder'
25
+ require 'pi_customizer/build/config/remote_workspace'
26
+ require 'pi_customizer/build/config/local_workspace'
27
+ require 'pi_customizer/build/config/build_config'
28
+ require 'pi_customizer/build/environment/environment_factory'
27
29
  require 'pi_customizer/write/image_writer'
28
30
  require 'pi_customizer/utils/logex'
29
31
 
@@ -39,7 +41,7 @@ module PiCustomizer
39
41
 
40
42
  desc 'build ENV', 'Build pi image on environment ENV (valid environments are: VAGRANT).'
41
43
  method_option :build_sources_git_url, :default => Workspace::DEFAULT_GIT_PATH, :aliases => '-g'
42
- method_option :build_sources_git_tag, :default => Workspace::DEFAULT_GIT_TAG, :aliases => '-t'
44
+ method_option :build_sources_git_tag, :default => Workspace::DEFAULT_GIT_TAG, :aliases => '-t'
43
45
  method_option :remote_workspace_dir, :default => Workspace::DEFAULT_REMOTE_WORKSPACE_DIRECTORY, :aliases => '-w'
44
46
  method_option :config_file, :aliases => '-c', :required => true
45
47
  method_option :local_workspace_dir, :default => Workspace::DEFAULT_LOCAL_WORKSPACE_DIRECTORY, :aliases => '-l'
@@ -50,9 +52,13 @@ module PiCustomizer
50
52
  def build(env)
51
53
  begin
52
54
  remote_workspace = Workspace::RemoteWorkspace.new("#{options[:remote_workspace_dir]}", "#{options[:build_sources_git_url]}", "#{options[:build_sources_git_tag]}")
53
- local_workspace = Workspace::LocalWorkspace.new("#{options[:config_file]}", "#{options[:local_workspace_dir]}", "#{options[:modifier_gem]}")
54
- builder = Environment::builder_factory(env, local_workspace, remote_workspace, options[:skip_steps])
55
- builder.build
55
+ local_workspace = Workspace::LocalWorkspaceConfig.new("#{options[:config_file]}", "#{options[:local_workspace_dir]}", "#{options[:modifier_gem]}")
56
+ build_config = Config::BuildConfig.new(options[:skip_steps])
57
+
58
+ environment = Environment::environment_factory(env, local_workspace, remote_workspace)
59
+ builder = Builder::PiBuilder.new
60
+
61
+ builder.build(environment, build_config)
56
62
  rescue Exception => e
57
63
  $logger.error e.message
58
64
  end
@@ -68,13 +74,13 @@ module PiCustomizer
68
74
  end
69
75
 
70
76
  ##
71
- # Allow uswers to write an image to a SD card
77
+ # Allow users to write an image to a device, i.e., a SD card
72
78
 
73
79
  desc 'write IMAGE DEVICE', 'Write an image to a device.'
74
80
 
75
81
  def write_image(image, device)
76
82
  begin
77
- ImageWriter.new().write(image, device)
83
+ ImageWriter.new.write(image, device)
78
84
  rescue Exception => e
79
85
  $logger.error e.message
80
86
  end
@@ -19,21 +19,23 @@
19
19
  # SOFTWARE.
20
20
 
21
21
  require 'pi_customizer/utils/logex'
22
+ require 'pi_customizer/build/environment/environment'
23
+ require 'pi_customizer/build/config/build_config'
22
24
 
23
25
  module PiCustomizer
24
26
  module Builder
25
27
 
26
28
  ##
27
- # BuildExecutor triggers the steps of a build process in a given environment (e.g., a vagrant box).
29
+ # BuildExecutor triggers the steps of a build process for a given environment (e.g., a vagrant box).
28
30
  # It skips individual steps in the build process when they are defined as skip_build_steps.
29
31
 
30
32
  class BuildExecutor
31
33
 
32
- attr_reader :env, :skip_build_steps
34
+ attr_reader :env
33
35
 
34
- def initialize(environment, skip_build_steps = Array.new)
36
+ def initialize(environment, build_config)
35
37
  @env = environment
36
- @skip_build_steps = convert_to_skip(skip_build_steps)
38
+ @build_config = build_config
37
39
  end
38
40
 
39
41
  ##
@@ -48,7 +50,7 @@ module PiCustomizer
48
50
  # execute the prepare step for the build environment
49
51
 
50
52
  def prepare
51
- unless @skip_build_steps.include?(:prepare)
53
+ unless @build_config.skip?(:prepare)
52
54
  @env.prepare
53
55
  end
54
56
  end
@@ -57,7 +59,7 @@ module PiCustomizer
57
59
  # execute the start step for the build environment
58
60
 
59
61
  def start
60
- unless @skip_build_steps.include?(:start)
62
+ unless @build_config.skip?(:start)
61
63
  @env.start
62
64
  end
63
65
  end
@@ -66,7 +68,7 @@ module PiCustomizer
66
68
  # execute the build_image step for the build environment
67
69
 
68
70
  def build_image
69
- unless @skip_build_steps.include?(:build_image)
71
+ unless @build_config.skip?(:build_image)
70
72
  @env.build_image
71
73
  end
72
74
  end
@@ -75,7 +77,7 @@ module PiCustomizer
75
77
  # publish the image from the build environment
76
78
 
77
79
  def publish
78
- unless @skip_build_steps.include?(:publish)
80
+ unless @build_config.skip?(:publish)
79
81
  @env.publish
80
82
  end
81
83
  end
@@ -84,7 +86,7 @@ module PiCustomizer
84
86
  # clean_up the build environment
85
87
 
86
88
  def clean_up
87
- unless @skip_build_steps.include?(:clean_up)
89
+ unless @build_config.skip?(:clean_up)
88
90
  @env.clean_up
89
91
  end
90
92
  end
@@ -93,7 +95,7 @@ module PiCustomizer
93
95
  # execute the stop step of the environment
94
96
 
95
97
  def stop
96
- unless @skip_build_steps.include?(:stop)
98
+ unless @build_config.skip?(:stop)
97
99
  @env.stop
98
100
  end
99
101
  end
@@ -105,20 +107,6 @@ module PiCustomizer
105
107
  @env.ensure
106
108
  end
107
109
 
108
- ##
109
- # convert a list of stringified build steps to a list of symbols
110
-
111
- private def convert_to_skip(skip_build_steps)
112
- if skip_build_steps.nil?
113
- skip_build_steps = Array.new
114
- else
115
- # convert every key to a symbol
116
- skip_build_steps = skip_build_steps.collect {|k| k.to_sym}
117
- end
118
- $logger.debug "Skipping the following build steps: #{skip_build_steps}"
119
- skip_build_steps
120
- end
121
-
122
110
  ##
123
111
  # check if an environment is specified
124
112
 
@@ -24,36 +24,40 @@ module PiCustomizer
24
24
  module Builder
25
25
 
26
26
  ##
27
- # PiBuilder defines abstractly the steps of a build process.
27
+ # PiBuilder abstractly defines the steps of a build process.
28
28
  # However, the concrete orchestration of the build process's steps is done by its sub-classes.
29
29
 
30
30
  class PiBuilder
31
31
 
32
- attr_reader :build_executor
33
-
34
- def initialize(environment, skip_build_steps)
35
- @build_executor = BuildExecutor.new(environment,skip_build_steps)
36
- end
37
-
38
32
  ##
39
- # build orchestrates an environment and therefore the build process of an image
33
+ # build orchestrates the build steps related to an environment and therefore the build process of an image
40
34
 
41
- def build
35
+ def build(environment, build_config)
36
+ build_executor = BuildExecutor.new(environment, build_config)
42
37
  begin
43
- execute_builder
38
+ execute_builder(build_executor)
44
39
  rescue Exception => e
45
40
  $logger.error e.message
46
41
  ensure
47
- ensure_builder
42
+ ensure_builder(build_executor)
48
43
  end
49
44
  end
50
45
 
51
- protected def ensure_builder
46
+ private def execute_builder(build_executor)
47
+ build_executor.check
48
+ build_executor.prepare
49
+ build_executor.start
50
+ build_executor.build_image
51
+ build_executor.publish
52
+ build_executor.stop
53
+ build_executor.clean_up
52
54
  end
53
55
 
54
- protected def execute_builder
56
+ private def ensure_builder(build_executor)
57
+ build_executor.ensure
55
58
  end
56
59
 
57
60
  end
61
+
58
62
  end
59
63
  end
@@ -18,31 +18,40 @@
18
18
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
19
  # SOFTWARE.
20
20
 
21
- require_relative '../../spec_helper'
22
- require 'rspec'
23
- require 'pi_customizer/build/environment/environment_builder_factory'
24
- require 'pi_customizer/build/environment/docker/docker'
25
- require 'pi_customizer/build/environment/aws/aws'
26
-
27
21
  module PiCustomizer
28
- module Environment
29
- RSpec.describe 'environment_factory' do
22
+ module Config
30
23
 
31
- it 'creates a vagrant environment when ENV_VAGRANT is specified' do
32
- env = Environment::environment_factory(ENV_VAGRANT, '', '')
33
- expect(env).to be_a Vagrant
34
- end
24
+ ##
25
+ # BuildConfig holds all configurations for the build execution
35
26
 
36
- it 'creates a docker environment when ENV_DOCKER is specified' do
37
- env = Environment::environment_factory(ENV_DOCKER, '', '')
38
- expect(env).to be_a Docker
27
+ class BuildConfig
28
+ attr_reader :skip_build_steps
29
+
30
+ def initialize(skip_build_steps = Array.new)
31
+ @skip_build_steps = convert_to_skip(skip_build_steps)
39
32
  end
40
33
 
41
- it 'creates an AWS environment when ENV_AWS is specified' do
42
- env = Environment::environment_factory(ENV_AWS, '', '')
43
- expect(env).to be_a AWS
34
+ ##
35
+ # check if a build step needs to be skipped
36
+
37
+ def skip?(build_step)
38
+ @skip_build_steps.include? build_step
44
39
  end
45
40
 
41
+ ##
42
+ # convert a list of stringified build steps to a list of symbols
43
+
44
+ private def convert_to_skip(skip_build_steps)
45
+ if skip_build_steps.nil?
46
+ skip_build_steps = Array.new
47
+ else
48
+ # convert every key to a symbol
49
+ skip_build_steps = skip_build_steps.collect(&:to_sym)
50
+ end
51
+ $logger.debug "Skipping the following build steps: #{skip_build_steps}"
52
+ skip_build_steps
53
+ end
46
54
  end
55
+
47
56
  end
48
57
  end
@@ -28,17 +28,17 @@ module PiCustomizer
28
28
  ##
29
29
  # The default path which points to the configuration file
30
30
 
31
- DEFAULT_CONFIG_PATH = File.join(File.dirname(__FILE__), '/../../../../resources/config.json')
31
+ DEFAULT_CONFIG_PATH = File.join(Dir.pwd, 'config.json')
32
32
 
33
33
  ##
34
34
  # The default directory which is used to store temporary build files, e.g., the Vagrantfile for a build with vagrant
35
35
 
36
- DEFAULT_LOCAL_WORKSPACE_DIRECTORY = Dir.pwd + '/tmp'
36
+ DEFAULT_LOCAL_WORKSPACE_DIRECTORY = File.join(Dir.pwd, '/tmp')
37
37
 
38
38
  ##
39
- # The LocalWorkspace class encapsulates the configuration of the workspace on the machine where the build of the pi image is triggered
39
+ # The LocalWorkspace class encapsulates the configuration of the config on the machine where the build of the pi image is triggered
40
40
 
41
- class LocalWorkspace
41
+ class LocalWorkspaceConfig
42
42
 
43
43
  attr_reader :config_path, :workspace_directory, :modifier_gem_path
44
44
 
@@ -66,10 +66,10 @@ module PiCustomizer
66
66
 
67
67
  private def workspace_directory=(workspace_directory)
68
68
  @workspace_directory = if workspace_directory.nil? or workspace_directory == ''
69
- Pathname.new(DEFAULT_LOCAL_WORKSPACE_DIRECTORY)
70
- else
71
- absolute_path_name(workspace_directory)
72
- end
69
+ Pathname.new(DEFAULT_LOCAL_WORKSPACE_DIRECTORY)
70
+ else
71
+ absolute_path_name(workspace_directory)
72
+ end
73
73
  end
74
74
 
75
75
  private def modifier_gem_path=(modifier_gem_path)
@@ -40,7 +40,7 @@ module PiCustomizer
40
40
  DEFAULT_GIT_TAG = 'master'
41
41
 
42
42
  ##
43
- # The RemoteWorkspace class encapsulates the configuration of the workspace in the build environment
43
+ # The RemoteWorkspace class encapsulates the configuration of the config in the build environment
44
44
 
45
45
  class RemoteWorkspace
46
46
 
@@ -52,7 +52,7 @@ module PiCustomizer
52
52
  $logger.info '[Build| Docker] customization of build sources'
53
53
  system "sudo docker exec --tty \"$(cat cid)\" bash -c \"sudo pi_build_modifier modify #{CONFIG_PATH_IN_DOCKER}/resources.json #{@workspace.workspace_directory}\""
54
54
  $logger.info '[Build| Docker] pi-image build step'
55
- system "sudo docker exec --tty \"$(cat cid)\" bash -c \"cd #{@workspace.workspace_directory} && sudo ./build.sh\"" #sudo chown docker #{@workspace.workspace_directory} &&
55
+ system "sudo docker exec --tty \"$(cat cid)\" bash -c \"cd #{@workspace.workspace_directory} && sudo ./build.sh\"" #sudo chown docker #{@config.workspace_directory} &&
56
56
  end
57
57
 
58
58
  def clean_up
@@ -24,7 +24,7 @@ module PiCustomizer
24
24
  module Environment
25
25
 
26
26
  ##
27
- # EnvironmentControl defines the build steps that must be supported for a concrete environment
27
+ # EnvironmentControl defines the lifecycle steps of a build environment
28
28
 
29
29
  class EnvironmentControl
30
30
 
@@ -18,26 +18,37 @@
18
18
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
19
  # SOFTWARE.
20
20
 
21
- require 'pi_customizer/build/builder/builder'
21
+ require 'pi_customizer/build/environment/environment'
22
+ require 'pi_customizer/build/environment/vagrant/vagrant'
23
+ require 'pi_customizer/build/environment/docker/docker'
24
+ require 'pi_customizer/build/config/remote_workspace'
25
+ require 'pi_customizer/build/config/local_workspace'
26
+ require 'pi_customizer/utils/logex'
27
+
22
28
 
23
29
  module PiCustomizer
24
- module Builder
25
- class StartExecuteBuilder < PiBuilder
30
+ module Environment
26
31
 
27
- protected def execute_builder
28
- @build_executor.check
29
- @build_executor.start
30
- @build_executor.prepare
31
- @build_executor.build_image
32
- @build_executor.publish
33
- @build_executor.clean_up
34
- @build_executor.stop
35
- end
32
+ ENV_VAGRANT = 'VAGRANT'
33
+ ENV_DOCKER = 'DOCKER'
34
+ ENV_ECHO = 'ECHO'
36
35
 
37
- protected def ensure_builder
38
- @build_executor.ensure
39
- end
36
+ ##
37
+ # The environment_factory creates an environment controller tailored to the selected build environment env
40
38
 
39
+ def Environment.environment_factory(env, local_workspace, remote_workspace)
40
+ case env
41
+ when ENV_VAGRANT
42
+ environment = Vagrant.new(remote_workspace, local_workspace)
43
+ when ENV_DOCKER
44
+ environment = Docker.new(remote_workspace, local_workspace)
45
+ when ENV_ECHO
46
+ environment = EnvironmentControl.new(remote_workspace, local_workspace)
47
+ else
48
+ $logger.warn 'No valid environment (e.g., DOCKER or VAGRANT) defined!'
49
+ environment = EnvironmentControl.new(remote_workspace, local_workspace)
50
+ end
51
+ environment
41
52
  end
42
53
  end
43
- end
54
+ end