dpl-pypi 1.9.0
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 +7 -0
- data/dpl-pypi.gemspec +3 -0
- data/lib/dpl/provider/pypi.rb +103 -0
- data/spec/provider/pypi_spec.rb +105 -0
- metadata +159 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e687c2bc72fb800e747b113560250e1807f46783
|
4
|
+
data.tar.gz: f699d025b50d3ce90be4cc3dce9ddd9b38524af5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a35b0cad6c32393ab9737545f7a2940faa9f4b0cd03e13829f28a86b82325d00ae1f0b2cec66e94b3bf9df486b4948f6873818d381aec7afc2b2bb0f5b2db1a4
|
7
|
+
data.tar.gz: e647b53f420c0cb408a5f09cca11ed98f1a835b52af9dd5e0494a4c00dae3e5b234de78432a7f5f1515e9cb08951fb61223dfe682712b14a060092100c5bdc62
|
data/dpl-pypi.gemspec
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
module DPL
|
2
|
+
class Provider
|
3
|
+
class PyPI < Provider
|
4
|
+
DEFAULT_SERVER = 'https://upload.pypi.org/legacy/'
|
5
|
+
PYPIRC_FILE = '~/.pypirc'
|
6
|
+
|
7
|
+
def pypi_user
|
8
|
+
option(:username, :user) || context.env['PYPI_USER'] || context.env['PYPI_USERNAME']
|
9
|
+
end
|
10
|
+
|
11
|
+
def pypi_password
|
12
|
+
options[:password] || context.env['PYPI_PASSWORD']
|
13
|
+
end
|
14
|
+
|
15
|
+
def pypi_server
|
16
|
+
options[:server] || context.env['PYPI_SERVER'] || DEFAULT_SERVER
|
17
|
+
end
|
18
|
+
|
19
|
+
def pypi_distributions
|
20
|
+
options[:distributions] || context.env['PYPI_DISTRIBUTIONS'] || 'sdist'
|
21
|
+
end
|
22
|
+
|
23
|
+
def pypi_docs_dir_option
|
24
|
+
docs_dir = options[:docs_dir] || context.env['PYPI_DOCS_DIR'] || ''
|
25
|
+
if !docs_dir.empty?
|
26
|
+
'--upload-dir ' + docs_dir
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def skip_upload_docs?
|
31
|
+
! options.has_key?(:skip_upload_docs) ||
|
32
|
+
(options.has_key?(:skip_upload_docs) && options[:skip_upload_docs])
|
33
|
+
end
|
34
|
+
|
35
|
+
def install_deploy_dependencies
|
36
|
+
unless context.shell "wget -O - https://bootstrap.pypa.io/get-pip.py | python - --no-setuptools --no-wheel && " \
|
37
|
+
"pip install --upgrade setuptools twine wheel"
|
38
|
+
error "Couldn't install pip, setuptools, twine or wheel."
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def config
|
43
|
+
{
|
44
|
+
:header => '[distutils]',
|
45
|
+
:servers_line => 'index-servers = pypi',
|
46
|
+
:servers => {
|
47
|
+
'pypi' => [
|
48
|
+
"repository: #{pypi_server}",
|
49
|
+
"username: #{pypi_user}",
|
50
|
+
"password: #{pypi_password}",
|
51
|
+
]
|
52
|
+
}
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
def write_servers(f)
|
57
|
+
config[:servers].each do |key, val|
|
58
|
+
f.puts " " * 4 + key
|
59
|
+
end
|
60
|
+
|
61
|
+
config[:servers].each do |key, val|
|
62
|
+
f.puts "[#{key}]"
|
63
|
+
f.puts val
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def write_config
|
68
|
+
File.open(File.expand_path(PYPIRC_FILE), 'w') do |f|
|
69
|
+
config.each do |key, val|
|
70
|
+
f.puts(val) if val.is_a? String or val.is_a? Array
|
71
|
+
end
|
72
|
+
write_servers(f)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def check_auth
|
77
|
+
error "missing PyPI username" unless pypi_user
|
78
|
+
error "missing PyPI password" unless pypi_password
|
79
|
+
write_config
|
80
|
+
log "Authenticated as #{pypi_user}"
|
81
|
+
end
|
82
|
+
|
83
|
+
def check_app
|
84
|
+
end
|
85
|
+
|
86
|
+
def needs_key?
|
87
|
+
false
|
88
|
+
end
|
89
|
+
|
90
|
+
def push_app
|
91
|
+
context.shell "python setup.py #{pypi_distributions}"
|
92
|
+
unless context.shell "twine upload -r pypi dist/*"
|
93
|
+
error 'PyPI upload failed.'
|
94
|
+
end
|
95
|
+
context.shell "rm -rf dist/*"
|
96
|
+
unless skip_upload_docs?
|
97
|
+
log "Uploading documentation (skip with \"skip_upload_docs: true\")"
|
98
|
+
context.shell "python setup.py upload_docs #{pypi_docs_dir_option} -r #{pypi_server}"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dpl/provider/pypi'
|
3
|
+
|
4
|
+
describe DPL::Provider::PyPI do
|
5
|
+
subject :provider do
|
6
|
+
described_class.new(DummyContext.new, :user => 'foo', :password => 'bar')
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#install_deploy_dependencies" do
|
10
|
+
example do
|
11
|
+
expect(provider.context).to receive(:shell).with(
|
12
|
+
"wget -O - https://bootstrap.pypa.io/get-pip.py | python - --no-setuptools --no-wheel && pip install --upgrade setuptools twine wheel"
|
13
|
+
).and_return(true)
|
14
|
+
provider.install_deploy_dependencies
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#config" do
|
19
|
+
it 'accepts a user and a password' do
|
20
|
+
expect(provider.config[:servers]['pypi']).to include 'username: foo'
|
21
|
+
expect(provider.config[:servers]['pypi']).to include 'password: bar'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#check_auth" do
|
26
|
+
example do
|
27
|
+
expect(provider).to receive(:log).with("Authenticated as foo")
|
28
|
+
provider.check_auth
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#push_app" do
|
33
|
+
example "default" do
|
34
|
+
expect(provider.context).to receive(:shell).with("python setup.py sdist").and_return(true)
|
35
|
+
expect(provider.context).to receive(:shell).with("twine upload -r pypi dist/*").and_return(true)
|
36
|
+
expect(provider.context).to receive(:shell).with("rm -rf dist/*").and_return(true)
|
37
|
+
expect(provider.context).not_to receive(:shell).with("python setup.py upload_docs -r https://upload.pypi.org/legacy/")
|
38
|
+
provider.push_app
|
39
|
+
end
|
40
|
+
|
41
|
+
example "with :distributions option" do
|
42
|
+
provider.options.update(:distributions => 'sdist bdist')
|
43
|
+
expect(provider.context).to receive(:shell).with("python setup.py sdist bdist").and_return(true)
|
44
|
+
expect(provider.context).to receive(:shell).with("twine upload -r pypi dist/*").and_return(true)
|
45
|
+
expect(provider.context).to receive(:shell).with("rm -rf dist/*").and_return(true)
|
46
|
+
expect(provider.context).not_to receive(:shell).with("python setup.py upload_docs -r https://upload.pypi.org/legacy/")
|
47
|
+
provider.push_app
|
48
|
+
end
|
49
|
+
|
50
|
+
example "with :server option" do
|
51
|
+
provider.options.update(:server => 'http://blah.com')
|
52
|
+
expect(provider.context).to receive(:shell).with("python setup.py sdist").and_return(true)
|
53
|
+
expect(provider.context).to receive(:shell).with("twine upload -r pypi dist/*").and_return(true)
|
54
|
+
expect(provider.context).to receive(:shell).with("rm -rf dist/*").and_return(true)
|
55
|
+
expect(provider.context).not_to receive(:shell).with("python setup.py upload_docs -r http://blah.com")
|
56
|
+
provider.push_app
|
57
|
+
end
|
58
|
+
|
59
|
+
example "with :skip_upload_docs option" do
|
60
|
+
provider.options.update(:skip_upload_docs => true)
|
61
|
+
expect(provider.context).to receive(:shell).with("python setup.py sdist").and_return(true)
|
62
|
+
expect(provider.context).to receive(:shell).with("twine upload -r pypi dist/*").and_return(true)
|
63
|
+
expect(provider.context).to receive(:shell).with("rm -rf dist/*").and_return(true)
|
64
|
+
expect(provider.context).not_to receive(:shell).with("python setup.py upload_docs -r https://upload.pypi.org/legacy/")
|
65
|
+
provider.push_app
|
66
|
+
end
|
67
|
+
|
68
|
+
context "with :skip_upload_docs option being false" do
|
69
|
+
before :each do
|
70
|
+
provider.options.update(:skip_upload_docs => false)
|
71
|
+
end
|
72
|
+
|
73
|
+
it "runs upload_docs" do
|
74
|
+
expect(provider.context).to receive(:shell).with("python setup.py sdist").and_return(true)
|
75
|
+
expect(provider.context).to receive(:shell).with("twine upload -r pypi dist/*").and_return(true)
|
76
|
+
expect(provider.context).to receive(:shell).with("rm -rf dist/*").and_return(true)
|
77
|
+
expect(provider.context).to receive(:shell).with("python setup.py upload_docs -r https://upload.pypi.org/legacy/").and_return(true)
|
78
|
+
provider.push_app
|
79
|
+
end
|
80
|
+
|
81
|
+
example "with :docs_dir option" do
|
82
|
+
provider.options.update(:docs_dir => 'some/dir')
|
83
|
+
expect(provider.context).to receive(:shell).with("python setup.py sdist").and_return(true)
|
84
|
+
expect(provider.context).to receive(:shell).with("twine upload -r pypi dist/*").and_return(true)
|
85
|
+
expect(provider.context).to receive(:shell).with("rm -rf dist/*").and_return(true)
|
86
|
+
expect(provider.context).to receive(:shell).with("python setup.py upload_docs --upload-dir some/dir -r https://upload.pypi.org/legacy/").and_return(true)
|
87
|
+
provider.push_app
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "#write_servers" do
|
94
|
+
example do
|
95
|
+
f = double(:f)
|
96
|
+
expect(f).to receive(:puts).with(" pypi")
|
97
|
+
expect(f).to receive(:puts).with("[pypi]")
|
98
|
+
expect(f).to receive(:puts).with(["repository: https://upload.pypi.org/legacy/",
|
99
|
+
"username: foo",
|
100
|
+
"password: bar"
|
101
|
+
])
|
102
|
+
provider.write_servers(f)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
metadata
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dpl-pypi
|
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: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-its
|
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: rake
|
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: json_pure
|
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: tins
|
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: coveralls
|
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: highline
|
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
|
+
description: deploy tool abstraction for clients
|
126
|
+
email: konstantin.mailinglists@googlemail.com
|
127
|
+
executables: []
|
128
|
+
extensions: []
|
129
|
+
extra_rdoc_files: []
|
130
|
+
files:
|
131
|
+
- dpl-pypi.gemspec
|
132
|
+
- lib/dpl/provider/pypi.rb
|
133
|
+
- spec/provider/pypi_spec.rb
|
134
|
+
homepage: https://github.com/travis-ci/dpl
|
135
|
+
licenses:
|
136
|
+
- MIT
|
137
|
+
metadata: {}
|
138
|
+
post_install_message:
|
139
|
+
rdoc_options: []
|
140
|
+
require_paths:
|
141
|
+
- lib
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '2.2'
|
147
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
requirements: []
|
153
|
+
rubyforge_project:
|
154
|
+
rubygems_version: 2.6.13
|
155
|
+
signing_key:
|
156
|
+
specification_version: 4
|
157
|
+
summary: deploy tool
|
158
|
+
test_files:
|
159
|
+
- spec/provider/pypi_spec.rb
|