cpl 1.0.2 → 1.0.3
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/CONTRIBUTING.md +28 -9
- data/Gemfile.lock +1 -1
- data/bin/cpl +1 -1
- data/cpl +4 -13
- data/docs/commands.md +5 -6
- data/examples/circleci.yml +1 -2
- data/lib/command/cleanup_old_images.rb +26 -15
- data/lib/command/info.rb +2 -6
- data/lib/command/run.rb +2 -2
- data/lib/command/run_cleanup.rb +27 -6
- data/lib/command/run_detached.rb +15 -10
- data/lib/command/test.rb +3 -7
- data/lib/core/config.rb +4 -0
- data/lib/core/controlplane.rb +12 -7
- data/lib/core/controlplane_api.rb +3 -3
- data/lib/cpl/version.rb +1 -1
- data/lib/cpl.rb +1 -1
- metadata +2 -3
- data/lib/main.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d187c354ac6a9a75c0aea498f8fbc060f741809d075439ee22663fdf06f265d
|
4
|
+
data.tar.gz: ffde2f0f3be4663ba85baadf599c6a12882c2ba11734f9220d26366bacc5368d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70941d48b8ccc5bb3fb46b6c96c91fd0d3c2f13f2a702822ee6541231d90957df5a3b3c9d60d2091afad9f6e76be8870953f69085a97315c2a865d534d0c1ce7
|
7
|
+
data.tar.gz: 3a109996c812ec2b2e9dc76c189bd5d3518835e5b221ff8f12416982f3542f1753dcba441dbb3ec32224e807d0c83db54fe78e21cad43da0d829b8d65593a6d5
|
data/CONTRIBUTING.md
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
# Contributing
|
2
2
|
|
3
3
|
## Installation
|
4
|
-
|
4
|
+
|
5
|
+
Rather than installing `cpl` as a Ruby gem, install this repo locally and alias the `cpl` command globally for easier
|
6
|
+
access, e.g.:
|
5
7
|
|
6
8
|
```sh
|
7
9
|
git clone https://github.com/shakacode/heroku-to-control-plane
|
8
10
|
|
9
11
|
# Create an alias in some local shell startup script, e.g., `.profile`, `.bashrc`, etc.
|
10
|
-
alias cpl="~/projects/heroku-to-control-plane/cpl"
|
12
|
+
alias cpl="~/projects/heroku-to-control-plane/bin/cpl"
|
11
13
|
```
|
12
14
|
|
13
15
|
Or set the path of the Ruby gem in your Gemfile.
|
@@ -16,13 +18,30 @@ Or set the path of the Ruby gem in your Gemfile.
|
|
16
18
|
gem 'cpl', path: '~/projects/heroku-to-control-plane'
|
17
19
|
```
|
18
20
|
|
19
|
-
## Linting
|
20
|
-
|
21
|
+
## Linting/Testing
|
22
|
+
|
23
|
+
Before committing or pushing code, be sure to:
|
24
|
+
|
25
|
+
- Run `bundle exec rake update_command_docs` to sync any doc changes made in the source code to the docs
|
26
|
+
- Run `bundle exec rubocop -a` to fix any linting errors
|
27
|
+
- Run `bundle exec rspec` to run the test suite
|
28
|
+
|
29
|
+
You can also install [overcommit](https://github.com/sds/overcommit) and let it automatically check for you:
|
30
|
+
|
31
|
+
```sh
|
32
|
+
gem install overcommit
|
33
|
+
|
34
|
+
overcommit --install
|
35
|
+
```
|
21
36
|
|
22
37
|
## Debugging
|
23
38
|
|
24
|
-
1.
|
25
|
-
2.
|
26
|
-
|
27
|
-
|
28
|
-
|
39
|
+
1. Add a breakpoint (`debugger`) to any line of code you want to debug.
|
40
|
+
2. Modify the `lib/command/test.rb` file to trigger the code you want to test. To simulate a command, you can use
|
41
|
+
`Cpl::Cli.start` (e.g., `Cpl::Cli.start(["deploy-image", "-a", "my-app-name"])` would be the same as running
|
42
|
+
`cpl deploy-image -a my-app-name`).
|
43
|
+
3. Run the `test` command in your test app with a `.controlplane` directory.
|
44
|
+
|
45
|
+
```sh
|
46
|
+
cpl test
|
47
|
+
```
|
data/Gemfile.lock
CHANGED
data/bin/cpl
CHANGED
data/cpl
CHANGED
@@ -1,15 +1,6 @@
|
|
1
|
-
#!/bin/
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
|
4
|
+
require_relative "lib/cpl"
|
4
5
|
|
5
|
-
|
6
|
-
#
|
7
|
-
# Example .env:
|
8
|
-
# CPLN_TOKEN=xxx
|
9
|
-
#
|
10
|
-
if [ -f "$SCRIPT_DIR/.env" ]; then
|
11
|
-
export $(grep -v '^#' $SCRIPT_DIR/.env | xargs -0)
|
12
|
-
fi
|
13
|
-
|
14
|
-
# exec $SCRIPT_DIR/old_commands/main.sh "$@"
|
15
|
-
exec ruby $SCRIPT_DIR/lib/main.rb "$@"
|
6
|
+
Cpl::Cli.start
|
data/docs/commands.md
CHANGED
@@ -341,6 +341,7 @@ cpl run bash -a $APP_NAME --use-local-token
|
|
341
341
|
- Deletes stale run workloads for an app
|
342
342
|
- Workloads are considered stale based on how many days since created
|
343
343
|
- `stale_run_workload_created_days` in the `.controlplane/controlplane.yml` file specifies the number of days after created that the workload is considered stale
|
344
|
+
- Works for both interactive workloads (created with `cpl run`) and non-interactive workloads (created with `cpl run:detached`)
|
344
345
|
- Will ask for explicit user confirmation of deletion
|
345
346
|
|
346
347
|
```sh
|
@@ -364,18 +365,16 @@ cpl run:detached 'LOG_LEVEL=warn rails db:migrate' -a $APP_NAME
|
|
364
365
|
# COMMAND may also be passed at the end (in this case, no need to quote).
|
365
366
|
cpl run:detached -a $APP_NAME -- rails db:migrate
|
366
367
|
|
367
|
-
# Uses some other image.
|
368
|
-
cpl run:detached rails db:migrate -a $APP_NAME --image /some/full/image/path
|
369
|
-
|
370
|
-
# Uses latest app image (which may not be promoted yet).
|
371
|
-
cpl run:detached rails db:migrate -a $APP_NAME --image latest
|
372
|
-
|
373
368
|
# Uses a different image (which may not be promoted yet).
|
374
369
|
cpl run:detached rails db:migrate -a $APP_NAME --image appimage:123 # Exact image name
|
375
370
|
cpl run:detached rails db:migrate -a $APP_NAME --image latest # Latest sequential image
|
376
371
|
|
377
372
|
# Uses a different workload than `one_off_workload` from `.controlplane/controlplane.yml`.
|
378
373
|
cpl run:detached rails db:migrate:status -a $APP_NAME -w other-workload
|
374
|
+
|
375
|
+
# Overrides remote CPLN_TOKEN env variable with local token.
|
376
|
+
# Useful when superuser rights are needed in remote container.
|
377
|
+
cpl run:detached rails db:migrate:status -a $APP_NAME --use-local-token
|
379
378
|
```
|
380
379
|
|
381
380
|
### `setup-app`
|
data/examples/circleci.yml
CHANGED
@@ -59,8 +59,7 @@ build-review-app:
|
|
59
59
|
cpln profile create default --token ${CPLN_TOKEN} --org ${CPLN_ORG} --gvc ${APP_NAME}
|
60
60
|
cpln image docker-login
|
61
61
|
|
62
|
-
|
63
|
-
sudo ln -s ~/heroku-to-control-plane/cpl /usr/local/bin/cpl
|
62
|
+
gem install cpl
|
64
63
|
- run:
|
65
64
|
name: Provision review app if needed
|
66
65
|
command: |
|
@@ -31,6 +31,18 @@ module Command
|
|
31
31
|
|
32
32
|
private
|
33
33
|
|
34
|
+
def app_prefix
|
35
|
+
config.should_app_start_with?(config.app) ? "#{config.app}-" : "#{config.app}:"
|
36
|
+
end
|
37
|
+
|
38
|
+
def remove_deployed_image(app, app_images)
|
39
|
+
return app_images unless cp.fetch_gvc(app)
|
40
|
+
|
41
|
+
# If app exists, remove latest image, because we don't want to delete the image that is currently deployed
|
42
|
+
latest_image_name = latest_image_from(app_images, app_name: app)
|
43
|
+
app_images.filter { |item| item["name"] != latest_image_name }
|
44
|
+
end
|
45
|
+
|
34
46
|
def old_images # rubocop:disable Metrics/MethodLength
|
35
47
|
@old_images ||=
|
36
48
|
begin
|
@@ -39,21 +51,20 @@ module Command
|
|
39
51
|
now = DateTime.now
|
40
52
|
old_image_retention_days = config[:old_image_retention_days]
|
41
53
|
|
42
|
-
images = cp.image_query["items"].filter { |item| item["name"].start_with?(
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
})
|
54
|
+
images = cp.image_query["items"].filter { |item| item["name"].start_with?(app_prefix) }
|
55
|
+
images_by_app = images.group_by { |item| item["repository"] }
|
56
|
+
images_by_app.each do |app, app_images|
|
57
|
+
app_images = remove_deployed_image(app, app_images)
|
58
|
+
app_images.each do |image|
|
59
|
+
created_date = DateTime.parse(image["created"])
|
60
|
+
diff_in_days = (now - created_date).to_i
|
61
|
+
next unless diff_in_days >= old_image_retention_days
|
62
|
+
|
63
|
+
result_images.push({
|
64
|
+
name: image["name"],
|
65
|
+
date: created_date
|
66
|
+
})
|
67
|
+
end
|
57
68
|
end
|
58
69
|
|
59
70
|
result_images
|
data/lib/command/info.rb
CHANGED
@@ -112,10 +112,6 @@ module Command
|
|
112
112
|
result.uniq.sort
|
113
113
|
end
|
114
114
|
|
115
|
-
def should_app_start_with?(app)
|
116
|
-
config.apps[app.to_sym]&.dig(:match_if_app_name_starts_with)
|
117
|
-
end
|
118
|
-
|
119
115
|
def any_app_starts_with?(app)
|
120
116
|
@app_workloads.keys.find { |app_name| app_matches?(app_name, app, config.apps[app.to_sym]) }
|
121
117
|
end
|
@@ -132,7 +128,7 @@ module Command
|
|
132
128
|
end
|
133
129
|
|
134
130
|
def add_to_missing_workloads(app, workload)
|
135
|
-
if should_app_start_with?(app)
|
131
|
+
if config.should_app_start_with?(app)
|
136
132
|
@missing_apps_starting_with[app] ||= []
|
137
133
|
@missing_apps_starting_with[app].push(workload)
|
138
134
|
else
|
@@ -142,7 +138,7 @@ module Command
|
|
142
138
|
end
|
143
139
|
|
144
140
|
def print_app(app, org)
|
145
|
-
if should_app_start_with?(app)
|
141
|
+
if config.should_app_start_with?(app)
|
146
142
|
check_any_app_starts_with(app)
|
147
143
|
elsif cp.fetch_gvc(app, org).nil?
|
148
144
|
@missing_apps_workloads[app] = ["gvc"]
|
data/lib/command/run.rb
CHANGED
@@ -99,8 +99,8 @@ module Command
|
|
99
99
|
|
100
100
|
# Override image if specified
|
101
101
|
image = config.options[:image]
|
102
|
-
image =
|
103
|
-
container_spec["image"] = image
|
102
|
+
image = latest_image if image == "latest"
|
103
|
+
container_spec["image"] = "/org/#{config.org}/image/#{image}"
|
104
104
|
|
105
105
|
# Set runner
|
106
106
|
container_spec["env"] ||= []
|
data/lib/command/run_cleanup.rb
CHANGED
@@ -12,6 +12,7 @@ module Command
|
|
12
12
|
- Deletes stale run workloads for an app
|
13
13
|
- Workloads are considered stale based on how many days since created
|
14
14
|
- `stale_run_workload_created_days` in the `.controlplane/controlplane.yml` file specifies the number of days after created that the workload is considered stale
|
15
|
+
- Works for both interactive workloads (created with `cpl run`) and non-interactive workloads (created with `cpl run:detached`)
|
15
16
|
- Will ask for explicit user confirmation of deletion
|
16
17
|
DESC
|
17
18
|
|
@@ -20,8 +21,14 @@ module Command
|
|
20
21
|
|
21
22
|
progress.puts("Stale run workloads:")
|
22
23
|
stale_run_workloads.each do |workload|
|
23
|
-
|
24
|
-
|
24
|
+
output = ""
|
25
|
+
output += if config.should_app_start_with?(config.app)
|
26
|
+
" #{workload[:app]} - #{workload[:name]}"
|
27
|
+
else
|
28
|
+
" #{workload[:name]}"
|
29
|
+
end
|
30
|
+
output += " (#{Shell.color("#{workload[:date]} - #{workload[:days]} days ago", :red)})"
|
31
|
+
progress.puts(output)
|
25
32
|
end
|
26
33
|
|
27
34
|
return unless confirm_delete
|
@@ -62,11 +69,19 @@ module Command
|
|
62
69
|
now = DateTime.now
|
63
70
|
stale_run_workload_created_days = config[:stale_run_workload_created_days]
|
64
71
|
|
65
|
-
|
72
|
+
interactive_workloads = cp.query_workloads(
|
73
|
+
"-run-", partial_gvc_match: config.should_app_start_with?(config.app), partial_workload_match: true
|
74
|
+
)["items"]
|
75
|
+
non_interactive_workloads = cp.query_workloads(
|
76
|
+
"-runner-", partial_gvc_match: config.should_app_start_with?(config.app), partial_workload_match: true
|
77
|
+
)["items"]
|
78
|
+
workloads = interactive_workloads + non_interactive_workloads
|
79
|
+
|
66
80
|
workloads.each do |workload|
|
81
|
+
app_name = workload["links"].find { |link| link["rel"] == "gvc" }["href"].split("/").last
|
67
82
|
workload_name = workload["name"]
|
68
83
|
|
69
|
-
original_workload_name, workload_number = workload_name.split(
|
84
|
+
original_workload_name, workload_number = workload_name.split(/-run-|-runner-/)
|
70
85
|
next unless defined_workloads.include?(original_workload_name) && workload_number.match?(/^\d{4}$/)
|
71
86
|
|
72
87
|
created_date = DateTime.parse(workload["created"])
|
@@ -74,6 +89,7 @@ module Command
|
|
74
89
|
next unless diff_in_days >= stale_run_workload_created_days
|
75
90
|
|
76
91
|
run_workloads.push({
|
92
|
+
app: app_name,
|
77
93
|
name: workload_name,
|
78
94
|
date: created_date,
|
79
95
|
days: diff_in_days
|
@@ -91,8 +107,13 @@ module Command
|
|
91
107
|
end
|
92
108
|
|
93
109
|
def delete_workload(workload)
|
94
|
-
|
95
|
-
|
110
|
+
message = if config.should_app_start_with?(config.app)
|
111
|
+
"Deleting run workload '#{workload[:app]} - #{workload[:name]}'"
|
112
|
+
else
|
113
|
+
"Deleting run workload '#{workload[:name]}'"
|
114
|
+
end
|
115
|
+
step(message) do
|
116
|
+
cp.delete_workload(workload[:name], workload[:app])
|
96
117
|
end
|
97
118
|
end
|
98
119
|
end
|
data/lib/command/run_detached.rb
CHANGED
@@ -8,7 +8,8 @@ module Command
|
|
8
8
|
OPTIONS = [
|
9
9
|
app_option(required: true),
|
10
10
|
image_option,
|
11
|
-
workload_option
|
11
|
+
workload_option,
|
12
|
+
use_local_token_option
|
12
13
|
].freeze
|
13
14
|
DESCRIPTION = "Runs one-off **_non-interactive_** replicas (close analog of `heroku run:detached`)"
|
14
15
|
LONG_DESCRIPTION = <<~DESC
|
@@ -28,18 +29,16 @@ module Command
|
|
28
29
|
# COMMAND may also be passed at the end (in this case, no need to quote).
|
29
30
|
cpl run:detached -a $APP_NAME -- rails db:migrate
|
30
31
|
|
31
|
-
# Uses some other image.
|
32
|
-
cpl run:detached rails db:migrate -a $APP_NAME --image /some/full/image/path
|
33
|
-
|
34
|
-
# Uses latest app image (which may not be promoted yet).
|
35
|
-
cpl run:detached rails db:migrate -a $APP_NAME --image latest
|
36
|
-
|
37
32
|
# Uses a different image (which may not be promoted yet).
|
38
33
|
cpl run:detached rails db:migrate -a $APP_NAME --image appimage:123 # Exact image name
|
39
34
|
cpl run:detached rails db:migrate -a $APP_NAME --image latest # Latest sequential image
|
40
35
|
|
41
36
|
# Uses a different workload than `one_off_workload` from `.controlplane/controlplane.yml`.
|
42
37
|
cpl run:detached rails db:migrate:status -a $APP_NAME -w other-workload
|
38
|
+
|
39
|
+
# Overrides remote CPLN_TOKEN env variable with local token.
|
40
|
+
# Useful when superuser rights are needed in remote container.
|
41
|
+
cpl run:detached rails db:migrate:status -a $APP_NAME --use-local-token
|
43
42
|
```
|
44
43
|
EX
|
45
44
|
|
@@ -91,8 +90,8 @@ module Command
|
|
91
90
|
|
92
91
|
# Override image if specified
|
93
92
|
image = config.options[:image]
|
94
|
-
image =
|
95
|
-
container_spec["image"] = image
|
93
|
+
image = latest_image if image == "latest"
|
94
|
+
container_spec["image"] = "/org/#{config.org}/image/#{image}"
|
96
95
|
|
97
96
|
# Set cron job props
|
98
97
|
spec["type"] = "cron"
|
@@ -108,10 +107,16 @@ module Command
|
|
108
107
|
cp.apply("kind" => "workload", "name" => one_off, "spec" => spec)
|
109
108
|
end
|
110
109
|
|
111
|
-
def runner_script
|
110
|
+
def runner_script # rubocop:disable Metrics/MethodLength
|
112
111
|
script = "echo '-- STARTED RUNNER SCRIPT --'\n"
|
113
112
|
script += Scripts.helpers_cleanup
|
114
113
|
|
114
|
+
if config.options["use_local_token"]
|
115
|
+
script += <<~SHELL
|
116
|
+
CPLN_TOKEN=$CONTROLPLANE_TOKEN
|
117
|
+
SHELL
|
118
|
+
end
|
119
|
+
|
115
120
|
script += <<~SHELL
|
116
121
|
if ! eval "#{args_join(config.args)}"; then echo "----- CRASHED -----"; fi
|
117
122
|
|
data/lib/command/test.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Be sure to have run: gem install debug
|
4
3
|
require "debug"
|
5
4
|
|
6
5
|
module Command
|
@@ -14,13 +13,10 @@ module Command
|
|
14
13
|
HIDE = true
|
15
14
|
|
16
15
|
def call
|
17
|
-
#
|
16
|
+
# Modify this method to trigger the code you want to test.
|
18
17
|
# You can use `debugger` to debug.
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# rubocop:disable Lint/Debugger
|
22
|
-
pp latest_image_next
|
23
|
-
# rubocop:enable Lint/Debugger
|
18
|
+
# You can use `Cpl::Cli.start` to simulate a command
|
19
|
+
# (e.g., `Cpl::Cli.start(["deploy-image", "-a", "my-app-name"])`).
|
24
20
|
end
|
25
21
|
end
|
26
22
|
end
|
data/lib/core/config.rb
CHANGED
data/lib/core/controlplane.rb
CHANGED
@@ -45,7 +45,11 @@ class Controlplane # rubocop:disable Metrics/ClassLength
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def image_query(app_name = config.app, org_name = config.org)
|
48
|
-
|
48
|
+
# When `match_if_app_name_starts_with` is `true`, we query for images from any gvc containing the name,
|
49
|
+
# otherwise we query for images from a gvc with the exact name.
|
50
|
+
op = config.should_app_start_with?(app_name) ? "~" : "="
|
51
|
+
|
52
|
+
cmd = "cpln image query --org #{org_name} -o yaml --max -1 --prop repository#{op}#{app_name}"
|
49
53
|
perform_yaml(cmd)
|
50
54
|
end
|
51
55
|
|
@@ -86,7 +90,7 @@ class Controlplane # rubocop:disable Metrics/ClassLength
|
|
86
90
|
def gvc_query(app_name = config.app)
|
87
91
|
# When `match_if_app_name_starts_with` is `true`, we query for any gvc containing the name,
|
88
92
|
# otherwise we query for a gvc with the exact name.
|
89
|
-
op = config.
|
93
|
+
op = config.should_app_start_with?(app_name) ? "~" : "="
|
90
94
|
|
91
95
|
cmd = "cpln gvc query --org #{org} -o yaml --prop name#{op}#{app_name}"
|
92
96
|
perform_yaml(cmd)
|
@@ -128,10 +132,11 @@ class Controlplane # rubocop:disable Metrics/ClassLength
|
|
128
132
|
raise "Can't find workload '#{workload}', please create it with 'cpl apply-template #{workload} -a #{config.app}'."
|
129
133
|
end
|
130
134
|
|
131
|
-
def query_workloads(workload,
|
132
|
-
|
135
|
+
def query_workloads(workload, partial_gvc_match: false, partial_workload_match: false)
|
136
|
+
gvc_op = partial_gvc_match ? "~" : "="
|
137
|
+
workload_op = partial_workload_match ? "~" : "="
|
133
138
|
|
134
|
-
api.query_workloads(org: org, gvc: gvc, workload: workload,
|
139
|
+
api.query_workloads(org: org, gvc: gvc, workload: workload, gvc_op_type: gvc_op, workload_op_type: workload_op)
|
135
140
|
end
|
136
141
|
|
137
142
|
def workload_get_replicas(workload, location:)
|
@@ -204,8 +209,8 @@ class Controlplane # rubocop:disable Metrics/ClassLength
|
|
204
209
|
perform!(cmd)
|
205
210
|
end
|
206
211
|
|
207
|
-
def delete_workload(workload)
|
208
|
-
api.delete_workload(org: org, gvc:
|
212
|
+
def delete_workload(workload, a_gvc = gvc)
|
213
|
+
api.delete_workload(org: org, gvc: a_gvc, workload: workload)
|
209
214
|
end
|
210
215
|
|
211
216
|
def workload_connect(workload, location:, container: nil, shell: nil)
|
@@ -33,7 +33,7 @@ class ControlplaneApi
|
|
33
33
|
api_json_direct("/logs/org/#{org}/loki/api/v1/query_range?#{params}", method: :get, host: :logs)
|
34
34
|
end
|
35
35
|
|
36
|
-
def query_workloads(org:, gvc:, workload:,
|
36
|
+
def query_workloads(org:, gvc:, workload:, gvc_op_type:, workload_op_type:) # rubocop:disable Metrics/MethodLength
|
37
37
|
body = {
|
38
38
|
kind: "string",
|
39
39
|
spec: {
|
@@ -41,12 +41,12 @@ class ControlplaneApi
|
|
41
41
|
terms: [
|
42
42
|
{
|
43
43
|
rel: "gvc",
|
44
|
-
op:
|
44
|
+
op: gvc_op_type,
|
45
45
|
value: gvc
|
46
46
|
},
|
47
47
|
{
|
48
48
|
property: "name",
|
49
|
-
op:
|
49
|
+
op: workload_op_type,
|
50
50
|
value: workload
|
51
51
|
}
|
52
52
|
]
|
data/lib/cpl/version.rb
CHANGED
data/lib/cpl.rb
CHANGED
@@ -13,7 +13,7 @@ require "yaml"
|
|
13
13
|
require_relative "command/base"
|
14
14
|
|
15
15
|
modules = Dir["#{__dir__}/**/*.rb"].reject do |file|
|
16
|
-
file == __FILE__ || file.end_with?("
|
16
|
+
file == __FILE__ || file.end_with?("base.rb")
|
17
17
|
end
|
18
18
|
modules.sort.each { require(_1) }
|
19
19
|
|
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: 1.0.
|
4
|
+
version: 1.0.3
|
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: 2023-07-
|
12
|
+
date: 2023-07-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: debug
|
@@ -273,7 +273,6 @@ files:
|
|
273
273
|
- lib/cpl.rb
|
274
274
|
- lib/cpl/version.rb
|
275
275
|
- lib/deprecated_commands.json
|
276
|
-
- lib/main.rb
|
277
276
|
- rakelib/create_release.rake
|
278
277
|
- script/add_command
|
279
278
|
- script/check_command_docs
|