dpl-packagecloud 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3dbfadaf69f47b1a112c1f8a1e2075230a731983
4
+ data.tar.gz: ab5fc041f604f6c4ba708508bf2ac292d0910e9c
5
+ SHA512:
6
+ metadata.gz: 0d6c97a5f84c2f53f0abe558a5e952b17bf01c6d051072384cc0bb6c2c09a6b8d541de3bbeb3899b8be27e8a1b241b2f2bb678d70f30885812d26fd6e48a97d6
7
+ data.tar.gz: dd75d1642b4c4bd4854b821289a8db804ba0f5e0215aeca6e4c16e89198be92135d7190b72df9a6f6a2681052759510964e952275ca8950008b784ab65bf0a27
@@ -0,0 +1,3 @@
1
+ require './gemspec_helper'
2
+
3
+ gemspec_for 'packagecloud', [['packagecloud-ruby', '1.0.5']]
@@ -0,0 +1,143 @@
1
+ require 'packagecloud'
2
+
3
+ module DPL
4
+ class Provider
5
+ class Packagecloud < Provider
6
+ def check_auth
7
+ setup_auth
8
+ begin
9
+ @client = ::Packagecloud::Client.new(@creds, "travis-ci")
10
+ rescue ::Packagecloud::UnauthenticatedException
11
+ error "Could not authenticate to https://packagecloud.io, please check credentials"
12
+ end
13
+ end
14
+
15
+ def needs_key?
16
+ false
17
+ end
18
+
19
+ def setup_auth
20
+ @username = option(:username)
21
+ @token = option(:token)
22
+ @repo = option(:repository)
23
+ @dist = option(:dist) if options[:dist]
24
+ @creds = ::Packagecloud::Credentials.new(@username, @token)
25
+ log "Logging into https://packagecloud.io with #{@username}:#{@token[-4..-1].rjust(20, '*')}"
26
+ end
27
+
28
+ def get_distro(query)
29
+ distro = nil
30
+ begin
31
+ distro = @client.find_distribution_id(query)
32
+ rescue ArgumentError => exception
33
+ error "Error: #{exception.message}"
34
+ end
35
+ if distro.nil?
36
+ error "Could not find distribution named #{query}"
37
+ end
38
+ distro
39
+ end
40
+
41
+ def is_supported_package?(filename)
42
+ ext = File.extname(filename).gsub!('.','')
43
+ ::Packagecloud::SUPPORTED_EXTENSIONS.include?(ext)
44
+ end
45
+
46
+ def dist_required?(filename)
47
+ ext = File.extname(filename).gsub!('.','')
48
+ if ext.nil?
49
+ error "filename: #{filename} has no extension!"
50
+ end
51
+ ["rpm", "deb", "dsc", "whl", "egg", "egg-info", "gz", "zip", "tar", "bz2", "z"].include?(ext.downcase)
52
+ end
53
+
54
+ def error_if_dist_required(filename)
55
+ if dist_required?(filename) && @dist.nil?
56
+ error "Distribution needed for rpm, deb, python, and dsc packages, example --dist='ubuntu/breezy'"
57
+ end
58
+ end
59
+
60
+ def is_source_package?(filename)
61
+ ext = File.extname(filename).gsub!('.','')
62
+ ext == 'dsc'
63
+ end
64
+
65
+ def get_source_files_for(orig_filename)
66
+ source_files = {}
67
+ glob_args = ["**/*"]
68
+ package = ::Packagecloud::Package.new(:file => orig_filename)
69
+ result = @client.package_contents(@repo, package, get_distro(@dist))
70
+ if result.succeeded
71
+ package_contents_files = result.response["files"].map { |x| x["filename"] }
72
+ Dir.chdir(options.fetch(:local_dir, Dir.pwd)) do
73
+ Dir.glob(*glob_args) do |filename|
74
+ unless File.directory?(filename)
75
+ basename = File.basename(filename)
76
+ if package_contents_files.include?(basename)
77
+ log "Found source fragment: #{basename} for #{orig_filename}"
78
+ source_files = source_files.merge({basename => open(filename)})
79
+ end
80
+ end
81
+ end
82
+ end
83
+ else
84
+ error "Error: #{result.response}"
85
+ end
86
+ source_files
87
+ end
88
+
89
+ def push_app
90
+ forced = options.fetch(:force, nil)
91
+ packages = []
92
+ glob_args = Array(options.fetch(:package_glob, '**/*'))
93
+ Dir.chdir(options.fetch(:local_dir, Dir.pwd)) do
94
+ Dir.glob(*glob_args) do |filename|
95
+ unless File.directory?(filename)
96
+ if is_supported_package?(filename)
97
+ log "Detected supported package: #{filename}"
98
+ error_if_dist_required(filename)
99
+ if is_source_package?(filename)
100
+ log "Processing source package: #{filename}"
101
+ source_files = get_source_files_for(filename)
102
+ packages << ::Packagecloud::Package.new(:file => filename, :source_files => source_files)
103
+ else
104
+ packages << ::Packagecloud::Package.new(:file => filename)
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+
111
+ packages.each do |package|
112
+ if forced
113
+ log "Deleting package: #{package.filename}"
114
+ distro, distro_release = @dist.split("/")
115
+ result = @client.delete_package(@repo, distro, distro_release, package.filename)
116
+ if result.succeeded
117
+ log "Successfully deleted #{package.filename} on #{@dist}"
118
+ else
119
+ error "Error #{result.response}"
120
+ end
121
+ end
122
+ log "Pushing package: #{package.filename}"
123
+ if dist_required?(package.filename)
124
+ result = @client.put_package(@repo, package, get_distro(@dist))
125
+ else
126
+ result = @client.put_package(@repo, package)
127
+ end
128
+
129
+ if result.succeeded
130
+ log "Successfully pushed #{package.filename} to #{@username}/#{@repo}"
131
+ else
132
+ error "Error #{result.response}"
133
+ end
134
+ end
135
+ if packages.empty?
136
+ error "Error: No supported packages found! Perhaps try skip_cleanup: true"
137
+ end
138
+ end
139
+
140
+ end
141
+
142
+ end
143
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+ require 'rubygems'
3
+ require 'dpl/provider/packagecloud'
4
+
5
+ describe DPL::Provider::Packagecloud do
6
+
7
+ subject :provider do
8
+ described_class.new(DummyContext.new, :username => 'joedamato', :repository => 'test_repo', :token => 'test_token')
9
+ end
10
+
11
+ describe "#setup_auth" do
12
+ it 'should get username and token' do
13
+ expect(provider).to receive(:log).with("Logging into https://packagecloud.io with joedamato:****************oken")
14
+ provider.setup_auth
15
+ end
16
+
17
+ it 'should require username' do
18
+ new_provider = described_class.new(DummyContext.new, {:token => 'test_token'})
19
+ expect{ new_provider.setup_auth }.to raise_error("missing username")
20
+ end
21
+
22
+ it 'should require token' do
23
+ new_provider = described_class.new(DummyContext.new, {:username => 'test_token'})
24
+ expect{ new_provider.setup_auth }.to raise_error("missing token")
25
+ end
26
+
27
+ it 'should require repository' do
28
+ new_provider = described_class.new(DummyContext.new, {:username => 'joedamato', :token => 'test_token'})
29
+ expect{ new_provider.setup_auth }.to raise_error("missing repository")
30
+ end
31
+
32
+ end
33
+
34
+ describe "#push_app" do
35
+ it 'defaults to searching everywhere' do
36
+ expect(Dir).to receive(:glob).with('**/*')
37
+ expect { provider.push_app }.to raise_error(DPL::Error)
38
+ end
39
+
40
+ it 'accepts and uses a string glob' do
41
+ provider.options.update(:package_glob => 'foo*.gem')
42
+
43
+ expect(Dir).to receive(:glob).with('foo*.gem')
44
+ expect { provider.push_app }.to raise_error(DPL::Error)
45
+ end
46
+
47
+ it 'accepts and uses an array of globs' do
48
+ provider.options.update(:package_glob => ['*.rpm', '**/*.deb'])
49
+
50
+ expect(Dir).to receive(:glob).with('*.rpm', '**/*.deb')
51
+ expect { provider.push_app }.to raise_error(DPL::Error)
52
+ end
53
+ end
54
+
55
+ end
metadata ADDED
@@ -0,0 +1,173 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dpl-packagecloud
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Konstantin Haase
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dpl
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.9.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.9.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: packagecloud-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-its
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: json_pure
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'
97
+ - !ruby/object:Gem::Dependency
98
+ name: tins
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: coveralls
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: highline
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: deploy tool abstraction for clients
140
+ email: konstantin.mailinglists@googlemail.com
141
+ executables: []
142
+ extensions: []
143
+ extra_rdoc_files: []
144
+ files:
145
+ - dpl-packagecloud.gemspec
146
+ - lib/dpl/provider/packagecloud.rb
147
+ - spec/provider/packagecloud_spec.rb
148
+ homepage: https://github.com/travis-ci/dpl
149
+ licenses:
150
+ - MIT
151
+ metadata: {}
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '2.2'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubyforge_project:
168
+ rubygems_version: 2.6.13
169
+ signing_key:
170
+ specification_version: 4
171
+ summary: deploy tool
172
+ test_files:
173
+ - spec/provider/packagecloud_spec.rb