vidar 0.0.1 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">="