Class: Jets::Command::Release

Inherits:
Object
  • Object
show all
Includes:
ApiHelpers
Defined in:
lib/jets/commands/releases/releases_command.rb

Instance Method Summary collapse

Methods included from ApiHelpers

#check_for_error_message!, #no_token_exit!, #paging_params

Constructor Details

#initialize(options = {}) ⇒ Release

Returns a new instance of Release.



29
30
31
# File 'lib/jets/commands/releases/releases_command.rb', line 29

def initialize(options={})
  @options = options
end

Instance Method Details

#format_time(string) ⇒ Object



79
80
81
82
83
84
85
86
# File 'lib/jets/commands/releases/releases_command.rb', line 79

def format_time(string)
  if string.include?("ago") # IE: 5 minutes ago
    string
  else
    time = Time.parse(string)
    time.in_time_zone(Time.zone)
  end
end

#get(version) ⇒ Object



88
89
90
91
92
93
# File 'lib/jets/commands/releases/releases_command.rb', line 88

def get(version)
  resp = Jets::Api::Release.retrieve(version)
  check_for_error_message!(resp)
rescue Jets::Api::RequestError => e
  puts "ERROR: Unable to get release. #{e.class}: #{e.message}"
end

#listObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/jets/commands/releases/releases_command.rb', line 33

def list
  no_token_exit!
  resp = Jets::Api::Stack.retrieve(:current)
  if resp["error"] == "not_found"
    puts "No release history. Stack not found: #{Jets.project_namespace}"
    # Return early and avoid calling Jets::Api::Release.list if stack not found
    # Note: Jets::Api::Release.list also checks for no stack found
    return
  end

  name = "#{resp['name']} #{resp['location']}"
  resp = Jets::Api::Release.list(@options)
  check_for_error_message!(resp) # can also return "Stack not found #{name}" message
  data = resp["data"]
  if data.empty?
    $stderr.puts "No releases found for stack: #{name}"
  else
    $stderr.puts "Releases for stack: #{name}"
    show_items(data)
  end
rescue Jets::Api::RequestError => e
  puts "ERROR: Unable to list releases. #{e.class}: #{e.message}"
end

#showObject



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/jets/commands/releases/releases_command.rb', line 95

def show
  release = get(@options[:version])
  release_at = release['pretty_created_at'] || release['created_at']

  data = [
    ["Version", release['version']],
    ["Status", release['stack_status']],
    ["Released At", format_time(release_at)],
    ["Message", release['message']],
    ["User", release['deploy_user']],
    ["Jets Env", release['jets_env']],
    ["Jets Extra", release['jets_extra']],
    ["Jets Version", release['jets_version']],
    ["Ruby Version", release['ruby_version']],
    ["Region", release['region']],
    ["Git Branch", release['git_branch']],
    ["Git Sha", release['git_sha']],
    ["Git Url", release['git_url']],
    ["Git Message", release['git_message']],
  ]
  column1_width = data.map { |row| row[1].nil? ? 0 : row[0].to_s.length }.max
  column2_width = data.map { |row| row[1].nil? ? 0 : row[1].to_s.length }.max

  puts Jets.project_namespace.color(:green)
  data.each do |row|
    puts "#{row[0].ljust(column1_width)}   #{row[1]}" unless row[1].nil?
  end
end

#show_items(items) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/jets/commands/releases/releases_command.rb', line 57

def show_items(items)
  presenter = CliFormat::Presenter.new
  header = ["Version", "Status", "Released At", "Message"]
  header << "Git Sha" if @options[:sha]
  presenter.header = header
  items.each do |item|
    version = item["version"]
    status = item["stack_status"]
    released_at = item["pretty_created_at"] || item["created_at"]
    message = item["message"] || "Deployed"
    message = message[0..50]

    row = [version, status, format_time(released_at), message]
    if @options[:sha]
      sha = item["git_sha"].to_s[0..7] if item["git_sha"]
      row << sha
    end
    presenter.rows << row
  end
  presenter.show
end