dpl-snap 1.9.7.travis.2853.6
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-snap.gemspec +3 -0
- data/lib/dpl/provider/snap.rb +82 -0
- data/spec/provider/snap_spec.rb +114 -0
- metadata +186 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 36daa9dbcb7836f6df9dd8c6b6e04ea2d9fe152e49735214f18aea44df745e1b
|
4
|
+
data.tar.gz: 6f7c0bf3e2458a2224cde4e910ad92deec94e39a64799971562de3f8713ca8a0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c13b7ea9412188f5a57c2b593878e53aaea97522f332c9464479acb00f0bbe5ad544c72f0ec9f81567964e4008231cc62ad03c75e44313ef4e2e9ad06119e9a3
|
7
|
+
data.tar.gz: e5eea1925a2f23471a16b85dcd19eed8b6399b7ce0c98e216c8ce0b6e302917e4b512537e6faa8c6eb6e39dab9898a24266c003ff83df56f783f335acbe29591
|
data/dpl-snap.gemspec
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'open3'
|
2
|
+
|
3
|
+
module DPL
|
4
|
+
class Provider
|
5
|
+
class Snap < Provider
|
6
|
+
# Support installing snaps
|
7
|
+
def self.snap(name, command = name, classic: false, channel: nil)
|
8
|
+
install_command = "sudo snap install #{name}"
|
9
|
+
|
10
|
+
if classic
|
11
|
+
install_command += " --classic"
|
12
|
+
end
|
13
|
+
|
14
|
+
unless channel.nil?
|
15
|
+
install_command += " --channel=#{channel}"
|
16
|
+
end
|
17
|
+
|
18
|
+
context.shell(install_command, retry: true) if `which #{command}`.chop.empty?
|
19
|
+
end
|
20
|
+
|
21
|
+
apt_get 'snapd', 'snap'
|
22
|
+
snap 'snapcraft', classic: true
|
23
|
+
|
24
|
+
def install_deploy_dependencies
|
25
|
+
# Snapcraft may already be installed, but in case we installed
|
26
|
+
# the snap, we need to add /snap/bin to the PATH.
|
27
|
+
ENV["PATH"] += ':/snap/bin'
|
28
|
+
end
|
29
|
+
|
30
|
+
def check_auth
|
31
|
+
log "Attemping to login"
|
32
|
+
stdout, stderr, status = Open3.capture3(
|
33
|
+
"snapcraft login --with -", stdin_data: login_token)
|
34
|
+
|
35
|
+
if status == 0
|
36
|
+
log stdout
|
37
|
+
else
|
38
|
+
error "Failed to authenticate: #{stderr}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# No SSH keys needed
|
43
|
+
def needs_key?
|
44
|
+
false
|
45
|
+
end
|
46
|
+
|
47
|
+
# Users must specify the path to the snap they want pushed (globbing is
|
48
|
+
# supported).
|
49
|
+
def snap
|
50
|
+
option(:snap)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Users can specify the channel into which they'd like to release this
|
54
|
+
# snap. It defaults to the 'edge' channel.
|
55
|
+
def channel
|
56
|
+
options.fetch(:channel, 'edge')
|
57
|
+
end
|
58
|
+
|
59
|
+
# Users must specify their login token, either explicitly in the YAML or
|
60
|
+
# via the $SNAP_TOKEN enironment variable.
|
61
|
+
def login_token
|
62
|
+
options[:token] || context.env['SNAP_TOKEN'] || error("Missing token")
|
63
|
+
end
|
64
|
+
|
65
|
+
def push_app
|
66
|
+
snaps = Dir.glob(snap)
|
67
|
+
case snaps.length
|
68
|
+
when 0
|
69
|
+
error "No snap found matching '#{snap}'"
|
70
|
+
when 1
|
71
|
+
snap_path = snaps.first
|
72
|
+
context.fold("Pushing snap") do
|
73
|
+
context.shell "snapcraft push #{snap_path} --release=#{channel}"
|
74
|
+
end
|
75
|
+
else
|
76
|
+
snap_list = snaps.join(', ')
|
77
|
+
error "Multiple snaps found matching '#{snap}': #{snap_list}"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dpl/provider/snap'
|
3
|
+
|
4
|
+
describe DPL::Provider::Snap do
|
5
|
+
after :each do
|
6
|
+
remove_test_snaps
|
7
|
+
end
|
8
|
+
|
9
|
+
subject :provider do
|
10
|
+
described_class.new(
|
11
|
+
DummyContext.new, :token => 'test-token', :snap => test_snap_name,
|
12
|
+
:channel => 'test-channel')
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#install_deploy_dependencies" do
|
16
|
+
example do
|
17
|
+
provider.install_deploy_dependencies
|
18
|
+
expect(ENV['PATH'].split(':')).to include('/snap/bin')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#check_auth" do
|
23
|
+
example "success" do
|
24
|
+
allow(Open3).to receive(:capture3).with(
|
25
|
+
"snapcraft login --with -", stdin_data: 'test-token').and_return(
|
26
|
+
['test-stdout', 'test-stderr', 0])
|
27
|
+
|
28
|
+
expect(provider).to receive(:log).with("Attemping to login")
|
29
|
+
expect(provider).to receive(:log).with("test-stdout")
|
30
|
+
provider.check_auth
|
31
|
+
end
|
32
|
+
|
33
|
+
example "failure" do
|
34
|
+
allow(Open3).to receive(:capture3).with(
|
35
|
+
"snapcraft login --with -", stdin_data: 'test-token').and_return(
|
36
|
+
['test-stdout', 'test-stderr', 1])
|
37
|
+
|
38
|
+
expect(provider).to receive(:log).with("Attemping to login")
|
39
|
+
expect{provider.check_auth}.to raise_error(
|
40
|
+
DPL::Error, "Failed to authenticate: test-stderr")
|
41
|
+
end
|
42
|
+
|
43
|
+
example "missing token" do
|
44
|
+
allow(Open3).to receive(:capture3).with(
|
45
|
+
"snapcraft login --with -", stdin_data: nil).and_return(
|
46
|
+
['test-stdout', 'test-stderr', 1])
|
47
|
+
|
48
|
+
provider.options.delete(:token)
|
49
|
+
expect(provider).to receive(:log).with("Attemping to login")
|
50
|
+
expect{provider.check_auth}.to raise_error(DPL::Error, "Missing token")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#push_app" do
|
55
|
+
example "existing snap" do
|
56
|
+
# Create fake snap
|
57
|
+
create_test_snap
|
58
|
+
|
59
|
+
expect(provider.context).to receive(:shell).with(
|
60
|
+
"snapcraft push #{test_snap_name} --release=test-channel").and_return(
|
61
|
+
true)
|
62
|
+
|
63
|
+
provider.push_app
|
64
|
+
end
|
65
|
+
|
66
|
+
example "no existing snap should fail" do
|
67
|
+
expect{provider.push_app}.to raise_error(
|
68
|
+
DPL::Error, "No snap found matching 'test.snap'")
|
69
|
+
end
|
70
|
+
|
71
|
+
example "missing snap" do
|
72
|
+
provider.options.delete(:snap)
|
73
|
+
expect{provider.push_app}.to raise_error(
|
74
|
+
DPL::Error, "missing snap")
|
75
|
+
end
|
76
|
+
|
77
|
+
example "multiple matching snaps should fail" do
|
78
|
+
create_test_snap "foo.snap"
|
79
|
+
create_test_snap "bar.snap"
|
80
|
+
provider.options[:snap] = "*.snap"
|
81
|
+
expect{provider.push_app}.to raise_error(
|
82
|
+
DPL::Error,
|
83
|
+
"Multiple snaps found matching '*.snap': foo.snap, bar.snap")
|
84
|
+
end
|
85
|
+
|
86
|
+
example "missing channel should default to edge" do
|
87
|
+
# Create fake snap
|
88
|
+
create_test_snap
|
89
|
+
|
90
|
+
provider.options.delete(:channel)
|
91
|
+
|
92
|
+
expect(provider.context).to receive(:shell).with(
|
93
|
+
"snapcraft push #{test_snap_name} --release=edge").and_return(true)
|
94
|
+
|
95
|
+
provider.push_app
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
def test_snap_name
|
102
|
+
"test.snap"
|
103
|
+
end
|
104
|
+
|
105
|
+
def create_test_snap(snap_name = test_snap_name)
|
106
|
+
File.open snap_name, "w" do | file |
|
107
|
+
file.write("test")
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def remove_test_snaps
|
112
|
+
FileUtils.rm_f Dir.glob('*.snap')
|
113
|
+
end
|
114
|
+
end
|
metadata
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dpl-snap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.9.7.travis.2853.6
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Konstantin Haase
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-04-25 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.7.travis.2853.6
|
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.7.travis.2853.6
|
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
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: term-ansicolor
|
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
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: faraday
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
description: deploy tool abstraction for clients
|
154
|
+
email: konstantin.mailinglists@googlemail.com
|
155
|
+
executables: []
|
156
|
+
extensions: []
|
157
|
+
extra_rdoc_files: []
|
158
|
+
files:
|
159
|
+
- dpl-snap.gemspec
|
160
|
+
- lib/dpl/provider/snap.rb
|
161
|
+
- spec/provider/snap_spec.rb
|
162
|
+
homepage: https://github.com/travis-ci/dpl
|
163
|
+
licenses:
|
164
|
+
- MIT
|
165
|
+
metadata: {}
|
166
|
+
post_install_message:
|
167
|
+
rdoc_options: []
|
168
|
+
require_paths:
|
169
|
+
- lib
|
170
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '2.2'
|
175
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">"
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: 1.3.1
|
180
|
+
requirements: []
|
181
|
+
rubyforge_project:
|
182
|
+
rubygems_version: 2.7.6
|
183
|
+
signing_key:
|
184
|
+
specification_version: 4
|
185
|
+
summary: deploy tool
|
186
|
+
test_files: []
|