bard 1.4.8 → 1.4.9
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 +4 -4
- data/.github/workflows/ci.yml +22 -0
- data/Gemfile +4 -0
- data/bard.gemspec +3 -2
- data/lib/bard/git.rb +5 -1
- data/lib/bard/provision/repo.rb +21 -0
- data/lib/bard/provision/ssh.rb +21 -0
- data/lib/bard/server.rb +2 -2
- data/lib/bard/version.rb +1 -1
- data/spec/bard/cli/ci_spec.rb +139 -0
- data/spec/bard/cli/command_spec.rb +50 -0
- data/spec/bard/cli/data_spec.rb +77 -0
- data/spec/bard/cli/deploy_spec.rb +202 -0
- data/spec/bard/cli/hurt_spec.rb +23 -0
- data/spec/bard/cli/install_spec.rb +25 -0
- data/spec/bard/cli/master_key_spec.rb +52 -0
- data/spec/bard/cli/new_spec.rb +60 -0
- data/spec/bard/cli/open_spec.rb +67 -0
- data/spec/bard/cli/ping_spec.rb +47 -0
- data/spec/bard/cli/provision_spec.rb +42 -0
- data/spec/bard/cli/run_spec.rb +51 -0
- data/spec/bard/cli/setup_spec.rb +76 -0
- data/spec/bard/cli/ssh_spec.rb +55 -0
- data/spec/bard/cli/stage_spec.rb +77 -0
- data/spec/bard/cli/vim_spec.rb +34 -0
- data/spec/bard/command_spec.rb +37 -0
- data/spec/bard/copy_spec.rb +33 -0
- data/spec/bard/git_spec.rb +61 -0
- data/spec/bard/github_pages_spec.rb +80 -0
- data/spec/bard/github_spec.rb +45 -0
- data/spec/bard/ping_spec.rb +31 -0
- data/spec/bard/provision/app_spec.rb +33 -0
- data/spec/bard/provision/apt_spec.rb +39 -0
- data/spec/bard/provision/authorizedkeys_spec.rb +40 -0
- data/spec/bard/provision/data_spec.rb +54 -0
- data/spec/bard/provision/deploy_spec.rb +33 -0
- data/spec/bard/provision/http_spec.rb +57 -0
- data/spec/bard/provision/logrotation_spec.rb +34 -0
- data/spec/bard/provision/masterkey_spec.rb +63 -0
- data/spec/bard/provision/mysql_spec.rb +55 -0
- data/spec/bard/provision/passenger_spec.rb +81 -0
- data/spec/bard/provision/repo_spec.rb +208 -0
- data/spec/bard/provision/rvm_spec.rb +49 -0
- data/spec/bard/provision/ssh_spec.rb +229 -0
- data/spec/bard/provision/swapfile_spec.rb +32 -0
- data/spec/bard/provision/user_spec.rb +103 -0
- data/spec/bard/provision_spec.rb +28 -0
- data/spec/spec_helper.rb +6 -1
- metadata +96 -9
@@ -0,0 +1,103 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "bard/provision"
|
3
|
+
require "bard/provision/user"
|
4
|
+
|
5
|
+
describe Bard::Provision::User do
|
6
|
+
let(:old_ssh_uri) { double("old_ssh_uri", user: "root", host: "example.com", port: 22) }
|
7
|
+
let(:new_ssh_uri) { double("new_ssh_uri", user: "deploy", host: "example.com", port: 22) }
|
8
|
+
let(:server) { double("server", ssh_uri: new_ssh_uri) }
|
9
|
+
let(:config) { { production: server } }
|
10
|
+
let(:ssh_url) { "root@example.com" }
|
11
|
+
let(:provision_server) { double("provision_server", ssh_uri: old_ssh_uri) }
|
12
|
+
let(:user_provisioner) { Bard::Provision::User.new(config, ssh_url) }
|
13
|
+
|
14
|
+
before do
|
15
|
+
allow(user_provisioner).to receive(:server).and_return(server)
|
16
|
+
allow(user_provisioner).to receive(:provision_server).and_return(provision_server)
|
17
|
+
allow(user_provisioner).to receive(:print)
|
18
|
+
allow(user_provisioner).to receive(:puts)
|
19
|
+
allow(user_provisioner).to receive(:system)
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#call" do
|
23
|
+
context "when new user already exists" do
|
24
|
+
it "skips user creation" do
|
25
|
+
allow(user_provisioner).to receive(:ssh_with_user?).with(old_ssh_uri, user: "deploy").and_return(true)
|
26
|
+
|
27
|
+
expect(provision_server).not_to receive(:run!)
|
28
|
+
|
29
|
+
user_provisioner.call
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when new user doesn't exist but old user works" do
|
34
|
+
it "creates the new user" do
|
35
|
+
allow(user_provisioner).to receive(:ssh_with_user?).with(old_ssh_uri, user: "deploy").and_return(false)
|
36
|
+
allow(user_provisioner).to receive(:ssh_with_user?).with(old_ssh_uri).and_return(true)
|
37
|
+
|
38
|
+
expected_commands = [
|
39
|
+
"sudo useradd -m -s /bin/bash deploy",
|
40
|
+
"sudo usermod -aG sudo deploy",
|
41
|
+
"echo \"deploy ALL=(ALL) NOPASSWD:ALL\" | sudo tee -a /etc/sudoers",
|
42
|
+
"sudo mkdir -p ~deploy/.ssh",
|
43
|
+
"sudo cp ~/.ssh/authorized_keys ~deploy/.ssh/authorized_keys",
|
44
|
+
"sudo chown -R deploy:deploy ~deploy/.ssh",
|
45
|
+
"sudo chmod +rx ~deploy"
|
46
|
+
].join("; ")
|
47
|
+
|
48
|
+
expect(provision_server).to receive(:run!).with(expected_commands, home: true)
|
49
|
+
|
50
|
+
user_provisioner.call
|
51
|
+
end
|
52
|
+
|
53
|
+
it "prints status messages during user creation" do
|
54
|
+
allow(user_provisioner).to receive(:ssh_with_user?).with(old_ssh_uri, user: "deploy").and_return(false)
|
55
|
+
allow(user_provisioner).to receive(:ssh_with_user?).with(old_ssh_uri).and_return(true)
|
56
|
+
allow(provision_server).to receive(:run!)
|
57
|
+
|
58
|
+
expect(user_provisioner).to receive(:print).with("User:")
|
59
|
+
expect(user_provisioner).to receive(:print).with(" Adding user deploy,")
|
60
|
+
expect(user_provisioner).to receive(:puts).with(" ✓")
|
61
|
+
|
62
|
+
user_provisioner.call
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when neither old nor new user can SSH" do
|
67
|
+
it "raises an error" do
|
68
|
+
allow(user_provisioner).to receive(:ssh_with_user?).with(old_ssh_uri, user: "deploy").and_return(false)
|
69
|
+
allow(user_provisioner).to receive(:ssh_with_user?).with(old_ssh_uri).and_return(false)
|
70
|
+
|
71
|
+
expect { user_provisioner.call }.to raise_error("can't ssh in with user deploy or root")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "#ssh_with_user?" do
|
77
|
+
it "tests SSH connection with specified user" do
|
78
|
+
expect(user_provisioner).to receive(:system).with("ssh -o ConnectTimeout=2 -p22 deploy@example.com : >/dev/null 2>&1")
|
79
|
+
|
80
|
+
user_provisioner.send(:ssh_with_user?, old_ssh_uri, user: "deploy")
|
81
|
+
end
|
82
|
+
|
83
|
+
it "uses default user from SSH URI if not specified" do
|
84
|
+
expect(user_provisioner).to receive(:system).with("ssh -o ConnectTimeout=2 -p22 root@example.com : >/dev/null 2>&1")
|
85
|
+
|
86
|
+
user_provisioner.send(:ssh_with_user?, old_ssh_uri)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "private methods" do
|
91
|
+
describe "#new_user" do
|
92
|
+
it "returns the target user from server SSH URI" do
|
93
|
+
expect(user_provisioner.send(:new_user)).to eq("deploy")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "#old_user" do
|
98
|
+
it "returns the current user from provision server SSH URI" do
|
99
|
+
expect(user_provisioner.send(:old_user)).to eq("root")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "bard/provision"
|
3
|
+
|
4
|
+
describe Bard::Provision do
|
5
|
+
let(:config) { { production: double("production", key: :production) } }
|
6
|
+
let(:ssh_url) { "user@example.com" }
|
7
|
+
let(:provision) { Bard::Provision.new(config, ssh_url) }
|
8
|
+
|
9
|
+
describe ".call" do
|
10
|
+
it "creates a new instance and calls it" do
|
11
|
+
expect_any_instance_of(Bard::Provision).to receive(:call)
|
12
|
+
Bard::Provision.call(config, ssh_url)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#server" do
|
17
|
+
it "returns the production server from config" do
|
18
|
+
expect(provision.send(:server)).to eq(config[:production])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#provision_server" do
|
23
|
+
it "returns server with ssh_url" do
|
24
|
+
expect(config[:production]).to receive(:with).with(ssh: ssh_url)
|
25
|
+
provision.send(:provision_server)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micah Geisel
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: thor
|
@@ -67,7 +66,21 @@ dependencies:
|
|
67
66
|
- !ruby/object:Gem::Version
|
68
67
|
version: '0'
|
69
68
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
69
|
+
name: base64
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
type: :runtime
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rake
|
71
84
|
requirement: !ruby/object:Gem::Requirement
|
72
85
|
requirements:
|
73
86
|
- - ">="
|
@@ -95,7 +108,7 @@ dependencies:
|
|
95
108
|
- !ruby/object:Gem::Version
|
96
109
|
version: '0'
|
97
110
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
111
|
+
name: debug
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
100
113
|
requirements:
|
101
114
|
- - ">="
|
@@ -108,7 +121,6 @@ dependencies:
|
|
108
121
|
- - ">="
|
109
122
|
- !ruby/object:Gem::Version
|
110
123
|
version: '0'
|
111
|
-
description:
|
112
124
|
email:
|
113
125
|
- micah@botandrose.com
|
114
126
|
executables:
|
@@ -116,6 +128,7 @@ executables:
|
|
116
128
|
extensions: []
|
117
129
|
extra_rdoc_files: []
|
118
130
|
files:
|
131
|
+
- ".github/workflows/ci.yml"
|
119
132
|
- ".gitignore"
|
120
133
|
- ".gitmodules"
|
121
134
|
- ".rspec"
|
@@ -196,7 +209,45 @@ files:
|
|
196
209
|
- lib/bard/version.rb
|
197
210
|
- spec/bard/ci/github_actions_spec.rb
|
198
211
|
- spec/bard/ci_spec.rb
|
212
|
+
- spec/bard/cli/ci_spec.rb
|
213
|
+
- spec/bard/cli/command_spec.rb
|
214
|
+
- spec/bard/cli/data_spec.rb
|
215
|
+
- spec/bard/cli/deploy_spec.rb
|
216
|
+
- spec/bard/cli/hurt_spec.rb
|
217
|
+
- spec/bard/cli/install_spec.rb
|
218
|
+
- spec/bard/cli/master_key_spec.rb
|
219
|
+
- spec/bard/cli/new_spec.rb
|
220
|
+
- spec/bard/cli/open_spec.rb
|
221
|
+
- spec/bard/cli/ping_spec.rb
|
222
|
+
- spec/bard/cli/provision_spec.rb
|
223
|
+
- spec/bard/cli/run_spec.rb
|
224
|
+
- spec/bard/cli/setup_spec.rb
|
225
|
+
- spec/bard/cli/ssh_spec.rb
|
226
|
+
- spec/bard/cli/stage_spec.rb
|
227
|
+
- spec/bard/cli/vim_spec.rb
|
228
|
+
- spec/bard/command_spec.rb
|
199
229
|
- spec/bard/config_spec.rb
|
230
|
+
- spec/bard/copy_spec.rb
|
231
|
+
- spec/bard/git_spec.rb
|
232
|
+
- spec/bard/github_pages_spec.rb
|
233
|
+
- spec/bard/github_spec.rb
|
234
|
+
- spec/bard/ping_spec.rb
|
235
|
+
- spec/bard/provision/app_spec.rb
|
236
|
+
- spec/bard/provision/apt_spec.rb
|
237
|
+
- spec/bard/provision/authorizedkeys_spec.rb
|
238
|
+
- spec/bard/provision/data_spec.rb
|
239
|
+
- spec/bard/provision/deploy_spec.rb
|
240
|
+
- spec/bard/provision/http_spec.rb
|
241
|
+
- spec/bard/provision/logrotation_spec.rb
|
242
|
+
- spec/bard/provision/masterkey_spec.rb
|
243
|
+
- spec/bard/provision/mysql_spec.rb
|
244
|
+
- spec/bard/provision/passenger_spec.rb
|
245
|
+
- spec/bard/provision/repo_spec.rb
|
246
|
+
- spec/bard/provision/rvm_spec.rb
|
247
|
+
- spec/bard/provision/ssh_spec.rb
|
248
|
+
- spec/bard/provision/swapfile_spec.rb
|
249
|
+
- spec/bard/provision/user_spec.rb
|
250
|
+
- spec/bard/provision_spec.rb
|
200
251
|
- spec/bard/server_spec.rb
|
201
252
|
- spec/bard_spec.rb
|
202
253
|
- spec/spec_helper.rb
|
@@ -206,7 +257,6 @@ homepage: http://github.com/botandrose/bard
|
|
206
257
|
licenses:
|
207
258
|
- MIT
|
208
259
|
metadata: {}
|
209
|
-
post_install_message:
|
210
260
|
rdoc_options: []
|
211
261
|
require_paths:
|
212
262
|
- lib
|
@@ -221,8 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
221
271
|
- !ruby/object:Gem::Version
|
222
272
|
version: '0'
|
223
273
|
requirements: []
|
224
|
-
rubygems_version: 3.
|
225
|
-
signing_key:
|
274
|
+
rubygems_version: 3.6.9
|
226
275
|
specification_version: 4
|
227
276
|
summary: CLI to automate common development tasks.
|
228
277
|
test_files:
|
@@ -240,7 +289,45 @@ test_files:
|
|
240
289
|
- features/support/io.rb
|
241
290
|
- spec/bard/ci/github_actions_spec.rb
|
242
291
|
- spec/bard/ci_spec.rb
|
292
|
+
- spec/bard/cli/ci_spec.rb
|
293
|
+
- spec/bard/cli/command_spec.rb
|
294
|
+
- spec/bard/cli/data_spec.rb
|
295
|
+
- spec/bard/cli/deploy_spec.rb
|
296
|
+
- spec/bard/cli/hurt_spec.rb
|
297
|
+
- spec/bard/cli/install_spec.rb
|
298
|
+
- spec/bard/cli/master_key_spec.rb
|
299
|
+
- spec/bard/cli/new_spec.rb
|
300
|
+
- spec/bard/cli/open_spec.rb
|
301
|
+
- spec/bard/cli/ping_spec.rb
|
302
|
+
- spec/bard/cli/provision_spec.rb
|
303
|
+
- spec/bard/cli/run_spec.rb
|
304
|
+
- spec/bard/cli/setup_spec.rb
|
305
|
+
- spec/bard/cli/ssh_spec.rb
|
306
|
+
- spec/bard/cli/stage_spec.rb
|
307
|
+
- spec/bard/cli/vim_spec.rb
|
308
|
+
- spec/bard/command_spec.rb
|
243
309
|
- spec/bard/config_spec.rb
|
310
|
+
- spec/bard/copy_spec.rb
|
311
|
+
- spec/bard/git_spec.rb
|
312
|
+
- spec/bard/github_pages_spec.rb
|
313
|
+
- spec/bard/github_spec.rb
|
314
|
+
- spec/bard/ping_spec.rb
|
315
|
+
- spec/bard/provision/app_spec.rb
|
316
|
+
- spec/bard/provision/apt_spec.rb
|
317
|
+
- spec/bard/provision/authorizedkeys_spec.rb
|
318
|
+
- spec/bard/provision/data_spec.rb
|
319
|
+
- spec/bard/provision/deploy_spec.rb
|
320
|
+
- spec/bard/provision/http_spec.rb
|
321
|
+
- spec/bard/provision/logrotation_spec.rb
|
322
|
+
- spec/bard/provision/masterkey_spec.rb
|
323
|
+
- spec/bard/provision/mysql_spec.rb
|
324
|
+
- spec/bard/provision/passenger_spec.rb
|
325
|
+
- spec/bard/provision/repo_spec.rb
|
326
|
+
- spec/bard/provision/rvm_spec.rb
|
327
|
+
- spec/bard/provision/ssh_spec.rb
|
328
|
+
- spec/bard/provision/swapfile_spec.rb
|
329
|
+
- spec/bard/provision/user_spec.rb
|
330
|
+
- spec/bard/provision_spec.rb
|
244
331
|
- spec/bard/server_spec.rb
|
245
332
|
- spec/bard_spec.rb
|
246
333
|
- spec/spec_helper.rb
|