u3d 0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.licenses.json +19 -0
- data/.rspec +1 -0
- data/.rubocop.yml +43 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +98 -0
- data/LICENSE +21 -0
- data/LICENSE.fastlane +22 -0
- data/LOG_RULES.md +170 -0
- data/README.md +72 -0
- data/Rakefile +28 -0
- data/TODO.md +15 -0
- data/build.sh +5 -0
- data/config/log_rules.json +230 -0
- data/examples/Example1/.gitignore +19 -0
- data/examples/Example1/Assets/Editor.meta +9 -0
- data/examples/Example1/Assets/Editor/EditorRun.cs +23 -0
- data/examples/Example1/Assets/Editor/EditorRun.cs.meta +12 -0
- data/examples/Example1/Assets/Editor/FileSystemUtil.cs +26 -0
- data/examples/Example1/Assets/Editor/FileSystemUtil.cs.meta +12 -0
- data/examples/Example1/Assets/Scene1.unity +264 -0
- data/examples/Example1/Assets/Scene1.unity.meta +8 -0
- data/examples/Example1/Gemfile +8 -0
- data/examples/Example1/Gemfile.lock +165 -0
- data/examples/Example1/ProjectSettings/AudioManager.asset +16 -0
- data/examples/Example1/ProjectSettings/ClusterInputManager.asset +6 -0
- data/examples/Example1/ProjectSettings/DynamicsManager.asset +18 -0
- data/examples/Example1/ProjectSettings/EditorBuildSettings.asset +7 -0
- data/examples/Example1/ProjectSettings/EditorSettings.asset +14 -0
- data/examples/Example1/ProjectSettings/GraphicsSettings.asset +61 -0
- data/examples/Example1/ProjectSettings/InputManager.asset +295 -0
- data/examples/Example1/ProjectSettings/NavMeshAreas.asset +89 -0
- data/examples/Example1/ProjectSettings/NetworkManager.asset +8 -0
- data/examples/Example1/ProjectSettings/Physics2DSettings.asset +35 -0
- data/examples/Example1/ProjectSettings/ProjectSettings.asset +591 -0
- data/examples/Example1/ProjectSettings/ProjectVersion.txt +1 -0
- data/examples/Example1/ProjectSettings/QualitySettings.asset +180 -0
- data/examples/Example1/ProjectSettings/TagManager.asset +43 -0
- data/examples/Example1/ProjectSettings/TimeManager.asset +9 -0
- data/examples/Example1/ProjectSettings/UnityConnectSettings.asset +32 -0
- data/examples/Example1/README.md +5 -0
- data/examples/Example1/Rakefile +5 -0
- data/examples/Example1/fastlane/Fastfile +4 -0
- data/examples/Example1/fastlane/Pluginfile +1 -0
- data/examples/Example1/run.sh +1 -0
- data/examples/Example2/.gitignore +20 -0
- data/examples/Example2/Assets/Editor.meta +9 -0
- data/examples/Example2/Assets/Editor/EditorRun.cs +33 -0
- data/examples/Example2/Assets/Editor/EditorRun.cs.meta +12 -0
- data/examples/Example2/Assets/Editor/PostprocessBuildPlayer.cs +92 -0
- data/examples/Example2/Assets/Editor/PostprocessBuildPlayer.cs.meta +8 -0
- data/examples/Example2/Assets/Editor/PostprocessBuildPlayer_log.sh +31 -0
- data/examples/Example2/Assets/Editor/PostprocessBuildPlayer_log.sh.meta +8 -0
- data/examples/Example2/Assets/Editor/SimpleBuildSetup.cs +20 -0
- data/examples/Example2/Assets/Editor/SimpleBuildSetup.cs.meta +12 -0
- data/examples/Example2/Assets/Scene.unity +278 -0
- data/examples/Example2/Assets/Scene.unity.meta +8 -0
- data/examples/Example2/Gemfile +8 -0
- data/examples/Example2/Gemfile.lock +165 -0
- data/examples/Example2/ProjectSettings/AudioManager.asset +17 -0
- data/examples/Example2/ProjectSettings/ClusterInputManager.asset +6 -0
- data/examples/Example2/ProjectSettings/DynamicsManager.asset +19 -0
- data/examples/Example2/ProjectSettings/EditorBuildSettings.asset +10 -0
- data/examples/Example2/ProjectSettings/EditorSettings.asset +14 -0
- data/examples/Example2/ProjectSettings/GraphicsSettings.asset +63 -0
- data/examples/Example2/ProjectSettings/InputManager.asset +295 -0
- data/examples/Example2/ProjectSettings/NavMeshAreas.asset +89 -0
- data/examples/Example2/ProjectSettings/NetworkManager.asset +8 -0
- data/examples/Example2/ProjectSettings/Physics2DSettings.asset +36 -0
- data/examples/Example2/ProjectSettings/ProjectSettings.asset +591 -0
- data/examples/Example2/ProjectSettings/ProjectVersion.txt +1 -0
- data/examples/Example2/ProjectSettings/QualitySettings.asset +193 -0
- data/examples/Example2/ProjectSettings/TagManager.asset +43 -0
- data/examples/Example2/ProjectSettings/TimeManager.asset +9 -0
- data/examples/Example2/ProjectSettings/UnityConnectSettings.asset +34 -0
- data/examples/Example2/README.md +10 -0
- data/examples/Example2/fastlane/Fastfile +4 -0
- data/examples/Example2/fastlane/Pluginfile +1 -0
- data/exe/u3d +7 -0
- data/fastlane-plugin-u3d/.gitignore +10 -0
- data/fastlane-plugin-u3d/.licenses.json +9 -0
- data/fastlane-plugin-u3d/.rspec +3 -0
- data/fastlane-plugin-u3d/.rubocop.yml +253 -0
- data/fastlane-plugin-u3d/.travis.yml +4 -0
- data/fastlane-plugin-u3d/Gemfile +6 -0
- data/fastlane-plugin-u3d/LICENSE +21 -0
- data/fastlane-plugin-u3d/README.md +52 -0
- data/fastlane-plugin-u3d/Rakefile +9 -0
- data/fastlane-plugin-u3d/circle.yml +9 -0
- data/fastlane-plugin-u3d/fastlane-plugin-u3d.gemspec +31 -0
- data/fastlane-plugin-u3d/fastlane/Fastfile +3 -0
- data/fastlane-plugin-u3d/fastlane/Pluginfile +1 -0
- data/fastlane-plugin-u3d/lib/fastlane/plugin/u3d.rb +38 -0
- data/fastlane-plugin-u3d/lib/fastlane/plugin/u3d/actions/u3d_action.rb +80 -0
- data/fastlane-plugin-u3d/lib/fastlane/plugin/u3d/helper/u3d_helper.rb +34 -0
- data/fastlane-plugin-u3d/lib/fastlane/plugin/u3d/version.rb +27 -0
- data/fastlane-plugin-u3d/spec/spec_helper.rb +32 -0
- data/lib/u3d.rb +33 -0
- data/lib/u3d/cache.rb +120 -0
- data/lib/u3d/commands.rb +307 -0
- data/lib/u3d/commands_generator.rb +163 -0
- data/lib/u3d/downloader.rb +363 -0
- data/lib/u3d/iniparser.rb +83 -0
- data/lib/u3d/installer.rb +445 -0
- data/lib/u3d/log_analyzer.rb +221 -0
- data/lib/u3d/unity_version_number.rb +71 -0
- data/lib/u3d/unity_versions.rb +207 -0
- data/lib/u3d/utils.rb +121 -0
- data/lib/u3d/version.rb +31 -0
- data/lib/u3d_core.rb +30 -0
- data/lib/u3d_core/command_executor.rb +134 -0
- data/lib/u3d_core/command_runner.rb +93 -0
- data/lib/u3d_core/credentials.rb +116 -0
- data/lib/u3d_core/globals.rb +84 -0
- data/lib/u3d_core/helper.rb +149 -0
- data/lib/u3d_core/ui/disable_colors.rb +40 -0
- data/lib/u3d_core/ui/implementations/shell.rb +157 -0
- data/lib/u3d_core/ui/interface.rb +182 -0
- data/lib/u3d_core/ui/ui.rb +49 -0
- data/local_gem_install.sh +6 -0
- data/scripts/be +14 -0
- data/u3d.gemspec +41 -0
- metadata +388 -0
data/lib/u3d/commands.rb
ADDED
@@ -0,0 +1,307 @@
|
|
1
|
+
## --- BEGIN LICENSE BLOCK ---
|
2
|
+
# Copyright (c) 2016-present WeWantToKnow AS
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
9
|
+
# furnished to do so, subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
12
|
+
# copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
20
|
+
# SOFTWARE.
|
21
|
+
## --- END LICENSE BLOCK ---
|
22
|
+
|
23
|
+
require 'u3d/unity_versions'
|
24
|
+
require 'u3d/downloader'
|
25
|
+
require 'u3d/installer'
|
26
|
+
require 'u3d/cache'
|
27
|
+
require 'u3d/utils'
|
28
|
+
require 'u3d/log_analyzer'
|
29
|
+
require 'u3d_core/command_executor'
|
30
|
+
require 'u3d_core/credentials'
|
31
|
+
require 'fileutils'
|
32
|
+
|
33
|
+
module U3d
|
34
|
+
# API for U3d, redirecting calls to class they concern
|
35
|
+
class Commands
|
36
|
+
class << self
|
37
|
+
def list_installed(options: {})
|
38
|
+
list = Installer.create.installed
|
39
|
+
if list.empty?
|
40
|
+
UI.important 'No Unity version installed'
|
41
|
+
return
|
42
|
+
end
|
43
|
+
list.each do |u|
|
44
|
+
UI.message "Version #{u.version}\t(#{u.path})"
|
45
|
+
packages = u.packages
|
46
|
+
next unless options[:packages] && packages && !packages.empty?
|
47
|
+
UI.message 'Packages:'
|
48
|
+
packages.each { |pack| UI.message " - #{pack}" }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def list_available(options: {})
|
53
|
+
ver = options[:unity_version]
|
54
|
+
os = options[:operating_system]
|
55
|
+
rl = options[:release_level]
|
56
|
+
if os
|
57
|
+
os = os.to_sym
|
58
|
+
oses = U3dCore::Helper.operating_systems
|
59
|
+
raise "Specified OS (#{os}) isn't valid [#{oses.join(', ')}]" unless oses.include?(os)
|
60
|
+
else
|
61
|
+
os = U3dCore::Helper.operating_system
|
62
|
+
end
|
63
|
+
cache = Cache.new(force_os: os, force_refresh: options[:force])
|
64
|
+
versions = {}
|
65
|
+
|
66
|
+
return UI.error "Version #{ver} is not in cache" if ver && cache[os.id2name]['versions'][ver].nil?
|
67
|
+
|
68
|
+
versions = if ver
|
69
|
+
{ ver => cache[os.id2name]['versions'][ver] }
|
70
|
+
else
|
71
|
+
cache[os.id2name]['versions']
|
72
|
+
end
|
73
|
+
|
74
|
+
vcomparators = versions.keys.map { |k| UnityVersionComparator.new(k) }
|
75
|
+
if rl
|
76
|
+
letter = release_letter_mapping["latest_#{rl}".to_sym]
|
77
|
+
UI.message "Filtering available versions with release level '#{rl}' [letter '#{letter}']"
|
78
|
+
vcomparators.select! { |vc| vc.version.parts[3] == letter }
|
79
|
+
end
|
80
|
+
sorted_keys = vcomparators.sort.map { |v| v.version.to_s }
|
81
|
+
|
82
|
+
sorted_keys.each do |k|
|
83
|
+
v = versions[k]
|
84
|
+
UI.message "Version #{k}: " + v.to_s.cyan.underline
|
85
|
+
next unless options[:packages]
|
86
|
+
inif = nil
|
87
|
+
begin
|
88
|
+
inif = U3d::INIparser.load_ini(k, versions, os: os)
|
89
|
+
rescue => e
|
90
|
+
UI.error "Could not load packages for this version (#{e})"
|
91
|
+
else
|
92
|
+
UI.message 'Packages:'
|
93
|
+
inif.keys.each { |pack| UI.message " - #{pack}" }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def download(args: [], options: {})
|
99
|
+
version = args[0]
|
100
|
+
UI.user_error!('Please specify a Unity version to download') unless version
|
101
|
+
|
102
|
+
packages = packages_with_unity_first(options)
|
103
|
+
|
104
|
+
os = U3dCore::Helper.operating_system
|
105
|
+
cache = Cache.new(force_os: os)
|
106
|
+
versions = cache[os.id2name]['versions']
|
107
|
+
version = interpret_latest(version, versions)
|
108
|
+
|
109
|
+
unless packages.include?('Unity')
|
110
|
+
unity = check_unity_presence(version: version)
|
111
|
+
return unless unity
|
112
|
+
options[:installation_path] ||= unity.path if Helper.windows?
|
113
|
+
end
|
114
|
+
|
115
|
+
U3d::Globals.use_keychain = true if options[:keychain] && Helper.mac?
|
116
|
+
|
117
|
+
unless options[:no_install]
|
118
|
+
UI.important 'Root privileges are required'
|
119
|
+
raise 'Could not get administrative privileges' unless U3dCore::CommandExecutor.has_admin_privileges?
|
120
|
+
end
|
121
|
+
|
122
|
+
files = []
|
123
|
+
if os == :linux
|
124
|
+
UI.important 'Option -a | --all not available for Linux' if options[:all]
|
125
|
+
UI.important 'Option -p | --packages not available for Linux' if options[:packages]
|
126
|
+
downloader = Downloader::LinuxDownloader
|
127
|
+
files << ["Unity #{version}", downloader.download(version, versions), {}]
|
128
|
+
else
|
129
|
+
downloader = Downloader::MacDownloader if os == :mac
|
130
|
+
downloader = Downloader::WindowsDownloader if os == :win
|
131
|
+
if options[:all]
|
132
|
+
files = downloader.download_all(version, versions)
|
133
|
+
else
|
134
|
+
packages.each do |package|
|
135
|
+
result = downloader.download_specific(package, version, versions)
|
136
|
+
files << [package, result[0], result[1]] unless result.nil?
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
return if options[:no_install]
|
142
|
+
files.each do |name, file, info|
|
143
|
+
UI.verbose "Installing #{name}#{info['mandatory'] ? ' (mandatory package)' : ''}, with file #{file}"
|
144
|
+
Installer.install_module(file, version, installation_path: options[:installation_path], info: info)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def local_install(args: [], options: {})
|
149
|
+
UI.user_error!('Please specify a version') if args.empty?
|
150
|
+
version = args[0]
|
151
|
+
|
152
|
+
packages = packages_with_unity_first(options)
|
153
|
+
|
154
|
+
unless packages.include?('Unity')
|
155
|
+
unity = check_unity_presence(version: version)
|
156
|
+
return unless unity
|
157
|
+
options[:installation_path] ||= unity.path if Helper.windows?
|
158
|
+
end
|
159
|
+
|
160
|
+
U3d::Globals.use_keychain = true if options[:keychain] && Helper.mac?
|
161
|
+
|
162
|
+
UI.important 'Root privileges are required'
|
163
|
+
raise 'Could not get administrative privileges' unless U3dCore::CommandExecutor.has_admin_privileges?
|
164
|
+
|
165
|
+
os = U3dCore::Helper.operating_system
|
166
|
+
files = []
|
167
|
+
if os == :linux
|
168
|
+
UI.important 'Option -a | --all not available for Linux' if options[:all]
|
169
|
+
UI.important 'Option -p | --packages not available for Linux' if options[:packages]
|
170
|
+
downloader = Downloader::LinuxDownloader
|
171
|
+
files << ["Unity #{version}", downloader.local_file(version), {}]
|
172
|
+
else
|
173
|
+
downloader = Downloader::MacDownloader if os == :mac
|
174
|
+
downloader = Downloader::WindowsDownloader if os == :win
|
175
|
+
if options[:all]
|
176
|
+
files = downloader.all_local_files(version)
|
177
|
+
else
|
178
|
+
packages.each do |package|
|
179
|
+
result = downloader.local_file(package, version)
|
180
|
+
files << [package, result[0], result[1]] unless result.nil?
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
files.each do |name, file, info|
|
186
|
+
UI.verbose "Installing #{name}#{info['mandatory'] ? ' (mandatory package)' : ''}, with file #{file}"
|
187
|
+
Installer.install_module(file, version, installation_path: options[:installation_path], info: info)
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
def run(options: {}, run_args: [])
|
192
|
+
version = options[:unity_version]
|
193
|
+
|
194
|
+
runner = Runner.new
|
195
|
+
pp = runner.find_projectpath_in_args(run_args)
|
196
|
+
pp = Dir.pwd unless pp
|
197
|
+
up = UnityProject.new(pp)
|
198
|
+
|
199
|
+
unless version # fall back in project default if we are on a Unity project
|
200
|
+
version = up.editor_version if up.exist?
|
201
|
+
unless version
|
202
|
+
UI.user_error!('Not sure which version of Unity to run. Are you in a project?')
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
run_args = ['-projectpath', up.path] if run_args.empty? && up.exist?
|
207
|
+
|
208
|
+
# we could
|
209
|
+
# * support matching 5.3.6p3 if passed 5.3.6
|
210
|
+
unity = Installer.create.installed.find { |u| u.version == version }
|
211
|
+
UI.user_error! "Unity version '#{version}' not found" unless unity
|
212
|
+
runner.run(unity, run_args, raw_logs: options[:raw_logs])
|
213
|
+
end
|
214
|
+
|
215
|
+
def credentials_actions
|
216
|
+
%w(add remove check)
|
217
|
+
end
|
218
|
+
|
219
|
+
def credentials(args: [], options: {})
|
220
|
+
action = args[0]
|
221
|
+
raise "Please specify an action to perform, one of #{credentials_actions.join(',')}" unless action
|
222
|
+
raise "Unknown action '#{action}'. Use one of #{credentials_actions.join(',')}" unless credentials_actions.include? action
|
223
|
+
if action == 'add'
|
224
|
+
U3dCore::Globals.use_keychain = true
|
225
|
+
# credentials = U3dCore::Credentials.new(user: ENV['USER'])
|
226
|
+
# credentials.login # ask password
|
227
|
+
UI.error 'Invalid credentials' unless U3dCore::CommandExecutor.has_admin_privileges?
|
228
|
+
elsif action == 'remove'
|
229
|
+
U3dCore::Globals.use_keychain = true
|
230
|
+
U3dCore::Credentials.new(user: ENV['USER']).forget_credentials(force: true)
|
231
|
+
else
|
232
|
+
U3dCore::Globals.use_keychain = true
|
233
|
+
credentials = U3dCore::Credentials.new(user: ENV['USER'])
|
234
|
+
U3dCore::Globals.with_do_not_login(true) do
|
235
|
+
if credentials.password.to_s.empty?
|
236
|
+
UI.message "No credentials stored"
|
237
|
+
else
|
238
|
+
if U3dCore::CommandExecutor.has_admin_privileges?
|
239
|
+
UI.success "Stored credentials are valid"
|
240
|
+
else
|
241
|
+
UI.error "Stored credentials are not valid"
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
# FIXME: return value
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
def local_analyze(args: [])
|
250
|
+
raise ArgumentError, 'No files given' if args.empty?
|
251
|
+
raise ArgumentError, "File #{args[0]} does not exist" unless File.exist? args[0]
|
252
|
+
|
253
|
+
analyzer = LogAnalyzer.new
|
254
|
+
File.open(args[0], 'r') do |f|
|
255
|
+
f.readlines.each { |l| analyzer.parse_line l }
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
def release_levels
|
260
|
+
[:stable, :beta, :patch]
|
261
|
+
end
|
262
|
+
|
263
|
+
def release_letter_mapping
|
264
|
+
{
|
265
|
+
latest: 'f',
|
266
|
+
latest_stable: 'f',
|
267
|
+
latest_beta: 'b',
|
268
|
+
latest_patch: 'p'
|
269
|
+
}
|
270
|
+
end
|
271
|
+
|
272
|
+
private
|
273
|
+
|
274
|
+
def interpret_latest(version, versions)
|
275
|
+
return version unless release_letter_mapping.keys.include? version.to_sym
|
276
|
+
|
277
|
+
letter = release_letter_mapping[version.to_sym]
|
278
|
+
|
279
|
+
iversion = versions.keys.map { |k| UnityVersionComparator.new(k) }
|
280
|
+
.sort
|
281
|
+
.reverse
|
282
|
+
.find { |c| c.version.parts[3] == letter }
|
283
|
+
.version.to_s
|
284
|
+
UI.message "Version '#{version}' is #{iversion}."
|
285
|
+
iversion
|
286
|
+
end
|
287
|
+
|
288
|
+
def packages_with_unity_first(options)
|
289
|
+
temp = options[:packages] || ['Unity']
|
290
|
+
temp.insert(0, 'Unity') if temp.delete('Unity')
|
291
|
+
temp
|
292
|
+
end
|
293
|
+
|
294
|
+
def check_unity_presence(version: nil)
|
295
|
+
installed = Installer.create.installed
|
296
|
+
unity = installed.find { |u| u.version == version }
|
297
|
+
if unity.nil?
|
298
|
+
UI.error "Version #{version} of Unity is not installed yet. Please install it first before installing any other module"
|
299
|
+
else
|
300
|
+
UI.verbose "Unity #{version} is installed at #{unity.path}"
|
301
|
+
return unity
|
302
|
+
end
|
303
|
+
nil
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
## --- BEGIN LICENSE BLOCK ---
|
2
|
+
# Copyright (c) 2016-present WeWantToKnow AS
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
9
|
+
# furnished to do so, subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
12
|
+
# copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
20
|
+
# SOFTWARE.
|
21
|
+
## --- END LICENSE BLOCK ---
|
22
|
+
|
23
|
+
require 'commander'
|
24
|
+
require 'u3d_core'
|
25
|
+
require 'u3d/commands'
|
26
|
+
|
27
|
+
HighLine.track_eof = false
|
28
|
+
|
29
|
+
module U3d
|
30
|
+
# CLI using commander gem for u3d
|
31
|
+
class CommandsGenerator
|
32
|
+
include Commander::Methods
|
33
|
+
UI = U3dCore::UI
|
34
|
+
|
35
|
+
def self.start
|
36
|
+
new.run
|
37
|
+
end
|
38
|
+
|
39
|
+
def extract_run_args(args = ARGV)
|
40
|
+
both_args = [[], []]
|
41
|
+
idx = 0
|
42
|
+
args.each do |arg|
|
43
|
+
if arg == '--'
|
44
|
+
idx = 1
|
45
|
+
next
|
46
|
+
end
|
47
|
+
both_args[idx] << arg
|
48
|
+
end
|
49
|
+
args.replace both_args[0]
|
50
|
+
both_args[1]
|
51
|
+
end
|
52
|
+
|
53
|
+
def convert_options(options)
|
54
|
+
o = options.__hash__.dup
|
55
|
+
o.delete(:verbose)
|
56
|
+
o
|
57
|
+
end
|
58
|
+
|
59
|
+
def run
|
60
|
+
program :version, U3d::VERSION
|
61
|
+
program :description, U3d::DESCRIPTION
|
62
|
+
program :help, 'Authors', 'Jerome Lacoste <jerome@wewanttoknow.com>, Paul Niezborala <p.niezborala@wewanttoknow.com>'
|
63
|
+
program :help, 'A word on Unity versions', U3d::UNITY_VERSIONS_NOTE
|
64
|
+
|
65
|
+
global_option('--verbose') { U3dCore::Globals.verbose = true }
|
66
|
+
|
67
|
+
command :run do |c|
|
68
|
+
# Intended for backward compatibilty purposes for run command
|
69
|
+
# Meant to fetch options after '--' unknown by CommandsGenerator
|
70
|
+
run_args = extract_run_args
|
71
|
+
|
72
|
+
c.syntax = 'u3d run [-u | --unity_version <version>] [-r | --raw_logs] [ -- <run_args>]'
|
73
|
+
c.description = 'Run unity, and parses its output through u3d\'s log prettifier'
|
74
|
+
c.option '-u', '--unity_version STRING', String, 'Version of Unity to run with'
|
75
|
+
c.option '-r', '--raw_logs', 'Raw Unity output, not filtered by u3d\'s log prettifier'
|
76
|
+
c.action do |args, options|
|
77
|
+
UI.user_error! "Run doesn't take arguments. Did you forget '--' or did you mistake your command? (#{args})" if args.count > 0
|
78
|
+
U3dCore::Globals.log_timestamps = true
|
79
|
+
Commands.run(options: convert_options(options), run_args: run_args)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
command :list do |c|
|
84
|
+
c.syntax = 'u3d list [-p | --packages]'
|
85
|
+
c.option '-p', '--packages', 'Lists installed packages as well'
|
86
|
+
c.example 'List currently installed Unity3d versions, as well as installed packages', 'u3d list -p'
|
87
|
+
c.description = 'List installed version of Unity3d'
|
88
|
+
c.action do |_args, options|
|
89
|
+
Commands.list_installed(options: convert_options(options))
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
command :available do |c|
|
94
|
+
oses = U3dCore::Helper.operating_systems
|
95
|
+
c.syntax = 'u3d available [-r | --release_level <level>] [-o | --operating_system <OS>] [-u | --unity_version <version>] [-p | --packages] [-f | --force]'
|
96
|
+
levels = Commands.release_levels
|
97
|
+
c.option '-f', '--force', 'Force refresh list of available versions'
|
98
|
+
c.option '-r', '--release_level STRING', String, "Checks for availability on specific release level [#{levels.join(',')}]"
|
99
|
+
c.option '-o', '--operating_system STRING', String, "Checks for availability on specific OS [#{oses.join(', ')}]"
|
100
|
+
c.option '-u', '--unity_version STRING', String, 'Checks if specified version is available'
|
101
|
+
c.option '-p', '--packages', 'Lists available packages as well'
|
102
|
+
c.example 'List all versions available, forcing a refresh of the available packages from Unity servers', 'u3d available -f'
|
103
|
+
c.example 'List stable versions available', 'u3d available -r stable -p'
|
104
|
+
c.example 'List all versions available for Linux platform', 'u3d available -o linux'
|
105
|
+
c.example 'List packages available for Unity version 5.6.0f3', 'u3d available -u 5.6.0f3 -p'
|
106
|
+
c.description = 'List download-ready versions of Unity3d'
|
107
|
+
c.action do |_args, options|
|
108
|
+
options.default packages: false
|
109
|
+
Commands.list_available(options: convert_options(options))
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
command :install do |c|
|
114
|
+
c.syntax = 'u3d install <version> [ [-p | --packages <package> ...] | [-a | --all] ] [ [-n | --no_install] [-i | --installation_path <path>] ]'
|
115
|
+
c.description = "Download (and install) Unity3D packages."
|
116
|
+
c.option '-p', '--packages PACKAGES', Array, 'Specifies which packages to download. Overriden by --all'
|
117
|
+
c.option '-i', '--installation_path PATH', String, 'Specifies where package(s) will be installed. Overriden by --no_install'
|
118
|
+
c.option '-a', '--all', 'Download all available packages'
|
119
|
+
c.option '-n', '--no_install', 'No installation after download success'
|
120
|
+
c.option '-k', '--keychain', 'Gain privileges right through the keychain. [OSX only]'
|
121
|
+
c.example 'Download and install Unity, its Documentation and the Android build support and install them for version 5.1.2f1', 'u3d install 5.1.2f1 -p Unity,Documentation,Android'
|
122
|
+
c.example "The 'version' argument can be a specific version number, such as 5.6.1f1, or an alias in [#{Commands.release_letter_mapping.keys.join(',')}]", 'u3d install latest'
|
123
|
+
c.action do |args, options|
|
124
|
+
options.default all: false
|
125
|
+
options.default no_install: false
|
126
|
+
Commands.download(args: args, options: convert_options(options))
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
command :local_install do |c|
|
131
|
+
c.syntax = 'u3d local_install <version> [ [-p | --packages <package> ...] | [-a | --all] ] [-i | --installation_path <path>]'
|
132
|
+
c.description = 'Install downloaded version of unity'
|
133
|
+
c.option '-p', '--packages PACKAGES', Array, 'Specifies which packages to install. Overriden by --all'
|
134
|
+
c.option '-i', '--installation_path PATH', String, 'Specifies where package(s) will be installed.'
|
135
|
+
c.option '-a', '--all', 'Install all downloaded packages'
|
136
|
+
c.option '-k', '--keychain', 'Gain privileges right through the keychain. [OSX only]'
|
137
|
+
c.action do |args, options|
|
138
|
+
Commands.local_install(args: args, options: convert_options(options))
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
command :credentials do |c|
|
143
|
+
c.syntax = "u3d credentials <#{Commands.credentials_actions.join(' | ')}>"
|
144
|
+
c.description = 'Manages keychain credentials so u3d remembers them. [OSX only]'
|
145
|
+
c.action do |args, options|
|
146
|
+
Commands.credentials(args: args, options: convert_options(options))
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
command :prettify do |c|
|
151
|
+
c.syntax = 'u3d prettify <logfile>'
|
152
|
+
c.description = 'Prettify a saved logfile'
|
153
|
+
c.action do |args, _options|
|
154
|
+
Commands.local_analyze(args: args)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
default_command :run
|
159
|
+
|
160
|
+
run!
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|