krane 1.0.0 → 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/.gitignore +0 -3
- data/.rubocop-http---shopify-github-io-ruby-style-guide-rubocop-yml +1027 -0
- data/.shopify-build/{kubernetes-deploy.yml → krane.yml} +1 -0
- data/1.0-Upgrade.md +2 -3
- data/CHANGELOG.md +9 -1
- data/CONTRIBUTING.md +4 -4
- data/Gemfile +0 -11
- data/README.md +9 -9
- data/dev.yml +3 -3
- data/krane.gemspec +16 -1
- data/lib/krane/concurrency.rb +2 -2
- data/lib/krane/deploy_task.rb +1 -0
- data/lib/krane/ejson_secret_provisioner.rb +7 -4
- data/lib/krane/global_deploy_task.rb +1 -0
- data/lib/krane/kubernetes_resource.rb +1 -0
- data/lib/krane/kubernetes_resource/cloudsql.rb +1 -0
- data/lib/krane/kubernetes_resource/daemon_set.rb +1 -0
- data/lib/krane/kubernetes_resource/deployment.rb +1 -0
- data/lib/krane/kubernetes_resource/replica_set.rb +2 -16
- data/lib/krane/kubernetes_resource/service.rb +3 -7
- data/lib/krane/kubernetes_resource/stateful_set.rb +1 -0
- data/lib/krane/resource_cache.rb +6 -0
- data/lib/krane/resource_watcher.rb +1 -0
- data/lib/krane/version.rb +1 -1
- metadata +147 -7
- data/shipit.yml +0 -4
data/1.0-Upgrade.md
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
* There are breaking changes in the public API (such as the renaming of the `KubernetesDeploy` namespace to `Krane`, and the change in default values for different arguments of the public interface).
|
8
8
|
* StatsD metrics will now be generated with the `krane` prefix.
|
9
9
|
* `krane deploy` now considers all namespaced resources eligible for pruning, including
|
10
|
-
custom resources. See [blacklist](https://github.com/Shopify/
|
10
|
+
custom resources. See [blacklist](https://github.com/Shopify/krane/blob/master/lib/krane/cluster_resource_discovery.rb#L20) for exceptions.
|
11
11
|
* `kubernetes-deploy` (now `krane deploy`) / `DeployTask` can no longer deploy global (non-namespaced) resources. A new command called `krane global-deploy` and a related class called `GlobalDeployTask` were added to replace that feature.
|
12
12
|
* `krane deploy` will not render erb templates. Use `krane render | krane deploy --stdin` to reproduce this functionality.
|
13
13
|
* If you attempt to install two gems that have conflicting executables, `gem install` will warn you but the most recently installed one will win.
|
@@ -126,8 +126,7 @@ Old flag | New flag | Comments
|
|
126
126
|
-h, --help | -h, --help |
|
127
127
|
-v, --version | [none] | Replaced with `krane version`
|
128
128
|
$ENVIRONMENT | [none] | Dropped in favour of `-f`
|
129
|
-
$REVISION |
|
130
|
-
[none] | --render-erb | **Important:** the new CLI doesn't render ERB by default
|
129
|
+
$REVISION | [none] | The environment variable REVISION was dropped because deploy no longer renders.
|
131
130
|
[none] | --stdin | Allow template filenames given from stdin stream
|
132
131
|
|
133
132
|
#### krane restart
|
data/CHANGELOG.md
CHANGED
@@ -1,9 +1,17 @@
|
|
1
1
|
## next
|
2
2
|
|
3
|
+
## 1.1.0
|
4
|
+
|
5
|
+
*Bug Fixes*
|
6
|
+
- Fix a bug causing secret generation from ejson to fail when decryption succeeded but a warning was also emitted. [#647](https://github.com/Shopify/krane/pull/647)
|
7
|
+
|
8
|
+
*Enhancements*
|
9
|
+
- Warm the ResourceCache before running resource.sync to improve sync performance. ([#603](https://github.com/Shopify/kubernetes-deploy/pull/603))
|
10
|
+
|
3
11
|
# 1.0.0
|
4
12
|
|
5
13
|
We've renamed the gem and cli to Krane.
|
6
|
-
See our [migration guide](https://github.com/Shopify/
|
14
|
+
See our [migration guide](https://github.com/Shopify/krane/blob/master/1.0-Upgrade.md) to help navigate the breaking changes.
|
7
15
|
|
8
16
|
## 1.0.0.pre.1
|
9
17
|
|
data/CONTRIBUTING.md
CHANGED
@@ -22,7 +22,7 @@ The following is a set of guidelines for contributing to krane. Please take a mo
|
|
22
22
|
* [CI (External contributors)](#ci-external-contributors)
|
23
23
|
## Code of Conduct
|
24
24
|
|
25
|
-
This project and everyone participating in it are governed by the [Code of Conduct](https://github.com/Shopify/
|
25
|
+
This project and everyone participating in it are governed by the [Code of Conduct](https://github.com/Shopify/krane/blob/master/CODE_OF_CONDUCT.md).
|
26
26
|
By participating, you are expected to uphold this code. Please report unacceptable
|
27
27
|
behavior to [krane@shopify.com](mailto:krane@shopify.com).
|
28
28
|
|
@@ -97,9 +97,9 @@ This gem uses subclasses of `KubernetesResource` to implement custom success/fai
|
|
97
97
|
* `deploy_failed?`
|
98
98
|
3. Adjust the `TIMEOUT` constant to an appropriate value for this type.
|
99
99
|
4. Add the new class to list of resources in
|
100
|
-
[`deploy_task.rb`](https://github.com/Shopify/
|
101
|
-
5. Add the new resource to the [prune whitelist](https://github.com/Shopify/
|
102
|
-
6. Add a basic example of the type to the hello-cloud [fixture set](https://github.com/Shopify/
|
100
|
+
[`deploy_task.rb`](https://github.com/Shopify/krane/blob/master/lib/krane/deploy_task.rb#L8)
|
101
|
+
5. Add the new resource to the [prune whitelist](https://github.com/Shopify/krane/blob/master/lib/krane/deploy_task.rb#L81)
|
102
|
+
6. Add a basic example of the type to the hello-cloud [fixture set](https://github.com/Shopify/krane/tree/master/test/fixtures/hello-cloud) and appropriate assertions to `#assert_all_up` in [`hello_cloud.rb`](https://github.com/Shopify/krane/blob/master/test/helpers/fixture_sets/hello_cloud.rb). This will get you coverage in several existing tests, such as `test_full_hello_cloud_set_deploy_succeeds`.
|
103
103
|
7. Add tests for any edge cases you foresee.
|
104
104
|
|
105
105
|
### Contributor License Agreement
|
data/Gemfile
CHANGED
@@ -3,14 +3,3 @@ source 'https://rubygems.org'
|
|
3
3
|
|
4
4
|
# Specify your gem's dependencies in krane.gemspec
|
5
5
|
gemspec
|
6
|
-
|
7
|
-
gem 'pry'
|
8
|
-
gem 'pry-byebug'
|
9
|
-
gem 'rubocop'
|
10
|
-
gem 'timecop'
|
11
|
-
gem 'byebug'
|
12
|
-
gem 'codecov', require: false
|
13
|
-
gem 'ruby-prof', require: false
|
14
|
-
gem 'ruby-prof-flamegraph', require: false
|
15
|
-
gem 'minitest-reporters'
|
16
|
-
gem 'yard', require: false
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# krane [](https://buildkite.com/shopify/krane) [](https://codecov.io/gh/Shopify/kubernetes-deploy)
|
2
2
|
|
3
|
-
> This project used to be called `kubernetes-deploy`. Check out our [migration guide](https://github.com/Shopify/
|
3
|
+
> This project used to be called `kubernetes-deploy`. Check out our [migration guide](https://github.com/Shopify/krane/blob/master/1.0-Upgrade.md) for more information including details about breaking changes.
|
4
4
|
|
5
5
|
|
6
6
|
`krane` is a command line tool that helps you ship changes to a Kubernetes namespace and understand the result. At Shopify, we use it within our much-beloved, open-source [Shipit](https://github.com/Shopify/shipit-engine#kubernetes) deployment app.
|
@@ -40,7 +40,7 @@ If you need the ability to render dynamic values in templates before deploying,
|
|
40
40
|
* [Prerequisites](#prerequisites)
|
41
41
|
* [Installation](#installation)
|
42
42
|
* [Usage](#usage)
|
43
|
-
* [Using templates
|
43
|
+
* [Using templates](#using-templates)
|
44
44
|
* [Customizing behaviour with annotations](#customizing-behaviour-with-annotations)
|
45
45
|
* [Running tasks at the beginning of a deploy](#running-tasks-at-the-beginning-of-a-deploy)
|
46
46
|
* [Deploying Kubernetes secrets (from EJSON)](#deploying-kubernetes-secrets-from-ejson)
|
@@ -54,11 +54,11 @@ If you need the ability to render dynamic values in templates before deploying,
|
|
54
54
|
* [Usage](#usage-2)
|
55
55
|
|
56
56
|
**KRANE RUN**
|
57
|
-
* [Prerequisites](#prerequisites-
|
57
|
+
* [Prerequisites](#prerequisites-1)
|
58
58
|
* [Usage](#usage-3)
|
59
59
|
|
60
60
|
**KRANE RENDER**
|
61
|
-
* [Prerequisites](#prerequisites-
|
61
|
+
* [Prerequisites](#prerequisites-2)
|
62
62
|
* [Usage](#usage-4)
|
63
63
|
|
64
64
|
**CONTRIBUTING**
|
@@ -324,7 +324,7 @@ status:
|
|
324
324
|
|
325
325
|
### Deploy walkthrough
|
326
326
|
|
327
|
-
Let's walk through what happens when you run the `deploy` task with [this directory of templates](https://github.com/Shopify/
|
327
|
+
Let's walk through what happens when you run the `deploy` task with [this directory of templates](https://github.com/Shopify/krane/tree/master/test/fixtures/hello-cloud). This particular example uses ERB templates as well, so we'll use the [krane render](#krane-render) task to achieve that.
|
328
328
|
|
329
329
|
You can test this out for yourself by running the following command:
|
330
330
|
|
@@ -391,7 +391,7 @@ In this phase, we:
|
|
391
391
|
|
392
392
|
Just like in the previous phase, we essentially run `kubectl apply` on those templates and periodically check the cluster for the current status of each resource so we can display error or success information.
|
393
393
|
|
394
|
-
If pruning is enabled (which, again, is the default), any [kind not listed in the blacklist](https://github.com/Shopify/
|
394
|
+
If pruning is enabled (which, again, is the default), any [kind not listed in the blacklist](https://github.com/Shopify/krane/blob/master/lib/krane/cluster_resource_discovery.rb#L20) that we can find in the namespace but not in the templates will be removed. A particular message about pruning will be printed in the next phase if any resource matches this criteria.
|
395
395
|
|
396
396
|
#### Result
|
397
397
|
|
@@ -641,13 +641,13 @@ This is a limitation of the current implementation.
|
|
641
641
|
# Contributing
|
642
642
|
|
643
643
|
We :heart: contributors! To make it easier for you and us we've written a
|
644
|
-
[Contributing Guide](https://github.com/Shopify/
|
644
|
+
[Contributing Guide](https://github.com/Shopify/krane/blob/master/CONTRIBUTING.md)
|
645
645
|
|
646
646
|
|
647
647
|
You can also reach out to us on our slack channel, #krane, at https://kubernetes.slack.com. All are welcome!
|
648
648
|
|
649
649
|
## Code of Conduct
|
650
|
-
Everyone is expected to follow our [Code of Conduct](https://github.com/Shopify/
|
650
|
+
Everyone is expected to follow our [Code of Conduct](https://github.com/Shopify/krane/blob/master/CODE_OF_CONDUCT.md).
|
651
651
|
|
652
652
|
|
653
653
|
# License
|
data/dev.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
---
|
2
|
-
name:
|
2
|
+
name: krane
|
3
3
|
up:
|
4
4
|
- ruby: 2.4.6 # Matches gemspec
|
5
5
|
- bundler
|
@@ -11,8 +11,8 @@ up:
|
|
11
11
|
meet: curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-hyperkit && sudo install -o root -g wheel -m 4755 docker-machine-driver-hyperkit /usr/local/bin/ && rm ./docker-machine-driver-hyperkit
|
12
12
|
- custom:
|
13
13
|
name: Minikube Cluster
|
14
|
-
met?: test $(minikube status | grep Running | wc -l) -ge 2 && $(minikube status | grep -q '
|
15
|
-
meet: minikube start --kubernetes-version=v1.11.
|
14
|
+
met?: test $(minikube status | grep Running | wc -l) -ge 2 && $(minikube status | grep -q 'Configured')
|
15
|
+
meet: minikube start --kubernetes-version=v1.11.10 --vm-driver=hyperkit
|
16
16
|
down: minikube stop
|
17
17
|
commands:
|
18
18
|
reset-minikube: minikube delete && rm -rf ~/.minikube
|
data/krane.gemspec
CHANGED
@@ -35,10 +35,25 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.add_dependency("jsonpath", "~> 0.9.6")
|
36
36
|
spec.add_dependency("thor", "~> 0.20.3")
|
37
37
|
|
38
|
+
# Basics
|
38
39
|
spec.add_development_dependency("bundler")
|
39
40
|
spec.add_development_dependency("rake", "~> 10.0")
|
41
|
+
spec.add_development_dependency("yard")
|
42
|
+
|
43
|
+
# Test framework
|
40
44
|
spec.add_development_dependency("minitest", "~> 5.0")
|
41
45
|
spec.add_development_dependency("minitest-stub-const", "~> 0.6")
|
42
|
-
spec.add_development_dependency("
|
46
|
+
spec.add_development_dependency("minitest-reporters")
|
43
47
|
spec.add_development_dependency("mocha", "~> 1.5")
|
48
|
+
spec.add_development_dependency("webmock", "~> 3.0")
|
49
|
+
spec.add_development_dependency("timecop")
|
50
|
+
|
51
|
+
# Debugging and analysis
|
52
|
+
spec.add_development_dependency("pry")
|
53
|
+
spec.add_development_dependency("pry-byebug")
|
54
|
+
spec.add_development_dependency("byebug")
|
55
|
+
spec.add_development_dependency("ruby-prof")
|
56
|
+
spec.add_development_dependency("ruby-prof-flamegraph")
|
57
|
+
spec.add_development_dependency("rubocop", "~> 0.76.0")
|
58
|
+
spec.add_development_dependency("codecov")
|
44
59
|
end
|
data/lib/krane/concurrency.rb
CHANGED
@@ -3,11 +3,11 @@ module Krane
|
|
3
3
|
module Concurrency
|
4
4
|
MAX_THREADS = 8
|
5
5
|
|
6
|
-
def self.split_across_threads(all_work, &block)
|
6
|
+
def self.split_across_threads(all_work, max_threads: MAX_THREADS, &block)
|
7
7
|
return if all_work.empty?
|
8
8
|
raise ArgumentError, "Block of work is required" unless block_given?
|
9
9
|
|
10
|
-
slice_size = ((all_work.length +
|
10
|
+
slice_size = ((all_work.length + max_threads - 1) / max_threads)
|
11
11
|
threads = []
|
12
12
|
all_work.each_slice(slice_size) do |work_group|
|
13
13
|
threads << Thread.new { work_group.each(&block) }
|
data/lib/krane/deploy_task.rb
CHANGED
@@ -216,6 +216,7 @@ module Krane
|
|
216
216
|
|
217
217
|
def check_initial_status(resources)
|
218
218
|
cache = ResourceCache.new(@task_config)
|
219
|
+
cache.prewarm(resources)
|
219
220
|
Krane::Concurrency.split_across_threads(resources) { |r| r.sync(cache) }
|
220
221
|
resources.each { |r| @logger.info(r.pretty_status) }
|
221
222
|
end
|
@@ -134,10 +134,13 @@ module Krane
|
|
134
134
|
end
|
135
135
|
|
136
136
|
def decrypt_ejson(key_dir)
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
137
|
+
out, err, st = Open3.capture3("EJSON_KEYDIR=#{key_dir} ejson decrypt #{@ejson_file}")
|
138
|
+
unless st.success?
|
139
|
+
# older ejson versions dump some errors to STDOUT
|
140
|
+
msg = err.presence || out
|
141
|
+
raise EjsonSecretError, msg
|
142
|
+
end
|
143
|
+
JSON.parse(out)
|
141
144
|
rescue JSON::ParserError
|
142
145
|
raise EjsonSecretError, "Failed to parse decrypted ejson"
|
143
146
|
end
|
@@ -202,6 +202,7 @@ module Krane
|
|
202
202
|
|
203
203
|
def check_initial_status(resources)
|
204
204
|
cache = ResourceCache.new(@task_config)
|
205
|
+
cache.prewarm(resources)
|
205
206
|
Concurrency.split_across_threads(resources) { |r| r.sync(cache) }
|
206
207
|
resources.each { |r| logger.info(r.pretty_status) }
|
207
208
|
end
|
@@ -38,6 +38,7 @@ module Krane
|
|
38
38
|
LAST_APPLIED_ANNOTATION = "kubectl.kubernetes.io/last-applied-configuration"
|
39
39
|
SENSITIVE_TEMPLATE_CONTENT = false
|
40
40
|
SERVER_DRY_RUNNABLE = false
|
41
|
+
SYNC_DEPENDENCIES = []
|
41
42
|
|
42
43
|
class << self
|
43
44
|
def build(namespace: nil, context:, definition:, logger:, statsd_tags:, crd: nil, global_names: [])
|
@@ -4,6 +4,7 @@ require 'krane/kubernetes_resource/replica_set'
|
|
4
4
|
module Krane
|
5
5
|
class Deployment < KubernetesResource
|
6
6
|
TIMEOUT = 7.minutes
|
7
|
+
SYNC_DEPENDENCIES = %w(Pod ReplicaSet)
|
7
8
|
REQUIRED_ROLLOUT_ANNOTATION_SUFFIX = "required-rollout"
|
8
9
|
REQUIRED_ROLLOUT_ANNOTATION_DEPRECATED = "kubernetes-deploy.shopify.io/#{REQUIRED_ROLLOUT_ANNOTATION_SUFFIX}"
|
9
10
|
REQUIRED_ROLLOUT_ANNOTATION = "krane.shopify.io/#{REQUIRED_ROLLOUT_ANNOTATION_SUFFIX}"
|
@@ -4,6 +4,7 @@ require 'krane/kubernetes_resource/pod_set_base'
|
|
4
4
|
module Krane
|
5
5
|
class ReplicaSet < PodSetBase
|
6
6
|
TIMEOUT = 5.minutes
|
7
|
+
SYNC_DEPENDENCIES = %w(Pod)
|
7
8
|
attr_reader :pods
|
8
9
|
|
9
10
|
def initialize(namespace:, context:, definition:, logger:, statsd_tags: nil,
|
@@ -17,7 +18,7 @@ module Krane
|
|
17
18
|
|
18
19
|
def sync(cache)
|
19
20
|
super
|
20
|
-
@pods =
|
21
|
+
@pods = exists? ? find_pods(cache) : []
|
21
22
|
end
|
22
23
|
|
23
24
|
def status
|
@@ -58,21 +59,6 @@ module Krane
|
|
58
59
|
observed_generation != current_generation
|
59
60
|
end
|
60
61
|
|
61
|
-
def fetch_pods_if_needed(cache)
|
62
|
-
# If the ReplicaSet doesn't exist, its pods won't either
|
63
|
-
return unless exists?
|
64
|
-
# If the status hasn't been updated yet, we're not going to make a determination anyway
|
65
|
-
return if stale_status?
|
66
|
-
# If we don't want any pods at all, we don't need to look for them
|
67
|
-
return if desired_replicas == 0
|
68
|
-
# We only need to fetch pods so that deploy_failed? can check that they aren't ALL bad.
|
69
|
-
# If we can already tell some pods are ok from the RS data, don't bother fetching them (which can be expensive)
|
70
|
-
# Lower numbers here make us more susceptible to being fooled by replicas without probes briefly appearing ready
|
71
|
-
return if ready_replicas > 1
|
72
|
-
|
73
|
-
find_pods(cache)
|
74
|
-
end
|
75
|
-
|
76
62
|
def rollout_data
|
77
63
|
return { "replicas" => 0 } unless exists?
|
78
64
|
{ "replicas" => 0 }.merge(
|
@@ -4,16 +4,12 @@ require 'krane/kubernetes_resource/pod'
|
|
4
4
|
module Krane
|
5
5
|
class Service < KubernetesResource
|
6
6
|
TIMEOUT = 7.minutes
|
7
|
+
SYNC_DEPENDENCIES = %w(Pod Deployment StatefulSet)
|
7
8
|
|
8
9
|
def sync(cache)
|
9
10
|
super
|
10
|
-
|
11
|
-
|
12
|
-
@related_workloads = fetch_related_workloads(cache)
|
13
|
-
else
|
14
|
-
@related_pods = []
|
15
|
-
@related_workloads = []
|
16
|
-
end
|
11
|
+
@related_pods = cache.get_all(Pod.kind, selector)
|
12
|
+
@related_workloads = fetch_related_workloads(cache)
|
17
13
|
end
|
18
14
|
|
19
15
|
def status
|
data/lib/krane/resource_cache.rb
CHANGED
@@ -36,6 +36,12 @@ module Krane
|
|
36
36
|
[]
|
37
37
|
end
|
38
38
|
|
39
|
+
def prewarm(resources)
|
40
|
+
sync_dependencies = resources.flat_map { |r| r.class.const_get(:SYNC_DEPENDENCIES) }
|
41
|
+
kinds = (resources.map(&:type) + sync_dependencies).uniq
|
42
|
+
Krane::Concurrency.split_across_threads(kinds, max_threads: kinds.count) { |kind| get_all(kind) }
|
43
|
+
end
|
44
|
+
|
39
45
|
private
|
40
46
|
|
41
47
|
def statsd_tags
|
data/lib/krane/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: krane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Verey
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2019-
|
13
|
+
date: 2019-12-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -186,6 +186,20 @@ dependencies:
|
|
186
186
|
- - "~>"
|
187
187
|
- !ruby/object:Gem::Version
|
188
188
|
version: '10.0'
|
189
|
+
- !ruby/object:Gem::Dependency
|
190
|
+
name: yard
|
191
|
+
requirement: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
type: :development
|
197
|
+
prerelease: false
|
198
|
+
version_requirements: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
189
203
|
- !ruby/object:Gem::Dependency
|
190
204
|
name: minitest
|
191
205
|
requirement: !ruby/object:Gem::Requirement
|
@@ -214,6 +228,34 @@ dependencies:
|
|
214
228
|
- - "~>"
|
215
229
|
- !ruby/object:Gem::Version
|
216
230
|
version: '0.6'
|
231
|
+
- !ruby/object:Gem::Dependency
|
232
|
+
name: minitest-reporters
|
233
|
+
requirement: !ruby/object:Gem::Requirement
|
234
|
+
requirements:
|
235
|
+
- - ">="
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: '0'
|
238
|
+
type: :development
|
239
|
+
prerelease: false
|
240
|
+
version_requirements: !ruby/object:Gem::Requirement
|
241
|
+
requirements:
|
242
|
+
- - ">="
|
243
|
+
- !ruby/object:Gem::Version
|
244
|
+
version: '0'
|
245
|
+
- !ruby/object:Gem::Dependency
|
246
|
+
name: mocha
|
247
|
+
requirement: !ruby/object:Gem::Requirement
|
248
|
+
requirements:
|
249
|
+
- - "~>"
|
250
|
+
- !ruby/object:Gem::Version
|
251
|
+
version: '1.5'
|
252
|
+
type: :development
|
253
|
+
prerelease: false
|
254
|
+
version_requirements: !ruby/object:Gem::Requirement
|
255
|
+
requirements:
|
256
|
+
- - "~>"
|
257
|
+
- !ruby/object:Gem::Version
|
258
|
+
version: '1.5'
|
217
259
|
- !ruby/object:Gem::Dependency
|
218
260
|
name: webmock
|
219
261
|
requirement: !ruby/object:Gem::Requirement
|
@@ -229,19 +271,117 @@ dependencies:
|
|
229
271
|
- !ruby/object:Gem::Version
|
230
272
|
version: '3.0'
|
231
273
|
- !ruby/object:Gem::Dependency
|
232
|
-
name:
|
274
|
+
name: timecop
|
275
|
+
requirement: !ruby/object:Gem::Requirement
|
276
|
+
requirements:
|
277
|
+
- - ">="
|
278
|
+
- !ruby/object:Gem::Version
|
279
|
+
version: '0'
|
280
|
+
type: :development
|
281
|
+
prerelease: false
|
282
|
+
version_requirements: !ruby/object:Gem::Requirement
|
283
|
+
requirements:
|
284
|
+
- - ">="
|
285
|
+
- !ruby/object:Gem::Version
|
286
|
+
version: '0'
|
287
|
+
- !ruby/object:Gem::Dependency
|
288
|
+
name: pry
|
289
|
+
requirement: !ruby/object:Gem::Requirement
|
290
|
+
requirements:
|
291
|
+
- - ">="
|
292
|
+
- !ruby/object:Gem::Version
|
293
|
+
version: '0'
|
294
|
+
type: :development
|
295
|
+
prerelease: false
|
296
|
+
version_requirements: !ruby/object:Gem::Requirement
|
297
|
+
requirements:
|
298
|
+
- - ">="
|
299
|
+
- !ruby/object:Gem::Version
|
300
|
+
version: '0'
|
301
|
+
- !ruby/object:Gem::Dependency
|
302
|
+
name: pry-byebug
|
303
|
+
requirement: !ruby/object:Gem::Requirement
|
304
|
+
requirements:
|
305
|
+
- - ">="
|
306
|
+
- !ruby/object:Gem::Version
|
307
|
+
version: '0'
|
308
|
+
type: :development
|
309
|
+
prerelease: false
|
310
|
+
version_requirements: !ruby/object:Gem::Requirement
|
311
|
+
requirements:
|
312
|
+
- - ">="
|
313
|
+
- !ruby/object:Gem::Version
|
314
|
+
version: '0'
|
315
|
+
- !ruby/object:Gem::Dependency
|
316
|
+
name: byebug
|
317
|
+
requirement: !ruby/object:Gem::Requirement
|
318
|
+
requirements:
|
319
|
+
- - ">="
|
320
|
+
- !ruby/object:Gem::Version
|
321
|
+
version: '0'
|
322
|
+
type: :development
|
323
|
+
prerelease: false
|
324
|
+
version_requirements: !ruby/object:Gem::Requirement
|
325
|
+
requirements:
|
326
|
+
- - ">="
|
327
|
+
- !ruby/object:Gem::Version
|
328
|
+
version: '0'
|
329
|
+
- !ruby/object:Gem::Dependency
|
330
|
+
name: ruby-prof
|
331
|
+
requirement: !ruby/object:Gem::Requirement
|
332
|
+
requirements:
|
333
|
+
- - ">="
|
334
|
+
- !ruby/object:Gem::Version
|
335
|
+
version: '0'
|
336
|
+
type: :development
|
337
|
+
prerelease: false
|
338
|
+
version_requirements: !ruby/object:Gem::Requirement
|
339
|
+
requirements:
|
340
|
+
- - ">="
|
341
|
+
- !ruby/object:Gem::Version
|
342
|
+
version: '0'
|
343
|
+
- !ruby/object:Gem::Dependency
|
344
|
+
name: ruby-prof-flamegraph
|
345
|
+
requirement: !ruby/object:Gem::Requirement
|
346
|
+
requirements:
|
347
|
+
- - ">="
|
348
|
+
- !ruby/object:Gem::Version
|
349
|
+
version: '0'
|
350
|
+
type: :development
|
351
|
+
prerelease: false
|
352
|
+
version_requirements: !ruby/object:Gem::Requirement
|
353
|
+
requirements:
|
354
|
+
- - ">="
|
355
|
+
- !ruby/object:Gem::Version
|
356
|
+
version: '0'
|
357
|
+
- !ruby/object:Gem::Dependency
|
358
|
+
name: rubocop
|
233
359
|
requirement: !ruby/object:Gem::Requirement
|
234
360
|
requirements:
|
235
361
|
- - "~>"
|
236
362
|
- !ruby/object:Gem::Version
|
237
|
-
version:
|
363
|
+
version: 0.76.0
|
238
364
|
type: :development
|
239
365
|
prerelease: false
|
240
366
|
version_requirements: !ruby/object:Gem::Requirement
|
241
367
|
requirements:
|
242
368
|
- - "~>"
|
243
369
|
- !ruby/object:Gem::Version
|
244
|
-
version:
|
370
|
+
version: 0.76.0
|
371
|
+
- !ruby/object:Gem::Dependency
|
372
|
+
name: codecov
|
373
|
+
requirement: !ruby/object:Gem::Requirement
|
374
|
+
requirements:
|
375
|
+
- - ">="
|
376
|
+
- !ruby/object:Gem::Version
|
377
|
+
version: '0'
|
378
|
+
type: :development
|
379
|
+
prerelease: false
|
380
|
+
version_requirements: !ruby/object:Gem::Requirement
|
381
|
+
requirements:
|
382
|
+
- - ">="
|
383
|
+
- !ruby/object:Gem::Version
|
384
|
+
version: '0'
|
245
385
|
description: A command line tool that helps you ship changes to a Kubernetes namespace
|
246
386
|
and understand the result
|
247
387
|
email:
|
@@ -254,9 +394,10 @@ files:
|
|
254
394
|
- ".buildkite/pipeline.nightly.yml"
|
255
395
|
- ".github/probots.yml"
|
256
396
|
- ".gitignore"
|
397
|
+
- ".rubocop-http---shopify-github-io-ruby-style-guide-rubocop-yml"
|
257
398
|
- ".rubocop.yml"
|
258
399
|
- ".shopify-build/VERSION"
|
259
|
-
- ".shopify-build/
|
400
|
+
- ".shopify-build/krane.yml"
|
260
401
|
- 1.0-Upgrade.md
|
261
402
|
- CHANGELOG.md
|
262
403
|
- CODE_OF_CONDUCT.md
|
@@ -348,7 +489,6 @@ files:
|
|
348
489
|
- screenshots/missing-secret-fail.png
|
349
490
|
- screenshots/success.png
|
350
491
|
- screenshots/test-output.png
|
351
|
-
- shipit.yml
|
352
492
|
homepage: https://github.com/Shopify/krane
|
353
493
|
licenses:
|
354
494
|
- MIT
|