doit 0.2.8 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.doit/hello +1 -0
- data/.ruby-version +1 -1
- data/.watchr +1 -0
- data/Gemfile.lock +3 -6
- data/README.md +7 -2
- data/bin/doit +2 -1
- data/lib/doit.rb +13 -8
- data/lib/globals.rb +1 -1
- data/lib/import.rb +10 -9
- data/lib/my.rb +3 -2
- data/lib/run.rb +6 -5
- data/lib/what.rb +10 -9
- data/test/doit_test.rb +14 -0
- metadata +3 -4
- data/.ruby-gemset +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e3e55b5782a334d1ace53286a138bdd935a4d09
|
4
|
+
data.tar.gz: 4fa3b68d8f34263279ae3dff8e1d87a1c7dfbfa0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ded0af93c825b472874ea32daae00c5e0821ad0132c474fc308d6354e174ed782a1d28a6e5f6548de84cd5e9d7d3f6500104a800970a12a84502d6c72e0bfb39
|
7
|
+
data.tar.gz: 59310dd1e3791d555998cd37e042247a6c558c79699b3e0c7c8ee308c9536e9640085daa3e4df19465076aab2ea0a4532a06e6844baf1bc9943e662454355216
|
data/.doit/hello
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.2.
|
1
|
+
ruby-2.2.0
|
data/.watchr
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
doit (0.
|
4
|
+
doit (0.3.0)
|
5
5
|
micro-optparse (~> 1)
|
6
6
|
|
7
7
|
GEM
|
@@ -10,9 +10,9 @@ GEM
|
|
10
10
|
docile (1.1.5)
|
11
11
|
json (1.8.3)
|
12
12
|
micro-optparse (1.2.0)
|
13
|
-
minitest (5.8.
|
13
|
+
minitest (5.8.4)
|
14
14
|
observr (1.0.5)
|
15
|
-
rake (10.
|
15
|
+
rake (10.5.0)
|
16
16
|
simplecov (0.11.1)
|
17
17
|
docile (~> 1.1.0)
|
18
18
|
json (~> 1.8)
|
@@ -29,6 +29,3 @@ DEPENDENCIES
|
|
29
29
|
observr
|
30
30
|
rake
|
31
31
|
simplecov
|
32
|
-
|
33
|
-
BUNDLED WITH
|
34
|
-
1.10.6
|
data/README.md
CHANGED
@@ -5,6 +5,10 @@ Executes good old shell/bash scripts locally as well as remotely.
|
|
5
5
|
The environment is set by a ".yml" configuration file.
|
6
6
|
An array environment variable triggers multiple calls of the script.
|
7
7
|
|
8
|
+
The "where" in the configuration indicates where to run the script.
|
9
|
+
|
10
|
+
See examples below.
|
11
|
+
|
8
12
|
Installation
|
9
13
|
------------
|
10
14
|
gem install doit
|
@@ -29,12 +33,13 @@ File Structure
|
|
29
33
|
--------------
|
30
34
|
~/.doit/deploy # chmod +x .doit/deploy
|
31
35
|
~/.doit/deploy.yml
|
32
|
-
$PROJ/.doit/deploy.yml # overwrites
|
36
|
+
$PROJ/.doit/deploy.yml # overwrites $HOME(~/) script/configuration
|
33
37
|
$PROJ/.doit/push # chmod +x .doit/deploy
|
34
38
|
$PROJ/.doit/push.yml
|
35
39
|
|
36
40
|
$PROJ/.doit/push
|
37
41
|
----------------
|
42
|
+
#! /bin/sh
|
38
43
|
if ! (git status | grep 'nothing to commit'); then
|
39
44
|
echo "push: commits are pending"
|
40
45
|
exit 1
|
@@ -68,4 +73,4 @@ $PROJ/.doit/push
|
|
68
73
|
- bob@sample.com
|
69
74
|
- alice@customer.com
|
70
75
|
|
71
|
-
Copyright (c) 2014 [Dittmar Krall], released under the MIT license
|
76
|
+
Copyright (c) 2014-2016 [Dittmar Krall], released under the MIT license
|
data/bin/doit
CHANGED
@@ -11,7 +11,8 @@ options = Parser.new do |p|
|
|
11
11
|
p.banner = "Usage: doit script... [options] # execute locally or remotely"
|
12
12
|
p.version = "doit #{Globals::VERSION}"
|
13
13
|
p.option :list, 'Lists available scripts'
|
14
|
-
p.option :
|
14
|
+
p.option :each, 'Lists each remote command (no execution)'
|
15
|
+
p.option :remote, 'Remote host or comma separated hosts', default: '...', optional: true
|
15
16
|
p.option :silent, 'Run silently; suppress output'
|
16
17
|
p.option :verbose, 'Enable verbose output'
|
17
18
|
p.option :noop, 'Suppress execution of commannds'
|
data/lib/doit.rb
CHANGED
@@ -3,9 +3,10 @@ require 'run'
|
|
3
3
|
require 'import'
|
4
4
|
require 'what'
|
5
5
|
|
6
|
-
|
6
|
+
Doit = Object.new
|
7
|
+
class << Doit
|
7
8
|
|
8
|
-
def
|
9
|
+
def start(options)
|
9
10
|
@options = options
|
10
11
|
list if options[:list]
|
11
12
|
|
@@ -15,11 +16,11 @@ class Doit
|
|
15
16
|
execute(script) if script
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
+
def options
|
19
20
|
@options || {}
|
20
21
|
end
|
21
22
|
|
22
|
-
def
|
23
|
+
def list
|
23
24
|
hsh = Import.list
|
24
25
|
hsh.sort.each { |abb, long|
|
25
26
|
puts "#{abb}\t- #{long}"
|
@@ -33,7 +34,7 @@ class Doit
|
|
33
34
|
}
|
34
35
|
end
|
35
36
|
|
36
|
-
def
|
37
|
+
def execute(name)
|
37
38
|
Import.init(name)
|
38
39
|
unless Import.script
|
39
40
|
puts "doit: script '#{name}' not found"
|
@@ -41,17 +42,21 @@ class Doit
|
|
41
42
|
end
|
42
43
|
What.init(Import.script, Import.config)
|
43
44
|
|
44
|
-
|
45
|
+
What.where.each { |w|
|
46
|
+
puts "doit #{name} -r #{w}"
|
47
|
+
} if options[:each]
|
48
|
+
|
49
|
+
where_loop unless options[:each]
|
45
50
|
end
|
46
51
|
|
47
52
|
private
|
48
|
-
def
|
53
|
+
def where_loop
|
49
54
|
What.where.each { |w|
|
50
55
|
matrix_loop(w)
|
51
56
|
}
|
52
57
|
end
|
53
58
|
|
54
|
-
def
|
59
|
+
def matrix_loop(w)
|
55
60
|
What.matrix.each { |mm|
|
56
61
|
prefix = mm.empty? ? '' : "#{What.to_env(mm)}\n"
|
57
62
|
|
data/lib/globals.rb
CHANGED
data/lib/import.rb
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'erb'
|
3
3
|
|
4
|
-
|
4
|
+
Import = Object.new
|
5
|
+
class << Import
|
5
6
|
|
6
|
-
def
|
7
|
-
def
|
7
|
+
def script; @script; end
|
8
|
+
def config; @config; end
|
8
9
|
|
9
|
-
def
|
10
|
+
def init(name)
|
10
11
|
@script = read(name)
|
11
12
|
@config = ERB.new(read("#{name}.yml") || '').result
|
12
13
|
info
|
13
14
|
end
|
14
15
|
|
15
16
|
# returns Hash { 'pull' => '/home/dk/.doit/pull', ... }
|
16
|
-
def
|
17
|
+
def list
|
17
18
|
@list ||= list2
|
18
19
|
end
|
19
20
|
|
20
|
-
def
|
21
|
+
def info
|
21
22
|
return unless Doit.options[:verbose]
|
22
23
|
|
23
24
|
My.verbose "SCRIPT", @script
|
@@ -26,7 +27,7 @@ class Import
|
|
26
27
|
|
27
28
|
|
28
29
|
private
|
29
|
-
def
|
30
|
+
def list2
|
30
31
|
res = {}
|
31
32
|
Pathname.pwd.descend { |dir|
|
32
33
|
doit_dir = dir + '.doit'
|
@@ -46,11 +47,11 @@ class Import
|
|
46
47
|
res
|
47
48
|
end
|
48
49
|
|
49
|
-
def
|
50
|
+
def read(name)
|
50
51
|
try_ascend(".doit/#{name}")
|
51
52
|
end
|
52
53
|
|
53
|
-
def
|
54
|
+
def try_ascend(filename)
|
54
55
|
Pathname.pwd.ascend { |dir|
|
55
56
|
str = dir + filename
|
56
57
|
return File.read(str) if File.exists?(str)
|
data/lib/my.rb
CHANGED
data/lib/run.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
|
1
|
+
Run = Object.new
|
2
|
+
class << Run
|
2
3
|
|
3
|
-
def
|
4
|
+
def ssh; @ssh; end
|
4
5
|
|
5
|
-
def
|
6
|
+
def init(cmds, where)
|
6
7
|
aster = '*'*24
|
7
8
|
puts "#{aster} #{where} #{aster}"
|
8
9
|
@ssh = nil
|
@@ -21,12 +22,12 @@ class Run
|
|
21
22
|
@ssh = "ssh #{host}" if host
|
22
23
|
end
|
23
24
|
|
24
|
-
def
|
25
|
+
def info
|
25
26
|
My.verbose('SSH', @ssh)
|
26
27
|
My.verbose('cmds', @cmds)
|
27
28
|
end
|
28
29
|
|
29
|
-
def
|
30
|
+
def run
|
30
31
|
here = '___EOS___'
|
31
32
|
silent = Doit.options[:silent] ? '>/dev/null' : ''
|
32
33
|
cmd = "cat <<'#{here}\' | #{@ssh} bash -i -l #{silent} 2>&1"
|
data/lib/what.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'doit'
|
3
3
|
|
4
|
-
|
4
|
+
What = Object.new
|
5
|
+
class << What
|
5
6
|
|
6
|
-
def
|
7
|
-
def
|
8
|
-
def
|
7
|
+
def matrix; @matrix; end
|
8
|
+
def where; @where; end
|
9
|
+
def env; @env; end
|
9
10
|
|
10
|
-
def
|
11
|
+
def init(script, config)
|
11
12
|
@matrix = nil
|
12
13
|
@yml = (config && YAML.load(config)) || {}
|
13
14
|
|
@@ -28,12 +29,12 @@ class What
|
|
28
29
|
info
|
29
30
|
end
|
30
31
|
|
31
|
-
def
|
32
|
+
def to_env(hsh)
|
32
33
|
arr = hsh.collect { |key, value| "#{key.to_s.upcase}=#{value}" }
|
33
34
|
arr.join ' '
|
34
35
|
end
|
35
36
|
|
36
|
-
def
|
37
|
+
def info
|
37
38
|
return unless Doit.options[:verbose]
|
38
39
|
|
39
40
|
My.verbose "where", @where
|
@@ -43,7 +44,7 @@ class What
|
|
43
44
|
|
44
45
|
|
45
46
|
private
|
46
|
-
def
|
47
|
+
def build_matrix
|
47
48
|
unless @yml.empty?
|
48
49
|
key, value = @yml.first
|
49
50
|
@yml.delete(key)
|
@@ -52,7 +53,7 @@ class What
|
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
55
|
-
def
|
56
|
+
def add_to_matrix(key, val)
|
56
57
|
arr = Array === val ? val.collect {|v| [{key => v}] } : [{key => val}]
|
57
58
|
@matrix = @matrix ? @matrix.product(arr) : arr
|
58
59
|
end
|
data/test/doit_test.rb
CHANGED
@@ -37,4 +37,18 @@ describe Doit do
|
|
37
37
|
assert_match /not found/, out
|
38
38
|
end
|
39
39
|
|
40
|
+
it "tests option --each" do
|
41
|
+
out = noop({each: true}) {
|
42
|
+
Doit.execute('hello')
|
43
|
+
}
|
44
|
+
assert_match /doit hello -r/, out
|
45
|
+
end
|
46
|
+
|
47
|
+
it "coverage: list; option -lv" do
|
48
|
+
out = noop({verbose: true, list: true}) {
|
49
|
+
Doit.start({verbose: true, list: true})
|
50
|
+
}
|
51
|
+
assert_match /just a test\n/, out
|
52
|
+
end
|
53
|
+
|
40
54
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: doit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dittmar Krall
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: micro-optparse
|
@@ -33,7 +33,6 @@ extra_rdoc_files: []
|
|
33
33
|
files:
|
34
34
|
- ".doit/hello"
|
35
35
|
- ".doit/hello.yml"
|
36
|
-
- ".ruby-gemset"
|
37
36
|
- ".ruby-version"
|
38
37
|
- ".travis.yml"
|
39
38
|
- ".watchr"
|
@@ -76,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
75
|
version: '0'
|
77
76
|
requirements: []
|
78
77
|
rubyforge_project:
|
79
|
-
rubygems_version: 2.4.
|
78
|
+
rubygems_version: 2.4.5
|
80
79
|
signing_key:
|
81
80
|
specification_version: 4
|
82
81
|
summary: Simple local & remote script executor
|
data/.ruby-gemset
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rails-4.2
|