kaiser 0.6.3 → 0.7.0

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: 6d4fd9b85447651ce719c71e51f6bfd1af581013b1fb8a2bf1e1e4bfa2c8ccfc
4
- data.tar.gz: 39a81b95b162e03fea07c40899883a655788d60c1e6bd0c2a21f738c8c05d53e
3
+ metadata.gz: 92b3034ab17814ed926d2b9168806132dc548783becdd3b9037b2fefa55b1c9d
4
+ data.tar.gz: 001e9c5e10b094b349d0a65527da079d483219081e7e8a6e0f2ae0731a2b1d96
5
5
  SHA512:
6
- metadata.gz: 297aece4ef6c978814aeb2daa9a70b3847b90e16671a59fe8490a6ddc9eb00f805ab9751a638b169bdf0854a1a7e9f3bd5d918a13a98bf336bd1ffb41622e6e2
7
- data.tar.gz: 62e72ad3b021256950a52ce9f38f2f5a47eb57050c16361e08a3eaa210f8f15e7c2282af595935d461c4dc7e9219cfc1331c1432ede1ece997251006be8c9a17
6
+ metadata.gz: e4e79a8b16f93a34587106cf800d098bbd88a0f26e3a0725fefc01232e2d135a8010c7f728629bf378702070a95c11a437ec7a4486f7c1e881ffc029158a7a61
7
+ data.tar.gz: 5d4bf821446f25df5f3d6dbb1a30ba0682bcdc7620b60b9acc03c19afd95f919f99da242b6afa873087928d5c7a45522c400125b0407696485e9bcbe6fcaf7c9
data/README.md CHANGED
@@ -31,6 +31,7 @@ Simply clone the repo and run
31
31
 
32
32
  ```
33
33
  cd kaiser
34
+ bundle
34
35
  docker build -t degica/kaiser .
35
36
  ```
36
37
 
@@ -48,6 +49,12 @@ function kaiser
48
49
  end
49
50
  ```
50
51
 
52
+ Confirm it is working by running
53
+
54
+ ```
55
+ kaiser -h
56
+ ```
57
+
51
58
  ## Usage
52
59
 
53
60
  You'll need a Dockerfile and a Kaiserfile. The Kaiserfile should be placed in the project root directory, with contents like this:
data/lib/kaiser/cli.rb CHANGED
@@ -1,12 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'kaiser/command_runner'
4
+ require 'active_support/core_ext/object/blank'
4
5
 
5
6
  module Kaiser
6
7
  # The commandline
7
8
  class Cli
8
9
  extend Kaiser::CliOptions
9
10
 
11
+ attr_reader :use_kaiserfile
12
+
13
+ def initialize
14
+ @use_kaiserfile = true
15
+ end
16
+
10
17
  def set_config
11
18
  # This is here for backwards compatibility since it can be used in Kaiserfiles.
12
19
  # It would be a good idea to deprecate this and make it more abstract.
@@ -18,7 +25,7 @@ module Kaiser
18
25
  @out = Config.out
19
26
  @info_out = Config.info_out
20
27
 
21
- @kaiserfile.validate!
28
+ @kaiserfile.validate! if @use_kaiserfile
22
29
  end
23
30
 
24
31
  # At first I did this in the constructor but the problem with that is Optimist
@@ -36,7 +43,7 @@ module Kaiser
36
43
  Optimist.options do
37
44
  banner u
38
45
 
39
- global_opts.each { |o| opt *o }
46
+ global_opts.each { |o| opt(*o) }
40
47
  end
41
48
  end
42
49
 
@@ -55,12 +62,12 @@ module Kaiser
55
62
  # easily use ARGV.shift to access its own subcommands.
56
63
  ARGV.shift
57
64
 
58
- Kaiser::Config.load(Dir.pwd)
65
+ Kaiser::Config.load(Dir.pwd, use_kaiserfile: cmd.use_kaiserfile)
59
66
 
60
67
  # We do all this work in here instead of the exe/kaiser file because we
61
68
  # want -h options to output before we check if a Kaiserfile exists.
62
69
  # If we do it in exe/kaiser, people won't be able to check help messages
63
- # unless they create a Kaiserfile firest.
70
+ # unless they create a Kaiserfile first.
64
71
  if opts[:quiet]
65
72
  Config.out = File.open(File::NULL, 'w')
66
73
  Config.info_out = File.open(File::NULL, 'w')
@@ -389,6 +396,10 @@ module Kaiser
389
396
  @services ||= Config.kaiserfile.services.map { |name, info| Service.new(envname, name, info) }
390
397
  end
391
398
 
399
+ def force_platform
400
+ Config.kaiserfile.platform || ''
401
+ end
402
+
392
403
  def db_port
393
404
  Config.config[:envs][envname][:db_port]
394
405
  end
@@ -513,6 +524,19 @@ module Kaiser
513
524
  end
514
525
  end
515
526
 
527
+ def selenium_node_image
528
+ return ENV['OVERRIDE_SELENIUM_NODE_IMAGE'] unless ENV['OVERRIDE_SELENIUM_NODE_IMAGE'].nil?
529
+
530
+ if RUBY_PLATFORM.start_with?('arm64') || RUBY_PLATFORM.start_with?('aarch64')
531
+ # use the seleniarm image because its more stable in arm procs
532
+ # somehow the x64 image does not do well under qemu under arm
533
+ return 'seleniarm/standalone-chromium'
534
+ end
535
+
536
+ # default to x64 image
537
+ 'selenium/standalone-chrome-debug'
538
+ end
539
+
516
540
  def ensure_setup
517
541
  ensure_env
518
542
 
@@ -527,15 +551,16 @@ module Kaiser
527
551
  "docker run -d
528
552
  --name #{Config.config[:shared_names][:redis]}
529
553
  --network #{Config.config[:networkname]}
530
- redis:alpine"
554
+ redis:7-alpine"
531
555
  )
532
556
  run_if_dead(
533
557
  Config.config[:shared_names][:chrome],
534
558
  "docker run -d
535
559
  -p 5900:5900
560
+ --shm-size='2g'
536
561
  --name #{Config.config[:shared_names][:chrome]}
537
562
  --network #{Config.config[:networkname]}
538
- selenium/standalone-chrome-debug"
563
+ #{selenium_node_image}"
539
564
  )
540
565
  run_if_dead(
541
566
  Config.config[:shared_names][:nginx],
@@ -573,7 +598,7 @@ module Kaiser
573
598
 
574
599
  def container_dead?(container)
575
600
  x = JSON.parse(`docker inspect #{container} 2>/dev/null`)
576
- return true if x.length.zero? || x[0]['State']['Running'] == false
601
+ x.empty? || x[0]['State']['Running'] == false
577
602
  end
578
603
 
579
604
  def if_container_dead(container)
@@ -584,14 +609,14 @@ module Kaiser
584
609
 
585
610
  def create_if_volume_not_exist(vol)
586
611
  x = JSON.parse(`docker volume inspect #{vol} 2>/dev/null`)
587
- return unless x.length.zero?
612
+ return unless x.empty?
588
613
 
589
614
  CommandRunner.run! Config.out, "docker volume create #{vol}"
590
615
  end
591
616
 
592
617
  def create_if_network_not_exist(net)
593
618
  x = JSON.parse(`docker inspect #{net} 2>/dev/null`)
594
- return unless x.length.zero?
619
+ return unless x.empty?
595
620
 
596
621
  CommandRunner.run! Config.out, "docker network create #{net}"
597
622
  end
@@ -614,7 +639,7 @@ module Kaiser
614
639
 
615
640
  def killrm(container)
616
641
  x = JSON.parse(`docker inspect #{container} 2>/dev/null`)
617
- return if x.length.zero?
642
+ return if x.empty?
618
643
 
619
644
  CommandRunner.run Config.out, "docker kill #{container}" if x[0]['State'] && x[0]['State']['Running'] == true
620
645
  CommandRunner.run Config.out, "docker rm #{container}" if x[0]['State']
@@ -21,6 +21,11 @@ module Kaiser
21
21
  EOS
22
22
  end
23
23
 
24
+ def initialize
25
+ super
26
+ @use_kaiserfile = false
27
+ end
28
+
24
29
  def execute(_opts)
25
30
  cmd = ARGV.shift
26
31
 
@@ -14,7 +14,7 @@ module Kaiser
14
14
  end
15
15
 
16
16
  def execute(_opts)
17
- Config.config[:shared_names].each do |_, container_name|
17
+ Config.config[:shared_names].each_value do |container_name|
18
18
  killrm container_name
19
19
  end
20
20
 
@@ -28,14 +28,24 @@ module Kaiser
28
28
  end
29
29
  end
30
30
 
31
+ def build_cmd
32
+ platform_args = ''
33
+ platform_args = "--platform=#{force_platform}" unless force_platform.empty?
34
+ build_args = docker_build_args.map { |k, v| "--build-arg #{k}=#{v}" }
35
+ [
36
+ 'docker build',
37
+ "-t kaiser:#{envname}-#{current_branch}",
38
+ "-f #{tmp_dockerfile_name} #{Config.work_dir}",
39
+ platform_args,
40
+ build_args.join(' ').to_s
41
+ ]
42
+ end
43
+
31
44
  def setup_app
32
45
  Config.info_out.puts 'Setting up application'
33
46
  File.write(tmp_dockerfile_name, docker_file_contents)
34
- build_args = docker_build_args.map { |k, v| "--build-arg #{k}=#{v}" }
35
- CommandRunner.run! Config.out, "docker build
36
- -t kaiser:#{envname}-#{current_branch}
37
- -f #{tmp_dockerfile_name} #{Config.work_dir}
38
- #{build_args.join(' ')}"
47
+
48
+ CommandRunner.run! Config.out, build_cmd.join("\n\t")
39
49
  FileUtils.rm(tmp_dockerfile_name)
40
50
  end
41
51
  end
data/lib/kaiser/config.rb CHANGED
@@ -12,7 +12,7 @@ module Kaiser
12
12
  :kaiserfile,
13
13
  :config
14
14
 
15
- def load(work_dir)
15
+ def load(work_dir, use_kaiserfile: true)
16
16
  @work_dir = work_dir
17
17
  @config_dir = "#{ENV['HOME']}/.kaiser"
18
18
 
@@ -20,7 +20,6 @@ module Kaiser
20
20
 
21
21
  FileUtils.mkdir_p @config_dir
22
22
  @config_file = "#{@config_dir}/config.yml"
23
- @kaiserfile = Kaiserfile.new("#{@work_dir}/Kaiserfile")
24
23
 
25
24
  @config = {
26
25
  envnames: {},
@@ -39,8 +38,11 @@ module Kaiser
39
38
 
40
39
  load_config
41
40
 
42
- alt_kaiserfile = "#{ENV['HOME']}/kaiserfiles/Kaiserfile.#{@config[:envnames][work_dir]}"
43
- @kaiserfile = Kaiserfile.new(alt_kaiserfile) if File.exist?(alt_kaiserfile)
41
+ if use_kaiserfile
42
+ @kaiserfile = Kaiserfile.new("#{@work_dir}/Kaiserfile")
43
+ alt_kaiserfile = "#{ENV['HOME']}/kaiserfiles/Kaiserfile.#{@config[:envnames][work_dir]}"
44
+ @kaiserfile = Kaiserfile.new(alt_kaiserfile) if File.exist?(alt_kaiserfile)
45
+ end
44
46
 
45
47
  @config
46
48
  end
@@ -76,6 +76,10 @@ module Kaiser
76
76
  }
77
77
  end
78
78
 
79
+ def force_platform(platform_name)
80
+ @platform = platform_name
81
+ end
82
+
79
83
  def expose(port)
80
84
  @port = port
81
85
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kaiser
4
- VERSION = '0.6.3'
4
+ VERSION = '0.7.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaiser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Siaw
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-18 00:00:00.000000000 Z
11
+ date: 2024-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -198,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
198
  - !ruby/object:Gem::Version
199
199
  version: '0'
200
200
  requirements: []
201
- rubygems_version: 3.1.2
201
+ rubygems_version: 3.3.26
202
202
  signing_key:
203
203
  specification_version: 4
204
204
  summary: Manage your monsters