Class: Pike::Main

Inherits:
Object
  • Object
show all
Defined in:
lib/pike/main.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.debugObject

Returns the value of attribute debug.



19
20
21
# File 'lib/pike/main.rb', line 19

def debug
  @debug
end

.dry_runObject (readonly)

Returns the value of attribute dry_run.



21
22
23
# File 'lib/pike/main.rb', line 21

def dry_run
  @dry_run
end

.envObject (readonly)

Returns the value of attribute env.



21
22
23
# File 'lib/pike/main.rb', line 21

def env
  @env
end

.envsObject (readonly)

Returns the value of attribute envs.



21
22
23
# File 'lib/pike/main.rb', line 21

def envs
  @envs
end

.task_to_runObject (readonly)

Returns the value of attribute task_to_run.



21
22
23
# File 'lib/pike/main.rb', line 21

def task_to_run
  @task_to_run
end

.tasksObject (readonly)

Returns the value of attribute tasks.



21
22
23
# File 'lib/pike/main.rb', line 21

def tasks
  @tasks
end

.variablesObject (readonly)

Returns the value of attribute variables.



21
22
23
# File 'lib/pike/main.rb', line 21

def variables
  @variables
end

.verboseObject (readonly)

Returns the value of attribute verbose.



21
22
23
# File 'lib/pike/main.rb', line 21

def verbose
  @verbose
end

Class Method Details

.action(msg, vital = true, &block) ⇒ Object



239
240
241
242
243
244
245
246
247
# File 'lib/pike/main.rb', line 239

def action(msg, vital = true, &block)
    begin
      step msg, vital: vital, debug: @debug do
          yield block
      end
    rescue Exception => e
      Main.error(e.message, e.backtrace)
    end
end

.add_env(name, &block) ⇒ Object

Add a environment (called from DSL::Pikefile.env)



220
221
222
223
# File 'lib/pike/main.rb', line 220

def add_env(name, &block)
    Logger.log "Adding environment '#{name}'"
  @envs[name] = Env.new(name, &block)
end

.add_task(name, &block) ⇒ Object



211
212
213
214
# File 'lib/pike/main.rb', line 211

def add_task(name, &block)
    Logger.log "Adding task '#{name}'"
  @tasks[name] = Task.new(name, &block)
end

.error(msg, trace = nil) ⇒ Object

Handles an error



254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
# File 'lib/pike/main.rb', line 254

def error(msg, trace = nil)
  puts
  puts
  puts msg
  puts

  if @debug
    puts trace || caller
  end

  puts

  Logger.log
  Logger.log
  Logger.log "Error in task:"
  Logger.log msg
  Logger.log
  exit 1
end

.finalizeObject

Close ssh connection and logger



177
178
179
180
181
182
183
# File 'lib/pike/main.rb', line 177

def finalize
    Logger.log
    Logger.log "Finished."

    SSH::Connection.close
    Logger.close
end

.find_task(task) ⇒ Object



230
231
232
# File 'lib/pike/main.rb', line 230

def find_task(task)
  @tasks[task]
end

.get_var(key) ⇒ Object



202
203
204
# File 'lib/pike/main.rb', line 202

def get_var(key)
  @variables[key]
end

.init(options) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/pike/main.rb', line 47

def init(options)
  @envs = {}
  @variables = {}
  @tasks = {}
  @debug = options[:debug]
  @task_to_run = nil
  @dry_run = options[:dry_run]
    @verbose = options[:verbose]

    Logger.log_banner

    # Variable defaults
    set_var ({
      branch: :master,
      log_file: 'log/pike.log'
    })

  # Some pretty utf8 chars to illustrate some actions
  @config_char = "\u26a1"
  @environment_char = "\u2699"
end

.load_pikefileObject

Load Pikefile



103
104
105
106
107
108
109
110
111
# File 'lib/pike/main.rb', line 103

def load_pikefile
  action "#{@config_char} Loading Pikefile" do
    # Check if file exists
    raise 'No Pikefile found' unless File.exist?(Dir.pwd + '/Pikefile')

    # Load the Pikefile
    DSL::Pikefile.load('Pikefile')
  end
end

.prepareObject

Load tasks



144
145
146
147
148
149
150
151
# File 'lib/pike/main.rb', line 144

def prepare
  action "#{@config_char} Preparing ..." do
      Logger.log("Loading tasks ...")
    DSL::Pikefile.load(File.expand_path(File.dirname(__FILE__)) + '/tasks/tasks.rb')

      true
    end
end

.runObject

Run the deployment



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/pike/main.rb', line 74

def run
    begin
      # Step 1: Check if the Pikefile exists and load config
      load_pikefile

      # step 2: Internal stuff
      Logger.init

      # Step 3: Set environment
      set_environment

      # Step 4: Load tasks.rb
      prepare

      # Step 5: Run deployment lifecycle for the given environment
      run_lifecycle

      # Step 6: Close SSH connection
      finalize
    rescue Exception => e
      Main.error(e.message, e.backtrace)
    end
end

.run_lifecycleObject

Run the lifecycle for the environment



158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/pike/main.rb', line 158

def run_lifecycle
  if @task_to_run
      Logger.log "Run task #{@task_to_run} for env '#{@env.name}'"
    action "#{@environment_char} Run task #{@task_to_run} for env '#{@env.name}'" do
      @env.run_single_task(@task_to_run)
    end
  else
      Logger.log "Run deployment lifecycle for env '#{@env.name}'"
    action "#{@environment_char} Run deployment lifecycle for env '#{@env.name}'" do
      @env.run_lifecycle
    end
  end
end

.set_environmentObject

Sets the @env variable depending on what the user provided



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/pike/main.rb', line 118

def set_environment
  action "#{@config_char} Check given environment" do
    @env = ARGV[0].to_sym

    if @envs.include?(@env)
      @env = @envs[@env]
        Logger.log "Environment: #{@env.name}"
    else
        Logger.log "Unknown environment #{@env}. Please check you Pikefile."
      raise "Unknown environment #{@env}. Please check you Pikefile."
    end

    if ARGV[1]
      @task_to_run = ARGV[1].to_sym
        Logger.log "Task: #{@task_to_run}"
    end

    @env
  end
end

.set_var(vars = {}) ⇒ Object



190
191
192
193
194
195
# File 'lib/pike/main.rb', line 190

def set_var(vars = {})
  vars.keys.each do |key|
      Logger.log "Set variable '#{key}' to '#{vars[key]}"
    @variables[key] = vars[key]
  end
end