kuby-core 0.13.0 → 0.14.0

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: a443b66d4dff19f6a2112b6365a9579b0490b049ef51ab612ad9e6cf4a807901
4
- data.tar.gz: 2b38151be094c758a64ecdc95c585f184f4e9eea1affbdc4d071cc7a20d499a0
3
+ metadata.gz: 3b6d5377f043be7d0aa02cddf817a9dd7fdbaa500c2ed94a2fdb92fa7ef0c1cc
4
+ data.tar.gz: 57c6cb1a15c4385a7675a05637dbfd085e2b2f438f5429104ec66203e854dd68
5
5
  SHA512:
6
- metadata.gz: 6cf93a88bc24ab142fa497daddc7227d417c138391f46db6f5b77a862c96e9c2733d880eded21d464170963902364ac0f2806f84cd083d0a5b408231987bcf2b
7
- data.tar.gz: dab2dcd180ff19421ef44aef1a3384e1faa0b49511925e6557d54500a652a5c854217a8c463cd738cd6a745b2eb1804262e35539635fdb4d98ed13d2abc90aa2
6
+ metadata.gz: 9c903b0768473d63df1a3ddb9ee3146193abad9c809614f7ccd2e7b7c711a2a3effd3810a3b67780ee68ea3198b8770099fcb3fd4d2a334b39b664f59b8e9e8f
7
+ data.tar.gz: 69fc8934c14181930c03d3d3ffe050e2da0a85edbbd2f5bba38bf0509131149c643ea42577afcec3a4625057eab52f57bab1e00c3271bedcf491d2e11f1ae696
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.14.0
2
+ * Make RAILS_MASTER_KEY available in the assets image (@palkan, #63)
3
+ * Allow specifying custom docker build options via CLI (@palkan, #65)
4
+
1
5
  ## 0.13.0
2
6
  * Fix handling rails/rake options in remote exec (@palkan, #60)
3
7
  * Add `bundler_phase.gemfiles(*paths)` to allow adding additional gemfiles (@palkan, #61)
data/lib/kuby/commands.rb CHANGED
@@ -65,23 +65,25 @@ module Kuby
65
65
  desc 'Builds the Docker image.'
66
66
  command :build do |c|
67
67
  c.flag [:a, :arg], required: false, multiple: true
68
- c.action do |global_options, options, args|
68
+ c.flag [:only], required: false
69
+ c.action do |global_options, options, docker_args|
69
70
  build_args = {}.tap do |build_args|
70
71
  (options[:arg] || []).each do |a|
71
- key, value = a.split('=')
72
+ key, value = a.split('=', 2)
72
73
  value = value[1..-2] if value.start_with?('"') || value.start_with?("'")
73
74
  build_args[key] = value
74
75
  end
75
76
  end
76
77
 
77
- tasks.build(build_args)
78
+ tasks.build(build_args, docker_args, options[:only])
78
79
  end
79
80
  end
80
81
 
81
82
  desc 'Pushes the Docker image to the configured registry.'
82
83
  command :push do |c|
84
+ c.flag [:only], required: false
83
85
  c.action do |global_options, options, args|
84
- tasks.push
86
+ tasks.push(options[:only])
85
87
  end
86
88
  end
87
89
 
@@ -94,8 +96,9 @@ module Kuby
94
96
 
95
97
  desc 'Prints the effective Dockerfiles used to build Docker images.'
96
98
  command :dockerfiles do |c|
99
+ c.flag [:only], required: false
97
100
  c.action do |global_options, options, args|
98
- tasks.print_dockerfiles
101
+ tasks.print_dockerfiles(options[:only])
99
102
  end
100
103
  end
101
104
 
@@ -117,8 +120,10 @@ module Kuby
117
120
 
118
121
  desc 'Prints the effective Kubernetes resources that will be applied on deploy.'
119
122
  command :resources do |c|
123
+ c.flag [:K, :kind], required: false
124
+ c.flag [:N, :name], required: false
120
125
  c.action do |global_options, options, args|
121
- tasks.print_resources
126
+ tasks.print_resources(options[:kind], options[:name])
122
127
  end
123
128
  end
124
129
 
@@ -6,13 +6,27 @@ module Kuby
6
6
  class AppImage < ::Kuby::Docker::TimestampedImage
7
7
  extend T::Sig
8
8
 
9
- sig { params(build_args: T::Hash[String, String]).returns(AppImage) }
10
- def build(build_args = {})
9
+ sig {
10
+ params(
11
+ dockerfile: T.any(Dockerfile, T.proc.returns(Dockerfile)),
12
+ image_url: String,
13
+ credentials: Credentials,
14
+ main_tag: T.nilable(String),
15
+ alias_tags: T::Array[String]
16
+ ).void
17
+ }
18
+ def initialize(dockerfile, image_url, credentials, main_tag = nil, alias_tags = [])
19
+ super
20
+ @identifier = "app"
21
+ end
22
+
23
+ sig { params(build_args: T::Hash[String, String], docker_args: T::Array[String]).returns(AppImage) }
24
+ def build(build_args = {}, docker_args = [])
11
25
  unless ENV.fetch('RAILS_MASTER_KEY', '').empty?
12
26
  build_args['RAILS_MASTER_KEY'] = T.must(ENV['RAILS_MASTER_KEY'])
13
27
  end
14
28
 
15
- super(build_args)
29
+ super(build_args, docker_args)
16
30
  end
17
31
  end
18
32
  end
@@ -53,15 +53,17 @@ module Kuby
53
53
  config.fetch('auths', {}).keys
54
54
  end
55
55
 
56
- sig { params(image: Image, build_args: T::Hash[T.any(Symbol, String), String]).void }
57
- def build(image, build_args: {})
56
+ sig { params(image: Image, build_args: T::Hash[T.any(Symbol, String), String], docker_args: T::Array[String]).void }
57
+ def build(image, build_args: {}, docker_args: [])
58
58
  cmd = [
59
59
  executable, 'build',
60
60
  *image.tags.flat_map { |tag| ['-t', "#{image.image_url}:#{tag}"] },
61
61
  *build_args.flat_map do |arg, val|
62
62
  ['--build-arg', Shellwords.shellescape("#{arg}=#{val}")]
63
63
  end,
64
- '-f-', '.'
64
+ '-f-',
65
+ *docker_args,
66
+ '.'
65
67
  ]
66
68
 
67
69
  open3_w(cmd) do |stdin, _wait_threads|
@@ -5,6 +5,9 @@ module Kuby
5
5
  class Image
6
6
  extend T::Sig
7
7
 
8
+ sig { returns(T.nilable(String)) }
9
+ attr_reader :identifier
10
+
8
11
  sig { returns(String) }
9
12
  attr_reader :image_url
10
13
 
@@ -32,6 +35,7 @@ module Kuby
32
35
  @credentials = T.let(credentials, Credentials)
33
36
  @main_tag = T.let(main_tag, T.nilable(String))
34
37
  @alias_tags = T.let(alias_tags, T::Array[String])
38
+ @identifier = T.let(@identifier, T.nilable(String))
35
39
 
36
40
  @image_host = T.let(@image_host, T.nilable(String))
37
41
  @image_hostname = T.let(@image_hostname, T.nilable(String))
@@ -89,8 +93,8 @@ module Kuby
89
93
  [main_tag, *alias_tags].compact
90
94
  end
91
95
 
92
- sig { params(build_args: T::Hash[String, String]).void }
93
- def build(build_args = {})
96
+ sig { params(build_args: T::Hash[String, String], docker_args: T::Array[String]).void }
97
+ def build(build_args = {}, docker_args = [])
94
98
  raise NotImplementedError, 'please use a Docker::Image subclass'
95
99
  end
96
100
 
@@ -73,9 +73,9 @@ module Kuby
73
73
  tag
74
74
  end
75
75
 
76
- sig { params(build_args: T::Hash[String, String]).void }
77
- def build(build_args = {})
78
- docker_cli.build(new_version, build_args: build_args)
76
+ sig { params(build_args: T::Hash[String, String], docker_args: T::Array[String]).void }
77
+ def build(build_args = {}, docker_args = [])
78
+ docker_cli.build(new_version, build_args: build_args, docker_args: docker_args)
79
79
  @current_version = new_version
80
80
  @new_version = nil
81
81
  end
@@ -317,14 +317,15 @@ module Kuby
317
317
  tags.each_cons(2) do |prev_tag, tag|
318
318
  prev_image_name = "#{app_name}-#{prev_tag}"
319
319
  df.from("#{base_image.image_url}:#{prev_tag}", as: prev_image_name)
320
+ df.arg('RAILS_MASTER_KEY')
320
321
  df.run("mkdir -p #{RAILS_MOUNT_PATH}")
321
- df.run("bundle exec rake kuby:rails_app:assets:copy")
322
+ df.run("env RAILS_MASTER_KEY=$RAILS_MASTER_KEY bundle exec rake kuby:rails_app:assets:copy")
322
323
 
323
324
  if tag
324
325
  image_name = "#{app_name}-#{tag}"
325
326
  df.from("#{base_image.image_url}:#{tag}", as: image_name)
326
327
  df.copy("--from=#{prev_image_name} #{RAILS_MOUNT_PATH}", RAILS_MOUNT_PATH)
327
- df.run("bundle exec rake kuby:rails_app:assets:copy")
328
+ df.run("env RAILS_MASTER_KEY=$RAILS_MASTER_KEY bundle exec rake kuby:rails_app:assets:copy")
328
329
  end
329
330
  end
330
331
 
@@ -7,6 +7,7 @@ module Kuby
7
7
  def initialize(base_image, dockerfile, main_tag = nil, alias_tags = [])
8
8
  super(dockerfile, base_image.image_url, base_image.credentials, main_tag, alias_tags)
9
9
  @base_image = base_image
10
+ @identifier = "assets"
10
11
  end
11
12
 
12
13
  def new_version
@@ -27,8 +28,8 @@ module Kuby
27
28
  )
28
29
  end
29
30
 
30
- def build(build_args = {})
31
- docker_cli.build(current_version, build_args: build_args)
31
+ def build(build_args = {}, docker_args = [])
32
+ docker_cli.build(current_version, build_args: build_args, docker_args: docker_args)
32
33
  end
33
34
 
34
35
  def push(tag)
data/lib/kuby/tasks.rb CHANGED
@@ -9,10 +9,13 @@ module Kuby
9
9
  @environment = environment
10
10
  end
11
11
 
12
- def print_dockerfiles
12
+ def print_dockerfiles(only = nil)
13
13
  kubernetes.docker_images.each do |image|
14
+ next if only && image.identifier != only
15
+
14
16
  image = image.current_version
15
- Kuby.logger.info("Dockerfile for image #{image.image_url} with tags #{image.tags.join(', ')}")
17
+ identifier = image.identifier ? " ##{image.identifier}" : ""
18
+ Kuby.logger.info("Dockerfile for#{identifier} image #{image.image_url} with tags #{image.tags.join(', ')}")
16
19
  theme = Rouge::Themes::Base16::Solarized.new
17
20
  formatter = Rouge::Formatters::Terminal256.new(theme)
18
21
  lexer = Rouge::Lexers::Docker.new
@@ -25,16 +28,20 @@ module Kuby
25
28
  environment.kubernetes.setup
26
29
  end
27
30
 
28
- def build(build_args = {})
31
+ def build(build_args = {}, docker_args = [], only = nil)
29
32
  kubernetes.docker_images.each do |image|
33
+ next if only && image.identifier != only
34
+
30
35
  image = image.new_version
31
36
  Kuby.logger.info("Building image #{image.image_url} with tags #{image.tags.join(', ')}")
32
- image.build(build_args)
37
+ image.build(build_args, docker_args)
33
38
  end
34
39
  end
35
40
 
36
- def push
41
+ def push(only = nil)
37
42
  kubernetes.docker_images.each do |image|
43
+ next if only && image.identifier != only
44
+
38
45
  image = image.current_version
39
46
  Kuby.logger.info("Pushing image #{image.image_url} with tags #{image.tags.join(', ')}")
40
47
  push_image(image)
@@ -77,10 +84,16 @@ module Kuby
77
84
  environment.kubernetes.rollback
78
85
  end
79
86
 
80
- def print_resources
87
+ def print_resources(kind = nil, name_pattern = nil)
81
88
  kubernetes.before_deploy
82
89
 
90
+ name_rxp = Regexp.new(name_pattern) if name_pattern
91
+
83
92
  kubernetes.resources.each do |res|
93
+ next if kind && res.kind_sym.to_s != kind
94
+
95
+ next if name_rxp && !name_rxp.match?(res.metadata.name)
96
+
84
97
  puts res.to_resource.serialize.to_yaml
85
98
  end
86
99
  end
data/lib/kuby/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # typed: true
2
2
 
3
3
  module Kuby
4
- VERSION = '0.13.0'.freeze
4
+ VERSION = '0.14.0'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kuby-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Dutro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-24 00:00:00.000000000 Z
11
+ date: 2021-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize