Class: Vanagon::CLI::Dependencies

Inherits:
Vanagon::CLI show all
Defined in:
lib/vanagon/cli/dependencies.rb

Constant Summary collapse

DOCUMENTATION =
<<~DOCOPT.freeze
  Usage:
  dependencies [options] <project-name> <platforms>

  Options:
    -h, --help                       Display help
    -c, --configdir DIRECTORY        Configuration directory [default: #{Dir.pwd}/configs]
    -w, --workdir DIRECTORY          Working directory on the local host
    -v, --verbose                    Only here for backwards compatibility. Does nothing.

  Project-Name:
    May be a project name of a project from the configs/projects directory or 'all' to generate dependencies for all projects.
  Platforms:
    May be a platform name of a platform from the configs/platforms directory or 'all' to generate dependencies for all platforms.
DOCOPT

Instance Method Summary collapse

Methods inherited from Vanagon::CLI

#options_validate

Instance Method Details

#get_platforms(options) ⇒ Object



76
77
78
79
80
81
82
83
84
85
# File 'lib/vanagon/cli/dependencies.rb', line 76

def get_platforms(options)
  platforms = options[:platforms].split(',')
  if platforms.include?('all')
    Dir.children(platforms_directory).map do |platform|
      File.basename(platform, File.extname(platform))
    end
  else
    platforms
  end
end

#get_projects(options) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/vanagon/cli/dependencies.rb', line 57

def get_projects(options)
  platforms_directory = File.join(options[:configdir], 'platforms')
  projects_directory = File.join(options[:configdir], 'projects')

  unless Dir.exist?(projects_directory) && Dir.exist?(platforms_directory)
    VanagonLogger.error "Path to #{platforms_directory} or #{projects_directory} not found."
    exit 1
  end

  projects = [options[:project_name]]
  if projects.include?('all')
    Dir.children(projects_directory).map do |project|
      File.basename(project, File.extname(project))
    end
  else
    projects
  end
end

#options_translate(docopt_options) ⇒ Object



87
88
89
90
91
92
93
94
95
96
# File 'lib/vanagon/cli/dependencies.rb', line 87

def options_translate(docopt_options)
  translations = {
    '--verbose' => :verbose,
    '--workdir' => :workdir,
    '--configdir' => :configdir,
    '<project-name>' => :project_name,
    '<platforms>' => :platforms
  }
  return docopt_options.map { |k, v| [translations[k], v] }.to_h
end

#parse(argv) ⇒ Object



24
25
26
27
28
29
# File 'lib/vanagon/cli/dependencies.rb', line 24

def parse(argv)
  Docopt.docopt(DOCUMENTATION, { argv: argv })
rescue Docopt::Exit => e
  VanagonLogger.error e.message
  exit 1
end

#run(options) ⇒ Object



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
# File 'lib/vanagon/cli/dependencies.rb', line 31

def run(options)
  projects = get_projects(options)
  platforms = get_platforms(options)
  failures = []

  projects.each do |project|
    platforms.each do |platform|
      begin
        artifact = Vanagon::Driver.new(platform, project, options)
        artifact.dependencies
      rescue RuntimeError => e
        failures.push("#{project}, #{platform}: #{e}")
      end
    end
  end

  unless failures.empty?
    VanagonLogger.info "Failed to generate dependencies for the following:"
    failures.each do |failure|
      VanagonLogger.info failure
    end
  end

  VanagonLogger.info "Finished generating dependencies"
end