Class: Wooget::CLI

Inherits:
Thor
  • Object
show all
Includes:
Thor::Actions
Defined in:
lib/wooget/cli.rb

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ CLI

Returns a new instance of CLI.



14
15
16
17
18
19
# File 'lib/wooget/cli.rb', line 14

def initialize *args
  super

  Wooget.log.level = Logger::Severity::DEBUG if self.options[:verbose]
  Wooget.repos[:default] = self.options[:repo] if self.options[:repo]
end

Instance Method Details

#bootstrapObject



203
204
205
206
207
208
209
210
211
212
213
# File 'lib/wooget/cli.rb', line 203

def bootstrap
  assert_dependencies
  p "Dependencies OK"
  load_config
  p "Config OK"

  if Util.is_a_unity_project_dir options[:path]
    p "Unity project detected - Checking setup"
    invoke "wooget:unity:bootstrap", [], options
  end
end

#buildObject



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
# File 'lib/wooget/cli.rb', line 39

def build
  package_release_checks

  p "Preinstall before build"
  invoke "install", [], quiet:true, path:get_path

  p "Running tests"
  invoke "test", [], path:get_path

  #templates refs have to be relative to the working dir / project root for paket.exe
  path = Pathname.new(options[:path])
  templates = Dir.glob(File.join(options[:path],"**/*paket.template"))
  templates.map! { |t| Pathname.new(t).relative_path_from(path).to_s}

  build_options = {
      output_dir: options[:output],
      version:options[:version],
      release_notes: options[:release_notes],
      templates: templates,
      path: options[:path],
      native: options[:native],
      git: options[:git],
      git_push: options[:git_push],
      git_release: options[:git_release],
  }

  built_packages = invoke "wooget:packager:build", [], build_options

  p "#{built_packages.join " & "} built to #{File.expand_path File.join(options[:path],options[:output])}" if built_packages
end

#build_nameObject



71
72
73
74
# File 'lib/wooget/cli.rb', line 71

def build_name
  build_name = invoke "wooget:packager:build_name", [], options
  p build_name
end

#create(package_name) ⇒ Object



26
27
28
29
# File 'lib/wooget/cli.rb', line 26

def create package_name
  proj = Project.new
  proj.create package_name, options
end

#install(package = nil) ⇒ Object



174
175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/wooget/cli.rb', line 174

def install package=nil
  load_config

  if Util.is_a_unity_project_dir(options[:path]) or Util.is_a_wooget_package_dir(options[:path])
    if package and Util.is_a_unity_project_dir(options[:path])
      invoke "wooget:unity:install", [package], options
    end

    Paket.install options
  else
    raise "Project not found at #{options[:path]}"
  end
  p "Installed!"
end

#latest_versionObject



84
85
86
87
# File 'lib/wooget/cli.rb', line 84

def latest_version
  version = invoke "wooget:packager:latest_version", [], options
  p version
end

#list(package_id = nil) ⇒ Object



219
220
221
222
223
224
225
226
227
# File 'lib/wooget/cli.rb', line 219

def list package_id=nil
  load_config

  if package_id
    p PackageListFormatter.format_package package_list_by_repo, options[:format], package_id
  else
    p PackageListFormatter.format_list package_list_by_repo, options[:format], options[:show_binary]
  end
end

#paket(*args) ⇒ Object



162
163
164
# File 'lib/wooget/cli.rb', line 162

def paket *args
  Wooget::Paket.execute(args.join(" "))
end

#paket_unity3d(*args) ⇒ Object



168
169
170
# File 'lib/wooget/cli.rb', line 168

def paket_unity3d *args
  Wooget::Paket.unity3d_execute(args.join(" "))
end

#prereleaseObject



117
118
119
120
121
122
123
# File 'lib/wooget/cli.rb', line 117

def prerelease
  package_release_checks

  released_packages = invoke "wooget:packager:prerelease", [], options

  p "#{released_packages.join " & "} prereleased successfully" if released_packages
end

#releaseObject



99
100
101
102
103
104
105
# File 'lib/wooget/cli.rb', line 99

def release
  package_release_checks

  released_packages = invoke "wooget:packager:release", [], options

  p "#{released_packages.join " & "} released successfully" if released_packages
end

#search(pattern) ⇒ Object



233
234
235
236
237
238
# File 'lib/wooget/cli.rb', line 233

def search pattern
  load_config

  packages_by_repo = package_list_by_repo pattern
  p PackageListFormatter.format_list packages_by_repo, options[:format], options[:show_binary]
end

#testObject



127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/wooget/cli.rb', line 127

def test
  unless Util.is_a_wooget_package_dir(options[:path]) and Dir.exists?(File.join(options[:path],"tests"))
    Wooget.log.error "Can't find a wooget package dir with tests at #{options[:path]}"
    return
  end

  slns = Dir.glob(File.join(options[:path],"/**/*.sln"))
  sln = slns.select{ |d| not Wooget::Util.is_a_unity_project_dir(File.dirname(d))}.first

  if sln.nil? or sln.empty?
    Wooget.log.error "Can't find sln file for building test artifacts"
    return
  end

  nunit = Dir.glob(File.join(options[:path],"/**/nunit-console.exe")).first
  if nunit.nil? or nunit.empty?
    Wooget.log.error "Can't find nunit-console for running tests"
    return
  end


  Dir.mktmpdir do |tmp_dir|
    p "Building test assembly.."
    stdout, status = Util.run_cmd("xbuild #{File.expand_path(sln)}  /t:Rebuild  /p:RestorePackages='False' /p:Configuration='Release' /p:OutDir='#{tmp_dir}/'") { |log| Wooget.no_status_log log}
    raise BuildError, stdout.join unless status == 0

    Dir[File.join(tmp_dir, "*Tests*.dll")].each do |assembly|
      _, status = Util.run_cmd("mono #{nunit} #{assembly} -nologo -labels -noshadow") { |log| p log}
      p "Exit Status - #{status}"
    end
  end
end

#update(package = nil) ⇒ Object



191
192
193
194
195
196
197
198
199
200
# File 'lib/wooget/cli.rb', line 191

def update package=nil
  load_config

  if Util.is_a_unity_project_dir(options[:path]) or Util.is_a_wooget_package_dir(options[:path])
    Paket.update package, options
  else
    raise "Project not found at #{options[:path]}"
  end
  p "Updated!"
end

#versionObject



77
78
79
# File 'lib/wooget/cli.rb', line 77

def version
  p "wooget version #{Wooget::VERSION}"
end