doit 0.2.8 → 0.3.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 +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
|