atlassian_plugin_installer 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/README.md +1 -0
- data/bin/atlassian_plugin_installer +31 -6
- data/lib/atlassian_plugin_installer.rb +1 -3
- data/lib/atlassian_plugin_installer/version.rb +1 -1
- data/lib/marketplace_accessor.rb +73 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b07b132bbd8fc58db14b6f41eb0b5b766cd1445
|
4
|
+
data.tar.gz: fda0c0d47c79e8fb799e61f05124eca70356a6f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30c8a4670edab8993e805cd5fd91eaf6d393fe56927ebfb66036bffc13d6f16131922a1fa6563af024c01ee8ce12d9f289ca7cdd00f39f2bf022446da7a0618c
|
7
|
+
data.tar.gz: f8d1c767b274d573d7b562f44e63d7d582a57882a9c665962ed62b8a9532fb3f95be7d35c853ee5f232c3d5fd45a334a852ffb0bac2558ac5a6b6a9fa63d8de5
|
data/.travis.yml
CHANGED
@@ -12,7 +12,7 @@ rvm:
|
|
12
12
|
deploy:
|
13
13
|
provider: rubygems
|
14
14
|
api_key:
|
15
|
-
secure:
|
15
|
+
secure: JqaLIYBqJe7v3HOPxrtlGFf+2+crDHQ4CgpCeWJOGKbdwmg13spz7eEsVaH06IQ30cEbvxIw8mKigBK+oMMRaSlXQIHAowVOHAPTtJ7OItRb2Yvuh4MshV4MScnPHfoxs++6fnY0RF9JKovlss6Ybs6fRMZE1c+/pOl1h5lZ6oX+8VjC3DYGHHpk8ToKogQkipZsdY9uvamvFrgirNQGXEZb831xFpUgRWTWASgBVHcGMUI9Hj3g0gh6S8eULf86aB3/F36XrjkEM8l4W8W3Ux8ERg2q1DZtg7X5s8MvaG2AhGLdrTrAtJ6UILDSQAps7qppzHU3LM5rHMV/8rscsCDUCHbLkODsHVvT2nnBhBDQBpnKJ/FxbEQYckLdF4yhia97uE+69PoR4sZ8aTLD31cfo2FuCBO0STISuzxv03+t/AXC1ntFuVlHLxdZZm3NeJPXNUxowD1N3E/P3jtc9Q/RffKIw0oTbhHyzvkYUhhU0r8Eztu/sjMW23rzcLACWZa+Hv2FDRzWCcSgK1Ad6duxo5XBhLN6glaQ0w6YqNZ0xva3jMq2ILoiSQFeu5x/H9X6Xmt+KpF06gJ59kGXBJfESxxCeT6HA8ovD9xXUN8ENbNGk8nvoqh2anTHvYPvoMoDbtOztmqhUeyOLzB1ou4Y4SsLB6vBdd378uEjSgw=
|
16
16
|
gem: atlassian_plugin_installer
|
17
17
|
on:
|
18
18
|
tags: true
|
data/README.md
CHANGED
@@ -14,6 +14,7 @@ atlassian_plugin_installer admin_username admin_password application_url plugin_
|
|
14
14
|
* marketplace_username = "mbrehovsky@adaptavist.com"
|
15
15
|
* marketplace_password = "super_secret_password"
|
16
16
|
* # timebomb license
|
17
|
+
* application_version = "7.2.7"
|
17
18
|
|
18
19
|
license = "AAABCA0ODAoPeNpdj01PwkAURffzKyZxZ1IyUzARkllQ24gRaQMtGnaP8VEmtjPNfFT59yJVFyzfu
|
19
20
|
bkn796Ux0Bz6SmbUM5nbDzj97RISxozHpMUnbSq88poUaLztFEStUN6MJZ2TaiVpu/YY2M6tI6sQ
|
@@ -10,20 +10,45 @@ plugin_version = ARGV[4]
|
|
10
10
|
marketplace_username = ARGV[5]
|
11
11
|
marketplace_password = ARGV[6] == "" ? ENV['MARKETPLACE_PASS'] : ARGV[6]
|
12
12
|
license = ARGV[7]
|
13
|
+
application_version = ARGV[8]
|
13
14
|
|
14
|
-
if !(admin_username and admin_password and application_url and plugin_key and plugin_version and marketplace_username and marketplace_password)
|
15
|
-
puts "Usage: atlassian_plugin_installer admin_username admin_password application_url plugin_key plugin_version marketplace_username marketplace_password"
|
15
|
+
if !(admin_username and admin_password and application_url and plugin_key and (plugin_version or application_version) and marketplace_username and marketplace_password)
|
16
|
+
puts "Usage: atlassian_plugin_installer admin_username admin_password application_url plugin_key plugin_version marketplace_username marketplace_password <license> <application_version>"
|
17
|
+
puts "Admin pass can be passed as ADMIN_PASS, marketplace access password as MARKETPLACE_PASS environment variable."
|
16
18
|
exit
|
17
19
|
end
|
18
20
|
|
19
21
|
# retrieve build number for plugin version
|
20
22
|
marketplace = AtlassianPluginInstaller::MarketplaceAccessor.new(marketplace_username, marketplace_password)
|
21
|
-
|
23
|
+
if (plugin_version and plugin_version != "")
|
24
|
+
plugin_build_number = marketplace.resolve_build_number_from_marketplace(plugin_key, plugin_version)
|
25
|
+
elsif (application_version and application_version != "")
|
26
|
+
plugin_build_number = marketplace.get_compatible_plugin_build_number_for_atlassian_product_version(plugin_key, application_version, "jira", "server")
|
27
|
+
else
|
28
|
+
puts "plugin_version or application_version must not be empty"
|
29
|
+
end
|
30
|
+
|
31
|
+
raise "Can not determine build number for #{plugin_key} with provided version #{plugin_version} and/or application version #{application_version}" unless plugin_build_number
|
22
32
|
|
23
33
|
installer = AtlassianPluginInstaller::AtlassianPluginInstaller.new(application_url, admin_username, admin_password)
|
24
|
-
#
|
25
|
-
token =
|
34
|
+
# wait for the application to start and fetch the token
|
35
|
+
token = nil
|
36
|
+
counter = 0
|
37
|
+
retries = 20
|
38
|
+
sleep_time = 10
|
39
|
+
while (!token and counter < retries) do
|
40
|
+
status, token = installer.fetch_application_access_token
|
41
|
+
if status != 200
|
42
|
+
puts "Token not found, status received: #{status}, retrying in #{sleep_time}, try #{counter}/#{retries}"
|
43
|
+
sleep(sleep_time)
|
44
|
+
end
|
45
|
+
counter=counter+1
|
46
|
+
end
|
26
47
|
|
48
|
+
unless token
|
49
|
+
puts "Can not fetch the token from #{application_url}. Is it running and are the creds ok?"
|
50
|
+
exit
|
51
|
+
end
|
27
52
|
# install plugin using the token
|
28
53
|
installer.install_plugin(plugin_key, plugin_build_number, token)
|
29
54
|
|
@@ -31,6 +56,6 @@ unless (installer.installation_completed(plugin_key))
|
|
31
56
|
raise "Installation failed, plugin not available."
|
32
57
|
end
|
33
58
|
|
34
|
-
if license
|
59
|
+
if license and license != ""
|
35
60
|
installer.install_license(plugin_key, license)
|
36
61
|
end
|
@@ -21,9 +21,7 @@ module AtlassianPluginInstaller
|
|
21
21
|
request.initialize_http_header({"Accept" => "application/vnd.atl.plugins.installed+json"})
|
22
22
|
request.basic_auth(@admin_username, @admin_password)
|
23
23
|
response = http.request(request)
|
24
|
-
|
25
|
-
raise "Can not retrieve token from #{@application_url} with #{@admin_username}" unless token
|
26
|
-
token
|
24
|
+
return response.code, response['upm-token'] # parse access token
|
27
25
|
end
|
28
26
|
|
29
27
|
# Installs plugin
|
data/lib/marketplace_accessor.rb
CHANGED
@@ -15,20 +15,90 @@ module AtlassianPluginInstaller
|
|
15
15
|
|
16
16
|
def resolve_build_number_from_marketplace(plugin_key, plugin_version)
|
17
17
|
puts "Getting build_number from marketplace for #{plugin_key} and version #{plugin_version}"
|
18
|
+
details = get_plugin_details_for_version(plugin_key, plugin_version)
|
19
|
+
plugin_build_number = details['buildNumber']
|
20
|
+
raise "Can not find build number for plugin #{plugin_key} #{plugin_version}" unless plugin_build_number
|
21
|
+
plugin_build_number
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_plugin_details_for_version(plugin_key, plugin_version)
|
25
|
+
puts "Getting plugin details from marketplace for #{plugin_key} and version #{plugin_version}"
|
18
26
|
if plugin_version == "latest"
|
19
27
|
url = "#{MARKETPLACE_ADDONS_URL}/#{plugin_key}/versions/latest"
|
20
28
|
else
|
21
29
|
url = "#{MARKETPLACE_ADDONS_URL}/#{plugin_key}/versions/name/#{plugin_version}"
|
22
30
|
end
|
31
|
+
make_get_request(url)
|
32
|
+
end
|
33
|
+
|
34
|
+
# returns list of versions for plugin
|
35
|
+
def get_plugin_versions(plugin_key)
|
36
|
+
result = []
|
37
|
+
# https://marketplace.atlassian.com/rest/2/addons/com.onresolve.jira.groovy.groovyrunner/versions
|
38
|
+
url = "#{MARKETPLACE_ADDONS_URL}/#{plugin_key}/versions"
|
39
|
+
response = make_get_request(url)
|
40
|
+
if response['_embedded'] and response['_embedded']['versions']
|
41
|
+
response['_embedded']['versions'].each do |version|
|
42
|
+
result << version['name']
|
43
|
+
end
|
44
|
+
end
|
45
|
+
result
|
46
|
+
end
|
47
|
+
|
48
|
+
# Plugin details contains:
|
49
|
+
# "compatibilities": [
|
50
|
+
# {
|
51
|
+
# "application": "jira",
|
52
|
+
# "hosting": {
|
53
|
+
# "server": {
|
54
|
+
# "min": {
|
55
|
+
# "build": 64014,
|
56
|
+
# "version": "6.4"
|
57
|
+
# },
|
58
|
+
# "max": {
|
59
|
+
# "build": 64029,
|
60
|
+
# "version": "6.4.14"
|
61
|
+
# }
|
62
|
+
# }
|
63
|
+
# }
|
64
|
+
# }
|
65
|
+
# ]
|
66
|
+
def get_compatible_plugin_build_number_for_atlassian_product_version(plugin_key, product_version, product_name="jira", product_hosting="server")
|
67
|
+
puts "Seraching for compatible plugin version for plugin #{plugin_key} and product version #{product_version}"
|
68
|
+
required_version = Gem::Version.new(product_version)
|
69
|
+
get_plugin_versions(plugin_key).each do |version|
|
70
|
+
puts "Inspecting #{plugin_key} version #{version}"
|
71
|
+
version_details = get_plugin_details_for_version(plugin_key, version)
|
72
|
+
compatibilities = version_details['compatibilities']
|
73
|
+
if compatibilities
|
74
|
+
compatibilities.each do |comp|
|
75
|
+
if ( comp['application'] and comp['application'] == product_name and comp['hosting'] and comp['hosting'][product_hosting])
|
76
|
+
compatibility_with = comp['hosting'][product_hosting]
|
77
|
+
min_version = compatibility_with["min"]["version"]
|
78
|
+
max_version = compatibility_with["max"]["version"]
|
79
|
+
if (Gem::Version.new(max_version) >= required_version and
|
80
|
+
Gem::Version.new(min_version) <= required_version)
|
81
|
+
# add condition and dont break if searching for the highest
|
82
|
+
# if found return the buildNumber
|
83
|
+
return version_details['buildNumber']
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
nil
|
90
|
+
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
def make_get_request(url)
|
23
95
|
uri = URI(url)
|
24
96
|
http = Net::HTTP.new(uri.host, uri.port)
|
25
97
|
http.use_ssl = url.start_with? "https"
|
26
98
|
request = Net::HTTP::Get.new(uri.request_uri)
|
27
99
|
request.basic_auth(@marketplace_username, @marketplace_password)
|
28
100
|
response = http.request(request)
|
29
|
-
|
30
|
-
raise "Can not find build number for plugin #{plugin_key} #{plugin_version}" unless plugin_build_number
|
31
|
-
plugin_build_number
|
101
|
+
JSON.parse(response.body)
|
32
102
|
end
|
33
103
|
end
|
34
104
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atlassian_plugin_installer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Brehovsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -76,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
76
|
version: '0'
|
77
77
|
requirements: []
|
78
78
|
rubyforge_project:
|
79
|
-
rubygems_version: 2.
|
79
|
+
rubygems_version: 2.4.5
|
80
80
|
signing_key:
|
81
81
|
specification_version: 4
|
82
82
|
summary: Installs JIRA plugin using UPM
|