Class: Avocado::Bootstrap

Inherits:
Object
  • Object
show all
Defined in:
lib/avocado/bootstrap.rb

Class Method Summary collapse

Class Method Details

.run(stage, verbose = false, debug = false) ⇒ Object

Runs the avocado bootstrap

Parameters:

  • stage (Symbol)

    the stage to bootstrap

  • verbose (Boolean) (defaults to: false)

    run in verbose mode

  • debug (Boolean) (defaults to: false)

    run in boolean mode



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/avocado/bootstrap.rb', line 26

def self.run(stage, verbose = false, debug = false)
	if stage.is_a?(String)
		stage = stage.to_sym
	end

	require File.join(File.dirname(__FILE__), 'core_ext/string_colors.rb')
	require File.join(File.dirname(__FILE__), 'core_ext/hash_insert_at.rb')

	require File.join(File.dirname(__FILE__), 'task/task.rb')
	require File.join(File.dirname(__FILE__), 'task/task_dependency.rb')
	require File.join(File.dirname(__FILE__), 'task/task_manager.rb')
	require File.join(File.dirname(__FILE__), 'task/task_execution_environment.rb')
	require File.join(File.dirname(__FILE__), 'task/local_task_execution_environment.rb')
	require File.join(File.dirname(__FILE__), 'task/remote_task_execution_environment.rb')

	require File.join(File.dirname(__FILE__), 'scm_provider/scm_provider.rb')
	require File.join(File.dirname(__FILE__), 'scm_provider/git_scm_provider.rb')

	require File.join(File.dirname(__FILE__), 'multi_io.rb')
	require File.join(File.dirname(__FILE__), 'command_execution_result.rb')
	require File.join(File.dirname(__FILE__), 'target.rb')
	require File.join(File.dirname(__FILE__), 'config.rb')
	require File.join(File.dirname(__FILE__), 'deployment.rb')

	begin
		# defaults
		Avocado::Deployment.configure do
			set :stage, stage
		end

		if File.exist?(Dir.pwd.concat('/Avofile')) == false
			raise RuntimeError, 'Could not find Avofile. Run `avo install` first.'
		end

		instance = Avocado::Deployment.instance

		# load user config initially to determine strategy
		begin
			load File.join(Dir.pwd, 'Avofile')
		rescue RuntimeError => e
			# `find_chain_index_containing': could not find a chain containing task create_deployment_tarball (RuntimeError)
			# error not neccessary because dependencies are not loaded
		end

		if debug
			instance.log.level = Logger::DEBUG
		elsif verbose
			instance.log.level = Logger::INFO
		else
			instance.log.level = instance.config.get(:log_level)
		end

		instance.log.debug "Loading deployment strategy #{instance.config.get(:strategy).to_s}..."

		# load strategy
		# @todo pruefen
		require File.join(File.dirname(__FILE__), "strategy/base.rb")
		require File.join(File.dirname(__FILE__), "strategy/#{instance.config.get(:strategy).to_s}.rb")


		instance.log.debug "Loading user configuration..."

		# override again by user config to allow manipulation of tasks
		load File.join(Dir.pwd, 'Avofile')
	rescue Exception => e
		Avocado::Deployment.instance.log.error e.message.red
		
		Kernel.exit(true)
	end

	Avocado::Deployment.instance
end