vidar 0.1.5 → 0.1.6

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: 39bab664337e5a4ff3a1a94ab654a9aa1243c21684896cd09f38b9c8bf012a64
4
- data.tar.gz: 550b5a6b1102c328d94b40cfcbaef9e5d400713e560e08f9899256ddc8d0172a
3
+ metadata.gz: cb4f731d2ecb43dbab6e252579b755bc1098a307abf207016b030250fe7a521c
4
+ data.tar.gz: 0f33ac809ea03301a9fba6d6d8aada53e45c06b7c31e8a0d45e50770d39efa80
5
5
  SHA512:
6
- metadata.gz: e20c5780fdd46521e51d37fe2c08ab1d1d8d034a0241142b518f1164dbeef37145b14a08ea55ee5bac44f9e1f43fbdc46702cf0c1cfbb60c1060d970cd44c41b
7
- data.tar.gz: 1a53963ffcbfde5f641a96da266d9a469cf35ae8b47f504411c4696e51f471ce8128204e12b60f39c7807fe8eff5ed64ba67577bc91439904c3084dc2ff687ad
6
+ metadata.gz: 62042e2e8463466d35ad3fe7ab0bc983802d0068b3de11f9defa8c2c9d3014d063ea62e8699f6915a7d97a0eeac7f8280d5f7c5d75d404e0b605686fcbe3a809
7
+ data.tar.gz: a4584dd019975cd299a2addbc0e01e417fa623ce1cfd7b5693cdbcb119f7883715edca4523cb774721b7c4acd7a0b8ecc735d38f185b04c394fc75cb8c403f9e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vidar (0.1.5)
4
+ vidar (0.1.6)
5
5
  colorize
6
6
  thor (~> 0.20)
7
7
 
data/lib/vidar.rb CHANGED
@@ -9,6 +9,7 @@ require 'colorized_string'
9
9
 
10
10
  require 'vidar/version'
11
11
  require 'vidar/config'
12
+ require 'vidar/interpolation'
12
13
  require 'vidar/log'
13
14
  require 'vidar/run'
14
15
  require 'vidar/slack_notification'
data/lib/vidar/cli.rb CHANGED
@@ -14,61 +14,61 @@ module Vidar
14
14
 
15
15
  desc "pull", "Pulls existing docker images to leverage docker caching"
16
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"
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
21
  Log.info "Docker images:"
22
22
  puts Run.docker "images"
23
23
  end
24
24
 
25
25
  desc "build", "Builds docker stages"
26
26
  def build
27
- Log.info "Building #{Config.get(:image)}:builder-#{Config.get(:current_branch)}"
27
+ Log.info "Building #{Config.get!(:image)}:builder-#{Config.get!(:current_branch)}"
28
28
  Run.docker_compose "build builder"
29
29
 
30
- Log.info "Building #{Config.get(:image)}:runner-#{Config.get(:current_branch)}"
30
+ Log.info "Building #{Config.get!(:image)}:runner-#{Config.get!(:current_branch)}"
31
31
  Run.docker_compose "build runner"
32
32
 
33
- Log.info "Building #{Config.get(:image)}:release"
33
+ Log.info "Building #{Config.get!(:image)}:release"
34
34
  Run.docker_compose "build release"
35
35
  end
36
36
 
37
37
  desc "cache", "Caches intermediate docker stages"
38
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)}"
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
41
  end
42
42
 
43
43
  desc "publish", "Publishes docker images on docker registry"
44
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)}"
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
48
 
49
- return unless Config.get(:current_branch) == Config.get(:default_branch)
49
+ return unless Config.get!(:current_branch) == Config.get!(:default_branch)
50
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"
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
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"
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
59
  end
60
60
 
61
61
  desc "deploy", "Performs k8s deployment with deploy hook"
62
62
  method_option :revision, default: nil
63
63
  def deploy
64
- revision = options[:revision] || Config.get(:revision)
65
- Log.info "Current cluster: #{Config.get(:cluster)} ###"
64
+ revision = options[:revision] || Config.get!(:revision)
65
+ Log.info "Current cluster: #{Config.get!(:cluster)} ###"
66
66
 
67
67
  Log.info "Set kubectl image..."
68
- Run.kubectl "set image deployments,cronjobs *=#{Config.get(:image)}:#{revision} --all"
68
+ Run.kubectl "set image deployments,cronjobs *=#{Config.get!(:image)}:#{revision} --all"
69
69
 
70
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"
71
+ template_name, error, status = Open3.capture3 "kubectl get cronjob deploy-hook-template -n #{Config.get!(:namespace)} -o name --ignore-not-found=true"
72
72
 
73
73
  if status.success?
74
74
  if template_name.to_s.empty?
@@ -86,7 +86,7 @@ module Vidar
86
86
 
87
87
  desc "release", "Builds and publishes docker images"
88
88
  def release
89
- Log.info "Release #{options[:image]}:#{options[:revision]}"
89
+ Log.info "Release #{options[:image]}:#{options[:revision]}"
90
90
  pull
91
91
  build
92
92
  cache
@@ -95,14 +95,14 @@ module Vidar
95
95
 
96
96
  desc "monitor_deploy_status", "Checks is deployment has finished and sends post-deploy notification"
97
97
  def monitor_deploy_status
98
- Log.info "Current cluster: #{Config.get(:cluster)} ###"
99
- Log.info "Checking is all containers on #{Config.get(:cluster)} in #{Config.get(:namespace)} are ready..."
98
+ Log.info "Current cluster: #{Config.get!(:cluster)} ###"
99
+ Log.info "Checking is all containers on #{Config.get!(:cluster)} in #{Config.get!(:namespace)} are ready..."
100
100
 
101
101
  sleep(2)
102
102
  error = false
103
103
  tries = 0
104
104
  max_tries = 30
105
- until K8s::Pods.new(Config.get(:namespace)).all_ready?
105
+ until K8s::Pods.new(Config.get!(:namespace)).all_ready?
106
106
  tries += 1
107
107
  sleep(10)
108
108
  if tries > max_tries
@@ -111,13 +111,15 @@ module Vidar
111
111
  end
112
112
  end
113
113
 
114
+ return unless Config.get(:slack_webhook_url)
115
+
114
116
  slack_notification = SlackNotification.new(
115
- webhook_url: Config.get(:slack_webhook_url),
116
- github: Config.get(:github),
117
- revision: Config.get(:revision),
118
- revision_name: Config.get(:revision_name),
119
- cluster: Config.get(:cluster),
120
- cluster_url: Config.get(:cluster_url)
117
+ webhook_url: Config.get!(:slack_webhook_url),
118
+ github: Config.get!(:github),
119
+ revision: Config.get!(:revision),
120
+ revision_name: Config.get!(:revision_name),
121
+ cluster: Config.get!(:cluster),
122
+ cluster_url: Config.get!(:cluster_url)
121
123
  )
122
124
 
123
125
  if error
data/lib/vidar/config.rb CHANGED
@@ -30,7 +30,13 @@ module Vidar
30
30
 
31
31
  def get(key)
32
32
  load unless loaded?
33
- @data[key.to_s] || DEFAULT_OPTIONS[key.to_sym]&.call || fail(MissingConfigError, key)
33
+ value = @data[key.to_s] || DEFAULT_OPTIONS[key.to_sym]&.call
34
+ Vidar::Interpolation.call(value, self)
35
+ end
36
+
37
+ def get!(key)
38
+ load unless loaded?
39
+ get(key) || fail(MissingConfigError, key)
34
40
  end
35
41
  end
36
42
  end
@@ -0,0 +1,16 @@
1
+ module Vidar
2
+ class Interpolation
3
+ INTERPOLATION_PATTERN = /\{\{(\w+)\}\}/.freeze
4
+
5
+ class << self
6
+ def call(string, getter)
7
+ return unless string
8
+ fail ArgumentError, "getter must respond_to get." unless getter.respond_to?(:get)
9
+
10
+ string.gsub(INTERPOLATION_PATTERN) do |match|
11
+ getter.get($1) || match
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -26,7 +26,7 @@ module Vidar
26
26
 
27
27
  def items
28
28
  @items ||= begin
29
- output = `kubectl get pods -n #{Config.get(:namespace)} -o json`
29
+ output = `kubectl get pods -n #{Config.get!(:namespace)} -o json`
30
30
  json = JSON.parse(output.strip)
31
31
  json["items"] || []
32
32
  end
data/lib/vidar/run.rb CHANGED
@@ -6,12 +6,12 @@ module Vidar
6
6
  end
7
7
 
8
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)
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
11
  end
12
12
 
13
13
  def kubectl(command)
14
- system("kubectl --namespace=#{Config.get(:namespace)} #{command}") || exit(1)
14
+ system("kubectl --namespace=#{Config.get!(:namespace)} #{command}") || exit(1)
15
15
  end
16
16
  end
17
17
  end
data/lib/vidar/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vidar
2
- VERSION = '0.1.5'.freeze
2
+ VERSION = '0.1.6'.freeze
3
3
  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.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Knapik
@@ -148,6 +148,7 @@ files:
148
148
  - lib/vidar.rb
149
149
  - lib/vidar/cli.rb
150
150
  - lib/vidar/config.rb
151
+ - lib/vidar/interpolation.rb
151
152
  - lib/vidar/k8s/container_status.rb
152
153
  - lib/vidar/k8s/pods.rb
153
154
  - lib/vidar/log.rb