capistrano-strategy-jenkins_artifact 0.2.0 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: de8c96f8b6ac33c572302110649f7f28e085388e
4
- data.tar.gz: c5b909e7c364ee9d6ebfbcd556fb5222b7a2203c
3
+ metadata.gz: 744ee059d6ce8d3548ae4f3c5e30db351bb83a60
4
+ data.tar.gz: 47d593834c80450a81ea66d806ec93a50094a22d
5
5
  SHA512:
6
- metadata.gz: cec6f8ee6002b11712cd81a021f66a18269354fba78d998bcce3315a0d25124825aca547106f0017e1927306f2c42e3f25a2ff3b5dc39095dbdd4739eebdc72d
7
- data.tar.gz: c6a77f098ed3f8c0e005c423aedbd8e35f02f1caed67f114333c291ed503d6fbbbf0a75b46a2c7dd7c3a9162f029272a072e4c4d5882bed945a347f301f17b3e
6
+ metadata.gz: eec41b4c0c6a02d098a35afb900a36a5c4331ec1edc1dd733d63fe09f330817bb6897b1d346f93969d9baa777b43beaf04155b7279d18c0ac3a3de4127d478db
7
+ data.tar.gz: ccb873421905baa73e518db02d672bf4d3cad9c12ee68f34c2af96349dbb4d8cafa1967f91dfab23f041d068b73a61c9440b0ba42d2457c0ecfd05e386de70b8
data/.travis.yml CHANGED
@@ -4,6 +4,11 @@ cache:
4
4
  - vendor/bundle
5
5
  language: ruby
6
6
  rvm:
7
- - 2.2.1
8
- before_install: gem install bundler -v 1.11.2
7
+ - 2.4.0
8
+ - 2.3.3
9
+ - 2.2.6
10
+ matrix:
11
+ allow_failures:
12
+ - rvm: 2.4.0 # Currently json.gem fails to build
13
+ before_install: gem install bundler
9
14
  script: bundle exec rake test
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  Gem::Specification.new do |spec|
3
3
  spec.name = "capistrano-strategy-jenkins_artifact"
4
- spec.version = "0.2.0"
4
+ spec.version = "0.2.1"
5
5
  spec.authors = ["aereal"]
6
6
  spec.email = ["aereal@aereal.org"]
7
7
 
@@ -20,4 +20,5 @@ Gem::Specification.new do |spec|
20
20
  spec.add_development_dependency "bundler", "~> 1.11"
21
21
  spec.add_development_dependency "rake", "~> 10.0"
22
22
  spec.add_development_dependency "minitest", "~> 5.0"
23
+ spec.add_development_dependency "webmock"
23
24
  end
@@ -4,16 +4,13 @@ require 'capistrano/recipes/deploy/strategy/base'
4
4
  require 'jenkins_api_client'
5
5
 
6
6
  class ::JenkinsApi::Client::Job
7
- def get_last_successful_build_number(job_name, branch)
7
+ def get_last_successful_build(job_name)
8
8
  @logger.info "Obtaining last successful build number of #{job_name}"
9
- res = @client.api_get_request("/job/#{path_encode(job_name)}/lastSuccessfulBuild")
10
- res['number']
9
+ @client.api_get_request("/job/#{path_encode(job_name)}/lastSuccessfulBuild")
11
10
  end
12
11
 
13
- def find_artifact_with_path(job_name, relative_path)
14
- current_build_number = get_current_build_number(job_name)
15
- job_path = "job/#{path_encode job_name}/"
16
- response_json = @client.api_get_request("/#{job_path}#{current_build_number}")
12
+ def find_last_successful_artifact_with_path(job_name, relative_path)
13
+ response_json = get_last_successful_build(job_name)
17
14
  if response_json['artifacts'].none? {|a| a['relativePath'] == relative_path }
18
15
  abort "Specified artifact not found in curent_build !!"
19
16
  end
@@ -21,9 +18,43 @@ class ::JenkinsApi::Client::Job
21
18
  artifact_path = URI.escape("#{jenkins_path}artifact/#{relative_path}")
22
19
  return artifact_path
23
20
  end
21
+
22
+ def find_last_successful_artifact(job_name)
23
+ last_successful_build = get_last_successful_build(job_name)
24
+ relative_build_path = last_successful_build['artifacts'][0]['relativePath']
25
+ jenkins_path = last_successful_build['url']
26
+ artifact_path = URI.escape("#{jenkins_path}artifact/#{relative_build_path}")
27
+ return artifact_path
28
+ end
24
29
  end
25
30
 
26
31
  class ::Capistrano::Deploy::Strategy::JenkinsArtifact < ::Capistrano::Deploy::Strategy::Base
32
+
33
+ def _guess_compression_type(filename)
34
+ case filename.downcase
35
+ when /\.tar\.gz$/, /\.tgz$/
36
+ :gzip
37
+ when /\.tar\.bz2$/, /\.tbz$/
38
+ :bzip2
39
+ when /\.tar\.xz$/, /\.txz$/
40
+ :xz
41
+ when /\.tar$/
42
+ :raw
43
+ else
44
+ :bzip2
45
+ end
46
+ end
47
+
48
+ def _compression_type_to_switch(type)
49
+ case type
50
+ when :gzip then 'z'
51
+ when :bzip2 then 'j'
52
+ when :xz then 'J'
53
+ when :raw then '' # raw tarball
54
+ else abort "Invalid compression type: #{type}"
55
+ end
56
+ end
57
+
27
58
  def deploy!
28
59
  dir_name = exists?(:is_multibranch_job) && fetch(:is_multibranch_job) ? fetch(:branch) : fetch(:build_project)
29
60
 
@@ -32,9 +63,9 @@ class ::Capistrano::Deploy::Strategy::JenkinsArtifact < ::Capistrano::Deploy::St
32
63
  set(:artifact_url) do
33
64
  uri = ''
34
65
  if exists?(:artifact_relative_path)
35
- uri = client.job.find_artifact_with_path(dir_name, fetch(:artifact_relative_path))
66
+ uri = client.job.find_last_successful_artifact_with_path(dir_name, fetch(:artifact_relative_path))
36
67
  else
37
- uri = client.job.find_artifact(dir_name)
68
+ uri = client.job.find_last_successful_artifact(dir_name)
38
69
  end
39
70
  abort "No artifact found for #{dir_name}" if uri.empty?
40
71
  URI.parse(uri).tap {|uri|
@@ -44,9 +75,14 @@ class ::Capistrano::Deploy::Strategy::JenkinsArtifact < ::Capistrano::Deploy::St
44
75
  }.to_s
45
76
  end
46
77
 
47
- build_num = client.job.get_last_successful_build_number(dir_name, "origin/#{fetch(:branch)}")
48
- timestamp = client.job.get_build_details(dir_name, build_num)['timestamp']
49
- deploy_at = Time.at(timestamp / 1000)
78
+ last_successful_build = client.job.get_last_successful_build(dir_name)
79
+ deploy_at = Time.at(last_successful_build['timestamp'] / 1000)
80
+
81
+ compression_type = fetch(
82
+ :artifact_compression_type,
83
+ _guess_compression_type(fetch(:artifact_url))
84
+ )
85
+ compression_switch = _compression_type_to_switch(compression_type)
50
86
 
51
87
  set(:release_name, deploy_at.strftime('%Y%m%d%H%M%S'))
52
88
  set(:release_path, "#{fetch(:releases_path)}/#{fetch(:release_name)}")
@@ -55,7 +91,7 @@ class ::Capistrano::Deploy::Strategy::JenkinsArtifact < ::Capistrano::Deploy::St
55
91
  run <<-SCRIPT
56
92
  mkdir -p #{fetch(:release_path)} && \
57
93
  (curl -s #{fetch(:artifact_url)} | \
58
- tar --strip-components=1 -C #{fetch(:release_path)} -jxf -)
94
+ tar --strip-components=1 -C #{fetch(:release_path)} -#{compression_switch}xf -)
59
95
  SCRIPT
60
96
  end
61
97
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-strategy-jenkins_artifact
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - aereal
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-30 00:00:00.000000000 Z
11
+ date: 2016-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jenkins_api_client
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '5.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: Capistrano 2 strategy that uses Jenkins' artifact as a distribution provider.
84
98
  email:
85
99
  - aereal@aereal.org
@@ -115,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
129
  version: '0'
116
130
  requirements: []
117
131
  rubyforge_project:
118
- rubygems_version: 2.5.1
132
+ rubygems_version: 2.5.2
119
133
  signing_key:
120
134
  specification_version: 4
121
135
  summary: Capistrano 2 strategy that uses Jenkins' artifact as a distribution provider.