pfab 0.33.0 → 0.34.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: ae7b00c6d13d8b45b8366942aff2a3afacc421e798a715bde6acb2455623a1b2
4
- data.tar.gz: c94e58d362a8c6f3f6da51dd183b32da9474278eb6aaaf8e8ba2d35c2aab346e
3
+ metadata.gz: 43fd2d75471720154cc7f601da778a1f2e876ad3a2b6f10b6287a7c5c495a9a2
4
+ data.tar.gz: ea9b62311da369c161222052886f6203eb5c0abeffcb0eefb70d5624db530443
5
5
  SHA512:
6
- metadata.gz: '092d1680e87f567c670d566dcebaa029a4c2b30fd841695a4d0bd6a2da0b542f8aa5f41208e70116c374a90a359276f2df0a4bdac511ec28c490ac4ac040538a'
7
- data.tar.gz: ef414f2881c18685adef089dfdfd0a61937941ff3945338b74d3025f1f48a77203ca5545df80fa8fdb4bb4f0a2ca9722929c0a3ae780f770d9cb83ee418abd9a
6
+ metadata.gz: 68fb2dc8204e567dbae8a2d0b693e8f4fb313da71ae3ee99de55f2e80db90241c12a18b9420a780da66ee6e0279e65ba5436f757f1b8c55be6e7fe8b0524e12c
7
+ data.tar.gz: f14ce8e698afc69632ee311f1735ac0b6ac24de734dbfa2b947a93de120df7845cde3ef4daf28f3bf7f35fed65c97eb7095e8ad1110b380c307870e81e673214
data/CODEOWNERS ADDED
@@ -0,0 +1 @@
1
+ * @prefab-cloud/prefabdevs @prefab-cloud/prefabmaintainers @prefab-cloud/prefabadmins
data/Gemfile.lock CHANGED
@@ -18,7 +18,7 @@ GIT
18
18
  GEM
19
19
  remote: https://rubygems.org/
20
20
  specs:
21
- activesupport (5.2.2)
21
+ activesupport (5.2.4.3)
22
22
  concurrent-ruby (~> 1.0, >= 1.0.2)
23
23
  i18n (>= 0.7, < 2)
24
24
  minitest (~> 5.1)
@@ -30,7 +30,7 @@ GEM
30
30
  coderay (1.1.2)
31
31
  commander (4.4.6)
32
32
  highline (~> 1.7.2)
33
- concurrent-ruby (1.1.4)
33
+ concurrent-ruby (1.1.9)
34
34
  descendants_tracker (0.0.4)
35
35
  thread_safe (~> 0.3, >= 0.3.1)
36
36
  docile (1.3.1)
@@ -53,7 +53,7 @@ GEM
53
53
  faraday-net_http_persistent (1.2.0)
54
54
  faraday-patron (1.0.0)
55
55
  faraday-rack (1.0.0)
56
- git (1.9.1)
56
+ git (1.11.0)
57
57
  rchardet (~> 1.8)
58
58
  github_api (0.19.0)
59
59
  addressable (~> 2.4)
@@ -63,19 +63,19 @@ GEM
63
63
  oauth2 (~> 1.0)
64
64
  hashie (3.6.0)
65
65
  highline (1.7.10)
66
- i18n (1.2.0)
66
+ i18n (1.8.11)
67
67
  concurrent-ruby (~> 1.0)
68
68
  json (1.8.6)
69
69
  jwt (2.3.0)
70
70
  kamelcase (0.0.2)
71
71
  semver2 (~> 3)
72
72
  method_source (0.9.2)
73
- mini_portile2 (2.8.1)
74
- minitest (5.11.3)
73
+ mini_portile2 (2.8.0)
74
+ minitest (5.15.0)
75
75
  multi_json (1.15.0)
76
76
  multi_xml (0.6.0)
77
77
  multipart-post (2.1.1)
78
- nokogiri (1.14.2)
78
+ nokogiri (1.13.6)
79
79
  mini_portile2 (~> 2.8.0)
80
80
  racc (~> 1.4)
81
81
  oauth2 (1.4.7)
@@ -93,7 +93,7 @@ GEM
93
93
  pry (~> 0.10)
94
94
  psych (4.0.2)
95
95
  public_suffix (4.0.6)
96
- racc (1.6.2)
96
+ racc (1.6.0)
97
97
  rack (2.2.3)
98
98
  rake (13.0.6)
99
99
  rchardet (1.8.0)
@@ -109,7 +109,7 @@ GEM
109
109
  test-unit (3.2.9)
110
110
  power_assert
111
111
  thread_safe (0.3.6)
112
- tzinfo (1.2.5)
112
+ tzinfo (1.2.9)
113
113
  thread_safe (~> 0.1)
114
114
 
115
115
  PLATFORMS
@@ -126,4 +126,4 @@ DEPENDENCIES
126
126
  test-unit
127
127
 
128
128
  BUNDLED WITH
129
- 1.17.2
129
+ 2.3.5
data/README.markdown CHANGED
@@ -117,9 +117,9 @@ Releasing
117
117
  - modify version.rb
118
118
  - ```bundle exec rake gemspec```
119
119
  - ```git commit ```
120
- - ```bundle exec rake git:release```
121
- - ```bundle exec rake build```
122
- - ```gem push pkg/pfab-0.12.0.gem```
120
+ - ```REMOTE_BRANCH=main LOCAL_BRANCH=main bundle exec rake git:release```
121
+ - ```REMOTE_BRANCH=main LOCAL_BRANCH=main bundle exec rake build```
122
+ - ```gem push pkg/pfab-0.15.0.gem```
123
123
 
124
124
  Copyright
125
125
  ---------
data/lib/pfab/cli.rb CHANGED
@@ -22,7 +22,14 @@ module Pfab
22
22
  $dryrun = false
23
23
  global_option("--dryrun") { $dryrun = true }
24
24
  $env = :staging
25
- global_option("-p") { $env = :production }
25
+ global_option("-p") do
26
+ puts "please use `-e production` next time!"
27
+ $env = :production
28
+ end
29
+ global_option("-e", "--environment ENV", "specify target env") do |env_name|
30
+ puts "Using environment #{env_name}"
31
+ $env = env_name
32
+ end
26
33
  global_option("-a", "--application_name APP_NAME", "run without prompting for app") do |app_name|
27
34
  $app_name = app_name
28
35
  end
@@ -31,8 +38,9 @@ module Pfab
31
38
  c.syntax = "pfab build"
32
39
  c.summary = "build image"
33
40
  c.option "--force", "force build and push"
41
+ c.option "--check", "just check if built"
34
42
  c.action do |_args, options|
35
- cmd_build(force: options.force)
43
+ cmd_build(force: options.force, checkonly: options.check)
36
44
  end
37
45
  end
38
46
 
@@ -83,6 +91,18 @@ module Pfab
83
91
  end
84
92
  end
85
93
 
94
+ command :restart do |c|
95
+ c.syntax = "pfab restart"
96
+ c.summary = "rolling restart of a deployment"
97
+ c.description = "rolling restart of a deployment"
98
+ c.action do
99
+ set_kube_context
100
+ app_name = get_app_name
101
+
102
+ puts_and_system "kubectl rollout restart deployment.apps/#{app_name}"
103
+ end
104
+ end
105
+
86
106
  command :exec do |c|
87
107
  c.syntax = "pfab exec"
88
108
  c.summary = "kubectl exec into a pod"
@@ -190,10 +210,20 @@ module Pfab
190
210
  end
191
211
  puts_and_system("kubectl apply -f .application-k8s-#{$env}-#{app_name}.yaml")
192
212
  puts_and_system("git tag release-#{$env}-#{app_name}-#{Time.now.strftime("%Y-%m-%d-%H-%M-%S")} HEAD")
213
+ puts_and_system("git push origin --tags")
193
214
  end
194
215
  end
195
216
 
196
- def cmd_build(force: false)
217
+ def image_exists?(full_image_name)
218
+
219
+ # return 0 if image exists 1 if not
220
+ cmd = "docker manifest inspect #{full_image_name} > /dev/null ; echo $?"
221
+ say "Looking for images with #{cmd}"
222
+ existing = `#{cmd}`.strip
223
+ existing == "0"
224
+ end
225
+
226
+ def cmd_build(force: false, checkonly: false)
197
227
  rev = get_current_sha
198
228
  say "This repo is at rev: #{rev}"
199
229
  uncommitted_changes = !`git diff-index HEAD --`.empty?
@@ -209,13 +239,14 @@ module Pfab
209
239
 
210
240
  full_image_name = "#{container_repository}/#{image_name}:#{rev}"
211
241
 
212
- cmd = "docker images -q #{full_image_name}"
213
- say "Looking for images with #{cmd}"
214
- existing = `#{cmd}`
215
-
216
- if !existing.to_s.empty? && !force
217
- say "Found image #{full_image_name} already, skipping prebuild, build & push"
218
- return true
242
+ unless force
243
+ if image_exists?(full_image_name)
244
+ say "Found image #{full_image_name} already, skipping prebuild, build & push"
245
+ return true
246
+ else
247
+ say "No image #{full_image_name} present"
248
+ end
249
+ return if checkonly
219
250
  end
220
251
 
221
252
  say "No image #{full_image_name} present, building"
@@ -234,13 +265,23 @@ module Pfab
234
265
  end
235
266
  end
236
267
 
237
- puts_and_system "docker build -t #{image_name} --platform amd64 ."
268
+ build_cmd = "docker build -t #{image_name} --platform amd64 ."
269
+ puts build_cmd
270
+ result = system(build_cmd)
238
271
 
239
- puts_and_system "docker tag #{image_name}:latest #{image_name}:#{rev}"
240
- puts_and_system "docker tag #{image_name}:#{rev} #{full_image_name}"
272
+ puts "Build Result #{result}"
273
+
274
+ if result
275
+ puts_and_system "docker tag #{image_name}:latest #{image_name}:#{rev}"
276
+ puts_and_system "docker tag #{image_name}:#{rev} #{full_image_name}"
277
+
278
+ puts_and_system "docker push #{container_repository}/#{image_name}:#{rev}"
279
+ return true
280
+ else
281
+ say "Build Did Not Succeed"
282
+ return false
283
+ end
241
284
 
242
- puts_and_system "docker push #{container_repository}/#{image_name}:#{rev}"
243
- return true
244
285
  end
245
286
 
246
287
  def yy
@@ -263,7 +304,7 @@ module Pfab
263
304
  end
264
305
 
265
306
  def get_current_sha
266
- `git rev-parse --short --verify HEAD`.chomp
307
+ `git rev-parse --short=8 --verify HEAD`.chomp
267
308
  end
268
309
 
269
310
  def set_kube_context
@@ -17,6 +17,10 @@ module Pfab
17
17
  app_vars.dig(@data["env"], key) || app_vars[key]
18
18
  end
19
19
 
20
+ def get_namespace()
21
+ get("namespace") || @data['env']
22
+ end
23
+
20
24
  def cpu(req_type)
21
25
  default_cpu_string = @data["config"]["default_cpu_string"] || "50m/250m"
22
26
  (request, limit) = (get("cpu") || default_cpu_string).split("/")
@@ -42,8 +46,24 @@ module Pfab
42
46
  }
43
47
  end
44
48
 
49
+ # overridden in subtypes
50
+ def application_type
51
+ "base"
52
+ end
53
+
54
+ def deploy_id
55
+ "#{@data['application']}.#{application_type}.#{@data['deployed_name']}"
56
+ end
57
+
45
58
  def env_vars
46
- env_vars = { "DEPLOYED_NAME" => { value: @data['deployed_name'] } }
59
+ env_vars = { "DEPLOYED_NAME" => { value: @data['deployed_name'] },
60
+ "DEPLOY_ID" => { value: deploy_id },
61
+ "POD_ID" => { valueFrom: { fieldRef: { fieldPath: 'metadata.name' } } },
62
+ "SPEC_NODENAME" => { valueFrom: { fieldRef: { fieldPath: 'spec.nodeName' } } },
63
+ "DD_ENV" => { valueFrom: { fieldRef: { fieldPath: "metadata.labels['tags.datadoghq.com/env']" } } },
64
+ "DD_SERVICE" => { valueFrom: { fieldRef: { fieldPath: "metadata.labels['tags.datadoghq.com/service']" } } },
65
+ "DD_VERSION" => { valueFrom: { fieldRef: { fieldPath: "metadata.labels['tags.datadoghq.com/version']" } } }
66
+ }
47
67
 
48
68
  # load defaults
49
69
  load_env_vars(env_vars, @data.dig("application_yaml", :environment))
@@ -65,6 +85,11 @@ module Pfab
65
85
  env_vars[env_var_name] = { valueFrom: {
66
86
  fieldRef: { fieldPath: field_name }
67
87
  } }
88
+ elsif v.to_s.start_with? "configmap/"
89
+ (_, configmap_name, key_name) = v.split("/")
90
+ env_vars[env_var_name] = { valueFrom: {
91
+ configMapKeyRef: { name: configmap_name, key: key_name }
92
+ } }
68
93
  else
69
94
  env_vars[env_var_name] = { value: v }
70
95
  end
@@ -5,17 +5,25 @@ module Pfab
5
5
  f << YAML.dump(job.deep_stringify_keys)
6
6
  end
7
7
 
8
+ def application_type
9
+ "cron"
10
+ end
11
+
8
12
  def job
9
13
  {
10
- apiVersion: "batch/v1beta1",
14
+ apiVersion: "batch/v1",
11
15
  kind: "CronJob",
12
16
  metadata: {
13
17
  name: "#{@data['deployed_name']}-#{@data['sha']}",
14
- namespace: @data['env'],
18
+ namespace: get_namespace,
15
19
  labels: {
16
20
  application: @data['application'],
17
21
  "deployed-name" => @data['deployed_name'],
18
- "application-type" => "job",
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": "#{@data['sha']}"
19
27
  }
20
28
  },
21
29
  spec: {
@@ -39,10 +47,13 @@ module Pfab
39
47
  application: @data['application'],
40
48
  "deployed-name" => @data['deployed_name'],
41
49
  "application-type" => "cron",
50
+ "tags.datadoghq.com/env": @data['env'],
51
+ "tags.datadoghq.com/service": @data['deployed_name'],
52
+ "tags.datadoghq.com/version": "#{@data['sha']}"
42
53
  },
43
54
  },
44
55
  spec: {
45
-
56
+ serviceAccountName: get('serviceAccountName'),
46
57
  containers: [
47
58
  {
48
59
  image: image_name,
@@ -53,7 +64,7 @@ module Pfab
53
64
  },
54
65
  ],
55
66
  restartPolicy: "Never",
56
- },
67
+ }.compact,
57
68
  },
58
69
  backoffLimit: 2,
59
70
  },
@@ -5,17 +5,25 @@ module Pfab
5
5
  f << YAML.dump(deployment.deep_stringify_keys)
6
6
  end
7
7
 
8
+ def application_type
9
+ "daemon"
10
+ end
11
+
8
12
  def deployment
9
13
  {
10
14
  kind: "Deployment",
11
15
  apiVersion: "apps/v1",
12
16
  metadata: {
13
17
  name: @data['deployed_name'],
14
- namespace: @data['env'],
18
+ namespace: get_namespace,
15
19
  labels: {
16
20
  application: @data['application'],
17
21
  "deployed-name" => @data['deployed_name'],
18
- "application-type" => "daemon",
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":"#{@data['sha']}"
19
27
  }
20
28
  },
21
29
  spec: {
@@ -35,9 +43,13 @@ module Pfab
35
43
  application: @data['application'],
36
44
  "deployed-name" => @data['deployed_name'],
37
45
  "application-type" => "daemon",
46
+ "tags.datadoghq.com/env": @data['env'],
47
+ "tags.datadoghq.com/service": @data['deployed_name'],
48
+ "tags.datadoghq.com/version": "#{@data['sha']}"
38
49
  },
39
50
  },
40
51
  spec: {
52
+ serviceAccountName: get('serviceAccountName'),
41
53
  containers: [
42
54
  {
43
55
  image: image_name,
@@ -47,9 +59,9 @@ module Pfab
47
59
  resources: resources,
48
60
  }
49
61
  ]
50
- },
62
+ }.compact,
51
63
  },
52
- },
64
+ }.compact,
53
65
  }
54
66
  end
55
67
  end
@@ -5,31 +5,43 @@ module Pfab
5
5
  f << YAML.dump(job.deep_stringify_keys)
6
6
  end
7
7
 
8
+ def application_type
9
+ "job"
10
+ end
11
+
8
12
  def job
9
13
  {
10
14
  apiVersion: "batch/v1",
11
15
  kind: "Job",
12
16
  metadata: {
13
17
  name: "job-#{@data['deployed_name']}-#{@data['sha']}",
14
- namespace: @data['env'],
18
+ namespace: get_namespace,
15
19
  labels: {
16
20
  application: @data['application'],
17
21
  "deployed-name" => @data['deployed_name'],
18
- "application-type" => "job",
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":"#{@data['sha']}"
19
27
  }
20
28
  },
21
29
  spec: {
22
30
  template: {
23
31
  metadata: {
24
32
  name: "#{@data['deployed_name']}-#{@data['sha']}",
25
- namespace: @data['env'],
33
+ namespace: get_namespace,
26
34
  labels: {
27
35
  application: @data['application'],
28
36
  "deployed-name" => @data['deployed_name'],
29
37
  "application-type" => "job",
38
+ "tags.datadoghq.com/env": @data['env'],
39
+ "tags.datadoghq.com/service": @data['deployed_name'],
40
+ "tags.datadoghq.com/version": "#{@data['sha']}"
30
41
  },
31
42
  },
32
43
  spec: {
44
+ serviceAccountName: get('serviceAccountName'),
33
45
  containers: [
34
46
  {
35
47
  image: image_name,
@@ -40,7 +52,7 @@ module Pfab
40
52
  },
41
53
  ],
42
54
  restartPolicy: "Never",
43
- },
55
+ }.compact,
44
56
  },
45
57
  backoffLimit: 0,
46
58
  },
@@ -6,7 +6,11 @@ module Pfab
6
6
  puts "No host to deploy to for #{@data['deployed_name']}. Skipping."
7
7
  else
8
8
  f << YAML.dump(service.deep_stringify_keys)
9
- f << YAML.dump(ingress.deep_stringify_keys)
9
+ if not app_vars.has_key?('generateIngressEnabled') || app_vars['generateIngressEnabled']
10
+ f << YAML.dump(ingress.deep_stringify_keys)
11
+ else
12
+ puts "skipping ingress because ingress_disabled = #{@data['generateIngressEnabled']}"
13
+ end
10
14
  f << YAML.dump(deployment.deep_stringify_keys)
11
15
  end
12
16
  end
@@ -17,11 +21,12 @@ module Pfab
17
21
  kind: "Service",
18
22
  metadata: {
19
23
  name: @data['deployed_name'],
20
- namespace: @data['env'],
24
+ namespace: get_namespace,
21
25
  labels: {
22
26
  application: @data['application'],
23
27
  "deployed-name" => @data['deployed_name'],
24
- }
28
+ },
29
+ annotations: service_annotations,
25
30
  },
26
31
  spec: {
27
32
  selector: {
@@ -31,20 +36,27 @@ module Pfab
31
36
  {
32
37
  name: "http",
33
38
  port: 80,
34
- targetPort: get("port"),
35
- }
39
+ targetPort: app_vars["port"],
40
+ appProtocol: app_vars["appProtocol"]
41
+ }.compact
36
42
  ]
37
43
  }
38
44
  }
39
45
  end
40
46
 
47
+ def service_annotations
48
+ h = {}
49
+ h["traefik.ingress.kubernetes.io/service.serversscheme"] = "h2c" if get("protocol") == "h2c"
50
+ h
51
+ end
52
+
41
53
  def ingress
42
54
  {
43
55
  apiVersion: "networking.k8s.io/v1",
44
56
  kind: "Ingress",
45
57
  metadata: {
46
58
  name: "ingress-#{@data['deployed_name']}",
47
- namespace: @data['env'],
59
+ namespace: get_namespace,
48
60
  labels: {
49
61
  application: @data['application'],
50
62
  "deployed-name" => @data['deployed_name'],
@@ -107,7 +119,6 @@ module Pfab
107
119
  "traefik.ingress.kubernetes.io/router.entrypoints" => "websecure",
108
120
  "traefik.ingress.kubernetes.io/router.tls" => "true"
109
121
  }
110
- h["ingress.kubernetes.io/protocol"] = "h2c" if get("protocol") == "h2c"
111
122
  h
112
123
  end
113
124
 
@@ -130,17 +141,60 @@ module Pfab
130
141
  get("readinessProbe") || default_probe
131
142
  end
132
143
 
144
+ def startupProbe
145
+ get("startupProbe") || default_probe
146
+ end
147
+
148
+ def application_type
149
+ "web"
150
+ end
151
+
133
152
  def deployment
153
+ secret_mounts = get("secretMounts") || []
154
+ volume_mounts = []
155
+ volumes = []
156
+ secret_mounts.each do |secret_mount|
157
+ volumes.append({
158
+ name: secret_mount['name'],
159
+ secret: { secretName: secret_mount['secretName'] }
160
+ })
161
+ volume_mounts.append({
162
+ name: secret_mount['name'],
163
+ mountPath: secret_mount['path'],
164
+ readOnly: secret_mount['readOnly'] || true
165
+ })
166
+ end
167
+
168
+ if get("datadogVolumeMountEnabled")
169
+ datadog_volume_name = "ddsocket"
170
+ datadog_path = "/var/run/datadog"
171
+ volumes.append({
172
+ name: datadog_volume_name,
173
+ hostPath: {
174
+ path: datadog_path
175
+ }
176
+ })
177
+ volume_mounts.append(
178
+ name: datadog_volume_name,
179
+ mountPath: datadog_path,
180
+ readOnly: true
181
+ )
182
+ end
183
+
134
184
  {
135
185
  kind: "Deployment",
136
186
  apiVersion: "apps/v1",
137
187
  metadata: {
138
188
  name: @data['deployed_name'],
139
- namespace: @data['env'],
189
+ namespace: get_namespace,
140
190
  labels: {
141
191
  application: @data['application'],
142
192
  "deployed-name" => @data['deployed_name'],
143
- "application-type" => "web",
193
+ "application-type" => application_type,
194
+ "deploy-id" => deploy_id,
195
+ "tags.datadoghq.com/env": @data['env'],
196
+ "tags.datadoghq.com/service": @data['deployed_name'],
197
+ "tags.datadoghq.com/version":"#{@data['sha']}"
144
198
  }
145
199
  },
146
200
  spec: {
@@ -165,9 +219,13 @@ module Pfab
165
219
  application: @data['application'],
166
220
  "deployed-name" => @data['deployed_name'],
167
221
  "application-type" => "web",
222
+ "tags.datadoghq.com/env": @data['env'],
223
+ "tags.datadoghq.com/service": @data['deployed_name'],
224
+ "tags.datadoghq.com/version": "#{@data['sha']}"
168
225
  },
169
226
  },
170
227
  spec: {
228
+ serviceAccountName: get('serviceAccountName'),
171
229
  containers: [
172
230
  {
173
231
  image: image_name,
@@ -175,13 +233,26 @@ module Pfab
175
233
  command: get("command").split(" "),
176
234
  env: env_vars,
177
235
  resources: resources,
236
+ ports: [
237
+ {
238
+ name: "main",
239
+ containerPort: app_vars["port"]
240
+ },
241
+ {
242
+ name: "health-port",
243
+ containerPort: 8085 # the default micronaut endpoint port
244
+ }
245
+ ],
178
246
  livenessProbe: livenessProbe,
179
247
  readinessProbe: readinessProbe,
248
+ startupProbe: startupProbe,
249
+ volumeMounts: volume_mounts
180
250
  }
181
- ]
182
- },
251
+ ],
252
+ volumes: volumes
253
+ }.compact,
183
254
  },
184
- },
255
+ }.compact,
185
256
  }
186
257
  end
187
258
  end
data/lib/pfab/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Pfab
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 33
4
+ MINOR = 34
5
5
  PATCH = 0
6
6
  BUILD = nil
7
7
 
data/pfab.gemspec CHANGED
@@ -2,11 +2,11 @@
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.33.0 ruby lib
5
+ # stub: pfab 0.34.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "pfab".freeze
9
- s.version = "0.33.0"
9
+ s.version = "0.34.0"
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]
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.files = [
23
23
  ".document",
24
24
  ".tool-versions",
25
+ "CODEOWNERS",
25
26
  "Gemfile",
26
27
  "Gemfile.lock",
27
28
  "LICENSE.txt",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pfab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.33.0
4
+ version: 0.34.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Dwyer
@@ -133,6 +133,7 @@ extra_rdoc_files:
133
133
  files:
134
134
  - ".document"
135
135
  - ".tool-versions"
136
+ - CODEOWNERS
136
137
  - Gemfile
137
138
  - Gemfile.lock
138
139
  - LICENSE.txt