capistrano-jdk-installer 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in capistrano-jdk-installer.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Yamashita Yuu
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # capistrano-jdk-installer
2
+
3
+ a capistrano recipe to download and install JDK for your projects.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'capistrano-jdk-installer'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install capistrano-jdk-installer
18
+
19
+ ## Usage
20
+
21
+ This recipes will try to do following things during Capistrano `deploy:setup`.
22
+
23
+ 1. Download JDK information from [updates.jenkins-ci.org](http://updates.jenkins-ci.org/updates/hudson.tools.JDKInstaller.json)
24
+ 2. Download JDK archive
25
+ 3. Install JDK for your project remotely (default) and/or locally
26
+
27
+ To enable this recipe, add following in your `config/deploy.rb`.
28
+
29
+ # in "config/deploy.rb"
30
+ require 'capistrano-jdk-installer'
31
+ set(:java_version_name, "7u6")
32
+ set(:java_oracle_username, "foo@example.com") # your ID on oracle.com
33
+ set(:java_oracle_password, "setcret") # your password on oracle.com
34
+ set(:java_license_title, "Oracle Binary Code License Agreement for Java SE")
35
+ set(:java_accept_license, true)
36
+
37
+ Following options are available to manage your JDK installation.
38
+
39
+ * `:java_version_name` - preferred JDK version. this value must be defined in JSON response from `:java_installer_uri`.
40
+ * `:java_oracle_username` - your credential to be used to download JDK archive from oracle.com.
41
+ * `:java_oracle_password` - your credential to be used to download JDK archive from oracle.com.
42
+ * `:java_license_title` - the license title of JDK which you will accept.
43
+ * `:java_accept_license` - specify whether you accept the JDK license. `false` by default.
44
+ * `:java_setup_locally` - specify whether you want to setup JDK on local machine. `false` by default.
45
+ * `:java_setup_remotely` - specify whether you want to setup JDK on remote machines. `true` by default.
46
+ * `:java_installer_uri` - `http://updates.jenkins-ci.org/updates/hudson.tools.JDKInstaller.json` by default.
47
+ * `:java_installer_json_cache` - the cache file path of "hudson.tools.JDKINstaller.json".
48
+ * `:java_installer_json_expires` - the cache TTL. cache `86400` seconds by default.
49
+ * `:java_home` - the path to the `JAVA_HOME` on remote machines.
50
+ * `:java_home_local` - the path to the `JAVA_HOME` on local machine.
51
+ * `:java_cmd` - the `java` command on remote machines.
52
+ * `:java_cmd_local` - the `java` command on local machine.
53
+ * `:java_checksum_cmd` - use specified command to compare JDK archives. use `md5sum` by default.
54
+
55
+ ## Contributing
56
+
57
+ 1. Fork it
58
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
59
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
60
+ 4. Push to the branch (`git push origin my-new-feature`)
61
+ 5. Create new Pull Request
62
+
63
+ ## Author
64
+
65
+ - YAMASHITA Yuu (https://github.com/yyuu)
66
+ - Geisha Tokyo Entertainment Inc. (http://www.geishatokyo.com/)
67
+
68
+ ## License
69
+
70
+ MIT
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'capistrano-jdk-installer/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "capistrano-jdk-installer"
8
+ gem.version = Capistrano::JDKInstaller::VERSION
9
+ gem.authors = ["Yamashita Yuu"]
10
+ gem.email = ["yamashita@geishatokyo.com"]
11
+ gem.description = %q{a capistrano recipe to download and install JDK for your projects.}
12
+ gem.summary = %q{a capistrano recipe to download and install JDK for your projects.}
13
+ gem.homepage = "https://github.com/yyuu/capistrano-jdk-installer"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency('capistrano')
21
+ gem.add_dependency('json')
22
+ gem.add_dependency('net-sftp', '>= 2.0.0')
23
+ gem.add_dependency('mechanize', '>= 2.0.0')
24
+ end
@@ -0,0 +1,395 @@
1
+ require "capistrano-jdk-installer/version"
2
+ require 'capistrano/transfer'
3
+ require 'json'
4
+ require 'logger'
5
+ require 'mechanize'
6
+ require 'net/sftp'
7
+ require 'uri'
8
+
9
+ module Capistrano
10
+ module JDKInstaller
11
+ def download_archive(uri, archive)
12
+ if FileTest.exist?(archive)
13
+ logger.info("Found downloaded archive: #{archive}")
14
+ else
15
+ if java_release_license_title != java_license_title or !java_accept_license
16
+ abort("You must accept JDK license before downloading.")
17
+ end
18
+
19
+ logger.info("Download archive from #{uri}.")
20
+ unless dry_run
21
+ run_locally("mkdir -p #{File.dirname(archive)}")
22
+ page = java_mechanize_agent.get(uri)
23
+ 1.upto(16) { # to avoid infinity loop...
24
+ if page.uri.host == "login.oracle.com" # login.oracle.com doesn't return proper Content-Type
25
+ page = Mechanize::Page.new(page.uri, page.response, page.body, page.code, java_mechanize_agent) if page.is_a?(Mechanize::File)
26
+ form = page.form_with
27
+ form["ssousername"] = java_oracle_username
28
+ form["password"] = java_oracle_password
29
+ page = java_mechanize_agent.submit(form)
30
+ else
31
+ page.save(archive)
32
+ logger.info("Wrote #{page.body.size} bytes to #{archive}.")
33
+ break
34
+ end
35
+ }
36
+ end
37
+ end
38
+ end
39
+
40
+ def upload_archive(from, to, options={}, &block)
41
+ mode = options.delete(:mode)
42
+ execute_on_servers(options) { |servers|
43
+ targets = servers.map { |server| sessions[server] }
44
+ if dry_run
45
+ logger.debug "transfering: #{[:up, from, to, targets, options.merge(:logger => logger).inspect ] * ', '}"
46
+ else
47
+ stat = File.stat(from)
48
+ chdcksum_cmd = fetch(:java_checksum_cmd, 'md5sum')
49
+ checksum = run_locally("( cd #{File.dirname(from)} && #{checksum_cmd} #{File.basename(from)} )").strip
50
+ targets = targets.reject { |ssh|
51
+ begin
52
+ sftp = Net::SFTP::Session.new(ssh).connect!
53
+ remote_stat = sftp.stat!(to)
54
+ if stat.size == remote_stat.size
55
+ remote_checksum = ssh.exec!("( cd #{File.dirname(to)} && #{checksum_cmd} #{File.basename(to)} )").strip
56
+ checksum == remote_checksum # skip upload if file size and checksum are same between local and remote
57
+ else
58
+ false
59
+ end
60
+ rescue Net::SFTP::StatusException
61
+ false # upload again if the remote file is absent
62
+ end
63
+ }
64
+ Capistrano::Transfer.process(:up, from, to, targets, options.merge(:logger => logger), &block)
65
+ end
66
+ }
67
+ if mode
68
+ mode = mode.is_a?(Numeric) ? mode.to_s(8) : mode.to_s
69
+ run("chmod #{mode} #{to}", options)
70
+ end
71
+ end
72
+
73
+ def extract_archive(archive, destination)
74
+ case archive
75
+ when /\.bin$/
76
+ "( cd #{File.dirname(destination)} && yes | sh #{archive} )"
77
+ when /\.dmg$/
78
+ if java_update_number
79
+ pkg = File.join("/Volumes",
80
+ "JDK %d Update %02d" % [java_major_version, java_update_number],
81
+ "JDK %d Update %02d.pkg" % [java_major_version, java_update_number])
82
+ else
83
+ pkg = File.join("/Volumes",
84
+ "JDK %d" % [java_major_version],
85
+ "JDK %d" % [java_major_version])
86
+ end
87
+ execute = []
88
+ execute << "open #{archive.dump}"
89
+ execute << "( while ! test -f #{pkg.dump}; do sleep 1; done )"
90
+ execute << "open #{pkg.dump}"
91
+ execute << "( while ! test -d #{destination.dump}; do sleep 1; done )"
92
+ execute.join(' && ')
93
+ when /\.(tar\.(gz|bz2)|tgz|tbz2)$/
94
+ "tar xf #{archive} -C #{File.dirname(destination)}"
95
+ when /\.zip$/
96
+ "( cd #{File.dirname(destination)} && unzip #{archive} )"
97
+ else
98
+ abort("Unknown archive type: #{archive}")
99
+ end
100
+ end
101
+
102
+ def self.extended(configuration)
103
+ configuration.load {
104
+ namespace(:java) {
105
+ ## JDK installation path settings
106
+ _cset(:java_tools_path) {
107
+ File.join(shared_path, 'tools', 'java')
108
+ }
109
+ _cset(:java_tools_path_local) {
110
+ File.join(File.expand_path('.'), 'tools', 'java')
111
+ }
112
+ _cset(:java_home) {
113
+ case java_deployee_platform
114
+ when /Mac OS X/i
115
+ if java_update_number
116
+ File.join("/Library", "Java", "JavaVirtualMachines",
117
+ "jdk%s_%02d.jdk" % [java_inner_version, java_update_number],
118
+ "Contents", "Home")
119
+ else
120
+ File.join("/Library", "Java", "JavaVirtualMachines",
121
+ "jdk%s.jdk" % [java_inner_version],
122
+ "Contents", "Home")
123
+ end
124
+ else
125
+ if java_update_number
126
+ File.join(java_tools_path, "jdk%s_%02d" % [java_inner_version, java_update_number])
127
+ else
128
+ File.join(java_tools_path, "jdk%s" % [java_inner_version])
129
+ end
130
+ end
131
+ }
132
+ _cset(:java_home_local) {
133
+ case java_deployer_platform
134
+ when /Mac OS X/i
135
+ if java_update_number
136
+ File.join("/Library", "Java", "JavaVirtualMachines",
137
+ "jdk%s_%02d.jdk" % [java_inner_version, java_update_number],
138
+ "Contents", "Home")
139
+ else
140
+ File.join("/Library", "Java", "JavaVirtualMachines",
141
+ "jdk%s.jdk" % [java_inner_version],
142
+ "Contents", "Home")
143
+ end
144
+ else
145
+ if java_update_number
146
+ File.join(java_tools_path_local, "jdk%s_%02d" % [java_inner_version, java_update_number])
147
+ else
148
+ File.join(java_tools_path_local, "jdk%s" % [java_inner_version])
149
+ end
150
+ end
151
+ }
152
+ _cset(:java_bin) { File.join(java_home, 'bin', 'java') }
153
+ _cset(:java_bin_local) { File.join(java_home_local, 'bin', 'java') }
154
+ _cset(:java_cmd) { "env JAVA_HOME=#{java_home} #{java_bin}" }
155
+ _cset(:java_cmd_local) { "env JAVA_HOME=#{java_home_local} #{java_bin_local}" }
156
+
157
+ ## JDK version settings
158
+ _cset(:java_version_name) {
159
+ abort('You must specify JDK version explicitly.')
160
+ }
161
+ _cset(:java_version_info) {
162
+ case java_version_name
163
+ when /^(1\.4\.(\d+))(?:_([0-9]+))?$/ then [ $1, '1.4', $2, $3 ]
164
+ when /^(1\.5\.(\d+))(?:_([0-9]+))?$/ then [ $1, '5', $2, $3 ]
165
+ when /^(\d+)(?:u(\d+))?$/ then [ "1.#{$1}.0", $1, nil, $2 ]
166
+ else
167
+ abort("Could not parse JDK version name: #{java_version_name}")
168
+ end
169
+ }
170
+ _cset(:java_inner_version) { java_version_info[0] } # e.g. "1.7.0"
171
+ _cset(:java_major_version) { java_version_info[1] } # e.g. "7"
172
+ _cset(:java_minor_version) { java_version_info[2] } # e.g. nil
173
+ _cset(:java_update_number) { java_version_info[3] } # e.g. "6"
174
+ _cset(:java_version) {
175
+ "JDK #{java_major_version}"
176
+ }
177
+ _cset(:java_release) {
178
+ case java_major_version
179
+ when '1.4'
180
+ if java_update_number
181
+ "Java SE Development Kit #{java_inner_version.gsub('.', '_')}_#{java_update_number}"
182
+ else
183
+ "Java SE Development Kit #{java_inner_version.gsub('.', '_')}"
184
+ end
185
+ when '5'
186
+ if java_update_number
187
+ "Java SE Development Kit #{java_major_version}.#{java_minor_version} Update #{java_update_number}"
188
+ else
189
+ "Java SE Development Kit #{java_major_version}.#{java_minor_version}"
190
+ end
191
+ when '6', '7'
192
+ if java_update_number
193
+ "Java SE Development Kit #{java_major_version}u#{java_update_number}"
194
+ else
195
+ "Java SE Development Kit #{java_major_version}"
196
+ end
197
+ else
198
+ abort("Unknown JDK version: #{java_major_version}")
199
+ end
200
+ }
201
+ def java_platform(ostype, arch)
202
+ case ostype
203
+ when /^Darwin$/i
204
+ case arch
205
+ when /^i[3-7]86$/i, /^x86_64$/i
206
+ 'Mac OS X x64'
207
+ else
208
+ "Mac OS X #{arch}"
209
+ end
210
+ when /^Linux$/i
211
+ case arch
212
+ when /^i[3-7]86$/i
213
+ 'Linux x86'
214
+ when /^x86_64$/i
215
+ 'Linux x64'
216
+ else
217
+ "Linux #{arch}"
218
+ end
219
+ when /^Solaris$/i
220
+ case arch
221
+ when /^sparc$/i
222
+ "Solaris SPARC"
223
+ when /^sparcv9$/i
224
+ "Solaris SPARC 64-bit"
225
+ when /^i[3-7]86$/i
226
+ "Solaris x86"
227
+ when /^x86_64$/i
228
+ "Solaris x64"
229
+ else
230
+ "Solaris #{arch}"
231
+ end
232
+ end
233
+ end
234
+
235
+ ## hudson.tools.JDKInstaller.json
236
+ _cset(:java_mechanize_agent) {
237
+ Mechanize.log = ::Logger.new(STDERR)
238
+ Mechanize.log.level = ::Logger::INFO
239
+ agent = Mechanize.new { |agent|
240
+ agent.user_agent = 'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)'
241
+ agent.cookie_jar.add!(Mechanize::Cookie.new('gpw_e24', '.', :domain => 'oracle.com', :path => '/', :secure => false, :for_domain => true))
242
+ }
243
+ agent.ssl_version = :TLSv1
244
+ agent
245
+ }
246
+ _cset(:java_installer_uri, "http://updates.jenkins-ci.org/updates/hudson.tools.JDKInstaller.json")
247
+ _cset(:java_installer_json_cache) {
248
+ File.join(java_tools_path_local, File.basename(URI.parse(java_installer_uri).path))
249
+ }
250
+ _cset(:java_installer_json_expires, 86400)
251
+ _cset(:java_installer_json) {
252
+ if File.file?(java_installer_json_cache)
253
+ refresh = File.mtime(java_installer_json_cache) + java_installer_json_expires < Time.now
254
+ else
255
+ refresh = true
256
+ end
257
+ if refresh
258
+ execute = []
259
+ execute << "mkdir -p #{File.dirname(java_installer_json_cache)}"
260
+ execute << "rm -f #{java_installer_json_cache}"
261
+ execute << "wget --no-verbose -O #{java_installer_json_cache} #{java_installer_uri}"
262
+ if dry_run
263
+ logger.debug(execute.join(' && '))
264
+ else
265
+ run_locally(execute.join(' && '))
266
+ end
267
+ end
268
+ json = File.read(java_installer_json_cache)
269
+ json = json.sub(/\A[^{]*/, '').sub(/[^}]*\z/, '') # remove leading & trailing JS code from response
270
+ JSON.load(json)
271
+ }
272
+ _cset(:java_version_data) {
273
+ version = java_installer_json['version']
274
+ abort("Unknown JSON format version: #{version}") if version != 2
275
+ regex = Regexp.new(Regexp.quote(java_version), Regexp::IGNORECASE)
276
+ data = java_installer_json['data']
277
+ data.find { |datum| regex === datum['name'].strip }
278
+ }
279
+ _cset(:java_release_data) {
280
+ regex = Regexp.new(Regexp.quote(java_release), Regexp::IGNORECASE)
281
+ releases = java_version_data['releases']
282
+ releases.find { |release| regex === release['name'].strip or regex === release['title'].strip }
283
+ }
284
+ _cset(:java_release_license_title) {
285
+ java_release_data['lictitle']
286
+ }
287
+ def java_platform_data(regex)
288
+ files = java_release_data['files']
289
+ data = files.find { |data|
290
+ regex === data['title']
291
+ }
292
+ abort("Not supported on specified JDK release: #{regex.inspect}") unless data
293
+ data
294
+ end
295
+
296
+ ## settings for local machine
297
+ _cset(:java_deployer_platform) { java_platform(`uname -s`.strip, `uname -m`.strip) }
298
+ _cset(:java_deployer_archive_uri) {
299
+ regex = Regexp.new(Regexp.quote(java_deployer_platform), Regexp::IGNORECASE)
300
+ data = java_platform_data(regex)
301
+ data['filepath']
302
+ }
303
+ _cset(:java_deployer_archive) {
304
+ File.join(java_tools_path, File.basename(URI.parse(java_deployer_archive_uri).path))
305
+ }
306
+ _cset(:java_deployer_archive_local) {
307
+ File.join(java_tools_path_local, File.basename(URI.parse(java_deployer_archive_uri).path))
308
+ }
309
+
310
+ ## settings for remote machines
311
+ _cset(:java_deployee_platform) { java_platform(capture('uname -s').strip, capture('uname -m').strip) }
312
+ _cset(:java_deployee_archive_uri) {
313
+ regex = Regexp.new(Regexp.quote(java_depoyee_platform), Regexp::IGNORECASE)
314
+ data = java_platform_data(regex)
315
+ data['filepath']
316
+ }
317
+ _cset(:java_deployee_archive) {
318
+ File.join(java_tools_path, File.basename(URI.parse(java_deployee_archive_uri).path))
319
+ }
320
+ _cset(:java_deployee_archive_local) {
321
+ File.join(java_tools_path_local, File.basename(URI.parse(java_deployee_archive_uri).path))
322
+ }
323
+
324
+ ## license settings
325
+ _cset(:java_accept_license, false)
326
+ _cset(:java_license_title, nil)
327
+ _cset(:java_oracle_username) { abort("java_oracle_username was not set") }
328
+ _cset(:java_oracle_password) { abort("java_oracle_password was not set") }
329
+
330
+ ## tasks
331
+ desc("Install java locally.")
332
+ task(:setup_locally, :except => { :no_release => true }) {
333
+ if fetch(:java_setup_locally, false)
334
+ transaction {
335
+ download_locally
336
+ install_locally
337
+ }
338
+ end
339
+ }
340
+ after 'deploy:setup', 'java:setup'
341
+
342
+ task(:download_locally, :except => { :no_release => true }) {
343
+ download_archive(java_deployer_archive_uri, java_deployer_archive_local)
344
+ }
345
+
346
+ task(:install_locally, :except => { :no_release => true}) {
347
+ command = (<<-EOS).gsub(/\s+/, ' ')
348
+ if ! test -d #{java_home_local}; then
349
+ #{extract_archive(java_deployer_archive_local, java_home_local)} &&
350
+ #{java_cmd_local} -version;
351
+ fi;
352
+ EOS
353
+ if dry_run
354
+ logger.debug(command)
355
+ else
356
+ run_locally(command)
357
+ end
358
+ }
359
+
360
+ desc("Install java.")
361
+ task(:setup, :roles => :app, :except => { :no_release => true }) {
362
+ if fetch(:java_setup_remotely, true)
363
+ transaction {
364
+ download
365
+ upload_archive(java_deployee_archive_local, java_deployee_archive)
366
+ install
367
+ }
368
+ end
369
+ }
370
+ after 'deploy:setup', 'java:setup'
371
+
372
+ task(:download, :roles => :app, :except => { :no_release => true }) {
373
+ download_archive(java_deployee_archive_uri, java_deployee_archive_local)
374
+ }
375
+
376
+ task(:install, :roles => :app, :except => { :no_release => true }) {
377
+ command = (<<-EOS).gsub(/\s+/, ' ')
378
+ if ! test -d #{java_home}; then
379
+ #{extract_archive(java_deployee_archive, java_home)} &&
380
+ #{java_cmd} -version;
381
+ fi;
382
+ EOS
383
+ run(command)
384
+ }
385
+ }
386
+ }
387
+ end
388
+ end
389
+ end
390
+
391
+ if Capistrano::Configuration.instance
392
+ Capistrano::Configuration.instance.extend(Capistrano::JDKInstaller)
393
+ end
394
+
395
+ # vim:set ft=ruby :
@@ -0,0 +1,5 @@
1
+ module Capistrano
2
+ module JDKInstaller
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-jdk-installer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Yamashita Yuu
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: capistrano
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: json
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: net-sftp
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 2.0.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.0.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: mechanize
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 2.0.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 2.0.0
78
+ description: a capistrano recipe to download and install JDK for your projects.
79
+ email:
80
+ - yamashita@geishatokyo.com
81
+ executables: []
82
+ extensions: []
83
+ extra_rdoc_files: []
84
+ files:
85
+ - .gitignore
86
+ - Gemfile
87
+ - LICENSE.txt
88
+ - README.md
89
+ - Rakefile
90
+ - capistrano-jdk-installer.gemspec
91
+ - lib/capistrano-jdk-installer.rb
92
+ - lib/capistrano-jdk-installer/version.rb
93
+ homepage: https://github.com/yyuu/capistrano-jdk-installer
94
+ licenses: []
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 1.8.23
114
+ signing_key:
115
+ specification_version: 3
116
+ summary: a capistrano recipe to download and install JDK for your projects.
117
+ test_files: []