u3d 1.0.13 → 1.0.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github_changelog_generator +1 -1
- data/.gitignore +1 -0
- data/CHANGELOG.md +15 -0
- data/Gemfile.lock +1 -1
- data/appveyor.yml +21 -0
- data/lib/u3d/commands.rb +2 -1
- data/lib/u3d/commands_generator.rb +4 -1
- data/lib/u3d/download_validator.rb +5 -0
- data/lib/u3d/downloader.rb +29 -31
- data/lib/u3d/installer.rb +10 -5
- data/lib/u3d/utils.rb +27 -4
- data/lib/u3d/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7da505bec2ad3c4609ec0afefe46329350425d04
|
4
|
+
data.tar.gz: 8c144e1dc9d9d8308cfa772cc8cf5c38515ff4e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d4e7520378fb4cad4ea952732c29c2146bd89dc8756d3fdd2f6ea8a3d67fc29970e8f51cccd367552037de3d588d8cff84116e260380d42df1fcb3f0fbcc5fe
|
7
|
+
data.tar.gz: 0cc3430fea638963bcd2ed641e2cd6a4690920f4283e8129fa12bc3c0b68d56cf0559893cb0b2052f269c0b043252f4a8ccf1f35aa9c04f3e1ed9c39cd7deb42
|
data/.github_changelog_generator
CHANGED
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## [v1.0.14](https://github.com/DragonBox/u3d/tree/v1.0.14) (2018-01-15)
|
4
|
+
[Full Changelog](https://github.com/DragonBox/u3d/compare/v1.0.13...v1.0.14)
|
5
|
+
|
6
|
+
**Implemented enhancements:**
|
7
|
+
|
8
|
+
- Support 2018.1.0b2 VisualStudio package installation [\#225](https://github.com/DragonBox/u3d/issues/225)
|
9
|
+
- u3d/install: improve messages [\#231](https://github.com/DragonBox/u3d/pull/231) ([niezbop](https://github.com/niezbop))
|
10
|
+
- u3d/install: add support for installing .msi packages on Windows [\#230](https://github.com/DragonBox/u3d/pull/230) ([niezbop](https://github.com/niezbop))
|
11
|
+
|
12
|
+
**Merged pull requests:**
|
13
|
+
|
14
|
+
- Appveyor support / Windows build automation [\#228](https://github.com/DragonBox/u3d/pull/228) ([lacostej](https://github.com/lacostej))
|
15
|
+
- u3d/install Unity 2018. Download works on Windows and Mac and Mac installs. Fixes \#225 [\#227](https://github.com/DragonBox/u3d/pull/227) ([lacostej](https://github.com/lacostej))
|
16
|
+
- u3d/install: allow to download from one platform while on another one [\#226](https://github.com/DragonBox/u3d/pull/226) ([lacostej](https://github.com/lacostej))
|
17
|
+
|
3
18
|
## [v1.0.13](https://github.com/DragonBox/u3d/tree/v1.0.13) (2018-01-09)
|
4
19
|
[Full Changelog](https://github.com/DragonBox/u3d/compare/v1.0.12...v1.0.13)
|
5
20
|
|
data/Gemfile.lock
CHANGED
data/appveyor.yml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# https://www.appveyor.com/docs/appveyor-yml/
|
2
|
+
|
3
|
+
version: "{build}"
|
4
|
+
|
5
|
+
init:
|
6
|
+
- git config --global core.autocrlf false
|
7
|
+
|
8
|
+
# cloning the repository happens here
|
9
|
+
|
10
|
+
install:
|
11
|
+
- set PATH=C:\Ruby24-x64\bin;%PATH%
|
12
|
+
- bundle install
|
13
|
+
|
14
|
+
environment:
|
15
|
+
LC_ALL: en_US.UTF-8
|
16
|
+
LANG: en_US.UTF-8
|
17
|
+
|
18
|
+
build: off
|
19
|
+
|
20
|
+
test_script:
|
21
|
+
- bundle exec rake
|
data/lib/u3d/commands.rb
CHANGED
@@ -103,7 +103,8 @@ module U3d
|
|
103
103
|
def install(args: [], options: {})
|
104
104
|
version = specified_or_current_project_version(args[0])
|
105
105
|
|
106
|
-
|
106
|
+
UI.user_error!("You cannot use the --operating_system and the --install options together") if options[:install] && options[:operating_system]
|
107
|
+
os = valid_os_or_current(options[:operating_system])
|
107
108
|
|
108
109
|
packages = packages_with_unity_first(os, options)
|
109
110
|
|
@@ -122,7 +122,8 @@ Fore more information about how the rules work, see https://github.com/DragonBox
|
|
122
122
|
end
|
123
123
|
|
124
124
|
command :install do |c|
|
125
|
-
|
125
|
+
oses = U3dCore::Helper.operating_systems
|
126
|
+
c.syntax = 'u3d install [<version>] [ [-p | --packages <package1>,<package2> ...] | [-o | --operating_system <OS>] [-a | --all] ] [--[no-]download] [ [--[no-]install] [-i | --installation_path <path>] ]'
|
126
127
|
c.summary = "Download (and/or) install Unity3D editor packages."
|
127
128
|
c.description = %(
|
128
129
|
#{c.summary}
|
@@ -139,10 +140,12 @@ E.g. U3D_DOWNLOAD_PATH=/some/path/you/want u3d install ...
|
|
139
140
|
c.option '--[no-]download', 'Perform or not downloading before installation. Downloads by default'
|
140
141
|
c.option '--[no-]install', 'Perform or not installation after downloading. Installs by default'
|
141
142
|
c.option '-p', '--packages PACKAGES', Array, 'Specifies which packages to download/install. Overriden by --all'
|
143
|
+
c.option '-o', '--operating_system STRING', String, "Downloads packages for specific OS [#{oses.join(', ')}]. Requires the --no-install option."
|
142
144
|
c.option '-a', '--all', 'Download all available packages. Overrides -p'
|
143
145
|
c.option '-i', '--installation_path PATH', String, 'Specifies where package(s) will be downloaded/installed. Conflicts with --no-install'
|
144
146
|
c.option '-k', '--keychain', 'Gain privileges right through the keychain. [OSX only]'
|
145
147
|
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'
|
148
|
+
c.example 'Download but do not install all Unity version 2018.1.0b2 packages for platform Windows (while e.g. on Mac)', 'u3d install 2018.1.0b2 -o win -a --no-install'
|
146
149
|
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(', ')}]. If not specified, u3d will download the unity version for the current project", 'u3d install latest'
|
147
150
|
c.example "The admin password can be passed through the U3D_PASSWORD environment variable.", 'U3D_PASSWORD=mysecret u3d install a_version'
|
148
151
|
c.example "On Mac, the admin password can be fetched from (and stored into) the keychain.", 'u3d install -k a_version'
|
@@ -66,6 +66,11 @@ module U3d
|
|
66
66
|
|
67
67
|
class WindowsValidator < DownloadValidator
|
68
68
|
def validate(package, file, definition)
|
69
|
+
# External packages have no md5 and a false size value
|
70
|
+
if definition[package]['size'] % 1000 && definition[package]['md5'].nil?
|
71
|
+
UI.verbose "File '#{definition[package]['title']}' seems external. Validation skipped"
|
72
|
+
return true
|
73
|
+
end
|
69
74
|
rounded_size = (File.size(file).to_f / 1024).floor
|
70
75
|
size_validation(expected: definition[package]['size'], actual: rounded_size) &&
|
71
76
|
hash_validation(expected: definition[package]['md5'], actual: Utils.hashfile(file))
|
data/lib/u3d/downloader.rb
CHANGED
@@ -31,7 +31,7 @@ module U3d
|
|
31
31
|
# Path to the directory for the package downloading
|
32
32
|
DOWNLOAD_PATH = "#{ENV['HOME']}/Downloads".freeze
|
33
33
|
# Regex to get the name of a package out of its file name
|
34
|
-
UNITY_MODULE_FILE_REGEX = %r{\/([\w\-_\.\+]+\.(?:pkg|exe|zip|sh|deb))}
|
34
|
+
UNITY_MODULE_FILE_REGEX = %r{\/([\w\-_\.\+]+\.(?:pkg|exe|zip|sh|deb|msi))[^\/]*$}
|
35
35
|
|
36
36
|
class << self
|
37
37
|
def download_directory
|
@@ -82,6 +82,7 @@ module U3d
|
|
82
82
|
private #-----------------------------------------------------------------
|
83
83
|
|
84
84
|
def setup_os(os)
|
85
|
+
# downloader = Downloader::StandardPackageDownloader.new
|
85
86
|
case os
|
86
87
|
when :linux
|
87
88
|
validator = LinuxValidator.new
|
@@ -99,8 +100,7 @@ module U3d
|
|
99
100
|
end
|
100
101
|
|
101
102
|
def get_package(downloader, validator, package, definition, files)
|
102
|
-
path = downloader.
|
103
|
-
url = downloader.url_for(package, definition)
|
103
|
+
path, url = downloader.destination_and_url_for(package, definition)
|
104
104
|
if File.file?(path)
|
105
105
|
UI.verbose "Installer file for #{package} seems to be present at #{path}"
|
106
106
|
if validator.validate(package, path, definition)
|
@@ -137,46 +137,44 @@ module U3d
|
|
137
137
|
end
|
138
138
|
end
|
139
139
|
|
140
|
-
class
|
140
|
+
class StandardPackageDownloader
|
141
|
+
# for backward compatibility
|
141
142
|
def destination_for(package, definition)
|
142
|
-
|
143
|
-
Utils.ensure_dir(dir)
|
144
|
-
file_name = UNITY_MODULE_FILE_REGEX.match(definition[package]['url'])[1]
|
145
|
-
|
146
|
-
File.expand_path(file_name, dir)
|
143
|
+
destination_and_url_for(package, definition)[0]
|
147
144
|
end
|
148
145
|
|
149
|
-
def
|
150
|
-
|
151
|
-
end
|
152
|
-
end
|
146
|
+
def destination_and_url_for(package, definition)
|
147
|
+
final_url = url_for(package, definition)
|
153
148
|
|
154
|
-
class LinuxDownloader
|
155
|
-
def destination_for(package, definition)
|
156
149
|
dir = File.join(Downloader.download_directory, definition.version)
|
157
150
|
Utils.ensure_dir(dir)
|
158
|
-
file_name = UNITY_MODULE_FILE_REGEX.match(
|
151
|
+
file_name = UNITY_MODULE_FILE_REGEX.match(final_url)[1]
|
159
152
|
|
160
|
-
File.expand_path(file_name, dir)
|
161
|
-
end
|
153
|
+
destination = File.expand_path(file_name, dir)
|
162
154
|
|
163
|
-
|
164
|
-
definition.url
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
class WindowsDownloader
|
169
|
-
def destination_for(package, definition)
|
170
|
-
dir = File.join(Downloader.download_directory, definition.version)
|
171
|
-
Utils.ensure_dir(dir)
|
172
|
-
file_name = UNITY_MODULE_FILE_REGEX.match(definition[package]['url'])[1]
|
173
|
-
|
174
|
-
File.expand_path(file_name, dir)
|
155
|
+
[destination, final_url]
|
175
156
|
end
|
176
157
|
|
177
158
|
def url_for(package, definition)
|
178
|
-
|
159
|
+
url = definition[package]['url']
|
160
|
+
if url
|
161
|
+
if url =~ /^http/
|
162
|
+
Utils.final_url(url)
|
163
|
+
else
|
164
|
+
definition.url + url
|
165
|
+
end
|
166
|
+
else
|
167
|
+
definition.url
|
168
|
+
end
|
179
169
|
end
|
180
170
|
end
|
171
|
+
|
172
|
+
# for backward compatibility
|
173
|
+
class MacDownloader < StandardPackageDownloader
|
174
|
+
end
|
175
|
+
class LinuxDownloader < StandardPackageDownloader
|
176
|
+
end
|
177
|
+
class WindowsDownloader < StandardPackageDownloader
|
178
|
+
end
|
181
179
|
end
|
182
180
|
end
|
data/lib/u3d/installer.rb
CHANGED
@@ -63,7 +63,8 @@ module U3d
|
|
63
63
|
def self.install_modules(files, version, installation_path: nil)
|
64
64
|
installer = Installer.create
|
65
65
|
files.each do |name, file, info|
|
66
|
-
UI.
|
66
|
+
UI.header "Installing #{info['title']} (#{name})"
|
67
|
+
UI.message 'Installing with ' + file
|
67
68
|
installer.install(file, version, installation_path: installation_path, info: info)
|
68
69
|
end
|
69
70
|
end
|
@@ -294,7 +295,7 @@ module U3d
|
|
294
295
|
|
295
296
|
def install(file_path, version, installation_path: nil, info: {})
|
296
297
|
extension = File.extname(file_path)
|
297
|
-
raise "Installation of #{extension} files is not supported on Windows"
|
298
|
+
raise "Installation of #{extension} files is not supported on Windows" unless %w[.exe .msi].include? extension
|
298
299
|
path = installation_path || File.join(DEFAULT_WINDOWS_INSTALL, format(UNITY_DIR, version: version))
|
299
300
|
install_exe(
|
300
301
|
file_path,
|
@@ -305,13 +306,17 @@ module U3d
|
|
305
306
|
|
306
307
|
def install_exe(file_path, installation_path: nil, info: {})
|
307
308
|
installation_path ||= DEFAULT_WINDOWS_INSTALL
|
308
|
-
final_path =
|
309
|
+
final_path = Utils.windows_path(installation_path)
|
309
310
|
Utils.ensure_dir(final_path)
|
310
311
|
begin
|
311
312
|
command = nil
|
312
313
|
if info['cmd']
|
313
314
|
command = info['cmd']
|
314
|
-
|
315
|
+
if /msiexec/ =~ command
|
316
|
+
command.sub!(/{FILENAME}/, '"' + Utils.windows_path(file_path) + '"')
|
317
|
+
else
|
318
|
+
command.sub!(/{FILENAME}/, file_path)
|
319
|
+
end
|
315
320
|
command.sub!(/{INSTDIR}/, final_path)
|
316
321
|
command.sub!(/{DOCDIR}/, final_path)
|
317
322
|
command.sub!(/{MODULEDIR}/, final_path)
|
@@ -320,7 +325,7 @@ module U3d
|
|
320
325
|
command ||= file_path.to_s
|
321
326
|
U3dCore::CommandExecutor.execute(command: command, admin: true)
|
322
327
|
rescue StandardError => e
|
323
|
-
UI.error "Failed to install
|
328
|
+
UI.error "Failed to install package at #{file_path}: #{e}"
|
324
329
|
else
|
325
330
|
UI.success "Successfully installed #{info['title']}"
|
326
331
|
end
|
data/lib/u3d/utils.rb
CHANGED
@@ -34,14 +34,27 @@ module U3d
|
|
34
34
|
UNITY_VERSION_REGEX = /(\d+)(?:\.(\d+)(?:\.(\d+))?)?(?:(\w)(?:(\d+))?)?/
|
35
35
|
|
36
36
|
class << self
|
37
|
+
def final_url(url, redirect_limit: 10)
|
38
|
+
follow_redirects(url, redirect_limit: redirect_limit, http_method: :head) do |request, _response|
|
39
|
+
request.uri.to_s
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
37
43
|
def get_ssl(url, redirect_limit: 10)
|
44
|
+
follow_redirects(url, redirect_limit: redirect_limit) do |_request, response|
|
45
|
+
response.body
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def follow_redirects(url, redirect_limit: 10, http_method: :get, &block)
|
38
50
|
raise 'Too many redirections' if redirect_limit.zero?
|
39
51
|
response = nil
|
40
52
|
request = nil
|
41
53
|
uri = URI(url)
|
42
54
|
begin
|
43
|
-
|
44
|
-
|
55
|
+
use_ssl = /^https/.match(url)
|
56
|
+
Net::HTTP.start(uri.host, uri.port, use_ssl: use_ssl) do |http|
|
57
|
+
request = http_request_class http_method, uri
|
45
58
|
response = http.request request
|
46
59
|
end
|
47
60
|
rescue OpenSSL::OpenSSLError => ssl_error
|
@@ -51,14 +64,20 @@ module U3d
|
|
51
64
|
|
52
65
|
case response
|
53
66
|
when Net::HTTPSuccess then
|
54
|
-
response
|
67
|
+
yield(request, response)
|
55
68
|
when Net::HTTPRedirection then
|
56
69
|
UI.verbose "Redirected to #{response['location']}"
|
57
|
-
|
70
|
+
follow_redirects(response['location'], redirect_limit: redirect_limit - 1, http_method: http_method, &block)
|
58
71
|
else raise "Request failed with status #{response.code}"
|
59
72
|
end
|
60
73
|
end
|
61
74
|
|
75
|
+
def http_request_class(method, uri)
|
76
|
+
return Net::HTTP::Get.new uri if method == :get
|
77
|
+
return Net::HTTP::Head.new uri if method == :head
|
78
|
+
raise "Unknown method #{method}"
|
79
|
+
end
|
80
|
+
|
62
81
|
# size a hint of the expected size
|
63
82
|
def download_file(path, url, size: nil)
|
64
83
|
File.open(path, 'wb') do |f|
|
@@ -173,6 +192,10 @@ module U3d
|
|
173
192
|
def pretty_filesize(filesize)
|
174
193
|
Filesize.from(filesize.round.to_s + ' B').pretty
|
175
194
|
end
|
195
|
+
|
196
|
+
def windows_path(path)
|
197
|
+
path.gsub(%r{\/(\d)}, '/\\\\\1').tr('/', '\\')
|
198
|
+
end
|
176
199
|
end
|
177
200
|
end
|
178
201
|
# rubocop:enable ModuleLength
|
data/lib/u3d/version.rb
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
## --- END LICENSE BLOCK ---
|
22
22
|
|
23
23
|
module U3d
|
24
|
-
VERSION = '1.0.
|
24
|
+
VERSION = '1.0.14'.freeze
|
25
25
|
DESCRIPTION = 'Provides numerous tools for installing, managing and running the Unity3D game engine from command line.'.freeze
|
26
26
|
UNITY_VERSIONS_NOTE = "Unity3d uses the following version formatting: 0.0.0x0. The \'x\' can takes different values:\n"\
|
27
27
|
"\t. 'f' are the main release candidates for Unity3d\n"\
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: u3d
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jerome Lacoste
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-01-
|
12
|
+
date: 2018-01-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: colored
|
@@ -269,6 +269,7 @@ files:
|
|
269
269
|
- LOG_RULES.md
|
270
270
|
- README.md
|
271
271
|
- Rakefile
|
272
|
+
- appveyor.yml
|
272
273
|
- build.sh
|
273
274
|
- config/log_rules.json
|
274
275
|
- docs/assets/ci_jenkins_ansi.png
|