helmsnap 1.0.2 → 1.1.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 +4 -4
- data/.rubocop.yml +1 -1
- data/Dockerfile +1 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +65 -49
- data/README.md +6 -2
- data/helmsnap.gemspec +1 -3
- data/lib/helmsnap/args_parser.rb +1 -1
- data/lib/helmsnap/config.rb +11 -2
- data/lib/helmsnap/setup_dependencies.rb +20 -1
- data/lib/helmsnap/version.rb +1 -1
- metadata +4 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6736a60925c46a19ac7d349ea1e0fff67d7d3e6499a74f9f620a00d17eda0f50
|
4
|
+
data.tar.gz: 2441260a8c95cd7ae6c3b91616dce927cf7972652f8dc4431b0fc78379a93522
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf1cdbdba197e96cb1ba2403bd69ee7d6cad705bcb2d6378f112852ba92477be6fb7dad954cafbca54fa88a4f93113a83b56d9c9aa33952d07710a128c5cca24
|
7
|
+
data.tar.gz: 666bad3f4be9e21af24649a59508f88fc5f0a72bee4f26b32f10ed3f635224631d0cab4744e2c4260bb9c3fefa552f03f32f90eeb33c7c26f2324e4e84be9c7a
|
data/.rubocop.yml
CHANGED
data/Dockerfile
CHANGED
@@ -4,7 +4,7 @@ RUN apk add --update --no-cache ruby git colordiff
|
|
4
4
|
|
5
5
|
WORKDIR /wd
|
6
6
|
|
7
|
-
COPY --from=ghcr.io/helmfile/helmfile
|
7
|
+
COPY --from=ghcr.io/helmfile/helmfile /usr/local/bin/helmfile /usr/local/bin/helmfile
|
8
8
|
COPY . .
|
9
9
|
|
10
10
|
RUN gem install colorize && gem build && gem install helmsnap --local
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,87 +1,103 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
helmsnap (1.0
|
4
|
+
helmsnap (1.1.0)
|
5
5
|
colorize
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activesupport (7.
|
10
|
+
activesupport (7.1.4)
|
11
|
+
base64
|
12
|
+
bigdecimal
|
11
13
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
14
|
+
connection_pool (>= 2.2.5)
|
15
|
+
drb
|
12
16
|
i18n (>= 1.6, < 2)
|
13
17
|
minitest (>= 5.1)
|
18
|
+
mutex_m
|
14
19
|
tzinfo (~> 2.0)
|
15
20
|
ast (2.4.2)
|
21
|
+
base64 (0.2.0)
|
22
|
+
bigdecimal (3.1.8)
|
16
23
|
coderay (1.1.3)
|
17
|
-
colorize (
|
18
|
-
concurrent-ruby (1.
|
19
|
-
|
20
|
-
|
24
|
+
colorize (1.1.0)
|
25
|
+
concurrent-ruby (1.3.4)
|
26
|
+
connection_pool (2.4.1)
|
27
|
+
diff-lcs (1.5.1)
|
28
|
+
drb (2.2.1)
|
29
|
+
i18n (1.14.6)
|
21
30
|
concurrent-ruby (~> 1.0)
|
22
|
-
json (2.
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
31
|
+
json (2.7.2)
|
32
|
+
language_server-protocol (3.17.0.3)
|
33
|
+
method_source (1.1.0)
|
34
|
+
minitest (5.25.1)
|
35
|
+
mutex_m (0.2.0)
|
36
|
+
parallel (1.26.3)
|
37
|
+
parser (3.3.5.0)
|
27
38
|
ast (~> 2.4.1)
|
39
|
+
racc
|
28
40
|
pry (0.14.2)
|
29
41
|
coderay (~> 1.1)
|
30
42
|
method_source (~> 1.0)
|
31
|
-
|
43
|
+
racc (1.8.1)
|
44
|
+
rack (3.1.8)
|
32
45
|
rainbow (3.1.1)
|
33
|
-
rake (13.
|
34
|
-
regexp_parser (2.
|
35
|
-
|
36
|
-
|
37
|
-
rspec-
|
38
|
-
rspec-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
rspec-expectations (3.12.2)
|
46
|
+
rake (13.2.1)
|
47
|
+
regexp_parser (2.9.2)
|
48
|
+
rspec (3.13.0)
|
49
|
+
rspec-core (~> 3.13.0)
|
50
|
+
rspec-expectations (~> 3.13.0)
|
51
|
+
rspec-mocks (~> 3.13.0)
|
52
|
+
rspec-core (3.13.1)
|
53
|
+
rspec-support (~> 3.13.0)
|
54
|
+
rspec-expectations (3.13.3)
|
43
55
|
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
-
rspec-support (~> 3.
|
45
|
-
rspec-mocks (3.
|
56
|
+
rspec-support (~> 3.13.0)
|
57
|
+
rspec-mocks (3.13.2)
|
46
58
|
diff-lcs (>= 1.2.0, < 2.0)
|
47
|
-
rspec-support (~> 3.
|
48
|
-
rspec-support (3.
|
49
|
-
rubocop (1.
|
59
|
+
rspec-support (~> 3.13.0)
|
60
|
+
rspec-support (3.13.1)
|
61
|
+
rubocop (1.66.1)
|
50
62
|
json (~> 2.3)
|
63
|
+
language_server-protocol (>= 3.17.0)
|
51
64
|
parallel (~> 1.10)
|
52
|
-
parser (>= 3.
|
65
|
+
parser (>= 3.3.0.2)
|
53
66
|
rainbow (>= 2.2.2, < 4.0)
|
54
|
-
regexp_parser (>=
|
55
|
-
|
56
|
-
rubocop-ast (>= 1.24.1, < 2.0)
|
67
|
+
regexp_parser (>= 2.4, < 3.0)
|
68
|
+
rubocop-ast (>= 1.32.2, < 2.0)
|
57
69
|
ruby-progressbar (~> 1.7)
|
58
70
|
unicode-display_width (>= 2.4.0, < 3.0)
|
59
|
-
rubocop-ast (1.
|
60
|
-
parser (>= 3.
|
61
|
-
rubocop-config-umbrellio (1.
|
62
|
-
rubocop (~> 1.
|
63
|
-
rubocop-
|
64
|
-
rubocop-
|
71
|
+
rubocop-ast (1.32.3)
|
72
|
+
parser (>= 3.3.1.0)
|
73
|
+
rubocop-config-umbrellio (1.66.0.99)
|
74
|
+
rubocop (~> 1.66.0)
|
75
|
+
rubocop-factory_bot (~> 2.26.0)
|
76
|
+
rubocop-performance (~> 1.22.0)
|
77
|
+
rubocop-rails (~> 2.26.0)
|
65
78
|
rubocop-rake (~> 0.6.0)
|
66
|
-
rubocop-rspec (~>
|
79
|
+
rubocop-rspec (~> 3.0.0)
|
67
80
|
rubocop-sequel (~> 0.3.3)
|
68
|
-
rubocop-
|
69
|
-
rubocop (
|
70
|
-
|
71
|
-
|
81
|
+
rubocop-factory_bot (2.26.1)
|
82
|
+
rubocop (~> 1.61)
|
83
|
+
rubocop-performance (1.22.1)
|
84
|
+
rubocop (>= 1.48.1, < 2.0)
|
85
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
86
|
+
rubocop-rails (2.26.2)
|
72
87
|
activesupport (>= 4.2.0)
|
73
88
|
rack (>= 1.1)
|
74
|
-
rubocop (>= 1.
|
89
|
+
rubocop (>= 1.52.0, < 2.0)
|
90
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
75
91
|
rubocop-rake (0.6.0)
|
76
92
|
rubocop (~> 1.0)
|
77
|
-
rubocop-rspec (
|
78
|
-
rubocop (~> 1.
|
93
|
+
rubocop-rspec (3.0.5)
|
94
|
+
rubocop (~> 1.61)
|
79
95
|
rubocop-sequel (0.3.4)
|
80
96
|
rubocop (~> 1.0)
|
81
|
-
ruby-progressbar (1.
|
82
|
-
tzinfo (2.0.
|
97
|
+
ruby-progressbar (1.13.0)
|
98
|
+
tzinfo (2.0.6)
|
83
99
|
concurrent-ruby (~> 1.0)
|
84
|
-
unicode-display_width (2.
|
100
|
+
unicode-display_width (2.6.0)
|
85
101
|
|
86
102
|
PLATFORMS
|
87
103
|
arm64-darwin-21
|
@@ -98,4 +114,4 @@ DEPENDENCIES
|
|
98
114
|
rubocop-config-umbrellio
|
99
115
|
|
100
116
|
BUNDLED WITH
|
101
|
-
2.
|
117
|
+
2.5.21
|
data/README.md
CHANGED
@@ -38,18 +38,22 @@ This tool can also be useful when you are developing a new chart or updating an
|
|
38
38
|
|
39
39
|
## Configuration
|
40
40
|
|
41
|
-
By default, helmsnap will render your helmfile using `default` environment and will place snapshots in `helm/snapshots` directory. If you want to configure that, create a `.helmsnap.yaml` file and put there configuration that looks like this:
|
41
|
+
By default, helmsnap will render your helmfile using `default` environment and will place snapshots in `helm/snapshots` directory. If you want to configure that, or you need to provide credentials for access to private helm repos, you can create a `.helmsnap.yaml` file and put there configuration that looks like this:
|
42
42
|
|
43
43
|
```yaml
|
44
44
|
envs: [staging, production] # `[default]` by default
|
45
45
|
snapshotsPath: somedir/snapshots # `helm/snapshots` by default
|
46
|
+
credentials: # [] by default
|
47
|
+
- repo: https://example.com/some/path/to/repo
|
48
|
+
username: someuser
|
49
|
+
password: somepassword
|
46
50
|
```
|
47
51
|
|
48
52
|
You can also override configuration file location using `--config` option.
|
49
53
|
|
50
54
|
## Dependencies
|
51
55
|
|
52
|
-
- Ruby
|
56
|
+
- Ruby 3.0+.
|
53
57
|
- [Helmfile](https://github.com/roboll/helmfile), which in turn relies on [Helm](https://github.com/helm/helm).
|
54
58
|
- Colordiff or diff utility.
|
55
59
|
|
data/helmsnap.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.summary = "A tool for creating and checking helm chart snapshots."
|
12
12
|
spec.homepage = "https://github.com/tycooon/helmsnap"
|
13
13
|
spec.license = "MIT"
|
14
|
-
spec.required_ruby_version = ">=
|
14
|
+
spec.required_ruby_version = ">= 3.0.0"
|
15
15
|
|
16
16
|
# spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
|
17
17
|
spec.metadata["homepage_uri"] = spec.homepage
|
@@ -31,6 +31,4 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.require_paths = ["lib"]
|
32
32
|
|
33
33
|
spec.add_dependency "colorize"
|
34
|
-
|
35
|
-
spec.add_development_dependency "rubocop-config-umbrellio"
|
36
34
|
end
|
data/lib/helmsnap/args_parser.rb
CHANGED
@@ -6,7 +6,7 @@ class Helmsnap::ArgsParser
|
|
6
6
|
Args = Struct.new(:config_path)
|
7
7
|
|
8
8
|
DEFAULT_CONFIG_PATH = Pathname.new(".helmsnap.yaml")
|
9
|
-
CONFIG_PATH_HELP = %{Path to config (default: "#{DEFAULT_CONFIG_PATH}")}
|
9
|
+
CONFIG_PATH_HELP = %{Path to config (default: "#{DEFAULT_CONFIG_PATH}")}.freeze
|
10
10
|
BANNER = "Usage: helmsnap CMD [options]"
|
11
11
|
|
12
12
|
def initialize(options)
|
data/lib/helmsnap/config.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Helmsnap::Config
|
4
|
-
|
4
|
+
Credentials = Struct.new(:username, :password)
|
5
|
+
|
6
|
+
attr_reader :envs, :snapshots_path, :credentials
|
5
7
|
|
6
8
|
DEFAULT_ENV = "default"
|
7
9
|
DEFAULT_SNAPSHOTS_PATH = "helm/snapshots"
|
@@ -15,11 +17,12 @@ class Helmsnap::Config
|
|
15
17
|
|
16
18
|
self.envs = parse_envs(yaml)
|
17
19
|
self.snapshots_path = parse_snaphots_path(yaml)
|
20
|
+
self.credentials = parse_credentials(yaml)
|
18
21
|
end
|
19
22
|
|
20
23
|
private
|
21
24
|
|
22
|
-
attr_writer :envs, :snapshots_path
|
25
|
+
attr_writer :envs, :snapshots_path, :credentials
|
23
26
|
|
24
27
|
def parse_envs(yaml)
|
25
28
|
value = yaml.fetch("envs", [DEFAULT_ENV])
|
@@ -29,4 +32,10 @@ class Helmsnap::Config
|
|
29
32
|
def parse_snaphots_path(yaml)
|
30
33
|
Pathname.new(yaml.fetch("snapshotsPath", DEFAULT_SNAPSHOTS_PATH))
|
31
34
|
end
|
35
|
+
|
36
|
+
def parse_credentials(yaml)
|
37
|
+
yaml.fetch("credentials", []).each_with_object({}) do |obj, credentials|
|
38
|
+
credentials[obj["repo"]] = Credentials.new(obj["username"], obj["password"])
|
39
|
+
end
|
40
|
+
end
|
32
41
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Helmsnap::SetupDependencies < Helmsnap::Service
|
4
|
+
REPO_NAME_PREFIX = "helmsnap-"
|
5
|
+
|
4
6
|
def initialize(config)
|
5
7
|
super()
|
6
8
|
self.config = config
|
@@ -8,6 +10,8 @@ class Helmsnap::SetupDependencies < Helmsnap::Service
|
|
8
10
|
end
|
9
11
|
|
10
12
|
def call
|
13
|
+
clear_existing_repos!
|
14
|
+
|
11
15
|
config.envs.flat_map(&:release_paths).each do |chart_path|
|
12
16
|
setup!(chart_path)
|
13
17
|
end
|
@@ -17,6 +21,14 @@ class Helmsnap::SetupDependencies < Helmsnap::Service
|
|
17
21
|
|
18
22
|
attr_accessor :config, :processed_paths
|
19
23
|
|
24
|
+
def clear_existing_repos!
|
25
|
+
result = run_cmd("helm", "repo", "ls", allow_failure: true).output
|
26
|
+
|
27
|
+
result.scan(/#{REPO_NAME_PREFIX}\S+/o) do |repo_name|
|
28
|
+
run_cmd("helm", "repo", "remove", repo_name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
20
32
|
def setup!(chart_path)
|
21
33
|
normalized_path = chart_path.expand_path
|
22
34
|
return if processed_paths.include?(normalized_path)
|
@@ -30,7 +42,14 @@ class Helmsnap::SetupDependencies < Helmsnap::Service
|
|
30
42
|
end
|
31
43
|
|
32
44
|
dep_list.scan(%r{(https?://.+?)\s}) do |dep_path|
|
33
|
-
|
45
|
+
url = dep_path.first
|
46
|
+
|
47
|
+
if (credentials = config.credentials[url])
|
48
|
+
extra_args = ["--username", credentials.username, "--password", credentials.password]
|
49
|
+
end
|
50
|
+
|
51
|
+
repo_name = "#{REPO_NAME_PREFIX}#{Digest::MD5.hexdigest(url)}"
|
52
|
+
run_cmd("helm", "repo", "add", repo_name, url, *extra_args)
|
34
53
|
end
|
35
54
|
|
36
55
|
update_deps!(chart_path)
|
data/lib/helmsnap/version.rb
CHANGED
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: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuri Smirnov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rubocop-config-umbrellio
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
description:
|
42
28
|
email:
|
43
29
|
- tycooon@yandex.ru
|
@@ -85,14 +71,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
85
71
|
requirements:
|
86
72
|
- - ">="
|
87
73
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
74
|
+
version: 3.0.0
|
89
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
76
|
requirements:
|
91
77
|
- - ">="
|
92
78
|
- !ruby/object:Gem::Version
|
93
79
|
version: '0'
|
94
80
|
requirements: []
|
95
|
-
rubygems_version: 3.
|
81
|
+
rubygems_version: 3.5.21
|
96
82
|
signing_key:
|
97
83
|
specification_version: 4
|
98
84
|
summary: A tool for creating and checking helm chart snapshots.
|