helmsnap 0.6.0 → 0.7.1

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: 00d1a53c6e09960c8a7b6d21e9998aba27e0765959b4450f2e433754440fe65b
4
- data.tar.gz: 0f9fc47f9897eb76745e817528646ac340e43e39fad563a8370560bde810274f
3
+ metadata.gz: c06eb415d8391af30d789fdf0a28d93c1fd3eeec961927623ee124f4a97c27da
4
+ data.tar.gz: 1955829609e08db79e13150e4fc96c3cd30df8242f08e00976040c407d2fba0d
5
5
  SHA512:
6
- metadata.gz: d014a938da2ea497e3e751f5cb600940ccb77a1d7bd297399a7b3380ac74c2d5a47bb9b4c31f6a540992c72d3e1012540d19b264e49d3498ffc282cb4f63b68a
7
- data.tar.gz: 17614166a76919b0353d7bf322062047c546c3256826758ef5d0991bf66e30ee7ad0552c117ebad489ecba205e7c4771340dde7c947975cd1101895954eb8fe9
6
+ metadata.gz: 8f58ea04641722e5adc18e604eb770e8bc1cf64b3db94fc450cd932d7e79e779c00fe88abbf676377499f6e4ec6179a1831f0688fee26fd77dbdc1d21fc99448
7
+ data.tar.gz: 11a731bf61117fbd8671b56993860b3fc35367d16699297bd962a61d990b187491199a4b06646c911ead81cb5677d8d259b6917737b9b0b6f48d3cca865ef7e8
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- helmsnap (0.6.0)
4
+ helmsnap (0.7.1)
5
5
  colorize
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## About
4
4
 
5
- Helmsnap is a tool for generating and checking helm chart snapshots. Example:
5
+ Helmsnap is a tool for generating and checking helmfile snapshots. Example:
6
6
 
7
7
  Generate snapshots (uses `helmfile template` under the hood):
8
8
 
@@ -16,6 +16,12 @@ Generate snapshots in a temporary directory and check (diff) them against existi
16
16
  helmsnap check
17
17
  ```
18
18
 
19
+ Just build dependencies for each release in a helmfile:
20
+
21
+ ```sh
22
+ helmsnap dependencies # or `helmsnap deps`
23
+ ```
24
+
19
25
  Get the full description of possible arguments:
20
26
 
21
27
  ```sh
@@ -59,13 +65,13 @@ Helmsnap will automically replace all occurencies of patterns that look like tim
59
65
 
60
66
  ## Installation
61
67
 
62
- Just install a gem and use the provided `helmsnap` binary.
68
+ Just install the gem and use the provided `helmsnap` binary.
63
69
 
64
70
  ```sh
65
71
  gem install helmsnap
66
72
  ```
67
73
 
68
- Alaternatively, you can use a [Docker image](https://github.com/tycooon/helmsnap/pkgs/container/helmsnap) with Ruby, helm and helmsnap gem preinstalled. This is useful for CIs or if you don't want to install Ruby locally.
74
+ Alaternatively, you can use the [Docker image](https://github.com/tycooon/helmsnap/pkgs/container/helmsnap) with Ruby, helm and helmsnap gem preinstalled. This is useful for CIs or if you don't want to install Ruby and Helmfile on your machine.
69
75
 
70
76
  ## CI example
71
77
 
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Helmsnap::ArgsParser
4
+ InvalidConfigPath = Class.new(RuntimeError)
5
+
4
6
  Args = Struct.new(:config_path)
5
7
 
6
- DEFAULT_CONFIG_PATH = ".helmsnap.yaml"
8
+ DEFAULT_CONFIG_PATH = Pathname.new(".helmsnap.yaml")
7
9
  CONFIG_PATH_HELP = %{Path to config (default: "#{DEFAULT_CONFIG_PATH}")}
8
10
  BANNER = "Usage: helmsnap CMD [options]"
9
11
 
@@ -16,8 +18,8 @@ class Helmsnap::ArgsParser
16
18
  def get_options!
17
19
  parser.parse!(options)
18
20
  args
19
- rescue OptionParser::ParseError => error
20
- print_help!(error)
21
+ rescue OptionParser::ParseError, InvalidConfigPath => error
22
+ print_help!(error.message)
21
23
  end
22
24
 
23
25
  def print_help!(msg)
@@ -32,15 +34,21 @@ class Helmsnap::ArgsParser
32
34
 
33
35
  def build_parser
34
36
  OptionParser.new(BANNER, 50) do |opts|
35
- opts.separator("Supported commands: `generate` and `check`.")
37
+ opts.separator("Supported commands: `generate`, `check` and `dependencies`.")
36
38
  opts.separator("")
37
39
  opts.separator("Specific options:")
38
40
 
39
41
  opts.on("-c", "--config CONFIG_PATH", CONFIG_PATH_HELP) do |val|
40
- args.config_path = Pathname.new(val)
42
+ path = Pathname.new(val)
43
+
44
+ unless path.file? && path.readable?
45
+ raise InvalidConfigPath, "Not a readable file: #{val}"
46
+ end
47
+
48
+ args.config_path = path
41
49
  end
42
50
 
43
- opts.on("--version", "Show version") do
51
+ opts.on("-v", "--version", "Show version") do
44
52
  Helmsnap::Console.print($stdout, "#{Helmsnap::VERSION}\n")
45
53
  exit
46
54
  end
@@ -4,9 +4,15 @@ class Helmsnap::Config
4
4
  attr_reader :envs, :snapshots_path
5
5
 
6
6
  DEFAULT_ENV = "default"
7
+ DEFAULT_SNAPSHOTS_PATH = "helm/snapshots"
7
8
 
8
9
  def initialize(config_path)
9
- yaml = YAML.load_file(config_path.to_s)
10
+ if config_path.exist?
11
+ yaml = YAML.load_file(config_path.to_s)
12
+ else
13
+ yaml = {}
14
+ end
15
+
10
16
  self.envs = parse_envs(yaml)
11
17
  self.snapshots_path = parse_snaphots_path(yaml)
12
18
  end
@@ -16,13 +22,11 @@ class Helmsnap::Config
16
22
  attr_writer :envs, :snapshots_path
17
23
 
18
24
  def parse_envs(yaml)
19
- # TODO: check value type
20
25
  value = yaml.fetch("envs", [DEFAULT_ENV])
21
26
  value.map { |x| Helmsnap::Env.new(x) }
22
27
  end
23
28
 
24
29
  def parse_snaphots_path(yaml)
25
- # TODO: chekc value type/presence
26
- Pathname.new(yaml.fetch("snapshotsPath"))
30
+ Pathname.new(yaml.fetch("snapshotsPath", DEFAULT_SNAPSHOTS_PATH))
27
31
  end
28
32
  end
data/lib/helmsnap/env.rb CHANGED
@@ -1,19 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Helmsnap::Env
4
- attr_reader :name, :release_paths
4
+ attr_reader :name
5
5
 
6
6
  def initialize(name)
7
7
  self.name = name
8
- self.release_paths = get_release_paths
9
8
  end
10
9
 
11
- private
10
+ def release_paths
11
+ @release_paths ||= begin
12
+ json = Helmsnap.run_cmd("helmfile", "--environment", name, "list", "--output", "json").output
13
+ YAML.load(json).map { |x| Pathname.new(x.fetch("chart")) }
14
+ end
15
+ end
12
16
 
13
- attr_writer :name, :release_paths
17
+ private
14
18
 
15
- def get_release_paths
16
- json = Helmsnap.run_cmd("helmfile", "--environment", name, "list", "--output", "json").output
17
- YAML.load(json).map { |x| x.fetch("chart") }
18
- end
19
+ attr_writer :name
19
20
  end
@@ -10,9 +10,7 @@ class Helmsnap::Generate < Helmsnap::Service
10
10
  def call
11
11
  FileUtils.rmtree(snapshots_path)
12
12
 
13
- config.envs.flat_map(&:release_paths).uniq.each do |release_path|
14
- Helmsnap::SetupDependencies.call(release_path)
15
- end
13
+ Helmsnap::SetupDependencies.call(config)
16
14
 
17
15
  config.envs.each do |env|
18
16
  run_cmd(
@@ -26,6 +26,8 @@ class Helmsnap::Runner < Helmsnap::Service
26
26
  generate!
27
27
  when "check"
28
28
  check!
29
+ when "dependencies", "deps"
30
+ setup_deps!
29
31
  else
30
32
  parser.print_help!("Unknown command: #{cmd}.")
31
33
  end
@@ -55,4 +57,8 @@ class Helmsnap::Runner < Helmsnap::Service
55
57
  exit 1
56
58
  end
57
59
  end
60
+
61
+ def setup_deps!
62
+ Helmsnap::SetupDependencies.call(config)
63
+ end
58
64
  end
@@ -1,12 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Helmsnap::SetupDependencies < Helmsnap::Service
4
- def initialize(chart_path)
4
+ def initialize(config)
5
5
  super()
6
- self.chart_path = Pathname.new(chart_path)
6
+ self.config = config
7
7
  end
8
8
 
9
9
  def call
10
+ config.envs.flat_map(&:release_paths).uniq.each do |chart_path|
11
+ setup!(chart_path)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ attr_accessor :config
18
+
19
+ def setup!(chart_path)
10
20
  dep_list = run_cmd("helm", "dependency", "list", "--max-col-width", 0, chart_path).output
11
21
 
12
22
  dep_list.scan(%r{file://(.+?)\t}) do |dep_path|
@@ -19,8 +29,4 @@ class Helmsnap::SetupDependencies < Helmsnap::Service
19
29
 
20
30
  run_cmd("helm", "dependency", "update", "--skip-refresh", chart_path)
21
31
  end
22
-
23
- private
24
-
25
- attr_accessor :chart_path
26
32
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Helmsnap
4
- VERSION = "0.6.0"
4
+ VERSION = "0.7.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: helmsnap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuri Smirnov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-04 00:00:00.000000000 Z
11
+ date: 2021-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize