vidar 0.0.1 → 0.1.4

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: 1812f508b912f66c364c6e30d37e6a3a13f1a6ab2314778e5c4c83c0c39758ee
4
- data.tar.gz: 43de0e087390e978960b2f88bd28aba4bfe245767c9610fc1c723511796d13cd
3
+ metadata.gz: d76eee317ea354bb1372becb1ceff870a1e194e3781b38e877ae4ebf5d75ec38
4
+ data.tar.gz: 85a8bcb00c32cb181f8aef9e9f372bddba7614bca548417cd7e7e4897172c390
5
5
  SHA512:
6
- metadata.gz: 39b115f30f8f35344faae6380c60fd313b2b779358855446fca2930070a5db7b3f0e9dcb12db96b435a6cc620b7bf9b05dd643366a38d9687feedbf62f8b39ff
7
- data.tar.gz: e66c107bd61014c630e2a580b381bdf12b16b02ab8e1180a80fdac9c92384423e1375a0953a5c878b6b1aa369b602da6ebc13435ed781e6a61abb42cf3df649b
6
+ metadata.gz: 635f242141f0760c1469cc6e26a871cf552f3d85f237b54c742dad358bc2701108b9db6155184d30a5068090cd6f801ce91ffb32c01b5b85874c4f0ee2f64697
7
+ data.tar.gz: f84d3772de7d823d95b304e4dfc3d2260d6c4d201c101c3296b8409b7fa0bc4708d723ff71ec4b855b17a8432bfb5f4bf3b711b127efe7b4ba5b9a8b581eea50
data/.gitignore CHANGED
@@ -9,3 +9,6 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+
13
+ # Cached rubocop config files
14
+ .rubocop-http*
data/.rubocop.yml CHANGED
@@ -1,62 +1,8 @@
1
- Gemspec/RequiredRubyVersion:
2
- Include:
3
- - 2.4
4
- - 2.5
5
- - 2.6
1
+ require:
2
+ - rubocop-performance
6
3
 
7
- Lint/UnusedBlockArgument:
8
- Enabled: false
4
+ inherit_from:
5
+ - https://raw.githubusercontent.com/RenoFi/rubocop/master/ruby.yml
9
6
 
10
- Layout/AlignHash:
11
- Enabled: false
12
-
13
- Naming/FileName:
14
- Enabled: false
15
-
16
- Metrics/BlockLength:
17
- Max: 30
18
- Exclude:
19
- - '**/*_spec.rb'
20
-
21
- Metrics/LineLength:
22
- Max: 140
23
-
24
- Metrics/MethodLength:
25
- Max: 20
26
-
27
- Security/YAMLLoad:
28
- Enabled: false
29
-
30
- Style/BlockDelimiters:
31
- EnforcedStyle: braces_for_chaining
32
-
33
- Style/Documentation:
34
- Enabled: false
35
-
36
- Style/GuardClause:
37
- Enabled: false
38
-
39
- Style/EachWithObject:
40
- Enabled: false
41
-
42
- Style/MethodMissingSuper:
43
- Enabled: false
44
-
45
- Style/MissingRespondToMissing:
46
- Enabled: false
47
-
48
- Style/FrozenStringLiteralComment:
49
- Enabled: false
50
-
51
- Style/PercentLiteralDelimiters:
52
- Enabled: false
53
-
54
- Style/RescueStandardError:
55
- Exclude:
56
- - 'spec/*.rb'
57
-
58
- Style/SymbolArray:
59
- EnforcedStyle: brackets
60
-
61
- Style/TrivialAccessors:
62
- Enabled: false
7
+ AllCops:
8
+ TargetRubyVersion: 2.6
data/.travis.yml CHANGED
@@ -3,7 +3,5 @@ sudo: false
3
3
  language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
- - 2.4.6
7
- - 2.5.5
8
- - 2.6.3
6
+ - 2.6.4
9
7
  before_install: gem install bundler -v 2.0.2
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vidar (0.0.1)
4
+ vidar (0.1.4)
5
5
  colorize
6
6
  thor (~> 0.20)
7
7
 
@@ -15,13 +15,13 @@ GEM
15
15
  jaro_winkler (1.5.3)
16
16
  method_source (0.9.2)
17
17
  parallel (1.17.0)
18
- parser (2.6.3.0)
18
+ parser (2.6.4.0)
19
19
  ast (~> 2.4.0)
20
20
  pry (0.12.2)
21
21
  coderay (~> 1.1.0)
22
22
  method_source (~> 0.9.0)
23
23
  rainbow (3.0.0)
24
- rake (10.5.0)
24
+ rake (12.3.3)
25
25
  rspec (3.8.0)
26
26
  rspec-core (~> 3.8.0)
27
27
  rspec-expectations (~> 3.8.0)
@@ -42,6 +42,8 @@ GEM
42
42
  rainbow (>= 2.2.2, < 4.0)
43
43
  ruby-progressbar (~> 1.7)
44
44
  unicode-display_width (>= 1.4.0, < 1.7)
45
+ rubocop-performance (1.4.1)
46
+ rubocop (>= 0.71.0)
45
47
  ruby-progressbar (1.10.1)
46
48
  thor (0.20.3)
47
49
  unicode-display_width (1.6.0)
@@ -50,11 +52,12 @@ PLATFORMS
50
52
  ruby
51
53
 
52
54
  DEPENDENCIES
53
- bundler (~> 2.0)
54
- pry (~> 0.12)
55
- rake (~> 10.0)
56
- rspec (~> 3.0)
57
- rubocop (~> 0.71)
55
+ bundler
56
+ pry
57
+ rake
58
+ rspec
59
+ rubocop
60
+ rubocop-performance
58
61
  vidar!
59
62
 
60
63
  BUNDLED WITH
data/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ [![Gem Version](https://badge.fury.io/rb/vidar.svg)](https://rubygems.org/gems/vidar)
2
+ [![Build Status](https://travis-ci.org/RenoFi/vidar.svg?branch=master)](https://travis-ci.org/RenoFi/vidar)
3
+
1
4
  # Vidar
2
5
 
3
6
  Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/vidar`. To experiment with that code, run `bin/console` for an interactive prompt.
data/bin/vidar ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'vidar'
5
+
6
+ Vidar::CLI.start
data/exe/vidar ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'vidar'
4
+
5
+ Vidar::CLI.start
data/lib/vidar.rb CHANGED
@@ -1,5 +1,22 @@
1
+ require 'yaml'
2
+ require 'json'
3
+ require 'open3'
4
+ require 'ostruct'
5
+ require 'yaml'
6
+
7
+ require 'thor'
8
+ require 'colorized_string'
9
+
1
10
  require 'vidar/version'
11
+ require 'vidar/config'
12
+ require 'vidar/log'
13
+ require 'vidar/run'
14
+ require 'vidar/slack_notification'
15
+ require 'vidar/k8s/container_status'
16
+ require 'vidar/k8s/pods'
17
+ require 'vidar/cli'
2
18
 
3
19
  module Vidar
4
- class Error < StandardError; end
20
+ Error = Class.new(StandardError)
21
+ MissingConfigError = Class.new(StandardError)
5
22
  end
data/lib/vidar/cli.rb ADDED
@@ -0,0 +1,124 @@
1
+ module Vidar
2
+ class CLI < Thor
3
+ include Thor::Shell
4
+
5
+ def self.exit_on_failure?
6
+ true
7
+ end
8
+
9
+ desc "run_runner", "Runs any given command in runner image"
10
+ option :command
11
+ def run_runner
12
+ Run.docker_compose("run runner #{options[:command]}") || exit(1)
13
+ end
14
+
15
+ desc "pull", "Pulls existing docker images to leverage docker caching"
16
+ def pull
17
+ Log.info "Pulling #{Config.get(:image)} tags"
18
+ Run.docker "pull #{Config.get(:image)}:builder-#{Config.get(:current_branch)} 2> /dev/null || true"
19
+ Run.docker "pull #{Config.get(:image)}:builder 2> /dev/null || true"
20
+ Run.docker "pull #{Config.get(:image)}:release 2> /dev/null || true"
21
+ Log.info "Docker images:"
22
+ puts Run.docker "images"
23
+ end
24
+
25
+ desc "build", "Builds docker stages"
26
+ def build
27
+ Log.info "Building #{Config.get(:image)}:builder-#{Config.get(:current_branch)}"
28
+ Run.docker_compose "build builder"
29
+
30
+ Log.info "Building #{Config.get(:image)}:runner-#{Config.get(:current_branch)}"
31
+ Run.docker_compose "build runner"
32
+
33
+ Log.info "Building #{Config.get(:image)}:release"
34
+ Run.docker_compose "build release"
35
+ end
36
+
37
+ desc "cache", "Caches intermediate docker stages"
38
+ def cache
39
+ Log.info "Publish #{Config.get(:image)}:builder-#{Config.get(:current_branch)}"
40
+ Run.docker "push #{Config.get(:image)}:builder-#{Config.get(:current_branch)}"
41
+ end
42
+
43
+ desc "publish", "Publishes docker images on docker registry"
44
+ def publish
45
+ Log.info "Publish #{Config.get(:image)}:#{Config.get(:revision)}"
46
+ Run.docker "tag #{Config.get(:image)}:release #{Config.get(:image)}:#{Config.get(:revision)}"
47
+ Run.docker "push #{Config.get(:image)}:#{Config.get(:revision)}"
48
+
49
+ return unless Config.get(:current_branch) == Config.get(:default_branch)
50
+
51
+ Log.info "Publish #{Config.get(:image)}:builder"
52
+ Run.docker "tag #{Config.get(:image)}:builder-#{Config.get(:current_branch)} #{Config.get(:image)}:builder"
53
+ Run.docker "push #{Config.get(:image)}:builder"
54
+
55
+ Log.info "Publish #{Config.get(:image)}:latest"
56
+ Run.docker "tag #{Config.get(:image)}:release #{Config.get(:image)}:latest"
57
+ Run.docker "push #{Config.get(:image)}:release"
58
+ Run.docker "push #{Config.get(:image)}:latest"
59
+ end
60
+
61
+ desc "deploy", "Performs k8s deployment with deploy hook"
62
+ method_option :revision, default: nil
63
+ def deploy
64
+ revision = options[:revision] || Config.get(:revision)
65
+ Log.info "Current cluster: #{Config.get(:cluster)} ###"
66
+
67
+ Log.info "Set kubectl image..."
68
+ Run.kubectl "set image deployments,cronjobs *=#{Config.get(:image)}:#{revision} --all"
69
+
70
+ Log.info "Looking for deploy hook..."
71
+ template_name, error, status = Open3.capture3 "kubectl get cronjob deploy-hook-template -n #{Config.get(:namespace)} -o name --ignore-not-found=true"
72
+
73
+ if status.success?
74
+ if template_name.to_s.empty?
75
+ Log.info "No deploy hook found"
76
+ else
77
+ Log.info "Executing deploy hook #{template_name.strip!}..."
78
+ Run.kubectl "delete job deploy-hook --ignore-not-found=true"
79
+ Run.kubectl "create job deploy-hook --from=#{template_name}"
80
+ end
81
+ else
82
+ Log.info "Error getting deploy hook template: #{error}"
83
+ exit(1)
84
+ end
85
+ end
86
+
87
+ desc "monitor_deploy_status", "Checks is deployment has finished and sends post-deploy notification"
88
+ def monitor_deploy_status
89
+ Log.info "Current cluster: #{Config.get(:cluster)} ###"
90
+ Log.info "Checking is all containers on #{Config.get(:cluster)} in #{Config.get(:namespace)} are ready..."
91
+
92
+ sleep(2)
93
+ error = false
94
+ tries = 0
95
+ max_tries = 30
96
+ until K8s::Pods.new(Config.get(:namespace)).all_ready?
97
+ tries += 1
98
+ sleep(10)
99
+ if tries > max_tries
100
+ error = true
101
+ break
102
+ end
103
+ end
104
+
105
+ slack_notification = SlackNotification.new(
106
+ webhook_url: Config.get(:slack_webhook_url),
107
+ github: Config.get(:github),
108
+ revision: Config.get(:revision),
109
+ revision_name: Config.get(:revision_name),
110
+ cluster: Config.get(:cluster),
111
+ cluster_url: Config.get(:cluster_url)
112
+ )
113
+
114
+ if error
115
+ Log.error "ERROR: Some of containers are not ready."
116
+ slack_notification.error
117
+ exit(1)
118
+ else
119
+ Log.info "OK: All containers are ready."
120
+ slack_notification.success
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,37 @@
1
+ module Vidar
2
+ class Config
3
+ DEFAULT_MANIFEST_FILE = "vidar.yml".freeze
4
+
5
+ DEFAULT_OPTIONS = {
6
+ compose_file: -> { "docker-compose.ci.yml" },
7
+ default_branch: -> { "master" },
8
+ current_branch: -> { `git rev-parse --abbrev-ref HEAD`.strip.tr("/", "-") },
9
+ revision: -> { `git rev-parse HEAD`.strip },
10
+ revision_name: -> { `git show --pretty=format:"%s (%h)" -s HEAD`.strip },
11
+ cluster: -> { `kubectl config current-context`.strip.split("_", 4)[-1] } # TODO: improve context cleanup
12
+ }.freeze
13
+
14
+ class << self
15
+ attr_reader :data
16
+ attr_writer :manifest_file
17
+
18
+ def load(file_path = manifest_file)
19
+ @data = YAML.load_file(file_path)
20
+ @loaded = true
21
+ end
22
+
23
+ def manifest_file
24
+ @manifest_file || DEFAULT_MANIFEST_FILE
25
+ end
26
+
27
+ def loaded?
28
+ @loaded
29
+ end
30
+
31
+ def get(key)
32
+ load unless loaded?
33
+ @data[key.to_s] || DEFAULT_OPTIONS[key.to_sym]&.call || fail(MissingConfigError, key)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,71 @@
1
+ module Vidar
2
+ module K8s
3
+ class ContainerStatus
4
+ attr_reader :data, :state
5
+
6
+ def initialize(data)
7
+ @data = data
8
+ @state = data["state"]
9
+ end
10
+
11
+ def name
12
+ data["name"]
13
+ end
14
+
15
+ def ok?
16
+ (ready? && running?) || terminated_completed?
17
+ end
18
+
19
+ def to_text
20
+ parts = ["Name: #{name}"] + text_statuses
21
+ parts.map { |s| s.ljust(50, " ") }.join(" | ")
22
+ end
23
+
24
+ def text_statuses
25
+ if running?
26
+ if ready?
27
+ [ColorizedString["Status: Ready & Running"].light_green, "Started at: #{running_started_at}"]
28
+ else
29
+ [ColorizedString["Status: Not ready"].light_red, "Started at: #{running_started_at}"]
30
+ end
31
+ elsif terminated_completed?
32
+ [ColorizedString["Status: Terminated/Completed"].light_green, "Finished at: #{terminated_finished_at}"]
33
+ elsif terminated_error?
34
+ [ColorizedString["Status: Terminated/Error"].light_red]
35
+ elsif waiting?
36
+ [ColorizedString["Status: Waiting"].light_green]
37
+ else
38
+ [ColorizedString[state.inspect].light_red]
39
+ end
40
+ end
41
+
42
+ def waiting?
43
+ state["waiting"]
44
+ end
45
+
46
+ def ready?
47
+ data["ready"]
48
+ end
49
+
50
+ def running?
51
+ !running_started_at.nil?
52
+ end
53
+
54
+ def running_started_at
55
+ state.dig("running", "startedAt")
56
+ end
57
+
58
+ def terminated_completed?
59
+ state.dig("terminated", "reason") == "Completed" || state.dig("terminated", "exitCode") == 0
60
+ end
61
+
62
+ def terminated_finished_at
63
+ state.dig("terminated", "finishedAt")
64
+ end
65
+
66
+ def terminated_error?
67
+ state.dig("terminated", "reason") == "Error" || state.dig("terminated", "exitCode")
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,40 @@
1
+ module Vidar
2
+ module K8s
3
+ class Pods
4
+ def initialize(namespace)
5
+ @namespace = namespace
6
+ end
7
+
8
+ def all_ready?
9
+ if items.empty?
10
+ Log.error "Could not fetch pod list"
11
+ return false
12
+ end
13
+
14
+ container_statuses.each do |container_status|
15
+ Log.info container_status.to_text
16
+ end
17
+
18
+ Log.info "-", "-"
19
+
20
+ container_statuses.all?(&:ok?)
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :pods, :namespace
26
+
27
+ def items
28
+ @items ||= begin
29
+ output = `kubectl get pods -n #{Config.get(:namespace)} -o json`
30
+ json = JSON.parse(output.strip)
31
+ json["items"] || []
32
+ end
33
+ end
34
+
35
+ def container_statuses
36
+ @container_statuses ||= items.map { |i| i.dig("status", "containerStatuses") }.flatten.compact.map { |status| ContainerStatus.new(status) }
37
+ end
38
+ end
39
+ end
40
+ end
data/lib/vidar/log.rb ADDED
@@ -0,0 +1,13 @@
1
+ module Vidar
2
+ class Log
3
+ class << self
4
+ def info(text, fill_with = "#")
5
+ puts ColorizedString["#{fill_with} #{text} ".ljust(100, fill_with)].colorize(:light_green)
6
+ end
7
+
8
+ def error(text, fill_with = "#")
9
+ puts ColorizedString["#{fill_with} #{text} ".ljust(100, fill_with)].colorize(:light_red)
10
+ end
11
+ end
12
+ end
13
+ end
data/lib/vidar/run.rb ADDED
@@ -0,0 +1,18 @@
1
+ module Vidar
2
+ class Run
3
+ class << self
4
+ def docker(command)
5
+ system("docker #{command}") || exit(1)
6
+ end
7
+
8
+ def docker_compose(command)
9
+ args = %w[revision current_branch].map { |arg| "#{arg.upcase}=#{Config.get(arg.to_sym)}" }
10
+ system("#{args.join(' ')} docker-compose -f #{Config.get(:compose_file)} #{command}") || exit(1)
11
+ end
12
+
13
+ def kubectl(command)
14
+ system("kubectl --namespace=#{Config.get(:namespace)} #{command}") || exit(1)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,59 @@
1
+ module Vidar
2
+ class SlackNotification
3
+ SUCCESS_COLOR = "good".freeze
4
+ ERROR_COLOR = "danger".freeze
5
+
6
+ def initialize(webhook_url:, github:, revision:, revision_name:, cluster:, cluster_url:)
7
+ @webhook_url = webhook_url
8
+ @github = github
9
+ @revision = revision
10
+ @revision_name = revision_name
11
+ @cluster = cluster
12
+ @cluster_url = cluster_url
13
+ end
14
+
15
+ def error
16
+ message = "Failed deploy of #{github_link} to #{cluster_link} :fire: <!channel>"
17
+ perform data(message: message, color: ERROR_COLOR)
18
+ end
19
+
20
+ def success
21
+ message = "Successful deploy of #{github_link} to #{cluster_link}"
22
+ perform data(message: message, color: SUCCESS_COLOR)
23
+ end
24
+
25
+ def perform(data)
26
+ `curl -X POST -H "Content-type: application/json" --data '#{data}' '#{webhook_url}' 2>&1 /dev/null`
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :webhook_url, :github, :revision, :revision_name, :cluster, :cluster_url
32
+
33
+ def data(message:, color:)
34
+ {
35
+ "attachments": [
36
+ {
37
+ "title": github,
38
+ "title_link": github_url,
39
+ "color": color,
40
+ "text": message,
41
+ "fallback": message
42
+ }
43
+ ]
44
+ }.to_json
45
+ end
46
+
47
+ def github_url
48
+ "https://github.com/#{github}/commit/#{revision}"
49
+ end
50
+
51
+ def github_link
52
+ "<#{github_url}|#{revision_name}>"
53
+ end
54
+
55
+ def cluster_link
56
+ "<#{cluster_url}|#{cluster}>"
57
+ end
58
+ end
59
+ end
data/lib/vidar/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vidar
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.1.4'.freeze
3
3
  end
data/vidar.gemspec CHANGED
@@ -22,14 +22,15 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.required_ruby_version = '>= 2.4'
25
+ spec.required_ruby_version = '>= 2.6'
26
26
 
27
27
  spec.add_dependency 'colorize'
28
28
  spec.add_dependency 'thor', '~> 0.20'
29
29
 
30
- spec.add_development_dependency 'bundler', '~> 2.0'
31
- spec.add_development_dependency 'pry', '~> 0.12'
32
- spec.add_development_dependency 'rake', '~> 10.0'
33
- spec.add_development_dependency 'rspec', '~> 3.0'
34
- spec.add_development_dependency 'rubocop', '~> 0.71'
30
+ spec.add_development_dependency 'bundler'
31
+ spec.add_development_dependency 'pry'
32
+ spec.add_development_dependency 'rake'
33
+ spec.add_development_dependency 'rspec'
34
+ spec.add_development_dependency 'rubocop'
35
+ spec.add_development_dependency 'rubocop-performance'
35
36
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vidar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Knapik
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-08-21 00:00:00.000000000 Z
12
+ date: 2019-09-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize
@@ -43,77 +43,92 @@ dependencies:
43
43
  name: bundler
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - "~>"
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '2.0'
48
+ version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - "~>"
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: '2.0'
55
+ version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: pry
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - "~>"
60
+ - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: '0.12'
62
+ version: '0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - "~>"
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: '0.12'
69
+ version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rake
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - "~>"
74
+ - - ">="
75
75
  - !ruby/object:Gem::Version
76
- version: '10.0'
76
+ version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - "~>"
81
+ - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: '10.0'
83
+ version: '0'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: rspec
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - "~>"
88
+ - - ">="
89
89
  - !ruby/object:Gem::Version
90
- version: '3.0'
90
+ version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - "~>"
95
+ - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: '3.0'
97
+ version: '0'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: rubocop
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - "~>"
102
+ - - ">="
103
103
  - !ruby/object:Gem::Version
104
- version: '0.71'
104
+ version: '0'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - "~>"
109
+ - - ">="
110
110
  - !ruby/object:Gem::Version
111
- version: '0.71'
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rubocop-performance
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
112
126
  description:
113
127
  email:
114
128
  - knapo@knapo.net
115
129
  - engineering@renofi.com
116
- executables: []
130
+ executables:
131
+ - vidar
117
132
  extensions: []
118
133
  extra_rdoc_files: []
119
134
  files:
@@ -128,7 +143,16 @@ files:
128
143
  - Rakefile
129
144
  - bin/console
130
145
  - bin/setup
146
+ - bin/vidar
147
+ - exe/vidar
131
148
  - lib/vidar.rb
149
+ - lib/vidar/cli.rb
150
+ - lib/vidar/config.rb
151
+ - lib/vidar/k8s/container_status.rb
152
+ - lib/vidar/k8s/pods.rb
153
+ - lib/vidar/log.rb
154
+ - lib/vidar/run.rb
155
+ - lib/vidar/slack_notification.rb
132
156
  - lib/vidar/version.rb
133
157
  - vidar.gemspec
134
158
  homepage: https://github.com/RenoFi/vidar
@@ -145,7 +169,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
169
  requirements:
146
170
  - - ">="
147
171
  - !ruby/object:Gem::Version
148
- version: '2.4'
172
+ version: '2.6'
149
173
  required_rubygems_version: !ruby/object:Gem::Requirement
150
174
  requirements:
151
175
  - - ">="