ops_team 1.13.0 → 1.16.0.pre.rc1

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: 8c5f694faa0c40cbd2f850fe45fb7eb35012d3359bf815e95984198366ddac6d
4
- data.tar.gz: 4d9e6178368112d8a55869162b4371ec715a9168bfb9c0b2fca08e0025d7d1e6
3
+ metadata.gz: e5aa70e4e711e46c9e7661013c62fc3f40db454caeee504c0ff3c49258ea3951
4
+ data.tar.gz: c1a491887c6629b419b3397aed7b0ad0e1b74a19bcfda45fc79fb15d481f517c
5
5
  SHA512:
6
- metadata.gz: 1bf4567b067db9a9041628384e3b09c096b6ece2caada9749c449a29e2e772197e52f5ee8413155e47a8faeb3bc68134f9f4ef86d7aa1f26d4b3111cbe21b0c1
7
- data.tar.gz: 59eb6746612f1f7209ea93b086be4556274fbda04d2e7372b2ce8583bc1eea9d86b7a0c795d6d137a6278c3c4a716faa67ee3c69ab2ab1cd155d2b7ec5c097b5
6
+ metadata.gz: b92b2d6583d86f2a0fccf7d17d6d713aaf062eed7837836fb0904c7bafee5ded631a9d26b22c96eb429e629f54d7a9e06f5f2ace0411743e57005ec410086808
7
+ data.tar.gz: f8199c0e807ed8fa7e1d3bfba3928c51fa32dca844bdaa103d3d18afb35b8ef017ddae71a8371a3d5fbb1a3ec3b9bd475105754e6e5f0b7b439b90279171c28c
data/Gemfile CHANGED
@@ -14,6 +14,7 @@ gem "io-console"
14
14
  gem "json", ">= 2.3.0"
15
15
  gem "net-ssh"
16
16
  gem "require_all"
17
+ gem "zeitwerk"
17
18
 
18
19
  group :test do
19
20
  gem "fuubar"
data/bin/benchmark ADDED
@@ -0,0 +1,185 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'json'
5
+ require 'colorize'
6
+
7
+ COMMANDS = [
8
+ "version",
9
+ "env",
10
+ "help",
11
+ "exec echo hi",
12
+ "env OPS_AUTO_COMPLETE=true"
13
+ ].freeze
14
+
15
+ class Runner
16
+ RUNS = 10
17
+ WARMUPS = 3
18
+
19
+ attr_reader :command, :version
20
+
21
+ def initialize(command, version)
22
+ @command = command
23
+ @version = version
24
+ end
25
+
26
+ def run
27
+ unless File.exist?(json_file)
28
+ system(
29
+ "hyperfine -m #{RUNS} \
30
+ --export-json #{json_file} \
31
+ --export-markdown #{markdown_file} \
32
+ --warmup #{WARMUPS} \
33
+ '#{@command}'"
34
+ )
35
+ end
36
+
37
+ results
38
+ end
39
+
40
+ def results
41
+ # for now, only ever one result, since we're not having hyperfine vary params
42
+ @results ||= JSON.parse(results_data)["results"].first
43
+ end
44
+
45
+ def method_missing(method, *_, &_)
46
+ results[method.to_s]
47
+ end
48
+
49
+ def respond_to_missing?(method, _ = false)
50
+ results&.keys&.include?(method.to_s)
51
+ end
52
+
53
+ def json_file
54
+ @json_file ||= "#{output_file}.json"
55
+ end
56
+
57
+ def markdown_file
58
+ @markdown_file ||= "#{output_file}.md"
59
+ end
60
+
61
+ private
62
+
63
+ def output_file
64
+ "benchmark/#{@version}-#{@command.gsub(" ", "_").gsub("/", "-")}"
65
+ end
66
+
67
+ def results_data
68
+ File.read(json_file)
69
+ end
70
+ end
71
+
72
+ class Benchmark
73
+ attr_reader :executable
74
+
75
+ def initialize(executable)
76
+ @executable = executable
77
+ end
78
+
79
+ def run
80
+ runners.map(&:run)
81
+
82
+ runners.map(&:mean)
83
+ end
84
+
85
+ def version
86
+ @version ||= `#{@executable} version`.chomp
87
+ end
88
+
89
+ def runners
90
+ @runners ||= COMMANDS.map do |cmd|
91
+ Runner.new("#{@executable} #{cmd}", version)
92
+ end
93
+ end
94
+ end
95
+
96
+ class Benchmarker
97
+ CLR_THRESHOLD = 0.1
98
+ CLR_WIDTH = 14
99
+ COL_WIDTH = 24
100
+ CMD_WIDTH = 30
101
+
102
+ def initialize(*executables)
103
+ @executables = executables
104
+ end
105
+
106
+ def summary
107
+ result_pairs = results.first.zip(results.last)
108
+
109
+ output = header
110
+ COMMANDS.length.times do |index|
111
+ output << format(
112
+ "%#{CMD_WIDTH + CLR_WIDTH}s %#{COL_WIDTH}s %#{COL_WIDTH + CLR_WIDTH}s",
113
+ COMMANDS[index].white,
114
+ *result_strings(result_pairs[index])
115
+ )
116
+ end
117
+ output << summary_numbers
118
+
119
+ output.join("\n")
120
+ end
121
+
122
+ def benchmarks
123
+ @benchmarks ||= @executables.map do |executable|
124
+ Benchmark.new(executable)
125
+ end
126
+ end
127
+
128
+ def results
129
+ @results ||= benchmarks.map(&:run)
130
+ end
131
+
132
+ private
133
+
134
+ def result_pairs
135
+ @result_pairs ||= results.first.zip(results.last)
136
+ end
137
+
138
+ def header
139
+ [
140
+ format(
141
+ "%#{CMD_WIDTH}s %#{COL_WIDTH + CLR_WIDTH}s %#{COL_WIDTH + CLR_WIDTH}s",
142
+ "", *benchmarks.map { |b| b.executable.white }
143
+ ),
144
+ format(
145
+ "%#{CMD_WIDTH}s %#{COL_WIDTH + CLR_WIDTH}s %#{COL_WIDTH + CLR_WIDTH}s",
146
+ "", *benchmarks.map { |b| b.version.white }
147
+ )
148
+ ]
149
+ end
150
+
151
+ def result_strings(pair)
152
+ colour = :blue
153
+ if pair.last < (pair.first * (1 - CLR_THRESHOLD))
154
+ colour = :green
155
+ elsif pair.last < (pair.first * CLR_THRESHOLD)
156
+ colour = :red
157
+ end
158
+
159
+ outputs = pair.map { |number| format("%02.3f", number) }
160
+
161
+ outputs[1] = outputs.last.send(colour)
162
+
163
+ outputs
164
+ end
165
+
166
+ def summary_numbers
167
+ format(
168
+ "%#{CMD_WIDTH + CLR_WIDTH}s %#{COL_WIDTH}s %#{COL_WIDTH + CLR_WIDTH}s",
169
+ "Avg difference".white, "-", avg_diff_string.white
170
+ )
171
+ end
172
+
173
+ def avg_diff_string
174
+ format("%02.3f", avg_diff)
175
+ end
176
+
177
+ def avg_diff
178
+ result_pairs.each_with_object([]) do |pair, diff|
179
+ diff << pair.first - pair.last
180
+ end.sum / result_pairs.length
181
+ end
182
+ end
183
+
184
+ `rm -f benchmark/*.json benchmark/*.md` unless %w[--skip -s].include?(ARGV[0])
185
+ puts Benchmarker.new("ops", "bin/ops").summary
data/bin/ops CHANGED
@@ -1,6 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
5
+
6
+ require_relative '../lib/profiler'
4
7
  require 'optparse'
5
8
 
6
9
  def usage
@@ -12,6 +15,8 @@ def usage
12
15
  end
13
16
 
14
17
  options = {}
18
+ status = -1
19
+
15
20
  while ARGV[0]&.match(/^-/)
16
21
  opt = ARGV.shift
17
22
  case opt
@@ -24,7 +29,14 @@ while ARGV[0]&.match(/^-/)
24
29
  end
25
30
  end
26
31
 
27
- require_relative "../loader"
28
- require 'ops'
32
+ Profiler.measure("bin:require") do
33
+ require_relative "../loader"
34
+ end
35
+
36
+ Profiler.measure("bin:run") do
37
+ status = Ops.new(ARGV, config_file: options[:file]).run
38
+ end
29
39
 
30
- exit Ops.new(ARGV, config_file: options[:file]).run
40
+ Profiler.add_measurement("bin:all", Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time)
41
+ Output.error(Profiler.summary) if Profiler.summary
42
+ exit status
data/lib/action.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'secrets'
4
-
5
3
  # represents one action to be performed in the shell
6
4
  # can assemble a command line from a command and args
7
5
  class Action
@@ -9,11 +7,13 @@ class Action
9
7
 
10
8
  def initialize(name, config, args)
11
9
  @name = name
12
- @config = config
10
+ @config = config || {}
13
11
  @args = args
14
12
  end
15
13
 
16
14
  def run
15
+ Output.error(Profiler.summary) if Profiler.summary
16
+
17
17
  if perform_shell_expansion?
18
18
  Kernel.exec(to_s)
19
19
  else
data/lib/action_list.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'action'
4
-
5
3
  class ActionList
6
4
  class UnknownActionError < StandardError; end
7
5
 
data/lib/builtin.rb CHANGED
@@ -6,16 +6,35 @@ class Builtin
6
6
  attr_reader :args, :config
7
7
 
8
8
  class << self
9
+ BUILTIN_DIR = "builtins"
10
+
9
11
  def description
10
12
  "no description"
11
13
  end
12
14
 
13
15
  def class_for(name:)
14
- Builtins.const_get(builtin_class_name_for(name: name), false)
16
+ file = file_for(name: name)
17
+ unless File.exist?(file)
18
+ require 'require_all'
19
+ require_rel "builtins"
20
+ end
21
+
22
+ get_const(name: builtin_class_name_for(name: name))
15
23
  end
16
24
 
17
25
  private
18
26
 
27
+ def get_const(name:)
28
+ Builtins.const_get(name)
29
+ rescue NameError
30
+ # no such constant
31
+ nil
32
+ end
33
+
34
+ def file_for(name:)
35
+ File.join(File.dirname(__FILE__), BUILTIN_DIR, "#{name}.rb")
36
+ end
37
+
19
38
  def builtin_class_name_for(name:)
20
39
  name.capitalize.to_sym
21
40
  end
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'builtin'
4
-
5
3
  module Builtins
6
- class Background < Builtin
4
+ class Background < ::Builtin
7
5
  DEFAULT_LOG_FILE_PREFIX = "/tmp/ops_bglog_"
8
6
 
9
7
  class << self
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'builtin'
4
- require 'builtins/background'
5
-
6
3
  module Builtins
7
4
  class BackgroundLog < Builtin
8
5
  class << self
@@ -1,12 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'require_all'
4
- require_rel "../../dependencies"
5
-
6
- require 'builtin'
7
- require 'builtins/helpers/dependency_handler'
8
- require 'output'
9
-
10
3
  module Builtins
11
4
  module Common
12
5
  class UpDown < Builtin
@@ -2,9 +2,6 @@
2
2
 
3
3
  require 'concurrent'
4
4
 
5
- require 'builtin'
6
- require 'output'
7
-
8
5
  module Builtins
9
6
  class Countdown < Builtin
10
7
  USAGE_STRING = "Usage: ops countdown <seconds>"
data/lib/builtins/down.rb CHANGED
@@ -1,10 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'require_all'
4
- require_rel "../dependencies"
5
-
6
- require 'builtins/common/up_down'
7
-
8
3
  module Builtins
9
4
  class Down < Common::UpDown
10
5
  def handle_dependency(dependency)
data/lib/builtins/env.rb CHANGED
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'builtin'
4
- require 'output'
5
-
6
3
  module Builtins
7
4
  class Env < Builtin
8
5
  class << self
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'builtin'
4
-
5
3
  module Builtins
6
- class EnvDiff < Builtin
4
+ class Envdiff < Builtin
7
5
  class << self
8
6
  def description
9
7
  "compares keys present in config and secrets between different environments"
@@ -126,6 +124,4 @@ module Builtins
126
124
  Options.get("envdiff.ignored_keys") || []
127
125
  end
128
126
  end
129
-
130
- Envdiff = EnvDiff
131
127
  end
data/lib/builtins/exec.rb CHANGED
@@ -1,10 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'builtin'
4
- require 'output'
5
- require 'secrets'
6
- require 'options'
7
-
8
3
  module Builtins
9
4
  class Exec < Builtin
10
5
  class << self
@@ -17,9 +12,11 @@ module Builtins
17
12
  Secrets.load if Options.get("exec.load_secrets")
18
13
 
19
14
  if args.any?
15
+ Output.error(Profiler.summary) if Profiler.summary
20
16
  Kernel.exec(args.join(" "))
21
17
  else
22
18
  Output.error("Usage: ops exec '<command>'")
19
+
23
20
  false
24
21
  end
25
22
  end
data/lib/builtins/help.rb CHANGED
@@ -2,10 +2,6 @@
2
2
 
3
3
  require 'colorize'
4
4
 
5
- require 'builtin'
6
- require 'forwards'
7
- require 'builtins/helpers/enumerator'
8
-
9
5
  module Builtins
10
6
  class Help < Builtin
11
7
  NAME_WIDTH = 40
@@ -1,11 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'builtin'
4
- require 'output'
5
-
6
- require 'require_all'
7
- require_rel "../../dependencies"
8
-
9
3
  module Builtins
10
4
  module Helpers
11
5
  class DependencyHandler
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'require_all'
4
+ require_rel '..'
5
+
3
6
  module Builtins
4
7
  module Helpers
5
8
  class Enumerator
data/lib/builtins/init.rb CHANGED
@@ -2,9 +2,6 @@
2
2
 
3
3
  require 'fileutils'
4
4
 
5
- require 'builtin'
6
- require 'output'
7
-
8
5
  module Builtins
9
6
  class Init < Builtin
10
7
  OPS_YML = "ops.yml"
data/lib/builtins/up.rb CHANGED
@@ -1,11 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'require_all'
4
- require_rel "../dependencies"
5
-
6
- require 'builtins/common/up_down'
7
- require 'output'
8
-
9
3
  module Builtins
10
4
  class Up < Common::UpDown
11
5
  def handle_dependency(dependency)
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "output"
4
- require "version"
5
-
6
3
  module Builtins
7
4
  class Version < Builtin
8
5
  class << self
@@ -2,8 +2,6 @@
2
2
 
3
3
  require 'English'
4
4
 
5
- require 'dependency'
6
-
7
5
  module Dependencies
8
6
  class Apk < Dependency
9
7
  def met?
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dependencies/versioned_dependency'
4
- require 'dependencies/helpers/apt_cache_policy'
5
-
6
3
  module Dependencies
7
4
  class Apt < VersionedDependency
8
5
  def met?
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dependency'
4
-
5
3
  module Dependencies
6
4
  class Brew < Dependency
7
5
  def met?
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dependencies/brew'
4
-
5
3
  module Dependencies
6
4
  class Cask < Brew
7
5
  def met?
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dependency'
4
-
5
3
  module Dependencies
6
4
  class Custom < Dependency
7
5
  class CustomConfigError < StandardError; end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dependency'
4
-
5
3
  module Dependencies
6
4
  class Dir < Dependency
7
5
  def met?
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dependency'
4
-
5
3
  module Dependencies
6
4
  class Docker < Dependency
7
5
  def met?
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dependency'
4
- require 'options'
5
-
6
3
  module Dependencies
7
4
  class Gem < VersionedDependency
8
5
  def met?
@@ -2,9 +2,6 @@
2
2
 
3
3
  require 'English'
4
4
 
5
- require 'dependency'
6
- require 'options'
7
-
8
5
  module Dependencies
9
6
  class Pip < Dependency
10
7
  DEFAULT_PIP = "python3 -m pip"
@@ -2,8 +2,6 @@
2
2
 
3
3
  require 'net/ssh'
4
4
 
5
- require 'dependency'
6
-
7
5
  module Dependencies
8
6
  class Sshkey < Dependency
9
7
  DEFAULT_KEY_SIZE = 4096
data/lib/dependency.rb CHANGED
@@ -3,9 +3,6 @@
3
3
  require 'open3'
4
4
  require 'English'
5
5
 
6
- require 'output'
7
- require 'executor'
8
-
9
6
  class Dependency
10
7
  DESCRIPTION_TYPE_WIDTH = 8
11
8
 
data/lib/environment.rb CHANGED
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'version'
4
- require 'secrets'
5
- require 'app_config'
6
-
7
3
  class Environment
8
4
  class << self
9
5
  def environment
data/lib/forward.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'output'
4
-
5
3
  class Forward
6
4
  def initialize(dir, args)
7
5
  @dir = dir
data/lib/forwards.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forward'
4
-
5
3
  class Forwards
6
4
  def initialize(config, args = [])
7
5
  @config = config
data/lib/hook_handler.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'output'
4
-
5
3
  class HookHandler
6
4
  class HookConfigError < StandardError; end
7
5
 
data/lib/ops.rb CHANGED
@@ -1,16 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'yaml'
5
- require 'require_all'
6
- require "rubygems"
7
-
8
- require 'output'
9
- require 'options'
10
- require 'version'
11
- require 'runner'
4
+ Profiler.measure("ops:requires_external") do
5
+ require 'yaml'
6
+ require "rubygems"
7
+ end
12
8
 
13
- require_rel "builtins"
9
+ Profiler.measure("ops:requires_internal") do
10
+ end
14
11
 
15
12
  # executes commands based on local `ops.yml`
16
13
  class Ops
@@ -45,7 +42,9 @@ class Ops
45
42
  return exit(INVALID_SYNTAX_EXIT_CODE) unless syntax_valid?
46
43
  return exit(MIN_VERSION_NOT_MET_EXIT_CODE) unless min_version_met?
47
44
 
48
- runner.run
45
+ Profiler.measure("runner:run") do
46
+ runner.run
47
+ end
49
48
  rescue Runner::UnknownActionError => e
50
49
  Output.error(e.to_s)
51
50
  Output.out(RECOMMEND_HELP_TEXT) unless print_did_you_mean
data/lib/profiler.rb ADDED
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Profiler
4
+ INDENT = " "
5
+
6
+ @measurements = {}
7
+
8
+ class << self
9
+ attr_reader :measurements
10
+
11
+ def measure(tag)
12
+ start = time_now
13
+ result = yield
14
+ add_measurement(tag, time_now - start)
15
+
16
+ result
17
+ end
18
+
19
+ def add_measurement(tag, seconds)
20
+ return unless profiling?
21
+
22
+ @measurements[tag] ||= []
23
+
24
+ @measurements[tag] << seconds
25
+ end
26
+
27
+ def summary
28
+ return unless profiling?
29
+
30
+ @summary ||= measurements.reverse_each.each_with_object([]) do |(tag, values), output|
31
+ output << "#{tag}:\n"
32
+ values.sort.reverse.each do |value|
33
+ value_str = format("%.3f", value * 1000)
34
+ output << format("%<indent>s%9<value>sms\n", indent: INDENT, value: value_str)
35
+ end
36
+ end.join
37
+ end
38
+
39
+ def profiling?
40
+ !ENV["OPS_PROFILE"].nil?
41
+ end
42
+
43
+ def time_now
44
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
45
+ end
46
+ end
47
+ end
data/lib/runner.rb CHANGED
@@ -1,11 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'hook_handler'
4
- require 'action'
5
- require 'action_list'
6
- require 'action_suggester'
7
- require 'forwards'
8
- require 'environment'
3
+ module Builtins
4
+ end
9
5
 
10
6
  class Runner
11
7
  class UnknownActionError < StandardError; end
@@ -61,7 +57,9 @@ class Runner
61
57
  end
62
58
 
63
59
  def builtin
64
- @builtin ||= Builtin.class_for(name: @action_name).new(@args, @config)
60
+ Profiler.measure("runner:require_builtin") do
61
+ @builtin ||= Builtin.class_for(name: @action_name)&.new(@args, @config)
62
+ end
65
63
  rescue NameError
66
64
  # this means there isn't a builtin with that name in that module
67
65
  nil
data/lib/secrets.rb CHANGED
@@ -3,10 +3,6 @@
3
3
  require 'json'
4
4
  require 'open3'
5
5
 
6
- require 'output'
7
- require 'app_config'
8
- require 'options'
9
-
10
6
  class Secrets < AppConfig
11
7
  class << self
12
8
  def default_filename
data/loader.rb CHANGED
@@ -1,4 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # for convenience, add "lib" to the load path
4
- $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/lib"))
4
+ # $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/lib"))
5
+
6
+ require 'zeitwerk'
7
+
8
+ loader = Zeitwerk::Loader.new
9
+ loader.push_dir(File.expand_path("#{__dir__}/lib"))
10
+ loader.setup
data/ops_team.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'ops_team'
5
- s.version = '1.13.0'
5
+ s.version = '1.16.0-rc1'
6
6
  s.authors = [
7
7
  'nickthecook@gmail.com'
8
8
  ]
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ops_team
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.0
4
+ version: 1.16.0.pre.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - nickthecook@gmail.com
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2021-10-25 00:00:00.000000000 Z
@@ -150,14 +150,15 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: 1.1.6
153
- description:
154
- email:
153
+ description:
154
+ email:
155
155
  executables:
156
156
  - ops
157
157
  extensions: []
158
158
  extra_rdoc_files: []
159
159
  files:
160
160
  - Gemfile
161
+ - bin/benchmark
161
162
  - bin/ops
162
163
  - bin/print_config
163
164
  - bin/print_secrets
@@ -205,6 +206,7 @@ files:
205
206
  - lib/ops.rb
206
207
  - lib/options.rb
207
208
  - lib/output.rb
209
+ - lib/profiler.rb
208
210
  - lib/runner.rb
209
211
  - lib/secrets.rb
210
212
  - lib/version.rb
@@ -214,7 +216,7 @@ homepage: https://github.com/nickthecook/ops
214
216
  licenses:
215
217
  - GPL-3.0-only
216
218
  metadata: {}
217
- post_install_message:
219
+ post_install_message:
218
220
  rdoc_options: []
219
221
  require_paths:
220
222
  - lib
@@ -225,12 +227,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
225
227
  version: '2.5'
226
228
  required_rubygems_version: !ruby/object:Gem::Requirement
227
229
  requirements:
228
- - - ">="
230
+ - - ">"
229
231
  - !ruby/object:Gem::Version
230
- version: '0'
232
+ version: 1.3.1
231
233
  requirements: []
232
234
  rubygems_version: 3.2.15
233
- signing_key:
235
+ signing_key:
234
236
  specification_version: 4
235
237
  summary: ops_team handles basic automation for your project, driven by self-documenting
236
238
  YAML config