kdep 0.3.2 → 0.3.4

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: 31b9cdda6d1844d118db0fb9d4e5a15b77fca16cbce57be97087972df0bcc202
4
- data.tar.gz: e2c9d713663d6e682ac3cf73808af7d34da016ee424ffe0b6df4199d9368bf55
3
+ metadata.gz: 615a9eb7f9d29743543c3af91b7a40bb1c3144246b5610dfa87c0d56263daed3
4
+ data.tar.gz: 17c34cf62596baeba616c1648c6013e499c73b6ad05f602bafb8d116287487f5
5
5
  SHA512:
6
- metadata.gz: 3f9b2177e397d00f9ba41cb5cc28cda8bd33a4167a7849f58f65ef5a05e611500a8d8813400344738293889614fbf859d10c018a564cdc445263fbaf4cea8a75
7
- data.tar.gz: c493a225039f31dfe0460db182a134e7c28e41d44f3d6aff9a54acd6c02ab4b6ca01f32b31435da7591ff432a7323ae199362233d166c87e212377c824342d75
6
+ metadata.gz: 5daa74dd82e2dcc8bb3001d62fe03bf89d32cb96d004bbd303b0ef568c6881fc6d32cbb76fae4191c0df469c70051737996e363762712a08f1d27ff1d95a92fd
7
+ data.tar.gz: 3061858aa0b926fce8bf3aadbc7cf047e01376e7e1206756b4233764efaca656e7dbc10966cff22233124963048db59113cd04dbc7ce796bfa94830072d2e17e
data/lib/kdep/cli.rb CHANGED
@@ -28,6 +28,8 @@ module Kdep
28
28
  end
29
29
 
30
30
  def run
31
+ Kdep::UpdateCheck.run
32
+
31
33
  global_parser.order!(@argv, into: @global_options)
32
34
  command_name = @argv.shift
33
35
 
@@ -113,12 +113,7 @@ module Kdep
113
113
 
114
114
  resources.each_with_index do |resource_name, idx|
115
115
  index = idx + 1
116
- begin
117
- content = renderer.render_resource(resource_name)
118
- rescue => e
119
- @ui.error("#{resource_name}: #{e.message}")
120
- next
121
- end
116
+ content = renderer.render_resource(resource_name)
122
117
 
123
118
  unless content.nil? || content.strip.empty?
124
119
  result = validator.validate(content, resource_name)
@@ -148,7 +143,6 @@ module Kdep
148
143
  else
149
144
  # Apply
150
145
  namespace = config["namespace"]
151
- errors = []
152
146
  applied = 0
153
147
 
154
148
  rendered_files.each do |file_path|
@@ -157,30 +151,25 @@ module Kdep
157
151
  @ui.info("applied: #{File.basename(file_path)}")
158
152
  applied += 1
159
153
  rescue Kdep::Kubectl::Error => e
160
- errors << { "file" => File.basename(file_path), "error" => e.message }
161
154
  @ui.error("#{File.basename(file_path)}: #{e.message}")
155
+ exit 1
162
156
  end
163
157
  end
164
158
 
165
- if errors.empty?
166
- @ui.info("#{applied} files applied, 0 errors")
167
-
168
- # Save new tag to state.yml
169
- File.write(File.join(deploy_dir, "state.yml"), YAML.dump({"tag" => next_version}))
170
-
171
- # Launch TUI dashboard for live monitoring
172
- unless @command_options[:"no-dashboard"]
173
- dashboard = Kdep::Dashboard.new(
174
- "name" => config["name"],
175
- "namespace" => namespace,
176
- "registry" => config["registry"],
177
- "image" => image
178
- )
179
- dashboard.run
180
- end
181
- else
182
- @ui.info("#{applied} files applied, #{errors.length} errors")
183
- exit 1
159
+ @ui.info("#{applied} files applied, 0 errors")
160
+
161
+ # Save new tag to state.yml
162
+ File.write(File.join(deploy_dir, "state.yml"), YAML.dump({"tag" => next_version}))
163
+
164
+ # Launch TUI dashboard for live monitoring
165
+ unless @command_options[:"no-dashboard"]
166
+ dashboard = Kdep::Dashboard.new(
167
+ "name" => config["name"],
168
+ "namespace" => namespace,
169
+ "registry" => config["registry"],
170
+ "image" => image
171
+ )
172
+ dashboard.run
184
173
  end
185
174
  end
186
175
  end
data/lib/kdep/docker.rb CHANGED
@@ -48,19 +48,31 @@ module Kdep
48
48
  "docker", "login", server, "-u", user, "--password-stdin",
49
49
  stdin_data: pass
50
50
  )
51
- if status.success?
52
- @logged_in[server] = true
53
- else
54
- $stderr.puts "warning: docker login to #{server} failed: #{stderr.strip}"
51
+ unless status.success?
52
+ raise Error, "docker login to #{server} failed: #{stderr.strip}"
55
53
  end
54
+ @logged_in[server] = true
56
55
  end
57
56
 
58
57
  def self.read_credentials(server)
59
- # Try ~/.leadfycr (default for leadfycr.azurecr.io)
60
- cred_file = File.join(Dir.home, ".leadfycr")
61
- if File.exist?(cred_file)
62
- parts = File.read(cred_file).strip.split(":", 2)
63
- return parts if parts.length == 2
58
+ # Try ~/.github-pat + ~/.github-user (for ghcr.io)
59
+ if server == "ghcr.io" || server.end_with?(".ghcr.io")
60
+ pat_file = File.join(Dir.home, ".github-pat")
61
+ user_file = File.join(Dir.home, ".github-user")
62
+ if File.exist?(pat_file) && File.exist?(user_file)
63
+ user = File.read(user_file).strip
64
+ pat = File.read(pat_file).strip
65
+ return [user, pat] if !user.empty? && !pat.empty?
66
+ end
67
+ end
68
+
69
+ # Try ~/.leadfycr (for azurecr.io)
70
+ if server.end_with?(".azurecr.io")
71
+ cred_file = File.join(Dir.home, ".leadfycr")
72
+ if File.exist?(cred_file)
73
+ parts = File.read(cred_file).strip.split(":", 2)
74
+ return parts if parts.length == 2
75
+ end
64
76
  end
65
77
 
66
78
  # Try ~/.docker/config.json
@@ -0,0 +1,59 @@
1
+ require "net/http"
2
+ require "json"
3
+
4
+ module Kdep
5
+ module UpdateCheck
6
+ CACHE_FILE = File.join(Dir.home, ".kdep_update_check")
7
+ CHECK_INTERVAL = 3600 # seconds between remote checks
8
+
9
+ def self.run
10
+ return if recently_checked?
11
+
12
+ Thread.new { check_and_notify }
13
+ end
14
+
15
+ def self.check_and_notify
16
+ latest = fetch_latest_version
17
+ return unless latest
18
+
19
+ File.write(CACHE_FILE, Time.now.to_i.to_s)
20
+
21
+ if newer?(latest, Kdep::VERSION)
22
+ $stderr.puts "\e[33mupdate available: kdep #{Kdep::VERSION} → #{latest} (gem update kdep)\e[0m"
23
+ end
24
+ rescue StandardError
25
+ # never break the user's workflow
26
+ end
27
+
28
+ def self.recently_checked?
29
+ return false unless File.exist?(CACHE_FILE)
30
+
31
+ last_check = File.read(CACHE_FILE).strip.to_i
32
+ (Time.now.to_i - last_check) < CHECK_INTERVAL
33
+ end
34
+
35
+ def self.fetch_latest_version
36
+ uri = URI("https://rubygems.org/api/v1/versions/kdep/latest.json")
37
+ http = Net::HTTP.new(uri.host, uri.port)
38
+ http.use_ssl = true
39
+ http.open_timeout = 2
40
+ http.read_timeout = 2
41
+ response = http.get(uri.request_uri)
42
+ return nil unless response.is_a?(Net::HTTPSuccess)
43
+
44
+ JSON.parse(response.body)["version"]
45
+ end
46
+
47
+ def self.newer?(latest, current)
48
+ latest_parts = latest.split(".").map(&:to_i)
49
+ current_parts = current.split(".").map(&:to_i)
50
+ latest_parts.zip(current_parts).each do |l, c|
51
+ return true if (l || 0) > (c || 0)
52
+ return false if (l || 0) < (c || 0)
53
+ end
54
+ false
55
+ end
56
+
57
+ private_class_method :check_and_notify, :recently_checked?, :fetch_latest_version, :newer?
58
+ end
59
+ end
data/lib/kdep/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kdep
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.4"
3
3
  end
data/lib/kdep.rb CHANGED
@@ -42,6 +42,7 @@ require "kdep/dashboard/log_panel"
42
42
  require "kdep/dashboard/resources_panel"
43
43
  require "kdep/dashboard/health_panel"
44
44
  require "kdep/dashboard"
45
+ require "kdep/update_check"
45
46
  require "kdep/cli"
46
47
 
47
48
  module Kdep
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kdep
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leadfy
@@ -103,6 +103,7 @@ files:
103
103
  - lib/kdep/renderer.rb
104
104
  - lib/kdep/template_context.rb
105
105
  - lib/kdep/ui.rb
106
+ - lib/kdep/update_check.rb
106
107
  - lib/kdep/validator.rb
107
108
  - lib/kdep/version.rb
108
109
  - lib/kdep/version_tagger.rb
@@ -146,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
147
  - !ruby/object:Gem::Version
147
148
  version: '0'
148
149
  requirements: []
149
- rubygems_version: 3.2.32
150
+ rubygems_version: 3.5.22
150
151
  signing_key:
151
152
  specification_version: 4
152
153
  summary: Kubernetes deployment CLI