doit 1.0.1 → 1.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 062ff1abf6d388eaef7a3bc4ce063c24e2c7b99deff85250dbb0b499170b1200
4
- data.tar.gz: e2f62709fda2f9e1deb32daeb0026ea9c58c8dc64751c877d275be95d546dc10
3
+ metadata.gz: e350eab55fbf17ac838b54fe284bf0e39321cb4610139c42b4e88bef6b06162e
4
+ data.tar.gz: bb0778176d1b47f029674b4a983ad9524c77aab238decc853cf9614f9ea329b6
5
5
  SHA512:
6
- metadata.gz: 8e90e343ee283fe75597223adc64937058647e243b810872aca1f08bf8cfac7708846e89002de4823aba8d40063113a4f7c30a0a44c7a507853557cdbb7b201d
7
- data.tar.gz: 6a3590e52412da8e5f55532c04a784d65f36e19915e8779714c0ea2ebad8df3997cf294dfa44c456ea8ef96e1f8da43b1290f67b27883b888f293cee0eccdcfb
6
+ metadata.gz: beb6766a4cb0f732f8391fc38321dc1c0bef3c206540cd9253b751d36d1a324dfb33e7e1dc6ddfae78cabee539543a482e6a4642fe1e929272b2c8915eb11098
7
+ data.tar.gz: e7b35b90c92d138f405e78123fadb5286d87bd5c2f4a6ef3d1b15ccf12c3e68ba5029b8565cbf4e817b2b513031d561001ca2fd38dc4ec49465631391339087a
@@ -0,0 +1,26 @@
1
+ # see also https://github.com/whitequark/parser/blob/master/.github/workflows/test.yml
2
+ name: Rake
3
+
4
+ on: [push]
5
+
6
+ jobs:
7
+ test:
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ os: [ubuntu-latest]
12
+ ruby: ["2.7", "3.0", "3.2", head]
13
+ test_command: ["bundle exec rake test"]
14
+ runs-on: ${{ matrix.os }}
15
+
16
+ steps:
17
+ - uses: actions/checkout@v3
18
+ - uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: ${{ matrix.ruby }}
21
+ - name: Bundle install
22
+ run: |
23
+ bundle config path /home/runner/bundle
24
+ bundle install
25
+ bundle update
26
+ - run: ${{ matrix.test_command }}
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  *.gem
2
2
  tmp/
3
+ .watchr
data/.ruby-gemset CHANGED
@@ -1 +1 @@
1
- rails-6.1
1
+ rails-7.0
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.7.2
1
+ ruby-3.2.2
data/.watchr ADDED
@@ -0,0 +1 @@
1
+ /home/dk/shared/.watchr-gem
data/Gemfile CHANGED
@@ -1,9 +1,10 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
5
  group :test do
6
- gem 'observr'
7
- gem 'rubocop', require: false
8
- gem 'simplecov', require: false
6
+ gem "observr"
7
+ gem "ricecream"
8
+ gem "standard", require: false
9
+ gem "simplecov", require: false
9
10
  end
data/Gemfile.lock CHANGED
@@ -1,56 +1,75 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- doit (1.0.1)
4
+ doit (1.0.3)
5
5
  micro-optparse (~> 1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
10
  ast (2.4.2)
11
- docile (1.3.5)
11
+ docile (1.4.0)
12
+ json (2.6.3)
13
+ language_server-protocol (3.17.0.3)
14
+ lint_roller (1.0.0)
12
15
  micro-optparse (1.2.1)
13
- minitest (5.14.4)
16
+ minitest (5.18.0)
14
17
  observr (1.0.5)
15
- parallel (1.20.1)
16
- parser (3.0.1.0)
18
+ parallel (1.23.0)
19
+ parser (3.2.2.1)
17
20
  ast (~> 2.4.1)
18
- rainbow (3.0.0)
19
- rake (13.0.3)
20
- regexp_parser (2.1.1)
21
+ rainbow (3.1.1)
22
+ rake (13.0.6)
23
+ regexp_parser (2.8.0)
21
24
  rexml (3.2.5)
22
- rubocop (1.13.0)
25
+ ricecream (0.2.1)
26
+ rubocop (1.50.2)
27
+ json (~> 2.3)
23
28
  parallel (~> 1.10)
24
- parser (>= 3.0.0.0)
29
+ parser (>= 3.2.0.0)
25
30
  rainbow (>= 2.2.2, < 4.0)
26
31
  regexp_parser (>= 1.8, < 3.0)
27
- rexml
28
- rubocop-ast (>= 1.2.0, < 2.0)
32
+ rexml (>= 3.2.5, < 4.0)
33
+ rubocop-ast (>= 1.28.0, < 2.0)
29
34
  ruby-progressbar (~> 1.7)
30
- unicode-display_width (>= 1.4.0, < 3.0)
31
- rubocop-ast (1.4.1)
32
- parser (>= 2.7.1.5)
33
- ruby-progressbar (1.11.0)
34
- simplecov (0.21.2)
35
+ unicode-display_width (>= 2.4.0, < 3.0)
36
+ rubocop-ast (1.28.0)
37
+ parser (>= 3.2.1.0)
38
+ rubocop-performance (1.16.0)
39
+ rubocop (>= 1.7.0, < 2.0)
40
+ rubocop-ast (>= 0.4.0)
41
+ ruby-progressbar (1.13.0)
42
+ simplecov (0.22.0)
35
43
  docile (~> 1.1)
36
44
  simplecov-html (~> 0.11)
37
45
  simplecov_json_formatter (~> 0.1)
38
46
  simplecov-html (0.12.3)
39
- simplecov_json_formatter (0.1.2)
40
- unicode-display_width (2.0.0)
47
+ simplecov_json_formatter (0.1.4)
48
+ standard (1.28.0)
49
+ language_server-protocol (~> 3.17.0.2)
50
+ lint_roller (~> 1.0)
51
+ rubocop (~> 1.50.2)
52
+ standard-custom (~> 1.0.0)
53
+ standard-performance (~> 1.0.1)
54
+ standard-custom (1.0.0)
55
+ lint_roller (~> 1.0)
56
+ standard-performance (1.0.1)
57
+ lint_roller (~> 1.0)
58
+ rubocop-performance (~> 1.16.0)
59
+ unicode-display_width (2.4.2)
41
60
 
42
61
  PLATFORMS
43
62
  x86_64-linux
44
63
 
45
64
  DEPENDENCIES
46
- bundler (~> 2)
47
65
  doit!
48
66
  micro-optparse (~> 1)
49
67
  minitest (~> 5)
50
68
  observr
51
69
  rake (~> 13)
52
- rubocop
70
+ ricecream
53
71
  simplecov
72
+ standard
54
73
 
55
74
  BUNDLED WITH
56
- 2.2.6
75
+ 2.4.10
data/LICENSE CHANGED
@@ -1,18 +1,22 @@
1
- Copyright (c) 2014-2020 Dittmar Krall
1
+ The MIT License (MIT)
2
2
 
3
- Permission is hereby granted, free of charge, to any person obtaining a copy of
4
- this software and associated documentation files (the "Software"), to deal in
5
- the Software without restriction, including without limitation the rights to
6
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7
- the Software, and to permit persons to whom the Software is furnished to do so,
8
- subject to the following conditions:
3
+ Copyright (c) 2022-2023 Dittmar Krall (www.matiq.com)
9
4
 
10
- The above copyright notice and this permission notice shall be included in all
11
- copies or substantial portions of the Software.
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
12
 
13
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
- FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
- COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
- Doit
2
- ====
1
+ # Doit
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/doit.png)](http://badge.fury.io/rb/doit)
3
4
 
4
5
  Executes good old shell/bash scripts locally as well as remotely.
5
6
  The environment is set by a ".yml" configuration file.
@@ -9,18 +10,18 @@ The "where" in the configuration indicates where to run the script.
9
10
 
10
11
  See examples below.
11
12
 
12
- Installation
13
- ------------
13
+ ## Installation
14
+
14
15
  gem install doit
15
16
 
16
- Usage
17
- -----
17
+ ## Usage
18
+
18
19
  doit script... [options]
19
20
  doit push
20
21
  doit deploy tag
21
22
 
22
- Options
23
- -------
23
+ ## Options
24
+
24
25
  -l, --[no-]list Lists available scripts
25
26
  -r, --remote ["host"] remote host or comma separated hosts
26
27
  -e, --[no-]each Lists each remote command (no execution)
@@ -31,16 +32,16 @@ Options
31
32
  -V, --version Print version
32
33
 
33
34
 
34
- File Structure
35
- --------------
35
+ ## File Structure
36
+
36
37
  ~/.doit/deploy # chmod +x .doit/deploy
37
38
  ~/.doit/deploy.yml
38
39
  $PROJ/.doit/deploy.yml # overwrites $HOME(~/) script/configuration
39
40
  $PROJ/.doit/push # chmod +x .doit/push
40
41
  $PROJ/.doit/push.yml
41
42
 
42
- $PROJ/.doit/push
43
- ----------------
43
+ ## $PROJ/.doit/push
44
+
44
45
  #! /bin/sh
45
46
  if ! (git status | grep 'nothing to commit'); then
46
47
  echo "push: commits are pending"
@@ -61,13 +62,13 @@ $PROJ/.doit/push
61
62
  ;;
62
63
  esac
63
64
 
64
- ~/.doit/deploy
65
- --------------
65
+ ## ~/.doit/deploy
66
+
66
67
  uname -a
67
68
  git status
68
69
 
69
- ~/.doit/deploy.yml
70
- ------------------
70
+ ## ~/.doit/deploy.yml
71
+
71
72
  env:
72
73
  - DIR=tmp OPTION=run
73
74
  - DIR=proj OPTION=list
@@ -75,4 +76,9 @@ $PROJ/.doit/push
75
76
  - bob@sample.com
76
77
  - alice@customer.com
77
78
 
78
- Copyright (c) 2014-2019 [Dittmar Krall], released under the MIT license.
79
+ ## Miscellaneous
80
+
81
+ Copyright (c) 2014-2023 Dittmar Krall (www.matiq.com),
82
+ released under the MIT license:
83
+
84
+ * https://opensource.org/licenses/MIT
data/Rakefile CHANGED
@@ -1,11 +1,11 @@
1
- require 'rake'
2
- require 'rake/testtask'
3
- require 'bundler/gem_tasks'
1
+ require "rake"
2
+ require "rake/testtask"
3
+ require "bundler/gem_tasks"
4
4
 
5
5
  Rake::TestTask.new do |t|
6
- t.libs.push 'test'
7
- t.pattern = 'test/*_test.rb'
6
+ t.libs.push "test"
7
+ t.pattern = "test/*_test.rb"
8
8
  end
9
9
 
10
- desc 'Default: run unit tests.'
11
- task :default => :test
10
+ desc "Default: run unit tests."
11
+ task default: :test
data/bin/doit CHANGED
@@ -1,24 +1,24 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
- lib = File.expand_path('../lib/', __dir__)
3
+ lib = File.expand_path("../lib/", __dir__)
4
4
  # $:.unshift lib unless $:.include?(lib)
5
5
  $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
6
6
 
7
- require 'doit'
8
- require 'micro-optparse'
9
- require 'globals'
10
- require 'what'
7
+ require "doit"
8
+ require "micro-optparse"
9
+ require "globals"
10
+ require "what"
11
11
 
12
12
  options = Parser.new do |p|
13
- p.banner = 'Usage: doit script... [options] # execute locally or remotely'
13
+ p.banner = "Usage: doit script... [options] # execute locally or remotely"
14
14
  p.version = "doit #{Globals::VERSION}"
15
- p.option :list, 'Lists available scripts'
16
- p.option :each, 'Lists each remote command (no execution)'
17
- p.option :remote, 'Remote host or comma separated hosts',
18
- default: '...', optional: true
19
- p.option :silent, 'Run silently; suppress output'
20
- p.option :verbose, 'Enable verbose output'
21
- p.option :noop, 'Suppress execution of commannds'
15
+ p.option :list, "Lists available scripts"
16
+ p.option :each, "Lists each remote command (no execution)"
17
+ p.option :remote, "Remote host or comma separated hosts",
18
+ default: "...", optional: true
19
+ p.option :silent, "Run silently; suppress output"
20
+ p.option :verbose, "Enable verbose output"
21
+ p.option :noop, "Suppress execution of commannds"
22
22
  end.process!
23
23
 
24
24
  Doit.start(options)
data/doit.gemspec CHANGED
@@ -1,28 +1,25 @@
1
- $LOAD_PATH.push File.expand_path('lib', __dir__)
2
- require 'globals'
1
+ $LOAD_PATH.push File.expand_path("lib", __dir__)
2
+ require "globals"
3
3
 
4
4
  Gem::Specification.new do |s|
5
- s.name = 'doit'
5
+ s.name = "doit"
6
6
  s.version = Globals::VERSION
7
- s.summary = 'Simple local & remote script executor'
8
- s.description = 'Run good old shell/bash scripts locally or remotely(ssh).'
7
+ s.summary = "Simple local & remote script executor"
8
+ s.description = "Run good old shell/bash scripts locally or remotely(ssh)."
9
9
 
10
- s.authors = ['Dittmar Krall']
11
- s.email = 'dittmar.krall@matique.de'
12
- s.homepage = 'http://www.matique.de'
13
- s.license = 'MIT'
10
+ s.authors = ["Dittmar Krall"]
11
+ s.email = "dittmar.krall@matiq.de"
12
+ s.homepage = "http://www.matiq.de"
13
+ s.license = "MIT"
14
14
 
15
- s.add_dependency 'micro-optparse', '~> 1'
15
+ s.add_dependency "micro-optparse", "~> 1"
16
16
 
17
- s.files = `git ls-files`.split("\n")
18
- s.test_files = `git ls-files -- test`.split("\n")
19
- s.executables = `git ls-files -- bin/*`
20
- .split("\n").map { |f| File.basename(f) }
21
- s.require_paths = ['lib']
17
+ s.files = `git ls-files`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`
19
+ .split("\n").map { |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
22
21
 
23
- s.add_development_dependency 'bundler', '~> 2'
24
- s.add_development_dependency 'rake', '~> 13'
25
-
26
- s.add_development_dependency 'micro-optparse', '~> 1'
27
- s.add_development_dependency 'minitest', '~> 5'
22
+ s.add_development_dependency "rake", "~> 13"
23
+ s.add_development_dependency "micro-optparse", "~> 1"
24
+ s.add_development_dependency "minitest", "~> 5"
28
25
  end
data/lib/doit.rb CHANGED
@@ -1,20 +1,18 @@
1
- # rubocop: disable all
2
-
3
- require 'my'
4
- require 'run'
5
- require 'import'
1
+ require "my"
2
+ require "run"
3
+ require "import"
4
+ require "ricecream"
6
5
 
7
6
  Doit = Object.new
8
7
  class << Doit
9
-
10
8
  def start(options)
11
9
  @options = options
12
- list if options[:list]
10
+ list if options[:list]
13
11
 
14
12
  script = ARGV.shift
15
- str = ARGV.map { |x| "\"#{x}\"" }.join(' ')
16
- @argv = str.empty? ? '' : "set #{str}\n"
17
- execute(script) if script
13
+ str = ARGV.map { |x| "\"#{x}\"" }.join(" ")
14
+ @argv = str.empty? ? "" : "set #{str}\n"
15
+ execute(script) if script
18
16
  end
19
17
 
20
18
  def options
@@ -26,14 +24,14 @@ class << Doit
26
24
  hsh = Import.list
27
25
  hsh.sort.each { |abb, long|
28
26
  puts "#{abb}\t- #{long}"
29
- next unless options[:verbose]
27
+ next unless options[:verbose]
30
28
 
31
- lines = `grep -i 'usage\\|summary' #{long} | grep '^#'`.split("\n")
29
+ lines = `grep -i "usage\\|summary" #{long} | grep "^#"`.split("\n")
32
30
  lines.each { |line|
33
- next unless line
34
- next if line.empty?
31
+ next unless line
32
+ next if line.empty?
35
33
 
36
- puts "\t #{line}"
34
+ puts "\t #{line}"
37
35
  }
38
36
  }
39
37
  end
@@ -48,10 +46,11 @@ class << Doit
48
46
 
49
47
  What.where.each { |w| puts "doit #{name} -r #{w}" } if options[:each]
50
48
 
51
- where_loop unless options[:each]
49
+ where_loop unless options[:each]
52
50
  end
53
51
 
54
- private
52
+ private
53
+
55
54
  def where_loop
56
55
  What.where.each { |w|
57
56
  matrix_loop(w)
@@ -60,18 +59,17 @@ class << Doit
60
59
 
61
60
  def matrix_loop(where)
62
61
  What.matrix.each { |mm|
63
- prefix = mm.empty? ? '' : "#{What.to_env(mm)}\n"
62
+ prefix = mm.empty? ? "" : "#{What.to_env(mm)}\n"
64
63
 
65
64
  What.env.each { |en|
66
- prefix2 = en.empty? ? '' : "#{en}\n"
65
+ prefix2 = en.empty? ? "" : "#{en}\n"
67
66
 
68
67
  cmds = Import.script
69
68
  cmds = @argv + prefix + prefix2 + cmds
70
69
  Run.init cmds, where
71
- Run.info if options[:verbose]
70
+ Run.info if options[:verbose]
72
71
  Run.run
73
72
  }
74
73
  }
75
74
  end
76
-
77
75
  end
data/lib/globals.rb CHANGED
@@ -1,13 +1,13 @@
1
- # rubocop: disable all
2
-
3
1
  module Globals
4
- VERSION = '1.0.1' # 2021-04-21
5
- # VERSION = '1.0.0' # 2020-10-26
6
- # VERSION = '0.3.9' # 2020-07-17
7
- # VERSION = '0.3.8' # 2020-02-26
8
- # VERSION = '0.3.7' # 2019-10-15
9
- # VERSION = '0.3.6' # 2019-03-06
10
- # VERSION = '0.3.5' # 2018-09-11
11
- # VERSION = '0.3.4' # 2018-08-19
12
- # VERSION = '0.3.3'
2
+ VERSION = "1.0.3" # 2023-04-27
3
+ # VERSION = "1.0.2" # 2021-06-26
4
+ # VERSION = "1.0.1" # 2021-04-21
5
+ # VERSION = "1.0.0" # 2020-10-26
6
+ # VERSION = "0.3.9" # 2020-07-17
7
+ # VERSION = "0.3.8" # 2020-02-26
8
+ # VERSION = "0.3.7" # 2019-10-15
9
+ # VERSION = "0.3.6" # 2019-03-06
10
+ # VERSION = "0.3.5" # 2018-09-11
11
+ # VERSION = "0.3.4" # 2018-08-19
12
+ # VERSION = "0.3.3"
13
13
  end
data/lib/import.rb CHANGED
@@ -1,11 +1,8 @@
1
- # rubocop: disable all
2
-
3
- require 'pathname'
4
- require 'erb'
1
+ require "pathname"
2
+ require "erb"
5
3
 
6
4
  Import = Object.new
7
5
  class << Import
8
-
9
6
  def script
10
7
  @script ||= nil
11
8
  @script
@@ -17,40 +14,41 @@ class << Import
17
14
  end
18
15
 
19
16
  def init(name)
20
- @script = read(name)
21
- @config = ERB.new(read("#{name}.yml") || '').result
17
+ @script = read(name)
18
+ @config = ERB.new(read("#{name}.yml") || "").result
22
19
  info
23
20
  end
24
21
 
25
- # returns Hash { 'pull' => '/home/dk/.doit/pull', ... }
22
+ # returns Hash { "pull" => "/home/dk/.doit/pull", ... }
26
23
  def list
27
24
  @list ||= list2
28
25
  end
29
26
 
30
27
  def info
31
- return unless Doit.options[:verbose]
28
+ return unless Doit.options[:verbose]
32
29
 
33
- My.verbose 'SCRIPT', @script
34
- My.verbose 'CONFIG(yml)', @config
30
+ My.verbose "SCRIPT", @script
31
+ My.verbose "CONFIG(yml)", @config
35
32
  end
36
33
 
37
- private
34
+ private
35
+
38
36
  def list2
39
37
  res = {}
40
38
  Pathname.pwd.descend { |dir|
41
- doit_dir = dir + '.doit'
42
- next unless File.directory?(doit_dir)
39
+ doit_dir = dir + ".doit"
40
+ next unless File.directory?(doit_dir)
43
41
 
44
42
  lst = []
45
43
  Dir.entries(doit_dir).each { |name|
46
- name = File.join(doit_dir, name)
44
+ name = File.join(doit_dir, name)
47
45
 
48
- next unless File.executable?(name)
49
- next if File.directory?(name)
46
+ next unless File.executable?(name)
47
+ next if File.directory?(name)
50
48
 
51
- lst << name
49
+ lst << name
52
50
  }
53
- lst.each { |itm| res[File.basename(itm)] = itm }
51
+ lst.each { |itm| res[File.basename(itm)] = itm }
54
52
  }
55
53
  res
56
54
  end
@@ -62,9 +60,8 @@ class << Import
62
60
  def try_ascend(filename)
63
61
  Pathname.pwd.ascend { |dir|
64
62
  str = dir + filename
65
- return File.read(str) if File.exist?(str)
63
+ return File.read(str) if File.exist?(str)
66
64
  }
67
65
  nil
68
66
  end
69
-
70
67
  end
data/lib/my.rb CHANGED
@@ -4,9 +4,9 @@ My = Object.new
4
4
 
5
5
  class << My
6
6
  def verbose(what, txt)
7
- marker = '*' * 4
7
+ marker = "*" * 4
8
8
  arr = txt
9
- arr = txt ? txt.split("\n") : '' unless txt.is_a?(Array)
9
+ arr = txt ? txt.split("\n") : "" unless txt.is_a?(Array)
10
10
  if arr.length > 1
11
11
  puts "#{marker} #{what} #{marker}"
12
12
  puts txt
data/lib/run.rb CHANGED
@@ -1,45 +1,41 @@
1
- # rubocop: disable all
2
-
3
1
  Run = Object.new
4
2
  class << Run
5
-
6
3
  attr_reader :ssh
7
4
 
8
5
  def init(cmds, where)
9
- aster = '*' * 24
6
+ aster = "*" * 24
10
7
  puts "#{aster} #{where} #{aster}"
11
8
  @ssh = nil
12
9
  @cmds = cmds
13
10
 
14
- if where.include?('@')
15
- arr = where.split(':')
11
+ if where.include?("@")
12
+ arr = where.split(":")
16
13
  host = arr.first
17
- dir = arr.length > 1 ? arr.last : nil
14
+ dir = (arr.length > 1) ? arr.last : nil
18
15
  else
19
16
  host = nil
20
17
  dir = where
21
18
  end
22
19
 
23
- @cmds = "cd; cd #{dir}\n" + @cmds unless dir&.empty?
24
- @ssh = "ssh #{host}" if host
20
+ @cmds = "cd; cd #{dir}\n" + @cmds unless dir&.empty?
21
+ @ssh = "ssh #{host}" if host
25
22
  end
26
23
 
27
24
  def info
28
- My.verbose('SSH', @ssh)
29
- My.verbose('cmds', @cmds)
25
+ My.verbose("SSH", @ssh)
26
+ My.verbose("cmds", @cmds)
30
27
  end
31
28
 
32
29
  def run
33
- here = '___EOS___'
34
- silent = Doit.options[:silent] ? '>/dev/null' : ''
35
- cmd = "cat <<'#{here}\' | #{@ssh} bash -i -l #{silent} 2>&1"
30
+ here = "___EOS___"
31
+ silent = Doit.options[:silent] ? ">/dev/null" : ""
32
+ cmd = "cat <<'#{here}' | #{@ssh} bash -i -l #{silent} 2>&1"
36
33
  cmds = "#{cmd}\n#{@cmds}#{here}\n"
37
34
 
38
35
  if Doit.options[:noop]
39
- My.verbose('noop', cmds)
36
+ My.verbose("noop", cmds)
40
37
  else
41
38
  IO.popen(cmds) { |p| p.each { |f| puts f } }
42
39
  end
43
40
  end
44
-
45
41
  end
data/lib/what.rb CHANGED
@@ -1,52 +1,50 @@
1
- # rubocop: disable all
2
-
3
- require 'yaml'
4
- require 'doit'
1
+ require "yaml"
2
+ require "doit"
5
3
 
6
4
  What = Object.new
7
5
  class << What
8
-
9
6
  attr_reader :matrix
10
7
  attr_reader :where
11
8
  attr_reader :env
12
9
 
13
10
  def init(config)
14
11
  @matrix = nil
15
- @yml = (config && YAML.load(config)) || {}
12
+ @yml = (config && YAML.load(config)) || {}
16
13
 
17
- @where = @yml.delete('where')
18
- @env = @yml.delete('env')
19
- @env ||= ['']
20
- @env = [@env].flatten.compact
14
+ @where = @yml.delete("where")
15
+ @env = @yml.delete("env")
16
+ @env ||= [""]
17
+ @env = [@env].flatten.compact
21
18
 
22
19
  remote = Doit.options[:remote]
23
- @where = remote if remote && remote != '---'
24
- @where ||= Dir.pwd # default is current directory
25
- @where = [@where].flatten.compact
20
+ @where = remote if remote && remote != "---"
21
+ @where ||= Dir.pwd # default is current directory
22
+ @where = [@where].flatten.compact
26
23
 
27
24
  build_matrix
28
25
  @matrix ||= []
29
- @matrix = [@matrix] unless @matrix.first.is_a?(Array)
26
+ @matrix = [@matrix] unless @matrix.first.is_a?(Array)
30
27
  @matrix.map! { |m| m.flatten.inject({}) { |hsh, h| hsh.merge(h) } }
31
28
  info
32
29
  end
33
30
 
34
31
  def to_env(hsh)
35
32
  arr = hsh.collect { |key, value| "#{key.to_s.upcase}=#{value}" }
36
- arr.join ' '
33
+ arr.join " "
37
34
  end
38
35
 
39
36
  def info
40
- return unless Doit.options[:verbose]
37
+ return unless Doit.options[:verbose]
41
38
 
42
- My.verbose 'where', @where
43
- My.verbose 'matrix', @matrix
44
- My.verbose 'env', @env
39
+ My.verbose "where", @where
40
+ My.verbose "matrix", @matrix
41
+ My.verbose "env", @env
45
42
  end
46
43
 
47
- private
44
+ private
45
+
48
46
  def build_matrix
49
- return if @yml.empty?
47
+ return if @yml.empty?
50
48
 
51
49
  key, value = @yml.first
52
50
  @yml.delete(key)
@@ -56,9 +54,8 @@ class << What
56
54
 
57
55
  def add_to_matrix(key, val)
58
56
  arr = val.is_a?(Array) ?
59
- val.collect { |v| [{ key => v }] } :
60
- [{ key => val }]
57
+ val.collect { |v| [{key => v}] } :
58
+ [{key => val}]
61
59
  @matrix = @matrix ? @matrix.product(arr) : arr
62
60
  end
63
-
64
61
  end
data/test/doit_test.rb CHANGED
@@ -1,53 +1,51 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  describe Doit do
4
-
5
4
  before do
6
5
  Doit.start({})
7
6
  end
8
7
 
9
- it 'start' do
8
+ it "start" do
10
9
  out = noop {}
11
- assert_equal '', out
10
+ assert_equal "", out
12
11
  end
13
12
 
14
- it 'options' do
13
+ it "options" do
15
14
  assert_equal({}, Doit.options)
16
15
  end
17
16
 
18
- it 'list' do
17
+ it "list" do
19
18
  out = noop {
20
19
  Doit.list
21
20
  }
22
21
  assert_match(/\/\.doit/, out)
23
22
  end
24
23
 
25
- it 'execute' do
24
+ it "execute" do
26
25
  out, _err = capture_io do
27
- Doit.execute('hello')
26
+ Doit.execute("hello")
28
27
  end
29
28
  assert_match(/\nHello\n/, out)
30
29
  end
31
30
 
32
- it 'execute with unknown script' do
31
+ it "execute with unknown script" do
33
32
  out, _err = capture_io do
34
- Doit.execute('______unknown______')
33
+ Doit.execute("______unknown______")
35
34
  end
36
35
  assert_match(/not found/, out)
37
36
  end
38
37
 
39
- it 'tests option --each' do
38
+ it "tests option --each" do
40
39
  out = noop(each: true) {
41
- Doit.execute('hello')
40
+ Doit.execute("hello")
42
41
  }
43
42
  assert_match(/doit hello -r/, out)
44
43
  end
45
44
 
46
- it 'coverage: list; option -lv' do
45
+ it "coverage: list; option -lv" do
47
46
  out = noop(verbose: true, list: true) {
48
47
  Doit.start(verbose: true, list: true)
49
48
  }
50
49
  assert_match(/just a test\n/, out)
51
50
  end
52
-
53
51
  end
data/test/import_test.rb CHANGED
@@ -1,38 +1,36 @@
1
- require 'test_helper'
2
- require 'import'
3
- require 'doit'
4
- require 'my'
1
+ require "test_helper"
2
+ require "import"
3
+ require "doit"
4
+ require "my"
5
5
 
6
6
  describe Import do
7
-
8
- it 'init fails with empty' do
9
- assert_raises(Errno::EISDIR) { Import.init('') }
7
+ it "init fails with empty" do
8
+ assert_raises(Errno::EISDIR) { Import.init("") }
10
9
  end
11
10
 
12
- it 'init' do
13
- Import.init('hello')
11
+ it "init" do
12
+ Import.init("hello")
14
13
  end
15
14
 
16
- it 'list' do
17
- Import.init('hello')
18
- assert_match(/\/\.doit\/hello$/, Import.list['hello'])
15
+ it "list" do
16
+ Import.init("hello")
17
+ assert_match(/\/\.doit\/hello$/, Import.list["hello"])
19
18
  end
20
19
 
21
- it 'info' do
20
+ it "info" do
22
21
  out = noop(verbose: true) {
23
- Import.init('hello')
24
- Import.info
22
+ Import.init("hello")
23
+ Import.info
25
24
  }
26
25
  assert_match(/SCRIPT/, out)
27
26
  assert_match(/CONFIG/, out)
28
27
  end
29
28
 
30
- it 'coverage: script' do
29
+ it "coverage: script" do
31
30
  Import.script
32
31
  end
33
32
 
34
- it 'coverage: config' do
33
+ it "coverage: config" do
35
34
  Import.config
36
35
  end
37
-
38
36
  end
data/test/my_test.rb CHANGED
@@ -1,22 +1,20 @@
1
- require 'test_helper'
2
- require 'my'
1
+ require "test_helper"
2
+ require "my"
3
3
 
4
4
  describe My do
5
-
6
- it 'verbose' do
7
- h = 'hello'
5
+ it "verbose" do
6
+ h = "hello"
8
7
  out, _err = capture_io do
9
- My.verbose('a', h)
8
+ My.verbose("a", h)
10
9
  end
11
10
  assert_match(/#{h}/, out)
12
11
  end
13
12
 
14
- it 'verbose text' do
15
- h = 'hello'
13
+ it "verbose text" do
14
+ h = "hello"
16
15
  out, _err = capture_io do
17
- My.verbose('a', "#{h}\nx\n")
16
+ My.verbose("a", "#{h}\nx\n")
18
17
  end
19
18
  assert_match(/#{h}/, out)
20
19
  end
21
-
22
20
  end
data/test/run_test.rb CHANGED
@@ -1,58 +1,56 @@
1
- require 'test_helper'
2
- require 'run'
3
- require 'my'
4
- require 'doit'
1
+ require "test_helper"
2
+ require "run"
3
+ require "my"
4
+ require "doit"
5
5
 
6
6
  describe Run do
7
-
8
- it 'coverage #info' do
7
+ it "coverage #info" do
9
8
  _out, _err = capture_io do
10
- Run.init('', '')
9
+ Run.init("", "")
11
10
  Run.info
12
11
  end
13
12
  end
14
13
 
15
14
  it "where '' returns nil" do
16
15
  _out, _err = capture_io do
17
- Run.init('', '')
16
+ Run.init("", "")
18
17
  assert_equal nil, Run.ssh
19
18
  end
20
19
  end
21
20
 
22
21
  it "where 'a' returns nil" do
23
22
  _out, _err = capture_io do
24
- Run.init('', 'a')
23
+ Run.init("", "a")
25
24
  assert_equal nil, Run.ssh
26
25
  end
27
26
  end
28
27
 
29
28
  it "where 'a@b' returns 'ssh a@b'" do
30
29
  _out, _err = capture_io do
31
- Run.init('', 'a@b')
32
- assert_equal 'ssh a@b', Run.ssh
30
+ Run.init("", "a@b")
31
+ assert_equal "ssh a@b", Run.ssh
33
32
  end
34
33
  end
35
34
 
36
35
  it "where 'a@b:c' returns 'ssh a@b'" do
37
36
  _out, _err = capture_io do
38
- Run.init('', 'a@b:c')
39
- assert_equal 'ssh a@b', Run.ssh
37
+ Run.init("", "a@b:c")
38
+ assert_equal "ssh a@b", Run.ssh
40
39
  end
41
40
  end
42
41
 
43
- it 'coverage #run' do
42
+ it "coverage #run" do
44
43
  _out, _err = capture_io do
45
- Run.init('', '')
44
+ Run.init("", "")
46
45
  Run.run
47
46
  end
48
47
  end
49
48
 
50
- it 'coverage #run noop' do
49
+ it "coverage #run noop" do
51
50
  out = noop {
52
- Run.init('', '')
53
- Run.run
51
+ Run.init("", "")
52
+ Run.run
54
53
  }
55
54
  assert_match(/EOS/, out)
56
55
  end
57
-
58
56
  end
data/test/test_helper.rb CHANGED
@@ -1,17 +1,18 @@
1
- require 'simplecov'
2
- SimpleCov.start do
3
- add_filter 'test'
4
- command_name 'Minitest'
1
+ if ENV["COVERAGE"]
2
+ require "simplecov"
3
+ SimpleCov.start do
4
+ add_filter "/test/"
5
+ end
5
6
  end
6
7
 
7
- require 'what'
8
+ require "what"
8
9
 
9
- require 'minitest/autorun'
10
+ require "minitest/autorun"
10
11
 
11
- def noop(options = { noop: true }, &block)
12
- return 'noop: missing block' unless block
12
+ def noop(options = {noop: true}, &block)
13
+ return "noop: missing block" unless block
13
14
 
14
- out = '---'
15
+ out = "---"
15
16
  Doit.stub :options, options do
16
17
  out, _err = capture_io do
17
18
  yield
data/test/what_test.rb CHANGED
@@ -1,44 +1,42 @@
1
- require 'test_helper'
2
- require 'my'
1
+ require "test_helper"
2
+ require "my"
3
3
 
4
4
  describe What do
5
-
6
- it 'is robust against empty params' do
7
- What.init('')
5
+ it "is robust against empty params" do
6
+ What.init("")
8
7
  assert_equal [Dir.pwd], What.where
9
8
  assert_equal [{}], What.matrix
10
9
  end
11
10
 
12
11
  it "#to_env({}) must be ''" do
13
- assert_equal '', What.to_env({})
12
+ assert_equal "", What.to_env({})
14
13
  end
15
14
 
16
- it 'to_env converts variable to uppercase' do
17
- assert_equal 'A=1', What.to_env(a: 1)
15
+ it "to_env converts variable to uppercase" do
16
+ assert_equal "A=1", What.to_env(a: 1)
18
17
  end
19
18
 
20
- it 'coverage: #info' do
21
- Doit.stub :options, verbose: true do
19
+ it "coverage: #info" do
20
+ Doit.stub :options, {verbose: true} do
22
21
  _out, _err = capture_io do
23
- What.init('')
22
+ What.init("")
24
23
  What.info
25
24
  end
26
25
  end
27
26
  end
28
27
 
29
- it 'builds simple matrix' do
28
+ it "builds simple matrix" do
30
29
  What.init("a: 1\n")
31
- assert_equal [{ 'a' => 1 }], What.matrix
30
+ assert_equal [{"a" => 1}], What.matrix
32
31
  end
33
32
 
34
- it 'builds matrix' do
33
+ it "builds matrix" do
35
34
  What.init("a:\n - 1\n - 2\n")
36
- assert_equal [{ 'a' => 1 }, { 'a' => 2 }], What.matrix
35
+ assert_equal [{"a" => 1}, {"a" => 2}], What.matrix
37
36
  end
38
37
 
39
- it 'builds product matrix' do
38
+ it "builds product matrix" do
40
39
  What.init("a:\n - 1\nb:\n - 3\n - 4\n")
41
- assert_equal [{ 'a' => 1, 'b' => 3 }, { 'a' => 1, 'b' => 4 }], What.matrix
40
+ assert_equal [{"a" => 1, "b" => 3}, {"a" => 1, "b" => 4}], What.matrix
42
41
  end
43
-
44
42
  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: 1.0.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dittmar Krall
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-22 00:00:00.000000000 Z
11
+ date: 2023-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: micro-optparse
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '2'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +67,7 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '5'
83
69
  description: Run good old shell/bash scripts locally or remotely(ssh).
84
- email: dittmar.krall@matique.de
70
+ email: dittmar.krall@matiq.de
85
71
  executables:
86
72
  - doit
87
73
  extensions: []
@@ -89,11 +75,10 @@ extra_rdoc_files: []
89
75
  files:
90
76
  - ".doit/hello"
91
77
  - ".doit/hello.yml"
78
+ - ".github/workflows/rake.yml"
92
79
  - ".gitignore"
93
- - ".rubocop.yml"
94
80
  - ".ruby-gemset"
95
81
  - ".ruby-version"
96
- - ".travis.yml"
97
82
  - ".watchr"
98
83
  - Gemfile
99
84
  - Gemfile.lock
@@ -114,7 +99,7 @@ files:
114
99
  - test/run_test.rb
115
100
  - test/test_helper.rb
116
101
  - test/what_test.rb
117
- homepage: http://www.matique.de
102
+ homepage: http://www.matiq.de
118
103
  licenses:
119
104
  - MIT
120
105
  metadata: {}
@@ -133,14 +118,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
118
  - !ruby/object:Gem::Version
134
119
  version: '0'
135
120
  requirements: []
136
- rubygems_version: 3.2.6
121
+ rubygems_version: 3.4.10
137
122
  signing_key:
138
123
  specification_version: 4
139
124
  summary: Simple local & remote script executor
140
- test_files:
141
- - test/doit_test.rb
142
- - test/import_test.rb
143
- - test/my_test.rb
144
- - test/run_test.rb
145
- - test/test_helper.rb
146
- - test/what_test.rb
125
+ test_files: []
data/.rubocop.yml DELETED
@@ -1,10 +0,0 @@
1
- inherit_from:
2
- - ~/configs/.rubocop.yml
3
-
4
- AllCops:
5
- Include:
6
- - 'lib/**/*.rb'
7
-
8
- Exclude:
9
- - 'bin/**/*'
10
- - 'test/**/*'
data/.travis.yml DELETED
@@ -1,22 +0,0 @@
1
- language: ruby
2
-
3
- #bundler_args: --without production
4
- bundle config set without production
5
- script: "bundle exec rake test"
6
-
7
- rvm:
8
- - 2.7.2 # 2020-10-26
9
- # - 2.6.6 # 2020-07-17
10
- # - 2.6.5 # 2019-10-29
11
- # - 2.6.4 # 2019-10-15
12
- # - 2.6.3 # 2019-06-21
13
- # - 2.6.1
14
- # - 2.5.1
15
- # - 2.5.0
16
- # - 2.4.1
17
- # - 2.3.0 # tested; no longer in CI
18
- # - 2.2.3 # tested; no longer in CI
19
- # - 2.0.0 # tested; no longer in CI
20
-
21
- notifications:
22
- email: false
data/.watchr DELETED
@@ -1,55 +0,0 @@
1
- HH = '#' * 22 unless defined?(HH)
2
- H = '#' * 5 unless defined?(H)
3
-
4
- def usage
5
- puts <<-EOS
6
- Ctrl-\\ or ctrl-4 Running all tests
7
- Ctrl-C Exit
8
- EOS
9
- end
10
-
11
- def run(cmd)
12
- puts "#{HH} #{Time.now} #{HH}"
13
- puts "#{H} #{cmd}"
14
- system "/usr/bin/time --format '#{HH} Elapsed time %E' #{cmd}"
15
- end
16
-
17
- def run_it(type, file)
18
- case type
19
- when 'test'; run %Q(ruby -I"lib:test" -r rubygems #{file})
20
- else; puts "#{H} unknown type: #{type}, file: #{file}"
21
- end
22
- end
23
-
24
- def run_all_tests
25
- puts "\n#{HH} Running all tests #{HH}\n"
26
- %w[test].each { |dir| run "rake #{dir}" if File.exist?(dir) }
27
- end
28
-
29
- def run_matching_files(base)
30
- base = base.split('_').first
31
- %w[test spec].each { |type|
32
- files = Dir["#{type}/**/*.rb"].select { |file| file =~ /#{base}_.*\.rb/ }
33
- run_it type, files.join(' ') unless files.empty?
34
- }
35
- end
36
-
37
- %w[test spec].each { |type|
38
- watch("#{type}/#{type}_helper\.rb") { run_all_tests }
39
- watch("#{type}/.*/*_#{type}\.rb") { |match| run_it type, match[0] }
40
- watch("#{type}/data/(.*)\.rb") { |match|
41
- m1 = match[1]
42
- run_matching_files("#{type}/#{m1}/#{m1}_#{type}.rb")
43
- }
44
- }
45
- %w[rb erb haml slim].each { |type|
46
- watch("app/.*/(.*)\.#{type}") { |match|
47
- run_matching_files(match[1])
48
- }
49
- }
50
-
51
- # Ctrl-\ or ctrl-4
52
- Signal.trap('QUIT') { run_all_tests }
53
- # Ctrl-C
54
- Signal.trap('INT') { abort("Interrupted\n") }
55
- usage