pi_customizer 0.4.0.pre.alpha → 0.5.0.pre.alpha

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.
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