kaiser 0.6.4 → 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: 9f8047763773bfe748430378babb51a03b464f203653f65b18c914c9dcc0fc5d
4
- data.tar.gz: f5f4f0965aa9cd5f8b54e5812e8f5810cd96db4140bc5efcfb4483b04394cf81
3
+ metadata.gz: 92b3034ab17814ed926d2b9168806132dc548783becdd3b9037b2fefa55b1c9d
4
+ data.tar.gz: 001e9c5e10b094b349d0a65527da079d483219081e7e8a6e0f2ae0731a2b1d96
5
5
  SHA512:
6
- metadata.gz: 2c8500f56e296379d71bbde647cc5c55fdb44079d4ebf149ce2791c1b0aff279c590192baa02953d2b8c87c1a335796b84d410786a032aa0ba23ef059398477c
7
- data.tar.gz: 1c301bf576a3b1eab3a6fa785b37a9e58afa0c35c2bc9ede6c10bc6bea8a38c87f89fee1817d8dd6938ca32d2d4d667feff7638eeb1f7316b6a203c69be7713c
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
@@ -8,6 +8,12 @@ module Kaiser
8
8
  class Cli
9
9
  extend Kaiser::CliOptions
10
10
 
11
+ attr_reader :use_kaiserfile
12
+
13
+ def initialize
14
+ @use_kaiserfile = true
15
+ end
16
+
11
17
  def set_config
12
18
  # This is here for backwards compatibility since it can be used in Kaiserfiles.
13
19
  # It would be a good idea to deprecate this and make it more abstract.
@@ -19,7 +25,7 @@ module Kaiser
19
25
  @out = Config.out
20
26
  @info_out = Config.info_out
21
27
 
22
- @kaiserfile.validate!
28
+ @kaiserfile.validate! if @use_kaiserfile
23
29
  end
24
30
 
25
31
  # At first I did this in the constructor but the problem with that is Optimist
@@ -37,7 +43,7 @@ module Kaiser
37
43
  Optimist.options do
38
44
  banner u
39
45
 
40
- global_opts.each { |o| opt *o }
46
+ global_opts.each { |o| opt(*o) }
41
47
  end
42
48
  end
43
49
 
@@ -56,12 +62,12 @@ module Kaiser
56
62
  # easily use ARGV.shift to access its own subcommands.
57
63
  ARGV.shift
58
64
 
59
- Kaiser::Config.load(Dir.pwd)
65
+ Kaiser::Config.load(Dir.pwd, use_kaiserfile: cmd.use_kaiserfile)
60
66
 
61
67
  # We do all this work in here instead of the exe/kaiser file because we
62
68
  # want -h options to output before we check if a Kaiserfile exists.
63
69
  # If we do it in exe/kaiser, people won't be able to check help messages
64
- # unless they create a Kaiserfile firest.
70
+ # unless they create a Kaiserfile first.
65
71
  if opts[:quiet]
66
72
  Config.out = File.open(File::NULL, 'w')
67
73
  Config.info_out = File.open(File::NULL, 'w')
@@ -390,6 +396,10 @@ module Kaiser
390
396
  @services ||= Config.kaiserfile.services.map { |name, info| Service.new(envname, name, info) }
391
397
  end
392
398
 
399
+ def force_platform
400
+ Config.kaiserfile.platform || ''
401
+ end
402
+
393
403
  def db_port
394
404
  Config.config[:envs][envname][:db_port]
395
405
  end
@@ -514,6 +524,19 @@ module Kaiser
514
524
  end
515
525
  end
516
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
+
517
540
  def ensure_setup
518
541
  ensure_env
519
542
 
@@ -528,15 +551,16 @@ module Kaiser
528
551
  "docker run -d
529
552
  --name #{Config.config[:shared_names][:redis]}
530
553
  --network #{Config.config[:networkname]}
531
- redis:alpine"
554
+ redis:7-alpine"
532
555
  )
533
556
  run_if_dead(
534
557
  Config.config[:shared_names][:chrome],
535
558
  "docker run -d
536
559
  -p 5900:5900
560
+ --shm-size='2g'
537
561
  --name #{Config.config[:shared_names][:chrome]}
538
562
  --network #{Config.config[:networkname]}
539
- selenium/standalone-chrome-debug"
563
+ #{selenium_node_image}"
540
564
  )
541
565
  run_if_dead(
542
566
  Config.config[:shared_names][:nginx],
@@ -574,7 +598,7 @@ module Kaiser
574
598
 
575
599
  def container_dead?(container)
576
600
  x = JSON.parse(`docker inspect #{container} 2>/dev/null`)
577
- return true if x.length.zero? || x[0]['State']['Running'] == false
601
+ x.empty? || x[0]['State']['Running'] == false
578
602
  end
579
603
 
580
604
  def if_container_dead(container)
@@ -585,14 +609,14 @@ module Kaiser
585
609
 
586
610
  def create_if_volume_not_exist(vol)
587
611
  x = JSON.parse(`docker volume inspect #{vol} 2>/dev/null`)
588
- return unless x.length.zero?
612
+ return unless x.empty?
589
613
 
590
614
  CommandRunner.run! Config.out, "docker volume create #{vol}"
591
615
  end
592
616
 
593
617
  def create_if_network_not_exist(net)
594
618
  x = JSON.parse(`docker inspect #{net} 2>/dev/null`)
595
- return unless x.length.zero?
619
+ return unless x.empty?
596
620
 
597
621
  CommandRunner.run! Config.out, "docker network create #{net}"
598
622
  end
@@ -615,7 +639,7 @@ module Kaiser
615
639
 
616
640
  def killrm(container)
617
641
  x = JSON.parse(`docker inspect #{container} 2>/dev/null`)
618
- return if x.length.zero?
642
+ return if x.empty?
619
643
 
620
644
  CommandRunner.run Config.out, "docker kill #{container}" if x[0]['State'] && x[0]['State']['Running'] == true
621
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.4'
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.4
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