cpl 2.0.0.rc.0 → 2.0.0.rc.1

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: 84efbe4c7082edcef9193b7a4116af57177b54f52373e4e4bca7e6b277f1b846
4
- data.tar.gz: 9e047c8b354e6e0a01b28b84e4b3c74c0f5dd675c8d1f5113119803f1f5bcabb
3
+ metadata.gz: '03793c0046fc403a4fb42583e57c3449394a52da4c03191d3af845e2e5e0b53f'
4
+ data.tar.gz: c882856e066cc3a63f0d8f52738e8e432a72cec33dc565224159a554949a2f5b
5
5
  SHA512:
6
- metadata.gz: 6efc92fbcb3ea76e6ec44561178e719afc80af717790771b9c2c8358f564eb94b9c76b8aef8367c401e6e98f2faf9c0a8e628371a3193e038843339d12f7058e
7
- data.tar.gz: e43668ec1adc98bd399396a35cb092d8d940df1d6bfea3ecb09b99e1be48f8ff7f0c625d8c4936eb61d01ceec4e3c8fb6a2eb7018f6ee91c1b0751dc7847f93f
6
+ metadata.gz: 788fa61c7d5710e72ea00db402770d3fcfd037938ce0ce1ef8134e0614a024cddb7e4629223598a509f33abf2dec499e64bf23a52b0b86b823eafe59b3522cd5
7
+ data.tar.gz: 6ba9d8cdab48da090c7efd86eb9e14f05845ed1f219c6d251ce18ad636e34d678562d092ad52806dae3a4d106cd4760402463c823d9e66158f14e6cd806fc520
data/CHANGELOG.md CHANGED
@@ -14,12 +14,26 @@ Changes since the last non-beta release.
14
14
 
15
15
  _Please add entries here for your pull requests that are not yet released._
16
16
 
17
+ ## [2.0.0.rc.0] - 2024-05-10
18
+
19
+ ### BREAKING CHANGES
20
+
21
+ - Commands that finished with a failure now exit with code `64` instead of `1`. [PR 132](https://github.com/shakacode/heroku-to-control-plane/pull/132) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
22
+ - `run:cleanup` command has been removed. [PR 151](https://github.com/shakacode/heroku-to-control-plane/pull/151) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
23
+ - `deploy-image` command now runs the release script in the context of the `run` command. [PR 151](https://github.com/shakacode/heroku-to-control-plane/pull/151) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
24
+
17
25
  ### Added
18
26
 
27
+ - Added options to `run` command to override the workload container's `--cpu`, `--memory`, and `--entrypoint`. [PR 151](https://github.com/shakacode/heroku-to-control-plane/pull/151) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
28
+ - Added `--workload` option to `delete` command to delete a specific workload. [PR 151](https://github.com/shakacode/heroku-to-control-plane/pull/151) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
29
+ - Added `--replica` option to `logs` command to see logs from a specific replica. [PR 151](https://github.com/shakacode/heroku-to-control-plane/pull/151) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
30
+ - Added `--replica` option to `ps:stop` command to stop a specific replica. [PR 151](https://github.com/shakacode/heroku-to-control-plane/pull/151) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
19
31
  - Added option to set custom names for secrets and secrets policy, using `secrets_name` and `secrets_policy_name` in `controlplane.yml`. [PR 159](https://github.com/shakacode/heroku-to-control-plane/pull/159) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
20
32
 
21
33
  ### Changed
22
34
 
35
+ - `run` command now uses a single reusable cron workload and works for both interactive and non-interactive jobs. [PR 151](https://github.com/shakacode/heroku-to-control-plane/pull/151) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
36
+ - `run:detached` command has been deprecated in favor of `run`. [PR 151](https://github.com/shakacode/heroku-to-control-plane/pull/151) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
23
37
  - `deploy-image` command now raises an error if image does not exist. [PR 153](https://github.com/shakacode/heroku-to-control-plane/pull/153) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
24
38
 
25
39
  ## [1.4.0] - 2024-03-20
@@ -164,7 +178,8 @@ _Please add entries here for your pull requests that are not yet released._
164
178
 
165
179
  - Initial release
166
180
 
167
- [Unreleased]: https://github.com/shakacode/heroku-to-control-plane/compare/v1.4.0...HEAD
181
+ [Unreleased]: https://github.com/shakacode/heroku-to-control-plane/compare/v2.0.0.rc.0...HEAD
182
+ [2.0.0.rc.0]: https://github.com/shakacode/heroku-to-control-plane/compare/v1.4.0...v2.0.0.rc.0
168
183
  [1.4.0]: https://github.com/shakacode/heroku-to-control-plane/compare/v1.3.0...v1.4.0
169
184
  [1.3.0]: https://github.com/shakacode/heroku-to-control-plane/compare/v1.2.0...v1.3.0
170
185
  [1.2.0]: https://github.com/shakacode/heroku-to-control-plane/compare/v1.1.2...v1.2.0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cpl (2.0.0.rc.0)
4
+ cpl (2.0.0.rc.1)
5
5
  debug (~> 1.7.1)
6
6
  dotenv (~> 2.8.1)
7
7
  jwt (~> 2.8.1)
data/docs/migrating.md CHANGED
@@ -47,7 +47,7 @@ Note how the templates correspond to files in the `.controlplane/templates/` dir
47
47
  `cpl setup-app` and `cpl apply-template` commands.
48
48
 
49
49
  Ensure that env vars point to the Heroku add-ons in the template for the app (`.controlplane/templates/app.yml`). See
50
- [this example](https://github.com/shakacode/react-webpack-rails-tutorial/blob/master/.controlplane/templates/app.yml).
50
+ [this example](https://github.com/shakacode/react-webpack-rails-tutorial/blob/master/.controlplane/templates/gvc.yml).
51
51
 
52
52
  After that, create a Dockerfile in `.controlplane/Dockerfile` for your deployment. See
53
53
  [this example](https://github.com/shakacode/react-webpack-rails-tutorial/blob/master/.controlplane/Dockerfile).
data/lib/command/run.rb CHANGED
@@ -87,9 +87,9 @@ module Command
87
87
  MAGIC_END = "---cpl run command finished---"
88
88
 
89
89
  attr_reader :interactive, :detached, :location, :original_workload, :runner_workload,
90
- :container, :image_link, :image_changed, :job, :replica, :command
90
+ :container, :expected_deployed_version, :job, :replica, :command
91
91
 
92
- def call # rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
92
+ def call # rubocop:disable Metrics/MethodLength
93
93
  @interactive = config.options[:interactive] || interactive_command?
94
94
  @detached = config.options[:detached]
95
95
  @log_method = config.options[:log_method]
@@ -117,11 +117,6 @@ module Command
117
117
  update_runner_workload
118
118
  wait_for_runner_workload_update
119
119
 
120
- # NOTE: need to wait some time before starting the job,
121
- # otherwise the image may not be updated yet
122
- # TODO: need to figure out if there's a better way to do this
123
- sleep 1 if image_changed
124
-
125
120
  start_job
126
121
  wait_for_replica_for_job
127
122
 
@@ -177,41 +172,54 @@ module Command
177
172
  end
178
173
  end
179
174
 
180
- def update_runner_workload # rubocop:disable Metrics/MethodLength
181
- step("Updating runner workload '#{runner_workload}' based on '#{original_workload}'") do
175
+ def update_runner_workload # rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
176
+ step("Updating runner workload '#{runner_workload}' based on '#{original_workload}'") do # rubocop:disable Metrics/BlockLength
177
+ @expected_deployed_version = cp.cron_workload_deployed_version(runner_workload)
178
+ should_update = false
179
+
182
180
  _, original_container_spec = base_workload_specs(original_workload)
183
181
  spec, container_spec = base_workload_specs(runner_workload)
184
182
 
185
183
  # Override image if specified
186
184
  image = config.options[:image]
187
- if image
188
- image = latest_image if image == "latest"
189
- @image_link = "/org/#{config.org}/image/#{image}"
190
- else
191
- @image_link = original_container_spec["image"]
185
+ image_link = if image
186
+ image = latest_image if image == "latest"
187
+ "/org/#{config.org}/image/#{image}"
188
+ else
189
+ original_container_spec["image"]
190
+ end
191
+ if container_spec["image"] != image_link
192
+ container_spec["image"] = image_link
193
+ should_update = true
192
194
  end
193
- @image_changed = container_spec["image"] != image_link
194
- container_spec["image"] = image_link
195
195
 
196
196
  # Container overrides
197
- container_spec["cpu"] = config.options[:cpu] if config.options[:cpu]
198
- container_spec["memory"] = config.options[:memory] if config.options[:memory]
197
+ if config.options[:cpu] && container_spec["cpu"] != config.options[:cpu]
198
+ container_spec["cpu"] = config.options[:cpu]
199
+ should_update = true
200
+ end
201
+ if config.options[:memory] && container_spec["memory"] != config.options[:memory]
202
+ container_spec["memory"] = config.options[:memory]
203
+ should_update = true
204
+ end
205
+
206
+ next true unless should_update
199
207
 
200
208
  # Update runner workload
209
+ @expected_deployed_version += 1
201
210
  cp.apply_hash("kind" => "workload", "name" => runner_workload, "spec" => spec)
202
211
  end
203
212
  end
204
213
 
205
214
  def wait_for_runner_workload_create
206
215
  step("Waiting for runner workload '#{runner_workload}' to be created", retry_on_failure: true) do
207
- cp.fetch_workload(runner_workload)
216
+ !cp.cron_workload_deployed_version(runner_workload).nil?
208
217
  end
209
218
  end
210
219
 
211
220
  def wait_for_runner_workload_update
212
221
  step("Waiting for runner workload '#{runner_workload}' to be updated", retry_on_failure: true) do
213
- _, container_spec = base_workload_specs(runner_workload)
214
- container_spec["image"] == image_link
222
+ cp.cron_workload_deployed_version(runner_workload) >= expected_deployed_version
215
223
  end
216
224
  end
217
225
 
@@ -245,6 +245,16 @@ class Controlplane # rubocop:disable Metrics/ClassLength
245
245
  perform_yaml(cmd)
246
246
  end
247
247
 
248
+ def cron_workload_deployed_version(workload)
249
+ current_deployment = fetch_workload_deployments(workload)&.dig("items")&.first
250
+ return nil unless current_deployment
251
+
252
+ ready = current_deployment.dig("status", "ready")
253
+ last_processed_version = current_deployment.dig("status", "lastProcessedVersion")
254
+
255
+ ready ? last_processed_version : nil
256
+ end
257
+
248
258
  # volumeset
249
259
 
250
260
  def fetch_volumesets(a_gvc = gvc)
data/lib/cpl/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cpl
4
- VERSION = "2.0.0.rc.0"
4
+ VERSION = "2.0.0.rc.1"
5
5
  MIN_CPLN_VERSION = "0.0.71"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cpl
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.rc.0
4
+ version: 2.0.0.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Gordon
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-05-10 00:00:00.000000000 Z
12
+ date: 2024-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: debug