pfab 0.58.17 → 0.58.19

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: 26d320a9f0e310c4807cc869b8d92435beebda0c6018b95f783853c70e35490c
4
- data.tar.gz: 6cdb8a9994ad09267235514c85b1883cbe068559708e16a6c0b9aacf28d3bb2d
3
+ metadata.gz: f7691bb5b1e776fa0a627d0c0c310fd4487b00840d7696479b1cf73564e586fc
4
+ data.tar.gz: 1c9c35389d9d7afd8a8688bc01cdd50219aa6d525a0f311ac6201706a15dc9d9
5
5
  SHA512:
6
- metadata.gz: 98e8e05373073df2a8120cbbb24720c9a17f13a76f120a534225bdc731cb427007f59babf51a787825637fe8ae527e44435276a55cbcd241833928e5441da5dc
7
- data.tar.gz: 0bfbd81ac1fd0011afd5d9ce4afb90b0ea93341105485e28260c34b4fc4c4212370a4a0c36ed2a41c00f7beada0a9163efee21eacabc55d4f7d69034c356252d
6
+ metadata.gz: 0b2987d1d0aa78f625c948bb39af2f6c675d0f2f609214ff57311021ad1364e55d79582b4e857189b5cf4fb14ec37b9cc4a43426eda8a8510692a37e527f5b6d
7
+ data.tar.gz: 6d9ab217334a5e06f1f2604d1b9dae6d4611707c14ae0b4d220fe7b1e0935ce0102d0c32731653e28707586f083da1a923f0d34482d66c34dd16672b33851ce9
@@ -0,0 +1,2 @@
1
+ # All changes require review from prefabdevs team
2
+ * @prefab-cloud/prefabdevs
data/.tool-versions CHANGED
@@ -1 +1 @@
1
- ruby 3.1.2
1
+ ruby 3.3.9
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source "https://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
 
6
- gem "commander"
6
+ gem "commander", "~> 4.6"
7
7
 
8
8
  gem "activesupport"
9
9
  gem "pry-byebug"
data/Gemfile.lock CHANGED
@@ -29,8 +29,8 @@ GEM
29
29
  builder (3.2.4)
30
30
  byebug (11.1.3)
31
31
  coderay (1.1.3)
32
- commander (4.4.6)
33
- highline (~> 1.7.2)
32
+ commander (4.6.0)
33
+ highline (~> 2.0.0)
34
34
  concurrent-ruby (1.2.3)
35
35
  descendants_tracker (0.0.4)
36
36
  thread_safe (~> 0.3, >= 0.3.1)
@@ -64,7 +64,7 @@ GEM
64
64
  hashie (~> 3.5, >= 3.5.2)
65
65
  oauth2 (~> 1.0)
66
66
  hashie (3.6.0)
67
- highline (1.7.10)
67
+ highline (2.0.3)
68
68
  i18n (1.14.5)
69
69
  concurrent-ruby (~> 1.0)
70
70
  json (2.6.3)
@@ -121,7 +121,7 @@ PLATFORMS
121
121
  DEPENDENCIES
122
122
  activesupport
123
123
  bundler (~> 2.3)
124
- commander
124
+ commander (~> 4.6)
125
125
  juwelier (~> 2.4.9)!
126
126
  pry-byebug
127
127
  rdoc (~> 6.1)
data/README.markdown CHANGED
@@ -229,7 +229,7 @@ Contributing to pfab
229
229
  Local Testing
230
230
  -----------------------------------------
231
231
  ```bash
232
- bundle exec rake build
232
+ bundle exec rake clean build
233
233
  gem install --local pkg/pfab-0.57.1.gem
234
234
  ```
235
235
  ```ruby
data/Rakefile CHANGED
@@ -23,6 +23,7 @@ Juwelier::Tasks.new do |gem|
23
23
  gem.email = "jdwyer@prefab.cloud"
24
24
  gem.authors = ["Jeff Dwyer"]
25
25
  gem.version = Pfab::Version::STRING
26
+ gem.required_ruby_version = ">= 3.1"
26
27
  # dependencies defined in Gemfile
27
28
  end
28
29
  Juwelier::RubygemsDotOrgTasks.new
data/lib/pfab/cli.rb CHANGED
@@ -39,6 +39,14 @@ module Pfab
39
39
  global_option("-a", "--application_name APP_NAME", "run without prompting for app") do |app_name|
40
40
  $app_name = app_name
41
41
  end
42
+ $enable_docker_registry_cache = false
43
+ $disable_docker_registry_cache = false
44
+ global_option("--enable-docker-registry-cache", "enable docker registry caching with 'cache' label") do
45
+ $enable_docker_registry_cache = true
46
+ end
47
+ global_option("--disable-docker-registry-cache", "disable docker registry caching (overrides auto-detection)") do
48
+ $disable_docker_registry_cache = true
49
+ end
42
50
 
43
51
  command :build do |c|
44
52
  c.syntax = "pfab build"
@@ -339,7 +347,14 @@ module Pfab
339
347
  end
340
348
  end
341
349
 
342
- build_cmd = "docker buildx build --tag #{image_name} --platform linux/amd64 #{build_args} ."
350
+ cache_args = ""
351
+ if should_use_registry_cache?
352
+ cache_image_name = "#{container_repository}/#{image_name}:cache"
353
+ cache_args = "--cache-from type=registry,ref=#{cache_image_name} --cache-to type=registry,ref=#{cache_image_name},mode=max"
354
+ say "Using Docker registry cache: #{cache_image_name}"
355
+ end
356
+
357
+ build_cmd = "docker buildx build --tag #{image_name} --platform linux/amd64 #{build_args} #{cache_args} ."
343
358
  puts build_cmd
344
359
  result = system(build_cmd)
345
360
 
@@ -493,6 +508,28 @@ module Pfab
493
508
  name = get_app_name(all: true)
494
509
  (name == "all") ? deployables.keys : [name]
495
510
  end
511
+
512
+ def should_use_registry_cache?
513
+ # Disable flag takes highest precedence
514
+ return false if $disable_docker_registry_cache
515
+
516
+ # Enable flag takes precedence over auto-detection
517
+ return true if $enable_docker_registry_cache
518
+
519
+ # Auto-detect CI environments where local Docker cache isn't available
520
+ ci_env_vars = [
521
+ 'CI', # Generic CI indicator
522
+ 'GITHUB_ACTIONS', # GitHub Actions
523
+ 'GITLAB_CI', # GitLab CI
524
+ 'CIRCLECI', # CircleCI
525
+ 'TRAVIS', # Travis CI
526
+ 'JENKINS_URL', # Jenkins
527
+ 'BUILD_ID', # Various CI systems
528
+ 'CONTINUOUS_INTEGRATION' # Generic CI
529
+ ]
530
+
531
+ ci_env_vars.any? { |var| ENV[var] }
532
+ end
496
533
  end
497
534
 
498
535
  CommandResult = Struct.new(:stdout, :stderr, :exit_status_code, keyword_init: true) do
@@ -163,6 +163,40 @@ module Pfab
163
163
 
164
164
  return ports
165
165
  end
166
+
167
+ def base_labels
168
+ {
169
+ application: @data['application'],
170
+ "deployed-name" => @data['deployed_name'],
171
+ }
172
+ end
173
+
174
+ def metadata_labels
175
+ base_labels.merge({
176
+ "application-type" => application_type,
177
+ "deploy-id" => deploy_id,
178
+ })
179
+ end
180
+
181
+ def datadog_labels
182
+ labels = {
183
+ "tags.datadoghq.com/env" => @data['env'],
184
+ "tags.datadoghq.com/service" => @data['deployed_name'],
185
+ "tags.datadoghq.com/version" => StyledYAML.double_quoted(@data['sha'])
186
+ }
187
+ labels["tags.datadoghq.com/family"] = @data['family'] if @data['family']
188
+ labels
189
+ end
190
+
191
+ def full_labels
192
+ metadata_labels.merge(datadog_labels)
193
+ end
194
+
195
+ def pod_labels
196
+ base_labels.merge({
197
+ "application-type" => application_type,
198
+ }).merge(datadog_labels)
199
+ end
166
200
  end
167
201
  end
168
202
  end
@@ -16,15 +16,7 @@ module Pfab
16
16
  metadata: {
17
17
  name: "#{@data['deployed_name']}-#{@data['sha']}",
18
18
  namespace: get_namespace,
19
- labels: {
20
- application: @data['application'],
21
- "deployed-name" => @data['deployed_name'],
22
- "application-type" => application_type,
23
- "deploy-id" => deploy_id,
24
- "tags.datadoghq.com/env": @data['env'],
25
- "tags.datadoghq.com/service": @data['deployed_name'],
26
- "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
27
- }
19
+ labels: full_labels
28
20
  },
29
21
  spec: {
30
22
  schedule: get("schedule"),
@@ -35,23 +27,12 @@ module Pfab
35
27
  metadata: {
36
28
  name: "#{@data['deployed_name']}-#{@data['sha']}",
37
29
  namespace: get_namespace,
38
- labels: {
39
- application: @data['application'],
40
- "deployed-name" => @data['deployed_name'],
41
- "application-type" => "cron",
42
- },
30
+ labels: metadata_labels,
43
31
  },
44
32
  spec: {
45
33
  template: {
46
34
  metadata: {
47
- labels: {
48
- application: @data['application'],
49
- "deployed-name" => @data['deployed_name'],
50
- "application-type" => "cron",
51
- "tags.datadoghq.com/env": @data['env'],
52
- "tags.datadoghq.com/service": @data['deployed_name'],
53
- "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
54
- },
35
+ labels: pod_labels,
55
36
  },
56
37
  spec: {
57
38
  serviceAccountName: get('serviceAccountName'),
@@ -16,15 +16,7 @@ module Pfab
16
16
  metadata: {
17
17
  name: @data['deployed_name'],
18
18
  namespace: get_namespace,
19
- labels: {
20
- application: @data['application'],
21
- "deployed-name" => @data['deployed_name'],
22
- "application-type" => application_type,
23
- "deploy-id" => deploy_id,
24
- "tags.datadoghq.com/env": @data['env'],
25
- "tags.datadoghq.com/service": @data['deployed_name'],
26
- "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
27
- }
19
+ labels: full_labels
28
20
  },
29
21
  spec: {
30
22
  replicas: get("replicas") || 1,
@@ -37,14 +29,7 @@ module Pfab
37
29
  revisionHistoryLimit: 5,
38
30
  template: {
39
31
  metadata: {
40
- labels: {
41
- application: @data['application'],
42
- "deployed-name" => @data['deployed_name'],
43
- "application-type" => "daemon",
44
- "tags.datadoghq.com/env": @data['env'],
45
- "tags.datadoghq.com/service": @data['deployed_name'],
46
- "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
47
- },
32
+ labels: pod_labels,
48
33
  },
49
34
  spec: {
50
35
  serviceAccountName: get('serviceAccountName'),
@@ -16,15 +16,7 @@ module Pfab
16
16
  metadata: {
17
17
  name: "job-#{@data['deployed_name']}-#{@data['sha']}",
18
18
  namespace: get_namespace,
19
- labels: {
20
- application: @data['application'],
21
- "deployed-name" => @data['deployed_name'],
22
- "application-type" => application_type,
23
- "deploy-id" => deploy_id,
24
- "tags.datadoghq.com/env": @data['env'],
25
- "tags.datadoghq.com/service": @data['deployed_name'],
26
- "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
27
- }
19
+ labels: full_labels
28
20
  },
29
21
  spec: {
30
22
  ttlSecondsAfterFinished: get('ttlSecondsAfterFinished'),
@@ -34,14 +26,7 @@ module Pfab
34
26
  metadata: {
35
27
  name: "#{@data['deployed_name']}-#{@data['sha']}",
36
28
  namespace: get_namespace,
37
- labels: {
38
- application: @data['application'],
39
- "deployed-name" => @data['deployed_name'],
40
- "application-type" => "job",
41
- "tags.datadoghq.com/env": @data['env'],
42
- "tags.datadoghq.com/service": @data['deployed_name'],
43
- "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
44
- },
29
+ labels: pod_labels,
45
30
  },
46
31
  spec: {
47
32
  serviceAccountName: get('serviceAccountName'),
@@ -39,10 +39,7 @@ module Pfab
39
39
  metadata: {
40
40
  name: @data['deployed_name'],
41
41
  namespace: get_namespace,
42
- labels: {
43
- application: @data['application'],
44
- "deployed-name" => @data['deployed_name'],
45
- },
42
+ labels: base_labels,
46
43
  annotations: service_annotations,
47
44
  },
48
45
  spec: {
@@ -74,10 +71,7 @@ module Pfab
74
71
  metadata: {
75
72
  name: "ingress-#{@data['deployed_name']}",
76
73
  namespace: get_namespace,
77
- labels: {
78
- application: @data['application'],
79
- "deployed-name" => @data['deployed_name'],
80
- },
74
+ labels: base_labels,
81
75
  annotations: ingress_annotations,
82
76
  },
83
77
  spec: {
@@ -265,16 +259,9 @@ module Pfab
265
259
  metadata: {
266
260
  name: @data['deployed_name'],
267
261
  namespace: get_namespace,
268
- labels: {
269
- "application" => @data['application'],
270
- "deployed-name" => @data['deployed_name'],
271
- "application-type" => application_type,
272
- "deploy-id" => deploy_id,
262
+ labels: full_labels.merge({
273
263
  LABEL_DEPLOY_UNIQUE_ID => StyledYAML.double_quoted(deploy_unique_id),
274
- "tags.datadoghq.com/env" => @data['env'],
275
- "tags.datadoghq.com/service" => @data['deployed_name'],
276
- "tags.datadoghq.com/version" => StyledYAML.double_quoted(@data['sha'])
277
- }
264
+ })
278
265
  },
279
266
  spec: {
280
267
  replicas: get("replicas") || 1,
@@ -288,15 +275,9 @@ module Pfab
288
275
  progressDeadlineSeconds: get("progressDeadlineSeconds") || 600,
289
276
  template: {
290
277
  metadata: {
291
- labels: {
292
- application: @data['application'],
293
- "deployed-name" => @data['deployed_name'],
294
- "application-type" => "web",
278
+ labels: pod_labels.merge({
295
279
  LABEL_DEPLOY_UNIQUE_ID => StyledYAML.double_quoted(deploy_unique_id),
296
- "tags.datadoghq.com/env": @data['env'],
297
- "tags.datadoghq.com/service": @data['deployed_name'],
298
- "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
299
- },
280
+ }),
300
281
  },
301
282
  spec: {
302
283
  serviceAccountName: get('serviceAccountName'),
data/lib/pfab/version.rb CHANGED
@@ -2,7 +2,7 @@ module Pfab
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 58
5
- PATCH = 17
5
+ PATCH = 19
6
6
  BUILD = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
data/lib/pfab/yamls.rb CHANGED
@@ -13,6 +13,7 @@ module Pfab
13
13
  'container_repository' => config["container.repository"],
14
14
  'config' => config,
15
15
  'application' => application_yaml["name"],
16
+ 'family' => application_yaml["family"],
16
17
  'application_yaml' => application_yaml,
17
18
  'namespace' => namespace,
18
19
  'application_yaml_hash' => application_yaml_hash
data/pfab.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: pfab 0.58.17 ruby lib
5
+ # stub: pfab 0.58.19 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "pfab".freeze
9
- s.version = "0.58.17"
9
+ s.version = "0.58.19".freeze
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Jeff Dwyer".freeze]
14
- s.date = "2025-06-02"
14
+ s.date = "2025-08-19"
15
15
  s.description = "k8s helper".freeze
16
16
  s.email = "jdwyer@prefab.cloud".freeze
17
17
  s.executables = ["pfab".freeze]
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
  ]
22
22
  s.files = [
23
23
  ".document",
24
+ ".github/CODEOWNERS",
24
25
  ".tool-versions",
25
26
  "CODEOWNERS",
26
27
  "Gemfile",
@@ -46,33 +47,20 @@ Gem::Specification.new do |s|
46
47
  ]
47
48
  s.homepage = "http://github.com/prefab-cloud/pfab".freeze
48
49
  s.licenses = ["MIT".freeze]
49
- s.rubygems_version = "3.3.7".freeze
50
+ s.required_ruby_version = Gem::Requirement.new(">= 3.1".freeze)
51
+ s.rubygems_version = "3.5.22".freeze
50
52
  s.summary = "helper gem".freeze
51
53
 
52
- if s.respond_to? :specification_version then
53
- s.specification_version = 4
54
- end
54
+ s.specification_version = 4
55
55
 
56
- if s.respond_to? :add_runtime_dependency then
57
- s.add_runtime_dependency(%q<commander>.freeze, [">= 0"])
58
- s.add_runtime_dependency(%q<activesupport>.freeze, [">= 0"])
59
- s.add_runtime_dependency(%q<pry-byebug>.freeze, [">= 0"])
60
- s.add_runtime_dependency(%q<styled_yaml>.freeze, ["~> 0.0.1"])
61
- s.add_development_dependency(%q<rdoc>.freeze, ["~> 6.1"])
62
- s.add_development_dependency(%q<bundler>.freeze, ["~> 2.3"])
63
- s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.4.9"])
64
- s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
65
- s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
66
- else
67
- s.add_dependency(%q<commander>.freeze, [">= 0"])
68
- s.add_dependency(%q<activesupport>.freeze, [">= 0"])
69
- s.add_dependency(%q<pry-byebug>.freeze, [">= 0"])
70
- s.add_dependency(%q<styled_yaml>.freeze, ["~> 0.0.1"])
71
- s.add_dependency(%q<rdoc>.freeze, ["~> 6.1"])
72
- s.add_dependency(%q<bundler>.freeze, ["~> 2.3"])
73
- s.add_dependency(%q<juwelier>.freeze, ["~> 2.4.9"])
74
- s.add_dependency(%q<simplecov>.freeze, [">= 0"])
75
- s.add_dependency(%q<test-unit>.freeze, [">= 0"])
76
- end
56
+ s.add_runtime_dependency(%q<commander>.freeze, [">= 0".freeze])
57
+ s.add_runtime_dependency(%q<activesupport>.freeze, [">= 0".freeze])
58
+ s.add_runtime_dependency(%q<pry-byebug>.freeze, [">= 0".freeze])
59
+ s.add_runtime_dependency(%q<styled_yaml>.freeze, ["~> 0.0.1".freeze])
60
+ s.add_development_dependency(%q<rdoc>.freeze, ["~> 6.1".freeze])
61
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 2.3".freeze])
62
+ s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.4.9".freeze])
63
+ s.add_development_dependency(%q<simplecov>.freeze, [">= 0".freeze])
64
+ s.add_development_dependency(%q<test-unit>.freeze, [">= 0".freeze])
77
65
  end
78
66
 
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pfab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.58.17
4
+ version: 0.58.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Dwyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-06-02 00:00:00.000000000 Z
11
+ date: 2025-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '4.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '4.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -146,6 +146,7 @@ extra_rdoc_files:
146
146
  - README.markdown
147
147
  files:
148
148
  - ".document"
149
+ - ".github/CODEOWNERS"
149
150
  - ".tool-versions"
150
151
  - CODEOWNERS
151
152
  - Gemfile
@@ -180,14 +181,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
180
181
  requirements:
181
182
  - - ">="
182
183
  - !ruby/object:Gem::Version
183
- version: '0'
184
+ version: '3.1'
184
185
  required_rubygems_version: !ruby/object:Gem::Requirement
185
186
  requirements:
186
187
  - - ">="
187
188
  - !ruby/object:Gem::Version
188
189
  version: '0'
189
190
  requirements: []
190
- rubygems_version: 3.3.7
191
+ rubygems_version: 3.5.22
191
192
  signing_key:
192
193
  specification_version: 4
193
194
  summary: helper gem